Skip to content

Commit a2b5020

Browse files
MaskRaytstellar
authored andcommitted
[ELF] ICF: replace includeInDynsym with isExported
Similar to the change to MarkLive.cpp when isExported was introduced. includeInDynsym might return true even when isExported is false for statically linked executables. (cherry picked from commit 45f538e)
1 parent 9429165 commit a2b5020

File tree

2 files changed

+7
-4
lines changed

2 files changed

+7
-4
lines changed

lld/ELF/Driver.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2434,7 +2434,7 @@ static void findKeepUniqueSections(Ctx &ctx, opt::InputArgList &args) {
24342434
// or DSOs, so we conservatively mark them as address-significant.
24352435
bool icfSafe = ctx.arg.icf == ICFLevel::Safe;
24362436
for (Symbol *sym : ctx.symtab->getSymbols())
2437-
if (sym->includeInDynsym(ctx))
2437+
if (sym->isExported)
24382438
markAddrsig(icfSafe, sym);
24392439

24402440
// Visit the address-significance table in each object file and mark each

lld/test/ELF/icf-safe.s

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,19 @@
11
# REQUIRES: x86
2+
# RUN: llvm-mc -filetype=obj -triple=x86_64 %S/Inputs/shared.s -o %ta.o
3+
# RUN: ld.lld -shared -soname=ta %ta.o -o %ta.so
24

35
# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t1.o
46
# RUN: llvm-objcopy %t1.o %t1copy.o
57
# RUN: llvm-objcopy --localize-symbol=h1 %t1.o %t1changed.o
68
# RUN: ld.lld -r %t1.o -o %t1reloc.o
79
# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %S/Inputs/icf-safe.s -o %t2.o
8-
# RUN: ld.lld %t1.o %t2.o -o %t2 --icf=safe --print-icf-sections | FileCheck %s
10+
# RUN: ld.lld %t1.o %t2.o -o %t2 --icf=safe --print-icf-sections --export-dynamic | FileCheck %s
911
# RUN: ld.lld %t1copy.o %t2.o -o %t2 --icf=safe --print-icf-sections | FileCheck %s
1012
# RUN: ld.lld %t1.o %t2.o -o %t3 --icf=safe --print-icf-sections -shared | FileCheck --check-prefix=EXPORT %s
11-
# RUN: ld.lld %t1.o %t2.o -o %t3 --icf=safe --print-icf-sections --export-dynamic | FileCheck --check-prefix=EXPORT %s
13+
## Exported symbols are suppressed for ICF when dynamic linking is enabled.
14+
# RUN: ld.lld %t1.o %t2.o %ta.so -o %t3 --icf=safe --print-icf-sections --export-dynamic | FileCheck --check-prefix=EXPORT %s
1215
# RUN: ld.lld %t1.o %t2.o -o %t2 --icf=all --print-icf-sections | FileCheck --check-prefix=ALL %s
13-
# RUN: ld.lld %t1.o %t2.o -o %t2 --icf=all --print-icf-sections --export-dynamic | FileCheck --check-prefix=ALL-EXPORT %s
16+
# RUN: ld.lld %t1.o %t2.o %ta.so -o %t2 --icf=all --print-icf-sections --export-dynamic | FileCheck --check-prefix=ALL-EXPORT %s
1417
# RUN: ld.lld %t1changed.o -o %t4 --icf=safe 2>&1 | FileCheck --check-prefix=SH_LINK_0 %s
1518
# RUN: ld.lld %t1reloc.o -o %t4 --icf=safe 2>&1 | FileCheck --check-prefix=SH_LINK_0 %s
1619

0 commit comments

Comments
 (0)