[lld] 4ae1c2c - [ELF] Delete unneeded hack for discarding empty name local symbol
Fangrui Song via llvm-commits
llvm-commits at lists.llvm.org
Mon Oct 25 11:55:35 PDT 2021
Author: Fangrui Song
Date: 2021-10-25T11:55:31-07:00
New Revision: 4ae1c2c6f1b3a0085a0fb0909005e62da156e051
URL: https://github.com/llvm/llvm-project/commit/4ae1c2c6f1b3a0085a0fb0909005e62da156e051
DIFF: https://github.com/llvm/llvm-project/commit/4ae1c2c6f1b3a0085a0fb0909005e62da156e051.diff
LOG: [ELF] Delete unneeded hack for discarding empty name local symbol
This actually improves GNU ld compatibility.
Correct assemblers don't create such symbols.
Also simplify the code.
Added:
Modified:
lld/ELF/Writer.cpp
Removed:
lld/test/ELF/Inputs/discard-merge-unnamed.o
lld/test/ELF/discard-merge-unnamed.s
################################################################################
diff --git a/lld/ELF/Writer.cpp b/lld/ELF/Writer.cpp
index 3e2e9a528353e..c9b613d82547e 100644
--- a/lld/ELF/Writer.cpp
+++ b/lld/ELF/Writer.cpp
@@ -727,16 +727,11 @@ static bool shouldKeepInSymtab(const Defined &sym) {
// * --discard-locals is used.
// * The symbol is in a SHF_MERGE section, which is normally the reason for
// the assembler keeping the .L symbol.
- StringRef name = sym.getName();
- bool isLocal = name.startswith(".L") || name.empty();
- if (!isLocal)
- return true;
-
- if (config->discard == DiscardPolicy::Locals)
+ if (sym.getName().startswith(".L") &&
+ (config->discard == DiscardPolicy::Locals ||
+ (sym.section && (sym.section->flags & SHF_MERGE))))
return false;
-
- SectionBase *sec = sym.section;
- return !sec || !(sec->flags & SHF_MERGE);
+ return true;
}
static bool includeInSymtab(const Symbol &b) {
diff --git a/lld/test/ELF/Inputs/discard-merge-unnamed.o b/lld/test/ELF/Inputs/discard-merge-unnamed.o
deleted file mode 100644
index 040addf04f4ec..0000000000000
Binary files a/lld/test/ELF/Inputs/discard-merge-unnamed.o and /dev/null
diff er
diff --git a/lld/test/ELF/discard-merge-unnamed.s b/lld/test/ELF/discard-merge-unnamed.s
deleted file mode 100644
index 2bd38737081b5..0000000000000
--- a/lld/test/ELF/discard-merge-unnamed.s
+++ /dev/null
@@ -1,27 +0,0 @@
-// RUN: ld.lld %p/Inputs/discard-merge-unnamed.o -o %t2 -shared
-// RUN: llvm-readobj --symbols %t2 | FileCheck %s
-
-// Test that the unnamed symbol is SHF_MERGE is omitted.
-
-// CHECK: Symbols [
-// CHECK-NEXT: Symbol {
-// CHECK-NEXT: Name: (0)
-// CHECK-NEXT: Value: 0x0
-// CHECK-NEXT: Size: 0
-// CHECK-NEXT: Binding: Local
-// CHECK-NEXT: Type: None
-// CHECK-NEXT: Other: 0
-// CHECK-NEXT: Section: Undefined
-// CHECK-NEXT: }
-// CHECK-NEXT: Symbol {
-// CHECK-NEXT: Name: _DYNAMIC
-// CHECK-NEXT: Value:
-// CHECK-NEXT: Size: 0
-// CHECK-NEXT: Binding: Local
-// CHECK-NEXT: Type: None
-// CHECK-NEXT: Other [ (0x2)
-// CHECK-NEXT: STV_HIDDEN
-// CHECK-NEXT: ]
-// CHECK-NEXT: Section: .dynamic
-// CHECK-NEXT: }
-// CHECK-NEXT: ]
More information about the llvm-commits
mailing list