[ELF] Replace error() with errorOrWarn() for the ASSERT command
authorFangrui Song <maskray@google.com>
Fri, 6 Sep 2019 16:30:22 +0000 (16:30 +0000)
committerFangrui Song <maskray@google.com>
Fri, 6 Sep 2019 16:30:22 +0000 (16:30 +0000)
Summary:
ld.bfd produces an output with --noinhibit-exec when an ASSERT fails.
Use errorOrWarn() so that we can produce an output as well.

An interesting case is that symbol assignments may execute multiple
times, so we probably want to suppress errors for non-final runs.

Reviewed By: peter.smith

Differential Revision: https://reviews.llvm.org/D67285

llvm-svn: 371225

lld/ELF/ScriptParser.cpp
lld/test/ELF/linkerscript/assert.s

index 40c993d..9ada28c 100644 (file)
@@ -720,7 +720,7 @@ Expr ScriptParser::readAssert() {
 
   return [=] {
     if (!e().getValue())
-      error(msg);
+      errorOrWarn(msg);
     return script->getDot();
   };
 }
index f7113e5..b1ca86e 100644 (file)
@@ -6,8 +6,8 @@
 # RUN: llvm-readobj %t1 > /dev/null
 
 # RUN: echo "SECTIONS { ASSERT(0, fail) }" > %t3.script
-# RUN: not ld.lld -shared -o /dev/null --script %t3.script %t1.o > %t.log 2>&1
-# RUN: FileCheck %s -check-prefix=FAIL < %t.log
+# RUN: not ld.lld -o /dev/null -T %t3.script %t1.o 2>&1 | FileCheck --check-prefix=FAIL %s
+# RUN: ld.lld -o /dev/null -T %t3.script %t1.o --noinhibit-exec 2>&1 | FileCheck --check-prefix=FAIL %s
 # FAIL: fail
 
 # RUN: echo "SECTIONS { . = ASSERT(0x1000, fail); }" > %t4.script