diff options
| author | Andreas Schwab <schwab@suse.de> | 2008-03-28 12:23:06 +0000 |
|---|---|---|
| committer | Andreas Schwab <schwab@suse.de> | 2008-03-28 12:23:06 +0000 |
| commit | 04d6ca32f128f2d5571bdeb36e34e306ec71e9f9 (patch) | |
| tree | 526620bc6cebabb5e2ba46dbf246091c9339ef76 | |
| parent | 285e04f887a752cc2ad7d74f89956894ac1ac82b (diff) | |
| download | glibc-04d6ca32f128f2d5571bdeb36e34e306ec71e9f9.tar.xz glibc-04d6ca32f128f2d5571bdeb36e34e306ec71e9f9.zip | |
2008-03-28 Maxim Kuvyrkov <maxim@codesourcery.com>
Explicitly get address of _DYNAMIC.
* sysdeps/m68k/dl-machine.h (elf_machine_dynamic): Retrieve _DYNAMIC
from GOT instead of assuming value at GOT pointer.
| -rw-r--r-- | ChangeLog.m68k | 6 | ||||
| -rw-r--r-- | sysdeps/m68k/dl-machine.h | 12 |
2 files changed, 13 insertions, 5 deletions
diff --git a/ChangeLog.m68k b/ChangeLog.m68k index 33323c6b3b..b6aa316ad5 100644 --- a/ChangeLog.m68k +++ b/ChangeLog.m68k @@ -1,3 +1,9 @@ +2008-03-28 Maxim Kuvyrkov <maxim@codesourcery.com> + + Explicitly get address of _DYNAMIC. + * sysdeps/m68k/dl-machine.h (elf_machine_dynamic): Retrieve _DYNAMIC + from GOT instead of assuming value at GOT pointer. + 2007-10-22 Daniel Jacobowitz <dan@codesourcery.com> * sysdeps/unix/sysv/linux/m68k/bits/fcntl.h (F_DUPFD_CLOEXEC): Define. diff --git a/sysdeps/m68k/dl-machine.h b/sysdeps/m68k/dl-machine.h index fad1ef9e08..08a439641e 100644 --- a/sysdeps/m68k/dl-machine.h +++ b/sysdeps/m68k/dl-machine.h @@ -33,14 +33,16 @@ elf_machine_matches_host (const Elf32_Ehdr *ehdr) } -/* Return the link-time address of _DYNAMIC. Conveniently, this is the - first element of the GOT. This must be inlined in a function which - uses global data. */ +/* Return the link-time address of _DYNAMIC. + This must be inlined in a function which uses global data. */ static inline Elf32_Addr elf_machine_dynamic (void) { - register Elf32_Addr *got asm ("%a5"); - return *got; + Elf32_Addr addr; + + asm ("move.l _DYNAMIC@GOT.w(%%a5), %0" + : "=a" (addr)); + return addr; } |
