[llvm] 02cd80e - [ELF][AArch64] Add R_AARCH64_PLT32 relocation type.

Peter Smith via llvm-commits llvm-commits at lists.llvm.org
Wed Apr 8 04:21:22 PDT 2020


Author: Peter Smith
Date: 2020-04-08T12:19:35+01:00
New Revision: 02cd80e68ecf59af98e74d1b06c23b3317555933

URL: https://github.com/llvm/llvm-project/commit/02cd80e68ecf59af98e74d1b06c23b3317555933
DIFF: https://github.com/llvm/llvm-project/commit/02cd80e68ecf59af98e74d1b06c23b3317555933.diff

LOG: [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

Added: 
    

Modified: 
    llvm/include/llvm/BinaryFormat/ELFRelocs/AArch64.def
    llvm/test/tools/llvm-readobj/ELF/reloc-types-elf-aarch64.test

Removed: 
    


################################################################################
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


        


More information about the llvm-commits mailing list