[PATCH] D72567: [ELF] Avoid false-positive assert in getErrPlace()

Alexander Richardson via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Jan 13 01:48:46 PST 2020


arichardson updated this revision to Diff 237595.
arichardson added a comment.

Remove unncessary changes.

I originally made those because I though I could avoid an additional input file, but it appears that the .bss section is only iterated over later. Depending on this order is fragile anyway so adding another file first is better.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D72567/new/

https://reviews.llvm.org/D72567

Files:
  lld/ELF/Target.cpp
  lld/test/ELF/mips-jalr-non-functions.s


Index: lld/test/ELF/mips-jalr-non-functions.s
===================================================================
--- lld/test/ELF/mips-jalr-non-functions.s
+++ lld/test/ELF/mips-jalr-non-functions.s
@@ -6,7 +6,12 @@
 ## relocations to avoid generating binaries that crash when executed.
 
 # RUN: llvm-mc -filetype=obj -triple=mips64-unknown-linux %s -o %t.o
-# RUN: ld.lld -shared %t.o -o %t.so 2>&1 | FileCheck %s -check-prefix WARNING-MESSAGE
+## Link in another object file with a .bss as a regression test:
+## Previously getErrPlace() would assert when skipping over .bss sections.
+## By adding another file with a .bss section before the actual %t.o we can
+## reproduce this case.
+# RUN: llvm-mc -filetype=obj -triple=mips64-unknown-linux %S/Inputs/common.s -o %t-common.o
+# RUN: ld.lld -shared %t-common.o %t.o -o %t.so 2>&1 | FileCheck %s -check-prefix WARNING-MESSAGE
 # RUN: llvm-objdump --no-show-raw-insn --no-leading-addr -d %t.so | FileCheck %s
 
 .set	noreorder
Index: lld/ELF/Target.cpp
===================================================================
--- lld/ELF/Target.cpp
+++ lld/ELF/Target.cpp
@@ -103,7 +103,8 @@
             ? (Out::bufferStart + isec->getParent()->offset + isec->outSecOff)
             : isec->data().data();
     if (isecLoc == nullptr) {
-      assert(isa<SyntheticSection>(isec) && "No data but not synthetic?");
+      assert((isa<SyntheticSection>(isec) || (isec->type & SHT_NOBITS)) &&
+             "No data but not synthetic and not SHT_NOBITS?");
       continue;
     }
     if (isecLoc <= loc && loc < isecLoc + isec->getSize())


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D72567.237595.patch
Type: text/x-patch
Size: 1590 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200113/251cd96b/attachment.bin>


More information about the llvm-commits mailing list