[lld] r320770 - Use warn() instead of error() to report a bad symbol in a DSO.

Rafael Avila de Espindola via llvm-commits llvm-commits at lists.llvm.org
Thu Dec 14 18:32:31 PST 2017


Thanks!

Rui Ueyama via llvm-commits <llvm-commits at lists.llvm.org> writes:

> Author: ruiu
> Date: Thu Dec 14 16:01:33 2017
> New Revision: 320770
>
> URL: http://llvm.org/viewvc/llvm-project?rev=320770&view=rev
> Log:
> Use warn() instead of error() to report a bad symbol in a DSO.
>
> Specifically, libwidevinecdm.so in Chrome has such bad symbol.
> It seems the BFD linker handles them as local symbols, so instead
> of inserting them to the symbol table, we should skip them too.
>
> Differential Revision: https://reviews.llvm.org/D41257
>
> Modified:
>     lld/trunk/ELF/InputFiles.cpp
>     lld/trunk/ELF/SymbolTable.cpp
>     lld/trunk/test/ELF/invalid-local-symbol-in-dso.s
>
> Modified: lld/trunk/ELF/InputFiles.cpp
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/InputFiles.cpp?rev=320770&r1=320769&r2=320770&view=diff
> ==============================================================================
> --- lld/trunk/ELF/InputFiles.cpp (original)
> +++ lld/trunk/ELF/InputFiles.cpp Thu Dec 14 16:01:33 2017
> @@ -807,6 +807,12 @@ template <class ELFT> void SharedFile<EL
>        continue;
>      }
>  
> +    if (Sym.getBinding() == STB_LOCAL) {
> +      warn("Found local symbol '" + Name +
> +           "' in global part of symbol table in file " + toString(this));
> +      continue;
> +    }
> +
>      // Ignore local symbols.
>      if (Versym && VersymIndex == VER_NDX_LOCAL)
>        continue;
>
> Modified: lld/trunk/ELF/SymbolTable.cpp
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/SymbolTable.cpp?rev=320770&r1=320769&r2=320770&view=diff
> ==============================================================================
> --- lld/trunk/ELF/SymbolTable.cpp (original)
> +++ lld/trunk/ELF/SymbolTable.cpp Thu Dec 14 16:01:33 2017
> @@ -495,11 +495,7 @@ void SymbolTable::addShared(StringRef Na
>    if (WasInserted || ((S->isUndefined() || S->isLazy()) &&
>                        S->getVisibility() == STV_DEFAULT)) {
>      uint8_t Binding = S->Binding;
> -    uint8_t OrigBinding = Sym.getBinding();
> -    if (OrigBinding == STB_LOCAL)
> -      error("Found local symbol '" + Name +
> -            "' in global part of symbol table in file " + toString(File));
> -    replaceSymbol<SharedSymbol>(S, File, Name, OrigBinding, Sym.st_other,
> +    replaceSymbol<SharedSymbol>(S, File, Name, Sym.getBinding(), Sym.st_other,
>                                  Sym.getType(), Sym.st_value, Sym.st_size,
>                                  Alignment, VerdefIndex);
>      if (!WasInserted) {
>
> Modified: lld/trunk/test/ELF/invalid-local-symbol-in-dso.s
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/invalid-local-symbol-in-dso.s?rev=320770&r1=320769&r2=320770&view=diff
> ==============================================================================
> --- lld/trunk/test/ELF/invalid-local-symbol-in-dso.s (original)
> +++ lld/trunk/test/ELF/invalid-local-symbol-in-dso.s Thu Dec 14 16:01:33 2017
> @@ -1,5 +1,14 @@
> -# RUN: llvm-mc %s -o %t.o -filetype=obj -triple x86_64-pc-linux
> +# REQUIRES: x86
>  
>  # We used to crash on this
> -# RUN: not ld.lld %t.o %p/Inputs/local-symbol-in-dso.so -o %t 2>&1 | FileCheck %s
> -# CHECK: Found local symbol 'foo' in global part of symbol table in file {{.*}}local-symbol-in-dso.so
> +# RUN: echo | llvm-mc - -o %t1.o -filetype=obj -triple x86_64-pc-linux
> +# RUN: ld.lld %t1.o %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: llvm-mc %s -o %t2.o -filetype=obj -triple x86_64-pc-linux
> +# RUN: not ld.lld %t2.o %p/Inputs/local-symbol-in-dso.so -o %t
> +
> +.globl main
> +main:
> +  movq foo at GOTTPOFF(%rip), %rax
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits


More information about the llvm-commits mailing list