summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2015-12-11 19:09:21 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2015-12-11 19:09:21 +0000
commit2992563b9349cd9229e868ef96a25f22507a70b8 (patch)
treebcb1e8358f1b9f9ad7d56e09047f45586ba731d0
parent5a143063237a3c9ae050f377f8f0d02192dc9b2c (diff)
downloadbcm5719-llvm-2992563b9349cd9229e868ef96a25f22507a70b8.tar.gz
bcm5719-llvm-2992563b9349cd9229e868ef96a25f22507a70b8.zip
Treat unnamed symbols as locals.
There is work under way in llvm to avoid creating unnecessary names for symbols. This makes lld capable of handling that. llvm-svn: 255357
-rw-r--r--lld/ELF/OutputSections.cpp2
-rw-r--r--lld/test/ELF/Inputs/discard-merge-unnamed.obin0 -> 584 bytes
-rw-r--r--lld/test/ELF/discard-merge-unnamed.s16
3 files changed, 17 insertions, 1 deletions
diff --git a/lld/ELF/OutputSections.cpp b/lld/ELF/OutputSections.cpp
index ab7e337deb4..c64610fe80b 100644
--- a/lld/ELF/OutputSections.cpp
+++ b/lld/ELF/OutputSections.cpp
@@ -1181,7 +1181,7 @@ bool lld::elf2::shouldKeepInSymtab(const ObjectFile<ELFT> &File,
// * --discard-locals is used.
// * The symbol is in a SHF_MERGE section, which is normally the reason for
// the assembler keeping the .L symbol.
- if (!SymName.startswith(".L"))
+ if (!SymName.startswith(".L") && !SymName.empty())
return true;
if (Config->DiscardLocals)
diff --git a/lld/test/ELF/Inputs/discard-merge-unnamed.o b/lld/test/ELF/Inputs/discard-merge-unnamed.o
new file mode 100644
index 00000000000..040addf04f4
--- /dev/null
+++ b/lld/test/ELF/Inputs/discard-merge-unnamed.o
Binary files differ
diff --git a/lld/test/ELF/discard-merge-unnamed.s b/lld/test/ELF/discard-merge-unnamed.s
new file mode 100644
index 00000000000..bd0058cbd7d
--- /dev/null
+++ b/lld/test/ELF/discard-merge-unnamed.s
@@ -0,0 +1,16 @@
+// RUN: ld.lld %p/Inputs/discard-merge-unnamed.o -o %t2 -shared
+// RUN: llvm-readobj -t %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: ]
OpenPOWER on IntegriCloud