diff options
-rw-r--r-- | lld/lib/ReaderWriter/ELF/File.h | 12 | ||||
-rw-r--r-- | lld/lib/ReaderWriter/ELF/SectionChunks.h | 4 | ||||
-rw-r--r-- | lld/test/elf/Hexagon/dynlib-gotoff.test | 10 | ||||
-rw-r--r-- | lld/test/elf/X86_64/multi-weak-override.test | 4 | ||||
-rw-r--r-- | lld/test/elf/X86_64/multi-weak-syms-order.test | 6 | ||||
-rw-r--r-- | lld/test/elf/X86_64/weak-override.test | 9 | ||||
-rw-r--r-- | lld/test/elf/X86_64/weak-zero-sized.test | 10 | ||||
-rw-r--r-- | lld/test/elf/mergeconstants.objtxt | 9 | ||||
-rw-r--r-- | lld/test/elf/reloc.objtxt | 14 |
9 files changed, 47 insertions, 31 deletions
diff --git a/lld/lib/ReaderWriter/ELF/File.h b/lld/lib/ReaderWriter/ELF/File.h index 20904dcf4a1..82397e70657 100644 --- a/lld/lib/ReaderWriter/ELF/File.h +++ b/lld/lib/ReaderWriter/ELF/File.h @@ -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); diff --git a/lld/lib/ReaderWriter/ELF/SectionChunks.h b/lld/lib/ReaderWriter/ELF/SectionChunks.h index 89d313fa902..e9f819ab500 100644 --- a/lld/lib/ReaderWriter/ELF/SectionChunks.h +++ b/lld/lib/ReaderWriter/ELF/SectionChunks.h @@ -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; diff --git a/lld/test/elf/Hexagon/dynlib-gotoff.test b/lld/test/elf/Hexagon/dynlib-gotoff.test index 1bff8fe4422..f2d143fbb23 100644 --- a/lld/test/elf/Hexagon/dynlib-gotoff.test +++ b/lld/test/elf/Hexagon/dynlib-gotoff.test @@ -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: _GLOBAL_OFFSET_TABLE_ 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 diff --git a/lld/test/elf/X86_64/multi-weak-override.test b/lld/test/elf/X86_64/multi-weak-override.test index 176bedaac32..3be37cdda85 100644 --- a/lld/test/elf/X86_64/multi-weak-override.test +++ b/lld/test/elf/X86_64/multi-weak-override.test @@ -9,8 +9,8 @@ RUN: FileCheck -check-prefix=WEAKATOMSORDER %s < %t2 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 diff --git a/lld/test/elf/X86_64/multi-weak-syms-order.test b/lld/test/elf/X86_64/multi-weak-syms-order.test index ce6983fd037..1b5301ad0fd 100644 --- a/lld/test/elf/X86_64/multi-weak-syms-order.test +++ b/lld/test/elf/X86_64/multi-weak-syms-order.test @@ -5,15 +5,13 @@ RUN: lld -flavor gnu -target x86_64 %p/Inputs/multi-weak.o -o %t2 -emit-yaml --n 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]+}} diff --git a/lld/test/elf/X86_64/weak-override.test b/lld/test/elf/X86_64/weak-override.test index 4da3b4ef37c..b8264ccb0d1 100644 --- a/lld/test/elf/X86_64/weak-override.test +++ b/lld/test/elf/X86_64/weak-override.test @@ -8,7 +8,6 @@ RUN: FileCheck -check-prefix=WEAKATOMSORDER %s < %t2 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: f 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 diff --git a/lld/test/elf/X86_64/weak-zero-sized.test b/lld/test/elf/X86_64/weak-zero-sized.test index 2e9eaf868dd..ed37afd25a1 100644 --- a/lld/test/elf/X86_64/weak-zero-sized.test +++ b/lld/test/elf/X86_64/weak-zero-sized.test @@ -8,12 +8,12 @@ RUN: FileCheck -check-prefix=WEAKATOMSORDER %s < %t2 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: .text 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: .text WEAKATOMSORDER: references: WEAKATOMSORDER: - kind: layout-before WEAKATOMSORDER: offset: 0 -WEAKATOMSORDER: target: .text +WEAKATOMSORDER: target: [[TARGETA]] diff --git a/lld/test/elf/mergeconstants.objtxt b/lld/test/elf/mergeconstants.objtxt index d9cf4dd912b..94a4b5cb26c 100644 --- a/lld/test/elf/mergeconstants.objtxt +++ b/lld/test/elf/mergeconstants.objtxt @@ -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 diff --git a/lld/test/elf/reloc.objtxt b/lld/test/elf/reloc.objtxt index 03c9b3f93fc..158d04a4936 100644 --- a/lld/test/elf/reloc.objtxt +++ b/lld/test/elf/reloc.objtxt @@ -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.startup 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: |