summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2016-11-11 21:36:25 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2016-11-11 21:36:25 +0000
commitd4372f783b52919c569f3e2007e3ba9edb45c7fb (patch)
treee2aedcf419ac2d03e54e26da2da5ee6a93999586
parent088faab429538c6123024f6f173ee6e35845f445 (diff)
downloadbcm5719-llvm-d4372f783b52919c569f3e2007e3ba9edb45c7fb.tar.gz
bcm5719-llvm-d4372f783b52919c569f3e2007e3ba9edb45c7fb.zip
Avoid a crash with -r and .comment.
We would create a MergeInputSection for the synthetic .comment and crash trying to add it to a regular output section. With this we just don't add the synthetic section with -r. That is consistent with gold that doesn't create .note.gnu.gold-version with -r. llvm-svn: 286635
-rw-r--r--lld/ELF/Writer.cpp3
-rw-r--r--lld/test/ELF/relocatable-bss.s2
-rw-r--r--lld/test/ELF/relocatable-comment.s27
-rw-r--r--lld/test/ELF/relocatable.s6
4 files changed, 33 insertions, 5 deletions
diff --git a/lld/ELF/Writer.cpp b/lld/ELF/Writer.cpp
index 941a6d81ff9..de9a2f9fe7d 100644
--- a/lld/ELF/Writer.cpp
+++ b/lld/ELF/Writer.cpp
@@ -267,7 +267,8 @@ template <class ELFT> void Writer<ELFT>::createSyntheticSections() {
Out<ELFT>::VerDef = make<VersionDefinitionSection<ELFT>>();
// Initialize linker generated sections
- Symtab<ELFT>::X->Sections.push_back(createCommentSection<ELFT>());
+ if (!Config->Relocatable)
+ Symtab<ELFT>::X->Sections.push_back(createCommentSection<ELFT>());
if (Config->BuildId == BuildIdKind::Fast)
In<ELFT>::BuildId = make<BuildIdFastHash<ELFT>>();
diff --git a/lld/test/ELF/relocatable-bss.s b/lld/test/ELF/relocatable-bss.s
index 11078bc2415..0411bf339c4 100644
--- a/lld/test/ELF/relocatable-bss.s
+++ b/lld/test/ELF/relocatable-bss.s
@@ -20,7 +20,7 @@
# CHECK-NEXT: Version:
# CHECK-NEXT: Entry:
# CHECK-NEXT: ProgramHeaderOffset:
-# CHECK-NEXT: SectionHeaderOffset: 0xB8
+# CHECK-NEXT: SectionHeaderOffset: 0xA8
# CHECK-NEXT: Flags [
# CHECK-NEXT: ]
# CHECK-NEXT: HeaderSize:
diff --git a/lld/test/ELF/relocatable-comment.s b/lld/test/ELF/relocatable-comment.s
new file mode 100644
index 00000000000..8ec22c2f43d
--- /dev/null
+++ b/lld/test/ELF/relocatable-comment.s
@@ -0,0 +1,27 @@
+# REQUIRES: x86
+# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t1.o
+# RUN: ld.lld -r %t1.o -o %t
+# RUN: llvm-readobj -s -section-data %t | FileCheck %s
+
+# CHECK: Name: .comment
+# CHECK-NEXT: Type: SHT_PROGBITS
+# CHECK-NEXT: Flags [
+# CHECK-NEXT: SHF_MERGE
+# CHECK-NEXT: SHF_STRINGS
+# CHECK-NEXT: ]
+# CHECK-NEXT: Address:
+# CHECK-NEXT: Offset:
+# CHECK-NEXT: Size: 7
+# CHECK-NEXT: Link:
+# CHECK-NEXT: Info:
+# CHECK-NEXT: AddressAlignment: 1
+# CHECK-NEXT: EntrySize: 1
+# CHECK-NEXT: SectionData (
+# CHECK-NEXT: 0000: 666F6F62 617200 |foobar.|
+# CHECK-NEXT: )
+
+
+# We used to crash creating a merge and non merge .comment sections.
+
+ .section .comment,"MS",@progbits,1
+ .asciz "foobar"
diff --git a/lld/test/ELF/relocatable.s b/lld/test/ELF/relocatable.s
index a0f63dd4b16..73cf4cccd83 100644
--- a/lld/test/ELF/relocatable.s
+++ b/lld/test/ELF/relocatable.s
@@ -30,15 +30,15 @@
# CHECK-NEXT: Version: 1
# CHECK-NEXT: Entry: 0x0
# CHECK-NEXT: ProgramHeaderOffset: 0x0
-# CHECK-NEXT: SectionHeaderOffset: 0x2D0
+# CHECK-NEXT: SectionHeaderOffset: 0x2C0
# CHECK-NEXT: Flags [
# CHECK-NEXT: ]
# CHECK-NEXT: HeaderSize: 64
# CHECK-NEXT: ProgramHeaderEntrySize: 0
# CHECK-NEXT: ProgramHeaderCount: 0
# CHECK-NEXT: SectionHeaderEntrySize: 64
-# CHECK-NEXT: SectionHeaderCount: 8
-# CHECK-NEXT: StringTableSectionIndex: 6
+# CHECK-NEXT: SectionHeaderCount: 7
+# CHECK-NEXT: StringTableSectionIndex: 5
# CHECK-NEXT: }
# CHECK: Relocations [
OpenPOWER on IntegriCloud