From 04d6ca32f128f2d5571bdeb36e34e306ec71e9f9 Mon Sep 17 00:00:00 2001 From: Andreas Schwab Date: Fri, 28 Mar 2008 12:23:06 +0000 Subject: [PATCH] 2008-03-28 Maxim Kuvyrkov Explicitly get address of _DYNAMIC. * sysdeps/m68k/dl-machine.h (elf_machine_dynamic): Retrieve _DYNAMIC from GOT instead of assuming value at GOT pointer. --- ChangeLog.m68k | 6 ++++++ sysdeps/m68k/dl-machine.h | 12 +++++++----- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/ChangeLog.m68k b/ChangeLog.m68k index 33323c6..b6aa316 100644 --- a/ChangeLog.m68k +++ b/ChangeLog.m68k @@ -1,3 +1,9 @@ +2008-03-28 Maxim Kuvyrkov + + 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 * 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 fad1ef9..08a4396 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; } -- 2.7.4