[llvm] ede78c1 - [JITLink][ELF][x86-64] Add support for R_X86_64_32 relocation.
Lang Hames via llvm-commits
llvm-commits at lists.llvm.org
Sat Mar 18 21:22:59 PDT 2023
Author: Lang Hames
Date: 2023-03-18T20:00:03-07:00
New Revision: ede78c1704ede36319f33fdbefb4a4fb8528c1aa
URL: https://github.com/llvm/llvm-project/commit/ede78c1704ede36319f33fdbefb4a4fb8528c1aa
DIFF: https://github.com/llvm/llvm-project/commit/ede78c1704ede36319f33fdbefb4a4fb8528c1aa.diff
LOG: [JITLink][ELF][x86-64] Add support for R_X86_64_32 relocation.
Added:
llvm/test/ExecutionEngine/JITLink/X86/ELF_R_X86_64_32.yaml
Modified:
llvm/lib/ExecutionEngine/JITLink/ELF_x86_64.cpp
Removed:
################################################################################
diff --git a/llvm/lib/ExecutionEngine/JITLink/ELF_x86_64.cpp b/llvm/lib/ExecutionEngine/JITLink/ELF_x86_64.cpp
index c9359522c248..ab2ca449ec8e 100644
--- a/llvm/lib/ExecutionEngine/JITLink/ELF_x86_64.cpp
+++ b/llvm/lib/ExecutionEngine/JITLink/ELF_x86_64.cpp
@@ -108,6 +108,7 @@ class ELFLinkGraphBuilder_x86_64 : public ELFLinkGraphBuilder<object::ELF64LE> {
enum ELFX86RelocationKind : Edge::Kind {
Branch32 = Edge::FirstRelocation,
+ Pointer32,
Pointer32Signed,
Pointer64,
PCRel32,
@@ -123,6 +124,8 @@ class ELFLinkGraphBuilder_x86_64 : public ELFLinkGraphBuilder<object::ELF64LE> {
static Expected<ELFX86RelocationKind> getRelocationKind(const uint32_t Type) {
switch (Type) {
+ case ELF::R_X86_64_32:
+ return ELFX86RelocationKind::Pointer32;
case ELF::R_X86_64_32S:
return ELFX86RelocationKind::Pointer32Signed;
case ELF::R_X86_64_PC32:
@@ -207,6 +210,9 @@ class ELFLinkGraphBuilder_x86_64 : public ELFLinkGraphBuilder<object::ELF64LE> {
case Delta64:
Kind = x86_64::Delta64;
break;
+ case Pointer32:
+ Kind = x86_64::Pointer32;
+ break;
case Pointer32Signed:
Kind = x86_64::Pointer32Signed;
break;
diff --git a/llvm/test/ExecutionEngine/JITLink/X86/ELF_R_X86_64_32.yaml b/llvm/test/ExecutionEngine/JITLink/X86/ELF_R_X86_64_32.yaml
new file mode 100644
index 000000000000..a35285597059
--- /dev/null
+++ b/llvm/test/ExecutionEngine/JITLink/X86/ELF_R_X86_64_32.yaml
@@ -0,0 +1,83 @@
+# Check success and failure cases of R_X86_64_32 handling.
+# This file contains a single R_X86_64_32 relocation. We expect the relocation
+# to apply successfully when we assign x an address in the low 32-bits of the
+# address space, and fail if we assign x an address outside that range.
+
+# RUN: yaml2obj -o %t.o %s
+# RUN: llvm-jitlink -abs x=0x12345678 -noexec -check=%s %t.o
+# RUN: not llvm-jitlink -abs x=0x123456789 -noexec %t.o 2>&1 | \
+# RUN: FileCheck -check-prefix=CHECK-ERROR %s
+
+# jitlink-check: *{8}xptr = x
+
+# CHECK-ERROR: relocation target "x" {{.*}} is out of range of Pointer32 fixup
+
+--- !ELF
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_X86_64
+ SectionHeaderStringTable: .strtab
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x10
+ Content: 31C0C3
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x8
+ Content: '0000000000000000'
+ - Name: .comment
+ Type: SHT_PROGBITS
+ Flags: [ SHF_MERGE, SHF_STRINGS ]
+ AddressAlign: 0x1
+ EntSize: 0x1
+ Content: 00636C616E672076657273696F6E2031372E302E302028676974406769746875622E636F6D3A6C6C766D2F6C6C766D2D70726F6A6563742E67697420393361303461303539316331393538643533343466333534313135376662643862386666373337302900
+ - Name: .note.GNU-stack
+ Type: SHT_PROGBITS
+ AddressAlign: 0x1
+ - Name: .rela.data
+ Type: SHT_RELA
+ Flags: [ SHF_INFO_LINK ]
+ Link: .symtab
+ AddressAlign: 0x8
+ Info: .data
+ Relocations:
+ - Symbol: x
+ Type: R_X86_64_32
+ - Name: .llvm_addrsig
+ Type: SHT_LLVM_ADDRSIG
+ Flags: [ SHF_EXCLUDE ]
+ Link: .symtab
+ AddressAlign: 0x1
+ Symbols: [ x ]
+ - Type: SectionHeaderTable
+ Sections:
+ - Name: .strtab
+ - Name: .text
+ - Name: .data
+ - Name: .rela.data
+ - Name: .comment
+ - Name: .note.GNU-stack
+ - Name: .llvm_addrsig
+ - Name: .symtab
+Symbols:
+ - Name: testcase.c
+ Type: STT_FILE
+ Index: SHN_ABS
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+ Binding: STB_GLOBAL
+ Size: 0x3
+ - Name: xptr
+ Type: STT_OBJECT
+ Section: .data
+ Binding: STB_GLOBAL
+ Size: 0x8
+ - Name: x
+ Binding: STB_GLOBAL
+...
More information about the llvm-commits
mailing list