aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Schwab <schwab@suse.de>2008-03-28 12:23:06 +0000
committerAndreas Schwab <schwab@suse.de>2008-03-28 12:23:06 +0000
commit04d6ca32f128f2d5571bdeb36e34e306ec71e9f9 (patch)
tree526620bc6cebabb5e2ba46dbf246091c9339ef76
parent285e04f887a752cc2ad7d74f89956894ac1ac82b (diff)
downloadglibc-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.m68k6
-rw-r--r--sysdeps/m68k/dl-machine.h12
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;
}