diff --git a/lld/ELF/InputFiles.cpp b/lld/ELF/InputFiles.cpp --- a/lld/ELF/InputFiles.cpp +++ b/lld/ELF/InputFiles.cpp @@ -1484,7 +1484,7 @@ // symbol, that's a violation of the spec. StringRef name = CHECK(sym.getName(stringTable), this); if (sym.getBinding() == STB_LOCAL) { - errorOrWarn(toString(this) + ": invalid local symbol '" + name + + warn(toString(this) + ": invalid local symbol '" + name + "' in global part of symbol table"); continue; } diff --git a/lld/test/ELF/invalid-local-symbol-in-dso.s b/lld/test/ELF/invalid-local-symbol-in-dso.s --- a/lld/test/ELF/invalid-local-symbol-in-dso.s +++ b/lld/test/ELF/invalid-local-symbol-in-dso.s @@ -1,8 +1,8 @@ # REQUIRES: x86 # We used to crash on this -# 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: ld.lld %p/Inputs/local-symbol-in-dso.so -o /dev/null 2>&1 | FileCheck %s +# CHECK: warning: {{.*}}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 diff --git a/lld/test/ELF/invalid/undefined-local-symbol-in-dso.test b/lld/test/ELF/invalid/undefined-local-symbol-in-dso.test --- a/lld/test/ELF/invalid/undefined-local-symbol-in-dso.test +++ b/lld/test/ELF/invalid/undefined-local-symbol-in-dso.test @@ -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 error on such +# STB_LOCAL is a nonsensical combination. Nevertheless, we should warn on such # input files instead of crashing. # RUN: yaml2obj %s -o %t.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 +# RUN: ld.lld %t.so -o /dev/null 2>&1 | FileCheck %s +# CHECK: warning: {{.*}}.so: invalid local symbol 'foo' in global part of symbol table --- !ELF FileHeader: