[PATCH] D37276: [yaml2obj][ELF] Make symbols optional for relocations

Jake Ehrlich via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Aug 30 10:37:50 PDT 2017


jakehehrlich updated this revision to Diff 113285.
jakehehrlich added a comment.

Added a test which documents the invalid relocations that can now be produced.


Repository:
  rL LLVM

https://reviews.llvm.org/D37276

Files:
  include/llvm/ObjectYAML/ELFYAML.h
  lib/ObjectYAML/ELFYAML.cpp
  test/tools/yaml2obj/invalid-symboless-relocation.yaml
  test/tools/yaml2obj/symboless-relocation.yaml
  tools/yaml2obj/yaml2elf.cpp


Index: tools/yaml2obj/yaml2elf.cpp
===================================================================
--- tools/yaml2obj/yaml2elf.cpp
+++ tools/yaml2obj/yaml2elf.cpp
@@ -459,7 +459,8 @@
     // Some special relocation, R_ARM_v4BX for instance, does not have
     // an external reference.  So it ignores the return value of lookup()
     // here.
-    SymN2I.lookup(Rel.Symbol, SymIdx);
+    if (Rel.Symbol)
+      SymN2I.lookup(*Rel.Symbol, SymIdx);
 
     if (IsRela) {
       Elf_Rela REntry;
Index: test/tools/yaml2obj/symboless-relocation.yaml
===================================================================
--- /dev/null
+++ test/tools/yaml2obj/symboless-relocation.yaml
@@ -0,0 +1,21 @@
+# Just make sure this isn't an error even though it has no Symbol
+# RUN: yaml2obj %s
+
+!ELF
+FileHeader:
+  Class:           ELFCLASS64
+  Data:            ELFDATA2LSB
+  Type:            ET_EXEC
+  Machine:         EM_X86_64
+Sections:
+  - Name:            .text
+    Type:            SHT_PROGBITS
+    Flags:           [ SHF_ALLOC, SHF_EXECINSTR ]
+    Content:         "00000000"
+  - Name:            .rel.text
+    Type:            SHT_REL
+    Link:            .symtab
+    Info:            .text
+    Relocations:
+      - Offset: 0x1000
+        Type:   R_X86_64_RELATIVE
Index: test/tools/yaml2obj/invalid-symboless-relocation.yaml
===================================================================
--- /dev/null
+++ test/tools/yaml2obj/invalid-symboless-relocation.yaml
@@ -0,0 +1,29 @@
+# This test should sucseed but produces an invalid relocation. This test
+# documents this behavoir.
+# RUN: yaml2obj %s > %t
+# RUN: llvm-readobj -relocations %t | FileCheck %s
+
+!ELF
+FileHeader:
+  Class:           ELFCLASS64
+  Data:            ELFDATA2LSB
+  Type:            ET_EXEC
+  Machine:         EM_X86_64
+Sections:
+  - Name:            .text
+    Type:            SHT_PROGBITS
+    Flags:           [ SHF_ALLOC, SHF_EXECINSTR ]
+    Content:         "00000000"
+  - Name:            .rel.text
+    Type:            SHT_REL
+    Link:            .symtab
+    Info:            .text
+    Relocations:
+      - Offset: 0x1000
+        Type:   R_X86_64_PC32
+
+#CHECK:     Relocations [
+#CHECK-NEXT:  Section (2) .rel.text {
+#CHECK-NEXT:    0x1000 R_X86_64_PC32 - 0x0
+#CHECK-NEXT:  }
+#CHECK-NEXT:]
Index: lib/ObjectYAML/ELFYAML.cpp
===================================================================
--- lib/ObjectYAML/ELFYAML.cpp
+++ lib/ObjectYAML/ELFYAML.cpp
@@ -853,7 +853,7 @@
   assert(Object && "The IO context is not initialized");
 
   IO.mapRequired("Offset", Rel.Offset);
-  IO.mapRequired("Symbol", Rel.Symbol);
+  IO.mapOptional("Symbol", Rel.Symbol);
 
   if (Object->Header.Machine == ELFYAML::ELF_EM(ELF::EM_MIPS) &&
       Object->Header.Class == ELFYAML::ELF_ELFCLASS(ELF::ELFCLASS64)) {
Index: include/llvm/ObjectYAML/ELFYAML.h
===================================================================
--- include/llvm/ObjectYAML/ELFYAML.h
+++ include/llvm/ObjectYAML/ELFYAML.h
@@ -161,7 +161,7 @@
   llvm::yaml::Hex64 Offset;
   int64_t Addend;
   ELF_REL Type;
-  StringRef Symbol;
+  Optional<StringRef> Symbol;
 };
 
 struct RelocationSection : Section {


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D37276.113285.patch
Type: text/x-patch
Size: 3191 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170830/dfee4f54/attachment.bin>


More information about the llvm-commits mailing list