summaryrefslogtreecommitdiffstats
path: root/libexec/rtld-elf/powerpc/rtld_start.S
diff options
context:
space:
mode:
authornwhitehorn <nwhitehorn@FreeBSD.org>2010-02-22 16:49:45 +0000
committernwhitehorn <nwhitehorn@FreeBSD.org>2010-02-22 16:49:45 +0000
commit911ef3e63a10a36b09b7bd36839f79e0e8dd5758 (patch)
tree1b6081d62ab5d0156c8ca6a59ffbe97bebf44e45 /libexec/rtld-elf/powerpc/rtld_start.S
parentece1c414fe52f1415ecb1a5135353ee93c0395d6 (diff)
downloadFreeBSD-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.S6
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
OpenPOWER on IntegriCloud