2006-05-30 Daniel Jacobowitz <dan@codesourcery.com>
+ * sysdeps/arm/dl-machine.h (elf_machine_dynamic): Rewrite to load
+ _GLOBAL_OFFSET_TABLE_ explicitly.
+
+2006-05-30 Daniel Jacobowitz <dan@codesourcery.com>
+
* sysdeps/unix/sysv/linux/arm/kernel-features.h: Add conditionals
for __ASSUME_TRUNCATE64_SYSCALL, __ASSUME_MMAP2_SYSCALL,
__ASSUME_STAT64_SYSCALL, __ASSUME_FCNTL64, and
/* 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. */
+ first element of the GOT. We used to use the PIC register to do this
+ without a constant pool reference, but GCC 4.2 will use a pseudo-register
+ for the PIC base, so it may not be in r10. */
static inline Elf32_Addr __attribute__ ((unused))
elf_machine_dynamic (void)
{
- register Elf32_Addr *got asm ("r10");
- return *got;
+ Elf32_Addr dynamic;
+ asm ("ldr %0, 2f\n"
+ "1: add %0, pc, %0\n"
+ "b 3f\n"
+ "2: .word _GLOBAL_OFFSET_TABLE_ - (1b+8)\n"
+ "3:" : "=r" (dynamic));
+ return dynamic;
}