<div dir="ltr">Hi Rafael,<div><br></div><div>This test is failing under UBSan.  See <a href="http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-fast/builds/10690">http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-fast/builds/10690</a>.<br></div><div><br></div><div><pre style="font-family:"Courier New",courier,monotype,monospace;color:rgb(0,0,0);font-size:medium"><span class="gmail-stdout">******************** TEST 'lld :: ELF/undef-broken-debug.test' FAILED ********************
Script:
--
/b/sanitizer-x86_64-linux-fast/build/llvm_build_ubsan/bin/yaml2obj /b/sanitizer-x86_64-linux-fast/build/llvm/tools/lld/test/ELF/undef-broken-debug.test -o /b/sanitizer-x86_64-linux-fast/build/llvm_build_ubsan/tools/lld/test/ELF/Output/undef-broken-debug.test.tmp.o
not /b/sanitizer-x86_64-linux-fast/build/llvm_build_ubsan/bin/ld.lld --full-shutdown /b/sanitizer-x86_64-linux-fast/build/llvm_build_ubsan/tools/lld/test/ELF/Output/undef-broken-debug.test.tmp.o -o /b/sanitizer-x86_64-linux-fast/build/llvm_build_ubsan/tools/lld/test/ELF/Output/undef-broken-debug.test.tmp.exe 2>&1 | /b/sanitizer-x86_64-linux-fast/build/llvm_build_ubsan/bin/FileCheck /b/sanitizer-x86_64-linux-fast/build/llvm/tools/lld/test/ELF/undef-broken-debug.test
--
Exit Code: 1

Command Output (stderr):
--
/b/sanitizer-x86_64-linux-fast/build/llvm/tools/lld/test/ELF/undef-broken-debug.test:8:10: error: expected string not found in input
# CHECK: error: undefined symbol: bar
         ^
<stdin>:1:1: note: scanning from here
/usr/lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/predefined_ops.h:147:24: runtime error: reference binding to misaligned address 0x000007d9cdd7 for type 'const llvm::object::Elf_Rel_Impl<llvm::object::ELFType<llvm::support::endianness::little, true>, true>', which requires 2 byte alignment
^
</span></pre></div><div><span class="gmail-stdout"><br></span></div><div><br></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Nov 29, 2017 at 2:09 PM, Rafael Espindola via llvm-commits <span dir="ltr"><<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: rafael<br>
Date: Wed Nov 29 14:09:16 2017<br>
New Revision: 319367<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=319367&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project?rev=319367&view=rev</a><br>
Log:<br>
Don't crash on broken debug info.<br>
<br>
Added:<br>
    lld/trunk/test/ELF/undef-<wbr>broken-debug.test<br>
Modified:<br>
    lld/trunk/ELF/GdbIndex.cpp<br>
<br>
Modified: lld/trunk/ELF/GdbIndex.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/GdbIndex.cpp?rev=319367&r1=319366&r2=319367&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/lld/trunk/ELF/<wbr>GdbIndex.cpp?rev=319367&r1=<wbr>319366&r2=319367&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- lld/trunk/ELF/GdbIndex.cpp (original)<br>
+++ lld/trunk/ELF/GdbIndex.cpp Wed Nov 29 14:09:16 2017<br>
@@ -68,14 +68,17 @@ LLDDwarfObj<ELFT>::findAux(<wbr>const InputSe<br>
   uint32_t SymIndex = Rel.getSymbol(Config-><wbr>IsMips64EL);<br>
   const typename ELFT::Sym &Sym = File->getELFSyms()[SymIndex];<br>
   uint32_t SecIndex = File->getSectionIndex(Sym);<br>
-  Symbol &B = File->getRelocTargetSym(Rel);<br>
-  auto &DR = cast<Defined>(B);<br>
-  uint64_t Val = DR.Value + getAddend<ELFT>(Rel);<br>
+<br>
+  // Broken debug info can point to a non-Defined symbol, just ignore it.<br>
+  auto *DR = dyn_cast<Defined>(&File-><wbr>getRelocTargetSym(Rel));<br>
+  if (!DR)<br>
+    return None;<br>
+  uint64_t Val = DR->Value + getAddend<ELFT>(Rel);<br>
<br>
   // FIXME: We should be consistent about always adding the file<br>
   // offset or not.<br>
-  if (DR.Section->Flags & ELF::SHF_ALLOC)<br>
-    Val += cast<InputSection>(DR.Section)<wbr>->getOffsetInFile();<br>
+  if (DR->Section->Flags & ELF::SHF_ALLOC)<br>
+    Val += cast<InputSection>(DR-><wbr>Section)->getOffsetInFile();<br>
<br>
   return RelocAddrEntry{SecIndex, Val};<br>
 }<br>
<br>
Added: lld/trunk/test/ELF/undef-<wbr>broken-debug.test<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/undef-broken-debug.test?rev=319367&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/lld/trunk/test/ELF/<wbr>undef-broken-debug.test?rev=<wbr>319367&view=auto</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- lld/trunk/test/ELF/undef-<wbr>broken-debug.test (added)<br>
+++ lld/trunk/test/ELF/undef-<wbr>broken-debug.test Wed Nov 29 14:09:16 2017<br>
@@ -0,0 +1,44 @@<br>
+# REQUIRES: x86<br>
+# RUN: yaml2obj %s -o %t.o<br>
+# RUN: not ld.lld %t.o -o %t.exe 2>&1 | FileCheck %s<br>
+<br>
+# The debug info has a broken relocation. Check that we don't crash<br>
+# and still report the undefined symbol.<br>
+<br>
+# CHECK: error: undefined symbol: bar<br>
+<br>
+--- !ELF<br>
+FileHeader:<br>
+  Class:           ELFCLASS64<br>
+  Data:            ELFDATA2LSB<br>
+  Type:            ET_REL<br>
+  Machine:         EM_X86_64<br>
+Sections:<br>
+  - Name:            .text<br>
+    Type:            SHT_PROGBITS<br>
+    Flags:           [ SHF_ALLOC, SHF_EXECINSTR ]<br>
+    Content:         '0000000000000000'<br>
+  - Name:            .rela.text<br>
+    Type:            SHT_RELA<br>
+    Link:            .symtab<br>
+    Info:            .text<br>
+    Relocations:<br>
+      - Offset:          0x0000000000000000<br>
+        Symbol:          bar<br>
+        Type:            R_X86_64_64<br>
+  - Name:            .debug_line<br>
+    Type:            SHT_PROGBITS<br>
+    Content:         3300000002001C0000000101FB0E0D<wbr>000101010100000001000001006162<wbr>632E73000000000000090200000000<wbr>00000000140208000101<br>
+  - Name:            .rela.debug_line<br>
+    Type:            SHT_RELA<br>
+    Link:            .symtab<br>
+    Info:            .debug_line<br>
+    Relocations:<br>
+      - Offset:          0x0000000000000029<br>
+        Symbol:          bar<br>
+        Type:            R_X86_64_64<br>
+Symbols:<br>
+  Global:<br>
+    - Name:            _start<br>
+      Section:         .text<br>
+    - Name:            bar<br>
<br>
<br>
______________________________<wbr>_________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div>