[lld] r262076 - Report duplicated symbols in bitcode.
Rui Ueyama via llvm-commits
llvm-commits at lists.llvm.org
Fri Feb 26 14:19:15 PST 2016
Thank you for doing this. This is a nice change as it eliminated a use of
template.
On Fri, Feb 26, 2016 at 1:49 PM, Rafael Espindola via llvm-commits <
llvm-commits at lists.llvm.org> wrote:
> Author: rafael
> Date: Fri Feb 26 15:49:38 2016
> New Revision: 262076
>
> URL: http://llvm.org/viewvc/llvm-project?rev=262076&view=rev
> Log:
> Report duplicated symbols in bitcode.
>
> Added:
> lld/trunk/test/ELF/lto/duplicated.ll
> Modified:
> lld/trunk/ELF/SymbolTable.cpp
> lld/trunk/ELF/SymbolTable.h
> lld/trunk/ELF/Writer.cpp
>
> Modified: lld/trunk/ELF/SymbolTable.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/SymbolTable.cpp?rev=262076&r1=262075&r2=262076&view=diff
>
> ==============================================================================
> --- lld/trunk/ELF/SymbolTable.cpp (original)
> +++ lld/trunk/ELF/SymbolTable.cpp Fri Feb 26 15:49:38 2016
> @@ -217,18 +217,22 @@ template <class ELFT> void SymbolTable<E
>
> // Returns a file from which symbol B was created.
> // If B does not belong to any file, returns a nullptr.
> -template <class ELFT>
> -ELFFileBase<ELFT> *SymbolTable<ELFT>::findFile(SymbolBody *B) {
> +template <class ELFT> InputFile *SymbolTable<ELFT>::findFile(SymbolBody
> *B) {
> for (const std::unique_ptr<ObjectFile<ELFT>> &F : ObjectFiles) {
> ArrayRef<SymbolBody *> Syms = F->getSymbols();
> if (std::find(Syms.begin(), Syms.end(), B) != Syms.end())
> return F.get();
> }
> + for (const std::unique_ptr<BitcodeFile> &F : BitcodeFiles) {
> + ArrayRef<SymbolBody *> Syms = F->getSymbols();
> + if (std::find(Syms.begin(), Syms.end(), B) != Syms.end())
> + return F.get();
> + }
> return nullptr;
> }
>
> // Returns "(internal)", "foo.a(bar.o)" or "baz.o".
> -template <class ELFT> static std::string getFilename(ELFFileBase<ELFT>
> *F) {
> +static std::string getFilename(InputFile *F) {
> if (!F)
> return "(internal)";
> if (!F->ArchiveName.empty())
> @@ -240,8 +244,8 @@ template <class ELFT> static std::string
> // Used to construct an error message.
> template <class ELFT>
> std::string SymbolTable<ELFT>::conflictMsg(SymbolBody *Old, SymbolBody
> *New) {
> - ELFFileBase<ELFT> *F1 = findFile(Old);
> - ELFFileBase<ELFT> *F2 = findFile(New);
> + InputFile *F1 = findFile(Old);
> + InputFile *F2 = findFile(New);
> StringRef Sym = Old->getName();
> return demangle(Sym) + " in " + getFilename(F1) + " and " +
> getFilename(F2);
> }
>
> Modified: lld/trunk/ELF/SymbolTable.h
> URL:
> http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/SymbolTable.h?rev=262076&r1=262075&r2=262076&view=diff
>
> ==============================================================================
> --- lld/trunk/ELF/SymbolTable.h (original)
> +++ lld/trunk/ELF/SymbolTable.h Fri Feb 26 15:49:38 2016
> @@ -64,7 +64,7 @@ public:
> void scanShlibUndefined();
> SymbolBody *find(StringRef Name);
> void wrap(StringRef Name);
> - ELFFileBase<ELFT> *findFile(SymbolBody *B);
> + InputFile *findFile(SymbolBody *B);
>
> private:
> Symbol *insert(SymbolBody *New);
>
> Modified: lld/trunk/ELF/Writer.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Writer.cpp?rev=262076&r1=262075&r2=262076&view=diff
>
> ==============================================================================
> --- lld/trunk/ELF/Writer.cpp (original)
> +++ lld/trunk/ELF/Writer.cpp Fri Feb 26 15:49:38 2016
> @@ -517,7 +517,7 @@ static void reportUndefined(SymbolTable<
> return;
>
> std::string Msg = "undefined symbol: " + Sym->getName().str();
> - if (ELFFileBase<ELFT> *File = Symtab.findFile(Sym))
> + if (InputFile *File = Symtab.findFile(Sym))
> Msg += " in " + File->getName().str();
> if (Config->NoInhibitExec)
> warning(Msg);
>
> Added: lld/trunk/test/ELF/lto/duplicated.ll
> URL:
> http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/lto/duplicated.ll?rev=262076&view=auto
>
> ==============================================================================
> --- lld/trunk/test/ELF/lto/duplicated.ll (added)
> +++ lld/trunk/test/ELF/lto/duplicated.ll Fri Feb 26 15:49:38 2016
> @@ -0,0 +1,10 @@
> +; REQUIRES: x86
> +; RUN: llvm-as %s -o %t.o
> +; RUN: not ld.lld -m elf_x86_64 %t.o %t.o -o %t.so -shared 2>&1 |
> FileCheck %s
> +; CHECK: duplicate symbol: f in {{.*}}.o and {{.*}}.o
> +target triple = "x86_64-unknown-linux-gnu"
> +target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
> +
> +define void @f() {
> + ret void
> +}
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160226/c7ab1f87/attachment.html>
More information about the llvm-commits
mailing list