aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/arm
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>1999-06-06 09:23:32 +0000
committerUlrich Drepper <drepper@redhat.com>1999-06-06 09:23:32 +0000
commitb3864d70e74192455c8db5ff7e32574f2a8fca6e (patch)
tree1e122ba6039856876f0c6803ecf4146110c27abe /sysdeps/arm
parent908c3d5b5ab4623951d14add3af5708c429aeb29 (diff)
downloadglibc-b3864d70e74192455c8db5ff7e32574f2a8fca6e.zip
glibc-b3864d70e74192455c8db5ff7e32574f2a8fca6e.tar.gz
glibc-b3864d70e74192455c8db5ff7e32574f2a8fca6e.tar.bz2
Update.
1999-06-06 Ulrich Drepper <drepper@cygnus.com> * malloc/malloc.c: Introduce local variable __libc_getpagesize to avoid multiple calls to getpagesize() which might be a syscall. 1999-06-06 Philip Blundell <philb@gnu.org> * stdio-common/tstscanf.c (main): Test the half-word format "%hd". 1999-06-06 Andreas Jaeger <aj@arthur.rhein-neckar.de> * manual/install.texi (Running make install): Correct typo in dynamic linker invocation. 1999-06-05 Philip Blundell <philb@gnu.org> * sysdeps/arm/dl-machine.h (elf_machine_load_address): Fix problems with GOT addressing. 1999-06-05 Wolfram Gloger <wmglo@dent.med.uni-muenchen.de> * malloc/malloc.c (check_action): Change into bitmap so that both diagnostic and abort can be requested by setting it to 3. (mALLOC_SET_STATe): Disable malloc checking if necessary.
Diffstat (limited to 'sysdeps/arm')
-rw-r--r--sysdeps/arm/dl-machine.h18
1 files changed, 5 insertions, 13 deletions
diff --git a/sysdeps/arm/dl-machine.h b/sysdeps/arm/dl-machine.h
index aff8df2..754a6ca 100644
--- a/sysdeps/arm/dl-machine.h
+++ b/sysdeps/arm/dl-machine.h
@@ -52,22 +52,14 @@ elf_machine_dynamic (void)
/* Return the run-time load address of the shared object. */
-// patb
static inline Elf32_Addr __attribute__ ((unused))
elf_machine_load_address (void)
{
- Elf32_Addr addr;
- asm (" ldr ip,.L1
- ldr r3,.L3
- add r3, r3, sl
- ldr ip,[sl, ip]
- sub ip, r3, ip
- b .L2
- .L1: .word _dl_start(GOT)
- .L3: .word _dl_start(GOTOFF)
- .L2: mov %0, ip"
- : "=r" (addr) : : "ip", "r3");
- return addr;
+ extern void __dl_start asm ("_dl_start");
+ Elf32_Addr got_addr = (Elf32_Addr) &__dl_start;
+ Elf32_Addr pcrel_addr;
+ asm ("adr %0, _dl_start" : "=r" (pcrel_addr));
+ return pcrel_addr - got_addr;
}