diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2015-12-11 19:09:21 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2015-12-11 19:09:21 +0000 |
commit | 2992563b9349cd9229e868ef96a25f22507a70b8 (patch) | |
tree | bcb1e8358f1b9f9ad7d56e09047f45586ba731d0 | |
parent | 5a143063237a3c9ae050f377f8f0d02192dc9b2c (diff) | |
download | bcm5719-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.cpp | 2 | ||||
-rw-r--r-- | lld/test/ELF/Inputs/discard-merge-unnamed.o | bin | 0 -> 584 bytes | |||
-rw-r--r-- | lld/test/ELF/discard-merge-unnamed.s | 16 |
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 Binary files differnew file mode 100644 index 00000000000..040addf04f4 --- /dev/null +++ b/lld/test/ELF/Inputs/discard-merge-unnamed.o 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: ] |