86 lines · plain
1# REQUIRES: ppc2 3## Test that we create canonical PLT entries for -no-pie.4 5# RUN: llvm-mc -filetype=obj -triple=powerpc %s -o %t.o6# RUN: llvm-mc -filetype=obj -triple=powerpc %p/Inputs/canonical-plt-pcrel.s -o %t1.o7# RUN: ld.lld %t1.o -o %t1.so -shared -soname=so8 9# RUN: ld.lld %t.o %t1.so -o %t10# RUN: llvm-readobj -r %t | FileCheck --check-prefix=REL %s11# RUN: llvm-readelf -S -s %t | FileCheck --check-prefix=SYM %s12# RUN: llvm-readelf -x .plt %t | FileCheck --check-prefix=HEX %s13# RUN: llvm-objdump -d --no-show-raw-insn %t | FileCheck %s14 15# REL: Relocations [16# REL-NEXT: .rela.plt {17# REL-NEXT: 0x10030318 R_PPC_JMP_SLOT func 0x018# REL-NEXT: 0x1003031C R_PPC_JMP_SLOT func2 0x019# REL-NEXT: 0x10030320 R_PPC_JMP_SLOT ifunc 0x020# REL-NEXT: }21# REL-NEXT: ]22 23# SYM: .glink PROGBITS 1001022c24 25## st_value points to the canonical PLT entry in .glink26# SYM: Symbol table '.dynsym'27# SYM: 1001022c 0 FUNC GLOBAL DEFAULT UND func28# SYM: 1001023c 0 FUNC GLOBAL DEFAULT UND func229# SYM: 1001024c 0 FUNC GLOBAL DEFAULT UND ifunc30# SYM: Symbol table '.symtab'31# SYM: 1001022c 0 FUNC GLOBAL DEFAULT UND func32# SYM: 1001023c 0 FUNC GLOBAL DEFAULT UND func233# SYM: 1001024c 0 FUNC GLOBAL DEFAULT UND ifunc34 35# HEX: 0x10030318 1001025c 10010260 1001026436 37## Canonical PLT entry of func.38## 0x10030318 = 65536*4099+79239# CHECK: 1001022c <.glink>:40# CHECK-NEXT: lis 11, 409941# CHECK-NEXT: lwz 11, 792(11)42# CHECK-NEXT: mtctr 1143# CHECK-NEXT: bctr44 45## Canonical PLT entry of func2.46## 0x1003031C = 65536*4099+79647# CHECK-NEXT: 1001023c: lis 11, 409948# CHECK-NEXT: lwz 11, 796(11)49# CHECK-NEXT: mtctr 1150# CHECK-NEXT: bctr51 52## Canonical PLT entry of ifunc.53## 0x10030320 = 65536*4099+80054# CHECK-NEXT: 1001024c: lis 11, 409955# CHECK-NEXT: lwz 11, 800(11)56# CHECK-NEXT: mtctr 1157# CHECK-NEXT: bctr58 59## The 3 b instructions are referenced by .plt entries.60# CHECK-NEXT: 1001025c: b 0x1001026861# CHECK-NEXT: b 0x1001026862# CHECK-NEXT: b 0x1001026863 64## PLTresolve of 64 bytes is at the end.65## Operands of addis & addi: -0x1001025c = 65536*-4097-60466# CHECK-NEXT: lis 12, 067# CHECK-NEXT: addis 11, 11, -409768# CHECK-NEXT: lwz 0, 4(12)69# CHECK-NEXT: addi 11, 11, -60470# CHECK-NEXT: mtctr 071# CHECK-NEXT: add 0, 11, 1172# CHECK-NEXT: lwz 12, 8(12)73# CHECK-NEXT: add 11, 0, 1174# CHECK-NEXT: bctr75# CHECK-COUNT-7: nop76 77.globl _start78_start:79 b func80 lis 3, func2@ha81 la 3, func2@l(3)82 lis 3, func@ha83 la 3, func@l(3)84 lis 4, ifunc@ha85 la 4, ifunc@l(4)86