From 02cd80e68ecf59af98e74d1b06c23b3317555933 Mon Sep 17 00:00:00 2001 From: Peter Smith Date: Mon, 6 Apr 2020 22:21:39 +0100 Subject: [PATCH] [ELF][AArch64] Add R_AARCH64_PLT32 relocation type. The R_AARCH64_PLT32 relocation type will be documented in the next release of ELF for the 64-bit Arm Architecture. It is being added in draft state for the benefit of the position independent vtable feature. R_AARCH64_PLT32 is very similar to R_AARCH64_PREL32. The intention is to provide a signed 32-bit integer representing an offset from the place to a function. - It relocates 32-bit data - The expression is S + A - P - The overflow check for the expression is -2^31 <= X < 2^31 - The relocation generates Thunks/Veneers/Stubs and PLT entries as per R_AArch64_CALL26 - If the symbol S is an undefined weak the ABI does not define its value. The ABI defines a code for ilp32 for completeness, I have added the code but have only added to the existing reloc-types-elf-aarch64.text as there is no ilp32 equivalent. Differential Revision: https://reviews.llvm.org/D77647 --- llvm/include/llvm/BinaryFormat/ELFRelocs/AArch64.def | 2 ++ llvm/test/tools/llvm-readobj/ELF/reloc-types-elf-aarch64.test | 2 ++ 2 files changed, 4 insertions(+) diff --git a/llvm/include/llvm/BinaryFormat/ELFRelocs/AArch64.def b/llvm/include/llvm/BinaryFormat/ELFRelocs/AArch64.def index c8364133e31f..e7d2a9773791 100644 --- a/llvm/include/llvm/BinaryFormat/ELFRelocs/AArch64.def +++ b/llvm/include/llvm/BinaryFormat/ELFRelocs/AArch64.def @@ -132,6 +132,7 @@ ELF_RELOC(R_AARCH64_TLS_DTPREL64, 0x405) ELF_RELOC(R_AARCH64_TLS_TPREL64, 0x406) ELF_RELOC(R_AARCH64_TLSDESC, 0x407) ELF_RELOC(R_AARCH64_IRELATIVE, 0x408) +ELF_RELOC(R_AARCH64_PLT32, 0x409) // ELF_RELOC(R_AARCH64_P32_NONE, 0) ELF_RELOC(R_AARCH64_P32_ABS32, 0x001) @@ -219,3 +220,4 @@ ELF_RELOC(R_AARCH64_P32_TLS_DTPMOD, 0x0b9) ELF_RELOC(R_AARCH64_P32_TLS_TPREL, 0x0ba) ELF_RELOC(R_AARCH64_P32_TLSDESC, 0x0bb) ELF_RELOC(R_AARCH64_P32_IRELATIVE, 0x0bc) +ELF_RELOC(R_AARCH64_P32_PLT32, 0x0bd) diff --git a/llvm/test/tools/llvm-readobj/ELF/reloc-types-elf-aarch64.test b/llvm/test/tools/llvm-readobj/ELF/reloc-types-elf-aarch64.test index c95265d520a1..94017e5bd583 100644 --- a/llvm/test/tools/llvm-readobj/ELF/reloc-types-elf-aarch64.test +++ b/llvm/test/tools/llvm-readobj/ELF/reloc-types-elf-aarch64.test @@ -127,6 +127,7 @@ # CHECK: Type: R_AARCH64_TLS_TPREL64 (1030) # CHECK: Type: R_AARCH64_TLSDESC (1031) # CHECK: Type: R_AARCH64_IRELATIVE (1032) +# CHECK: Type: R_AARCH64_PLT32 (1033) --- !ELF FileHeader: @@ -267,3 +268,4 @@ Sections: - Type: R_AARCH64_TLS_TPREL64 - Type: R_AARCH64_TLSDESC - Type: R_AARCH64_IRELATIVE + - Type: R_AARCH64_PLT32