[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