Index: ELF/Driver.cpp =================================================================== --- ELF/Driver.cpp +++ ELF/Driver.cpp @@ -681,7 +681,12 @@ template static void readCallGraphsFromObjectFiles() { auto FindSection = [&](const Symbol *Sym) -> const InputSectionBase * { - warnUnorderableSymbol(Sym); + // When linking a shared object, we may not link all object files and some + // symbols are left undefined. Don't warn on undefined symbols by relying on + // --shared implying UnresolvedPolicy::Ignore. + if (!Sym->isUndefined() || + Config->UnresolvedSymbols != UnresolvedPolicy::Ignore) + warnUnorderableSymbol(Sym); if (const auto *SymD = dyn_cast(Sym)) return dyn_cast_or_null(SymD->Section); return nullptr; Index: test/ELF/cgprofile-shared-warn.s =================================================================== --- /dev/null +++ test/ELF/cgprofile-shared-warn.s @@ -0,0 +1,11 @@ +# REQUIRES: x86 + +# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t.o +# RUN: ld.lld --shared %t.o -o /dev/null 2>&1 | count 0 +# RUN: ld.lld -e A --unresolved-symbols=ignore-all %t.o -o /dev/null 2>&1 | count 0 + .section .text.A,"ax",@progbits + .globl A +A: + callq B + + .cg_profile A, B, 10