[lld] r180872 - [lld][ELF] reduce the number of symbols emitted in the symbol table
Shankar Easwaran
shankare at codeaurora.org
Wed May 1 12:36:38 PDT 2013
Author: shankare
Date: Wed May 1 14:36:38 2013
New Revision: 180872
URL: http://llvm.org/viewvc/llvm-project?rev=180872&view=rev
Log:
[lld][ELF] reduce the number of symbols emitted in the symbol table
Modified:
lld/trunk/lib/ReaderWriter/ELF/File.h
lld/trunk/lib/ReaderWriter/ELF/SectionChunks.h
lld/trunk/test/elf/Hexagon/dynlib-gotoff.test
lld/trunk/test/elf/X86_64/multi-weak-override.test
lld/trunk/test/elf/X86_64/multi-weak-syms-order.test
lld/trunk/test/elf/X86_64/weak-override.test
lld/trunk/test/elf/X86_64/weak-zero-sized.test
lld/trunk/test/elf/mergeconstants.objtxt
lld/trunk/test/elf/reloc.objtxt
Modified: lld/trunk/lib/ReaderWriter/ELF/File.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/File.h?rev=180872&r1=180871&r2=180872&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/File.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/File.h Wed May 1 14:36:38 2013
@@ -336,9 +336,8 @@ public:
sym->st_size = 0;
ArrayRef<uint8_t> content((const uint8_t *)sectionContents.data(),
sectionContents.size());
- auto newAtom = new (_readerStorage)
- ELFDefinedAtom<ELFT>(*this, sectionName, sectionName, sym, i.first,
- content, 0, 0, _references);
+ auto newAtom = new (_readerStorage) ELFDefinedAtom<ELFT>(
+ *this, "", sectionName, sym, i.first, content, 0, 0, _references);
newAtom->setOrdinal(++ordinal);
_definedAtoms._atoms.push_back(newAtom);
continue;
@@ -353,9 +352,10 @@ public:
// i.first is the section the symbol lives in
for (auto si = symbols.begin(), se = symbols.end(); si != se; ++si) {
- StringRef symbolName;
- if ((EC = _objFile->getSymbolName(i.first, *si, symbolName)))
- return;
+ StringRef symbolName = "";
+ if ((*si)->getType() != llvm::ELF::STT_SECTION)
+ if ((EC = _objFile->getSymbolName(i.first, *si, symbolName)))
+ return;
const Elf_Shdr *section = _objFile->getSection(*si);
Modified: lld/trunk/lib/ReaderWriter/ELF/SectionChunks.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/SectionChunks.h?rev=180872&r1=180871&r2=180872&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/SectionChunks.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/SectionChunks.h Wed May 1 14:36:38 2013
@@ -775,6 +775,10 @@ template <class ELFT>
void SymbolTable<ELFT>::addSymbol(const Atom *atom, int32_t sectionIndex,
uint64_t addr, const AtomLayout *atomLayout) {
Elf_Sym symbol;
+
+ if (atom->name().empty())
+ return;
+
symbol.st_name = _stringSection->addString(atom->name());
symbol.st_size = 0;
symbol.st_shndx = sectionIndex;
Modified: lld/trunk/test/elf/Hexagon/dynlib-gotoff.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/Hexagon/dynlib-gotoff.test?rev=180872&r1=180871&r2=180872&view=diff
==============================================================================
--- lld/trunk/test/elf/Hexagon/dynlib-gotoff.test (original)
+++ lld/trunk/test/elf/Hexagon/dynlib-gotoff.test Wed May 1 14:36:38 2013
@@ -67,7 +67,7 @@ CHECKGOTPLT: target: fn2
CHECKGOTPLT: - kind: R_HEX_32
CHECKGOTPLT: offset: 0
target: .PLT0
-CHECKGOTPLT: - name: .text
+CHECKGOTPLT: - ref-name: {{[0-9A-Z]+}}
CHECKGOTPLT: alignment: 2^2
CHECKGOTPLT: section-name: .text
CHECKGOTPLT: references:
@@ -105,18 +105,18 @@ CHECKGOTPLT: target: _GL
CHECKGOTPLT: addend: 4
CHECKGOTPLT: - kind: R_HEX_B32_PCREL_X
CHECKGOTPLT: offset: 16
-CHECKGOTPLT: target: .sbss.4
+CHECKGOTPLT: target: [[SBSS:[-a-zA-Z0-9_]+]]
CHECKGOTPLT: - kind: R_HEX_6_PCREL_X
CHECKGOTPLT: offset: 20
-CHECKGOTPLT: target: .sbss.4
+CHECKGOTPLT: target: [[SBSS]]
CHECKGOTPLT: addend: 4
CHECKGOTPLT: - kind: R_HEX_B32_PCREL_X
CHECKGOTPLT: offset: 28
-CHECKGOTPLT: target: .sbss.4
+CHECKGOTPLT: target: [[SBSS]]
CHECKGOTPLT: addend: 4
CHECKGOTPLT: - kind: R_HEX_6_PCREL_X
CHECKGOTPLT: offset: 32
-CHECKGOTPLT: target: .sbss.4
+CHECKGOTPLT: target: [[SBSS]]
CHECKGOTPLT: addend: 8
CHECKGOTPLT: - kind: R_HEX_GOT_32_6_X
CHECKGOTPLT: offset: 40
Modified: lld/trunk/test/elf/X86_64/multi-weak-override.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/X86_64/multi-weak-override.test?rev=180872&r1=180871&r2=180872&view=diff
==============================================================================
--- lld/trunk/test/elf/X86_64/multi-weak-override.test (original)
+++ lld/trunk/test/elf/X86_64/multi-weak-override.test Wed May 1 14:36:38 2013
@@ -9,8 +9,8 @@ RUN: FileCheck -check-prefix=WEAKATOMSOR
WEAKORDER: 0040020c T f
WEAKORDER: 0040021c T g
-WEAKATOMSORDER: - ref-name: L002
-WEAKATOMSORDER: - ref-name: L003
+WEAKATOMSORDER: - ref-name: {{[A-Z0-9]+}}
+WEAKATOMSORDER: - ref-name: {{[A-Z0-9]+}}
WEAKATOMSORDER: - name: f
WEAKATOMSORDER: - name: g
Modified: lld/trunk/test/elf/X86_64/multi-weak-syms-order.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/X86_64/multi-weak-syms-order.test?rev=180872&r1=180871&r2=180872&view=diff
==============================================================================
--- lld/trunk/test/elf/X86_64/multi-weak-syms-order.test (original)
+++ lld/trunk/test/elf/X86_64/multi-weak-syms-order.test Wed May 1 14:36:38 2013
@@ -5,15 +5,13 @@ RUN: lld -flavor gnu -target x86_64 %p/I
RUN: FileCheck -check-prefix=WEAKATOMSORDER %s < %t2
WEAKORDER: 004001b0 T fn
-WEAKORDER: 004001bb T .text
WEAKORDER: 004001bb T f
-WEAKORDER: 004001cb T .text
WEAKORDER: 004001cb T g
WEAKORDER: 004001db T main
WEAKATOMSORDER: - name: f
-WEAKATOMSORDER: - ref-name: L004
+WEAKATOMSORDER: - ref-name: {{[A-Z0-9]+}}
WEAKATOMSORDER: - name: g
-WEAKATOMSORDER: - ref-name: L005
+WEAKATOMSORDER: - ref-name: {{[A-Z0-9]+}}
Modified: lld/trunk/test/elf/X86_64/weak-override.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/X86_64/weak-override.test?rev=180872&r1=180871&r2=180872&view=diff
==============================================================================
--- lld/trunk/test/elf/X86_64/weak-override.test (original)
+++ lld/trunk/test/elf/X86_64/weak-override.test Wed May 1 14:36:38 2013
@@ -8,7 +8,6 @@ RUN: FileCheck -check-prefix=WEAKATOMSOR
WEAKORDER: 004001ec T f
-WEAKATOMSORDER: - name: .text
WEAKATOMSORDER: references:
WEAKATOMSORDER: - kind: layout-after
WEAKATOMSORDER: offset: 0
@@ -17,8 +16,8 @@ WEAKATOMSORDER: - name: fn
WEAKATOMSORDER: references:
WEAKATOMSORDER: - kind: layout-after
WEAKATOMSORDER: offset: 0
-WEAKATOMSORDER: target: L001
-WEAKATOMSORDER: - ref-name: L001
+WEAKATOMSORDER: target: [[CONSTSTRA:[-a-zA-Z0-9_]+]]
+WEAKATOMSORDER: - ref-name: [[CONSTSTRA]]
WEAKATOMSORDER: scope: global
WEAKATOMSORDER: content: [ 55, 48, 89, E5, BF, 00, 00, 00, 00, E8, 00, 00,
WEAKATOMSORDER: 00, 00, 5D, C3 ]
@@ -40,8 +39,8 @@ WEAKATOMSORDER: target:
WEAKATOMSORDER: addend: -4
WEAKATOMSORDER: - kind: layout-before
WEAKATOMSORDER: offset: 0
-WEAKATOMSORDER: target: L001
-WEAKATOMSORDER: - name: .text
+WEAKATOMSORDER: target: [[CONSTSTRA]]
+WEAKATOMSORDER: - ref-name: {{[0-9A-Z]+}}
WEAKATOMSORDER: section-name: .text
WEAKATOMSORDER: references:
WEAKATOMSORDER: - kind: layout-after
Modified: lld/trunk/test/elf/X86_64/weak-zero-sized.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/X86_64/weak-zero-sized.test?rev=180872&r1=180871&r2=180872&view=diff
==============================================================================
--- lld/trunk/test/elf/X86_64/weak-zero-sized.test (original)
+++ lld/trunk/test/elf/X86_64/weak-zero-sized.test Wed May 1 14:36:38 2013
@@ -8,12 +8,12 @@ RUN: FileCheck -check-prefix=WEAKATOMSOR
WEAKORDER: 004001a4 T _start
-WEAKATOMSORDER: - name: .text
+WEAKATOMSORDER: - ref-name: [[TARGETA:[-a-zA-Z0-9_]+]]
WEAKATOMSORDER: alignment: 2^2
WEAKATOMSORDER: section-name: .text
WEAKATOMSORDER: - kind: layout-after
WEAKATOMSORDER: offset: 0
-WEAKATOMSORDER: target: L001
+WEAKATOMSORDER: target: [[TARGETB:[-a-zA-Z0-9_]+]]
WEAKATOMSORDER: - name: _start
WEAKATOMSORDER: scope: global
WEAKATOMSORDER: merge: as-weak
@@ -22,8 +22,8 @@ WEAKATOMSORDER: section-name: .tex
WEAKATOMSORDER: references:
WEAKATOMSORDER: - kind: layout-after
WEAKATOMSORDER: offset: 0
-WEAKATOMSORDER: target: L001
-WEAKATOMSORDER: - ref-name: L001
+WEAKATOMSORDER: target: [[TARGETB]]
+WEAKATOMSORDER: - ref-name: [[TARGETB]]
WEAKATOMSORDER: scope: global
WEAKATOMSORDER: content: [ C3 ]
WEAKATOMSORDER: alignment: 2^2
@@ -31,4 +31,4 @@ WEAKATOMSORDER: section-name: .tex
WEAKATOMSORDER: references:
WEAKATOMSORDER: - kind: layout-before
WEAKATOMSORDER: offset: 0
-WEAKATOMSORDER: target: .text
+WEAKATOMSORDER: target: [[TARGETA]]
Modified: lld/trunk/test/elf/mergeconstants.objtxt
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/mergeconstants.objtxt?rev=180872&r1=180871&r2=180872&view=diff
==============================================================================
--- lld/trunk/test/elf/mergeconstants.objtxt (original)
+++ lld/trunk/test/elf/mergeconstants.objtxt Wed May 1 14:36:38 2013
@@ -1,5 +1,12 @@
+# The test checks for mergeable strings that appear in the object file
RUN: lld -flavor gnu --merge-strings -emit-yaml %p/Inputs/constants-merge.x86-64 | FileCheck -check-prefix=mergeAtoms %s
+mergeAtoms: - ref-name: [[CONSTANT:[-a-zA-Z0-9_]+]]
+mergeAtoms: type: constant
+mergeAtoms: content: [ 62, 61, 72, 66, 6F, 6F, 00 ]
+mergeAtoms: merge: by-content
+mergeAtoms: section-choice: custom-required
+mergeAtoms: section-name: .rodata.str1.1
mergeAtoms: - name: foo
mergeAtoms: scope: global
mergeAtoms: type: data
@@ -10,7 +17,7 @@ mergeAtoms: section-name: .data
mergeAtoms: references:
mergeAtoms: - kind: R_X86_64_64
mergeAtoms: offset: 3
-mergeAtoms: target: L001
+mergeAtoms: target: [[CONSTANT]]
mergeAtoms: - kind: layout-before
mergeAtoms: offset: 0
mergeAtoms: target: bar
Modified: lld/trunk/test/elf/reloc.objtxt
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/reloc.objtxt?rev=180872&r1=180871&r2=180872&view=diff
==============================================================================
--- lld/trunk/test/elf/reloc.objtxt (original)
+++ lld/trunk/test/elf/reloc.objtxt Wed May 1 14:36:38 2013
@@ -1,10 +1,18 @@
RUN: lld -flavor gnu --merge-strings -r -emit-yaml %p/Inputs/reloc-test.elf-i386 | FileCheck %s -check-prefix ELF-i386
ELF-i386: defined-atoms:
-ELF-i386: - ref-name: [[STRNAME:[-a-zA-Z0-9_]+]]
+ELF-i386: - ref-name: [[STRNAMEA:[-a-zA-Z0-9_]+]]
ELF-i386: type: constant
ELF-i386: content: [ 68, 65, 6C, 6C, 6F, 20, 77, 6F, 72, 6C, 64, 00 ]
ELF-i386: merge: by-content
+ELF-i386: - ref-name: [[STRNAMEB:[-a-zA-Z0-9_]+]]
+ELF-i386: alignment: 2^4
+ELF-i386: section-choice: custom-required
+ELF-i386: section-name: .text.startup
+ELF-i386: references:
+ELF-i386: - kind: layout-after
+ELF-i386: offset: 0
+ELF-i386: target: main
ELF-i386: - name: main
ELF-i386: scope: global
ELF-i386: content: [ 55, 89, E5, 83, E4, F0, 83, EC, 10, C7, 04, 24,
@@ -16,14 +24,14 @@ ELF-i386: section-name: .text.sta
ELF-i386: references:
ELF-i386: - kind: R_X86_64_64
ELF-i386: offset: 12
-ELF-i386: target: [[STRNAME]]
+ELF-i386: target: [[STRNAMEA]]
ELF-i386: - kind: R_X86_64_PC32
ELF-i386: offset: 17
ELF-i386: target: puts
ELF-i386: addend: 252
ELF-i386: - kind: layout-before
ELF-i386: offset: 0
-ELF-i386: target: .text.startup
+ELF-i386: target: [[STRNAMEB]]
ELF-i386: undefined-atoms:
ELF-i386: - name: puts
ELF-i386: absolute-atoms:
More information about the llvm-commits
mailing list