summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lld/lib/ReaderWriter/ELF/File.h12
-rw-r--r--lld/lib/ReaderWriter/ELF/SectionChunks.h4
-rw-r--r--lld/test/elf/Hexagon/dynlib-gotoff.test10
-rw-r--r--lld/test/elf/X86_64/multi-weak-override.test4
-rw-r--r--lld/test/elf/X86_64/multi-weak-syms-order.test6
-rw-r--r--lld/test/elf/X86_64/weak-override.test9
-rw-r--r--lld/test/elf/X86_64/weak-zero-sized.test10
-rw-r--r--lld/test/elf/mergeconstants.objtxt9
-rw-r--r--lld/test/elf/reloc.objtxt14
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:
OpenPOWER on IntegriCloud