[lld] r307370 - [ELF] - Fail the link if something happens on DWARF parsing stage of -gdb-index building

George Rimar via llvm-commits llvm-commits at lists.llvm.org
Fri Jul 7 02:18:05 PDT 2017


Author: grimar
Date: Fri Jul  7 02:18:05 2017
New Revision: 307370

URL: http://llvm.org/viewvc/llvm-project?rev=307370&view=rev
Log:
[ELF] - Fail the link if something happens on DWARF parsing stage of -gdb-index building

This is relative to PR33173,

Previously if something wrong happened on DWARF parsers side during parsing
object for building gdb index (like was in PR: unsupported relocation) 
then LLD continued and finished the link. DWARF parsers sure showed error
message on their side, but that is all.

Patch changes behavior to fail the link in this case and show more
detailed message.

Differential revision: https://reviews.llvm.org/D34814

Added:
    lld/trunk/test/ELF/invalid/invalid-debug-relocations.test
Modified:
    lld/trunk/ELF/SyntheticSections.cpp

Modified: lld/trunk/ELF/SyntheticSections.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/SyntheticSections.cpp?rev=307370&r1=307369&r2=307370&view=diff
==============================================================================
--- lld/trunk/ELF/SyntheticSections.cpp (original)
+++ lld/trunk/ELF/SyntheticSections.cpp Fri Jul  7 02:18:05 2017
@@ -1811,7 +1811,11 @@ GdbIndexChunk GdbIndexSection::readDwarf
     return {};
   }
 
-  DWARFContextInMemory Dwarf(*Obj.get());
+  DWARFContextInMemory Dwarf(*Obj.get(), nullptr, [&](Error E) {
+    error(toString(Sec->File) + ": error parsing DWARF data:\n>>> " +
+          toString(std::move(E)));
+    return ErrorPolicy::Continue;
+  });
 
   GdbIndexChunk Ret;
   Ret.CompilationUnits = readCuList(Dwarf, Sec);

Added: lld/trunk/test/ELF/invalid/invalid-debug-relocations.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/invalid/invalid-debug-relocations.test?rev=307370&view=auto
==============================================================================
--- lld/trunk/test/ELF/invalid/invalid-debug-relocations.test (added)
+++ lld/trunk/test/ELF/invalid/invalid-debug-relocations.test Fri Jul  7 02:18:05 2017
@@ -0,0 +1,41 @@
+# REQUIRES: x86
+# RUN: yaml2obj %s -o %t.o
+# RUN: not ld.lld -gdb-index %t.o -o %t.exe 2>&1 | FileCheck %s
+
+# CHECK:      error: {{.*}}.o: error parsing DWARF data:
+# CHECK-NEXT: >>> failed to compute relocation: Unknown, Invalid data was encountered while parsing the file
+
+!ELF
+FileHeader:
+  Class:           ELFCLASS32
+  Data:            ELFDATA2LSB
+  Type:            ET_REL
+  Machine:         EM_386
+Sections:
+  - Type:            SHT_PROGBITS
+    Name:            .text
+    Flags:           [ ]
+    AddressAlign:    0x04
+    Content:         "0000"
+  - Type:            SHT_PROGBITS
+    Name:            .debug_info
+    Flags:           [ ]
+    AddressAlign:    0x04
+    Content:         "0000"
+  - Type:            SHT_REL
+    Name:            .rel.debug_info
+    Link:            .symtab
+    Info:            .debug_info
+    Relocations:
+      - Offset:          0
+        Symbol:          _start
+        Type:            0xFF
+      - Offset:          4
+        Symbol:          _start
+        Type:            0xFF
+Symbols:
+  Global:
+    - Name:     _start
+      Type:     STT_FUNC
+      Section:  .text
+      Value:    0x0




More information about the llvm-commits mailing list