This implements arm, armeb, thumb, thumbeb PLT entries parsing support in ELF for llvm-objdump. Implementation is similar to AArch64MCInstrAnalysis::findPltEntries. PLT entry signatures are based on LLD code for PLT generation (ARM::writePlt). llvm-objdump tests are produced from lld/test/ELF/arm-plt-reloc.s, lld/test/ELF/armv8-thumb-plt-reloc.s.
47 lines
1.3 KiB
ArmAsm
47 lines
1.3 KiB
ArmAsm
# REQUIRES: arm
|
|
|
|
# RUN: rm -rf %t && split-file %s %t
|
|
# RUN: llvm-mc -filetype=obj -arm-add-build-attributes -triple=armv7a-none-linux-gnueabi %t/a.s -o %t1.o
|
|
# RUN: llvm-mc -filetype=obj -arm-add-build-attributes -triple=armv7a-none-linux-gnueabi %t/b.s -o %t2.o
|
|
# RUN: ld.lld -shared %t1.o %t2.o -o %t.so
|
|
# RUN: llvm-objdump -d %t.so | FileCheck %s
|
|
|
|
## Check that, when the input is a mixture of objects which can and cannot use
|
|
## the ARM ISA, we use the default ARM PLT sequences.
|
|
|
|
# CHECK: <.plt>:
|
|
# CHECK-NEXT: e52de004 str lr, [sp, #-0x4]!
|
|
# CHECK-NEXT: e28fe600 add lr, pc, #0, #12
|
|
# CHECK-NEXT: e28eea20 add lr, lr, #32, #20
|
|
# CHECK-NEXT: e5bef084 ldr pc, [lr, #0x84]!
|
|
# CHECK-NEXT: d4 d4 d4 d4 .word 0xd4d4d4d4
|
|
# CHECK-NEXT: d4 d4 d4 d4 .word 0xd4d4d4d4
|
|
# CHECK-NEXT: d4 d4 d4 d4 .word 0xd4d4d4d4
|
|
# CHECK-NEXT: d4 d4 d4 d4 .word 0xd4d4d4d4
|
|
# CHECK-EMPTY:
|
|
# CHECK-NEXT: <bar@plt>:
|
|
# CHECK-NEXT: e28fc600 add r12, pc, #0, #12
|
|
# CHECK-NEXT: e28cca20 add r12, r12, #32, #20
|
|
# CHECK-NEXT: e5bcf06c ldr pc, [r12, #0x6c]!
|
|
# CHECK-NEXT: d4 d4 d4 d4 .word 0xd4d4d4d4
|
|
|
|
#--- a.s
|
|
.globl foo
|
|
.type foo, %function
|
|
.globl bar
|
|
.type bar, %function
|
|
|
|
.thumb
|
|
foo:
|
|
bl bar
|
|
bx lr
|
|
|
|
#--- b.s
|
|
.eabi_attribute Tag_ARM_ISA_use, 0
|
|
|
|
.arm
|
|
.globl bar
|
|
.type bar, %function
|
|
bar:
|
|
bx lr
|