[ELF] Change a DSO warning to errorOrWarn
authorFangrui Song <i@maskray.me>
Mon, 5 Sep 2022 00:43:39 +0000 (17:43 -0700)
committerFangrui Song <i@maskray.me>
Mon, 5 Sep 2022 00:43:39 +0000 (17:43 -0700)
lld/ELF/InputFiles.cpp
lld/test/ELF/invalid-local-symbol-in-dso.s
lld/test/ELF/invalid/undefined-local-symbol-in-dso.test

index 4c9846d..fbfda40 100644 (file)
@@ -1456,8 +1456,8 @@ template <class ELFT> void SharedFile::parse() {
     // symbol, that's a violation of the spec.
     StringRef name = CHECK(sym.getName(stringTable), this);
     if (sym.getBinding() == STB_LOCAL) {
-      warn("found local symbol '" + name +
-           "' in global part of symbol table in file " + toString(this));
+      errorOrWarn(toString(this) + ": invalid local symbol '" + name +
+                  "' in global part of symbol table");
       continue;
     }
 
index 4278460..4acd709 100644 (file)
@@ -1,9 +1,8 @@
 # REQUIRES: x86
 
 # We used to crash on this
-# RUN: ld.lld %p/Inputs/local-symbol-in-dso.so -o %t 2>&1 | \
-# RUN:   FileCheck -check-prefix=WARN %s
-# WARN: found local symbol 'foo' in global part of symbol table in file {{.*}}local-symbol-in-dso.so
+# RUN: not ld.lld %p/Inputs/local-symbol-in-dso.so -o /dev/null 2>&1 | FileCheck %s
+# CHECK: error: {{.*}}local-symbol-in-dso.so: invalid local symbol 'foo' in global part of symbol table
 
 # RUN: llvm-mc %s -o %t.o -filetype=obj -triple x86_64-pc-linux
 # RUN: not ld.lld %t.o %p/Inputs/local-symbol-in-dso.so -o /dev/null
index edd5fa1..d26aa8d 100644 (file)
@@ -5,12 +5,12 @@
 # symbol with an index >= the sh_info of the dynamic symbol table section). Such
 # a DSO is very broken, because local symbols should precede all global symbols
 # in the symbol table, and because having a symbol that's both undefined and
-# STB_LOCAL is a nonsensical combination. Nevertheless, we should warn on such
+# STB_LOCAL is a nonsensical combination. Nevertheless, we should error on such
 # input files instead of crashing.
 
 # RUN: yaml2obj %s -o %t.so
-# RUN: ld.lld %t.so -o %t 2>&1 | FileCheck -check-prefix=WARN %s
-# WARN: found local symbol 'foo' in global part of symbol table in file {{.*}}.so
+# RUN: not ld.lld %t.so -o /dev/null 2>&1 | FileCheck %s
+# CHECK: error: {{.*}}.so: invalid local symbol 'foo' in global part of symbol table
 
 --- !ELF
 FileHeader: