]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
(elf_machine_rela): Handle unaligned relocation also for R_ALPHA_RELATIVE.
authorUlrich Drepper <drepper@redhat.com>
Fri, 29 Sep 2000 06:50:53 +0000 (06:50 +0000)
committerUlrich Drepper <drepper@redhat.com>
Fri, 29 Sep 2000 06:50:53 +0000 (06:50 +0000)
sysdeps/alpha/dl-machine.h

index 33c32fa5e8095d5ac62ebc317aeac985848176c3..69845b4b0164de75bd4c7580f14a3c101f72dbe2 100644 (file)
@@ -482,7 +482,19 @@ elf_machine_rela (struct link_map *map,
       /* Already done in dynamic linker.  */
       if (map != &_dl_rtld_map)
 #endif
-       *reloc_addr += map->l_addr;
+       {
+         /* XXX Make some timings.  Maybe it's preverable to test for
+            unaligned access and only do it the complex way if necessary.  */
+         void *reloc_addr_1 = reloc_addr;
+         Elf64_Addr reloc_addr_val;
+
+         /* Load value without causing unaligned trap. */
+         memcpy (&reloc_addr_val, reloc_addr_1, 8);
+         reloc_addr_val += map->l_addr;
+
+         /* Store value without causing unaligned trap. */
+         memcpy (reloc_addr_1, &reloc_addr_val, 8);
+       }
     }
   else if (r_type == R_ALPHA_NONE)
     return;