]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
(elf_machine_load_address): Fix if .dynamic comes before .got.
authorUlrich Drepper <drepper@redhat.com>
Mon, 18 Mar 2002 22:17:16 +0000 (22:17 +0000)
committerUlrich Drepper <drepper@redhat.com>
Mon, 18 Mar 2002 22:17:16 +0000 (22:17 +0000)
sysdeps/sparc/sparc64/dl-machine.h

index 9d2f2187ae04c9f66d50c96a30ba6d2d29a4fb47..b0f3d367e8b4a6f9d4534fdf6a066e770764f12a 100644 (file)
@@ -72,14 +72,19 @@ elf_machine_load_address (void)
 
      The following method relies on the fact that sparcv9 ABI maximal
      page length is 1MB and all ELF segments on sparc64 are aligned
-     to 1MB.  Also, it relies on _DYNAMIC coming after _GLOBAL_OFFSET_TABLE_
-     and assumes that they both fit into the first 1MB of the RW segment.
-     This should be true for some time unless ld.so grows too much, at the
-     moment the whole stripped ld.so is 128KB and only smaller part of that
-     is in the RW segment.  */
-
+     to 1MB.  Also assumes that they both fit into the first 1MB of
+     the RW segment.  This should be true for some time unless ld.so
+     grows too much, at the moment the whole stripped ld.so is 128KB
+     and only smaller part of that is in the RW segment.  */
+
+#ifdef SPARC64_DYNAMIC_BEFORE_GOT
+  /* If _DYNAMIC comes before _GLOBAL_OFFSET_TABLE_...  */
+  return ((Elf64_Addr)elf_pic_register - *elf_pic_register) & ~0xfffffUL;
+#else
+  /* ... and if _DYNAMIC comes after _GLOBAL_OFFSET_TABLE_.  */
   return ((Elf64_Addr)elf_pic_register - *elf_pic_register + 0xfffff)
         & ~0xfffffUL;
+#endif
 }
 
 /* We have 4 cases to handle.  And we code different code sequences