diff options
| author | Peter Smith <peter.smith@linaro.org> | 2019-06-04 16:35:40 +0000 |
|---|---|---|
| committer | Peter Smith <peter.smith@linaro.org> | 2019-06-04 16:35:40 +0000 |
| commit | f15e3d856fddd3ecf80fdbb798be64d0c4bc6de4 (patch) | |
| tree | c338e1a3c426cd555f6f6df4180d476c16e275cf /llvm/test/tools/llvm-objdump/AArch64/plt.test | |
| parent | 8e8ddaa38ff691b4dd21a93bcc348a383f7ffcac (diff) | |
| download | bcm5719-llvm-f15e3d856fddd3ecf80fdbb798be64d0c4bc6de4.tar.gz bcm5719-llvm-f15e3d856fddd3ecf80fdbb798be64d0c4bc6de4.zip | |
[AArch64][ELF] Add support for PLT decoding with BTI instructions present
Arm Architecture v8.5a introduces Branch Target Identification (BTI). When
enabled all indirect branches must target a bti instruction of the
appropriate form. As PLT sequences may sometimes be the target of an
indirect branch and PLT[0] always is, a static linker may need to generate
PLT sequences that contain "bti c" as the first instruction. In effect:
bti c
adrp x16, page offset to .got.plt
...
Instead of:
adrp x16, page offset to .got.plt
...
At present the PLT decoding assumes the adrp will always be the first
instruction. This patch adds support for a single "bti c" to prefix it. A
test binary has been uploaded with such a PLT sequence. A forthcoming LLD
patch will make heavy use of the PLT decoding code.
Differential Revision: https://reviews.llvm.org/D62598
llvm-svn: 362523
Diffstat (limited to 'llvm/test/tools/llvm-objdump/AArch64/plt.test')
| -rw-r--r-- | llvm/test/tools/llvm-objdump/AArch64/plt.test | 57 |
1 files changed, 56 insertions, 1 deletions
diff --git a/llvm/test/tools/llvm-objdump/AArch64/plt.test b/llvm/test/tools/llvm-objdump/AArch64/plt.test index d463a694149..5b3eff331d3 100644 --- a/llvm/test/tools/llvm-objdump/AArch64/plt.test +++ b/llvm/test/tools/llvm-objdump/AArch64/plt.test @@ -1,5 +1,60 @@ -// RUN: llvm-objdump -d %p/Inputs/cfi.elf-aarch64 | FileCheck %s +# RUN: llvm-objdump -d %p/Inputs/cfi.elf-aarch64 | FileCheck %s # CHECK: Disassembly of section .plt: # CHECK: __cfi_slowpath@plt: +# CHECK-NEXT: adrp x16, {{.*}} # CHECK: bl {{.*}} <__cfi_slowpath@plt> + +# RUN: yaml2obj %s -o %t.aarch64 +# RUN: llvm-objdump -d -mattr=+bti %t.aarch64 | \ +# RUN: FileCheck --check-prefix=CHECK-BTI %s +# CHECK-BTI: bl {{.*}} <f1@plt> +# CHECK-BTI: bl {{.*}} <f2@plt> +# CHECK-BTI: Disassembly of section .plt: +# CHECK-BTI: f1@plt: +# CHECK-BTI-NEXT: bti c +# CHECK-BTI-NEXT: adrp x16, {{.*}} +# CHECK-BTI: f2@plt: +# CHECK-BTI-NEXT: bti c +# CHECK-BTI-NEXT: adrp x16, {{.*}} + +--- !ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_EXEC + Machine: EM_AARCH64 +Sections: + - Name: .rela.plt + Type: SHT_RELA + Flags: [ SHF_ALLOC ] + EntSize: 0x0000000000000018 + Info: .got.plt + Relocations: + - Offset: 0x0000000000230018 + Symbol: f1 + Type: R_AARCH64_JUMP_SLOT + - Offset: 0x0000000000230020 + Symbol: f2 + Type: R_AARCH64_JUMP_SLOT + - Name: .text + Type: SHT_PROGBITS + Flags: [ SHF_ALLOC, SHF_EXECINSTR ] + Address: 0x0000000000210000 + Content: 0C00009411000094C0035FD6 + - Name: .plt + Type: SHT_PROGBITS + Flags: [ SHF_ALLOC, SHF_EXECINSTR ] + Address: 0x0000000000210010 + Content: 5F2403D5F07BBFA910010090110A40F91042009120021FD61F2003D51F2003D55F2403D510010090110E40F9106200919F2103D520021FD65F2403D510010090111240F9108200919F2103D520021FD6 + - Name: .got.plt + Type: SHT_PROGBITS + Content: '000000000000000000000000000000000000000000000000100021000000000010002100000000001000210000000000' +Symbols: + - Name: f1 + Type: STT_FUNC + Binding: STB_GLOBAL + - Name: f2 + Type: STT_FUNC + Binding: STB_GLOBAL +... |

