Index: ELF/Driver.cpp =================================================================== --- ELF/Driver.cpp +++ ELF/Driver.cpp @@ -1153,12 +1153,19 @@ DenseSet Libs = getExcludeLibs(Args); bool All = Libs.count("ALL"); - for (InputFile *File : ObjectFiles) + auto markSymbolsInFile = [&](InputFile *File) { if (!File->ArchiveName.empty()) if (All || Libs.count(path::filename(File->ArchiveName))) for (Symbol *Sym : File->getSymbols()) if (!Sym->isLocal() && Sym->File == File) Sym->VersionId = VER_NDX_LOCAL; + }; + + for (InputFile *File : ObjectFiles) + markSymbolsInFile(File); + + for (BitcodeFile *File : BitcodeFiles) + markSymbolsInFile(File); } // Force Sym to be entered in the output. Used for -u or equivalent. Index: test/ELF/Inputs/exclude-libs.ll =================================================================== --- test/ELF/Inputs/exclude-libs.ll +++ test/ELF/Inputs/exclude-libs.ll @@ -0,0 +1,3 @@ +@fn2 = global void()* null; + +target triple = "x86_64-unknown-linux" Index: test/ELF/exclude-libs.s =================================================================== --- test/ELF/exclude-libs.s +++ test/ELF/exclude-libs.s @@ -3,9 +3,10 @@ // RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t.o // RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux \ // RUN: %p/Inputs/exclude-libs.s -o %t2.o +// RUN: llvm-as --data-layout=elf %p/Inputs/exclude-libs.ll -o %t3.o // RUN: mkdir -p %t.dir // RUN: rm -f %t.dir/exc.a -// RUN: llvm-ar rcs %t.dir/exc.a %t2.o +// RUN: llvm-ar rcs %t.dir/exc.a %t2.o %t3.o // RUN: ld.lld -shared %t.o %t.dir/exc.a -o %t.exe // RUN: llvm-readobj -dyn-symbols %t.exe | FileCheck --check-prefix=DEFAULT %s @@ -22,7 +23,7 @@ // RUN: ld.lld -shared %t.o %t.dir/exc.a -o %t.exe --exclude-libs=ALL // RUN: llvm-readobj -dyn-symbols %t.exe | FileCheck --check-prefix=EXCLUDE %s -// RUN: ld.lld -shared %t.o %t2.o %t.dir/exc.a -o %t.exe --exclude-libs=ALL +// RUN: ld.lld -shared %t.o %t2.o %t3.o %t.dir/exc.a -o %t.exe --exclude-libs=ALL // RUN: llvm-readobj -dyn-symbols %t.exe | FileCheck --check-prefix=DEFAULT %s // RUN: ld.lld -shared --whole-archive %t.o %t.dir/exc.a -o %t.exe --exclude-libs foo,bar,exc.a @@ -32,10 +33,13 @@ // RUN: llvm-readobj -dyn-symbols %t.exe | FileCheck --check-prefix=EXCLUDE %s // DEFAULT: Name: fn +// DEFAULT: Name: fn2 // DEFAULT: Name: foo // EXCLUDE-NOT: Name: fn +// EXCLUDE-NOT: Name: fn2 // EXCLUDE: Name: foo -.globl fn, foo +.globl fn, fn2, foo foo: call fn@PLT + call fn2@PLT