From 3a2f6162f7f3af3c324ed828f0bbebc408c7fb19 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Mon, 18 Mar 2002 22:17:16 +0000 Subject: [PATCH] (elf_machine_load_address): Fix if .dynamic comes before .got. --- sysdeps/sparc/sparc64/dl-machine.h | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/sysdeps/sparc/sparc64/dl-machine.h b/sysdeps/sparc/sparc64/dl-machine.h index 9d2f2187ae0..b0f3d367e8b 100644 --- a/sysdeps/sparc/sparc64/dl-machine.h +++ b/sysdeps/sparc/sparc64/dl-machine.h @@ -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 -- 2.47.2