[llvm] 8308e81 - [JITLink][ELF][x86-64] Implement ELF::R_X86_64_NONE.

Lang Hames via llvm-commits llvm-commits at lists.llvm.org
Sat Apr 15 20:19:18 PDT 2023


Author: Lang Hames
Date: 2023-04-16T03:19:11Z
New Revision: 8308e81b741eb066b6dc959c47a5536fcaa94023

URL: https://github.com/llvm/llvm-project/commit/8308e81b741eb066b6dc959c47a5536fcaa94023
DIFF: https://github.com/llvm/llvm-project/commit/8308e81b741eb066b6dc959c47a5536fcaa94023.diff

LOG: [JITLink][ELF][x86-64] Implement ELF::R_X86_64_NONE.

R_X86_64_NONE is a no-op, so we just need to return from addSingleRelocation
early.

Added: 
    llvm/test/ExecutionEngine/JITLink/x86-64/ELF_R_X86_64_NONE.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 7ac088f1a9422..cab181f2f30dd 100644
--- a/llvm/lib/ExecutionEngine/JITLink/ELF_x86_64.cpp
+++ b/llvm/lib/ExecutionEngine/JITLink/ELF_x86_64.cpp
@@ -129,6 +129,12 @@ class ELFLinkGraphBuilder_x86_64 : public ELFLinkGraphBuilder<object::ELF64LE> {
                             Block &BlockToFix) {
     using Base = ELFLinkGraphBuilder<ELFT>;
 
+    auto ELFReloc = Rel.getType(false);
+
+    // R_X86_64_NONE is a no-op.
+    if (LLVM_UNLIKELY(ELFReloc == ELF::R_X86_64_NONE))
+      return Error::success();
+
     uint32_t SymbolIndex = Rel.getSymbol(false);
     auto ObjSymbol = Base::Obj.getRelocationSymbol(Rel, Base::SymTabSec);
     if (!ObjSymbol)
@@ -147,7 +153,6 @@ class ELFLinkGraphBuilder_x86_64 : public ELFLinkGraphBuilder<object::ELF64LE> {
     int64_t Addend = Rel.r_addend;
     Edge::Kind Kind = Edge::Invalid;
 
-    auto ELFReloc = Rel.getType(false);
     switch (ELFReloc) {
     case ELF::R_X86_64_PC32:
       Kind = x86_64::Delta32;

diff  --git a/llvm/test/ExecutionEngine/JITLink/x86-64/ELF_R_X86_64_NONE.yaml b/llvm/test/ExecutionEngine/JITLink/x86-64/ELF_R_X86_64_NONE.yaml
new file mode 100644
index 0000000000000..bbf68ef4d857d
--- /dev/null
+++ b/llvm/test/ExecutionEngine/JITLink/x86-64/ELF_R_X86_64_NONE.yaml
@@ -0,0 +1,59 @@
+# RUN: yaml2obj -o %t.o %s
+# RUN: llvm-jitlink -noexec -check=%s %t.o
+#
+# Check that R_X86_64_NONE relocations are handled without modifying the fixup
+# location.
+
+# jitlink-check: *{8}P = 42
+
+--- !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:    0x4
+  - Name:            .text.main
+    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:         '2A00000000000000'
+  - Name:            .rela.data
+    Type:            SHT_RELA
+    Flags:           [ SHF_INFO_LINK ]
+    Link:            .symtab
+    AddressAlign:    0x8
+    Info:            .data
+    Relocations:
+      - Symbol:          P
+        Type:            R_X86_64_NONE
+  - Type:            SectionHeaderTable
+    Sections:
+      - Name:            .strtab
+      - Name:            .text
+      - Name:            .text.main
+      - Name:            .data
+      - Name:            .rela.data
+      - Name:            .symtab
+Symbols:
+  - Name:            main
+    Type:            STT_FUNC
+    Section:         .text.main
+    Binding:         STB_GLOBAL
+    Size:            0x3
+  - Name:            P
+    Type:            STT_OBJECT
+    Section:         .data
+    Binding:         STB_GLOBAL
+    Size:            0x8
+...


        


More information about the llvm-commits mailing list