diff options
author | nwhitehorn <nwhitehorn@FreeBSD.org> | 2010-02-22 16:49:45 +0000 |
---|---|---|
committer | nwhitehorn <nwhitehorn@FreeBSD.org> | 2010-02-22 16:49:45 +0000 |
commit | 911ef3e63a10a36b09b7bd36839f79e0e8dd5758 (patch) | |
tree | 1b6081d62ab5d0156c8ca6a59ffbe97bebf44e45 /libexec/rtld-elf/powerpc/rtld_start.S | |
parent | ece1c414fe52f1415ecb1a5135353ee93c0395d6 (diff) | |
download | FreeBSD-src-911ef3e63a10a36b09b7bd36839f79e0e8dd5758.zip FreeBSD-src-911ef3e63a10a36b09b7bd36839f79e0e8dd5758.tar.gz |
Support the extended PLT format used when objects have more than 8192
PLT relocations on PPC32.
Diffstat (limited to 'libexec/rtld-elf/powerpc/rtld_start.S')
-rw-r--r-- | libexec/rtld-elf/powerpc/rtld_start.S | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/libexec/rtld-elf/powerpc/rtld_start.S b/libexec/rtld-elf/powerpc/rtld_start.S index 86f76e6..00692d2 100644 --- a/libexec/rtld-elf/powerpc/rtld_start.S +++ b/libexec/rtld-elf/powerpc/rtld_start.S @@ -163,6 +163,12 @@ _ENTRY(_rtld_bind_start) * The ELF object is shifted into %r11, and _rtld_bind_start is called * to complete the binding. */ +_ENTRY(_rtld_powerpc_pltlongresolve) + lis %r12,0 # lis 12,jmptab@ha + addi %r12,%r12,0 # addi 12,12,jmptab@l + subf %r11,%r12,%r11 # reloff + li %r12,2 + srw %r11,%r11,%r12 # index = reloff/sizeof(Elf_Addr) _ENTRY(_rtld_powerpc_pltresolve) lis %r12,0 # lis 12,_rtld_bind_start@ha addi %r12,%r12,0 # addi 12,12,_rtld_bind_start@l |