about summary refs log tree commit diff
path: root/sysdeps/sparc/sparc64/dl-machine.h
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2002-03-12 00:38:37 +0000
committerUlrich Drepper <drepper@redhat.com>2002-03-12 00:38:37 +0000
commit89a3dd449a782f369c9ba2af1e7933b69323c4ea (patch)
treecef4a0789e79b03cff6328d0597c4f6e7e1a9c72 /sysdeps/sparc/sparc64/dl-machine.h
parent14b2815be917c71d1310df760314581fa5073d07 (diff)
downloadglibc-89a3dd449a782f369c9ba2af1e7933b69323c4ea.tar.gz
glibc-89a3dd449a782f369c9ba2af1e7933b69323c4ea.tar.xz
glibc-89a3dd449a782f369c9ba2af1e7933b69323c4ea.zip
Update.
2002-03-11  Jakub Jelinek  <jakub@redhat.com>

	* sysdeps/i386/elf/configure.in: Fix comment.

	* sysdeps/sparc/sparc64/configure.in: New.
	* sysdeps/sparc/sparc64/dl-machine.h (elf_machine_load_address): Fix
	if .dynamic comes before .got.
	* config.h.in (SPARC64_DYNAMIC_BEFORE_GOT): Add.

	* sysdeps/sparc/sparc64/hp-timing.h (HP_TIMING_DIFF,
	HP_TIMING_ACCUM): Fix typos.

	* string/strfry.c: Add some more randomness to the seed.
	Patch by James A Morrison <ja2morri@student.math.uwaterloo.ca>.

	Patch by James Antill <james@anqd.org> [PR libc/2787].
Diffstat (limited to 'sysdeps/sparc/sparc64/dl-machine.h')
-rw-r--r--sysdeps/sparc/sparc64/dl-machine.h17
1 files changed, 11 insertions, 6 deletions
diff --git a/sysdeps/sparc/sparc64/dl-machine.h b/sysdeps/sparc/sparc64/dl-machine.h
index 8d9bf7aa67..4ced7deef8 100644
--- a/sysdeps/sparc/sparc64/dl-machine.h
+++ b/sysdeps/sparc/sparc64/dl-machine.h
@@ -77,14 +77,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