diff options
author | Roland McGrath <roland@gnu.org> | 2002-08-23 10:35:03 +0000 |
---|---|---|
committer | Roland McGrath <roland@gnu.org> | 2002-08-23 10:35:03 +0000 |
commit | 16495f81270e72edf3a8faae19dd0e0b22373cf1 (patch) | |
tree | 8752fda456facd34f9d8334c5b2241483fa7fa96 | |
parent | 3d31e109a09d665b1551a90d8c3369d83aac37df (diff) | |
download | glibc-16495f81270e72edf3a8faae19dd0e0b22373cf1.tar glibc-16495f81270e72edf3a8faae19dd0e0b22373cf1.tar.gz glibc-16495f81270e72edf3a8faae19dd0e0b22373cf1.tar.bz2 glibc-16495f81270e72edf3a8faae19dd0e0b22373cf1.zip |
* sysdeps/i386/dl-machine.h (elf_machine_load_address): Add a dummy
global variable reference in an unused asm parameter, to ensure the
compiler has set up the GOT register before we use it.
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | sysdeps/i386/dl-machine.h | 6 |
2 files changed, 9 insertions, 1 deletions
@@ -1,5 +1,9 @@ 2002-08-23 Roland McGrath <roland@redhat.com> + * sysdeps/i386/dl-machine.h (elf_machine_load_address): Add a dummy + global variable reference in an unused asm parameter, to ensure the + compiler has set up the GOT register before we use it. + * malloc/hooks.c: Move variable definitions ahead of uses. * libio/fileops.c: Move versioned_symbol defns ahead of _IO_jump_t initializers that make reference to variables they define. diff --git a/sysdeps/i386/dl-machine.h b/sysdeps/i386/dl-machine.h index 8092e889b0..09c1a9b6a4 100644 --- a/sysdeps/i386/dl-machine.h +++ b/sysdeps/i386/dl-machine.h @@ -49,10 +49,14 @@ elf_machine_dynamic (void) static inline Elf32_Addr __attribute__ ((unused)) elf_machine_load_address (void) { + /* It doesn't matter what variable this is, the reference never makes + it to assembly. We need a dummy reference to some global variable + via the GOT to make sure the compiler initialized %ebx in time. */ + extern int _dl_argc; Elf32_Addr addr; asm ("leal _dl_start@GOTOFF(%%ebx), %0\n" "subl _dl_start@GOT(%%ebx), %0" - : "=r" (addr) : : "cc"); + : "=r" (addr) : "m" (_dl_argc) : "cc"); return addr; } |