summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEugene Leviant <evgeny.leviant@gmail.com>2016-10-04 12:05:42 +0000
committerEugene Leviant <evgeny.leviant@gmail.com>2016-10-04 12:05:42 +0000
commitb90f3cf15ba286156fc43ec7882c162c24d6446c (patch)
tree38983da3256f56121bbead60de83f2e1f6c4c9bf
parent40be15cfb0c4df6d8013a62b013aba354855b8b1 (diff)
downloadbcm5719-llvm-b90f3cf15ba286156fc43ec7882c162c24d6446c.tar.gz
bcm5719-llvm-b90f3cf15ba286156fc43ec7882c162c24d6446c.zip
[ELF] Don't discard excluded section if -r is used
This conforms to GNU ld/gold behavior and fixes crash in case excluded section also has associated relocation section llvm-svn: 283214
-rw-r--r--lld/ELF/InputFiles.cpp2
-rw-r--r--lld/test/ELF/exclude.s7
2 files changed, 8 insertions, 1 deletions
diff --git a/lld/ELF/InputFiles.cpp b/lld/ELF/InputFiles.cpp
index 0981e2cd48f..566da9cb843 100644
--- a/lld/ELF/InputFiles.cpp
+++ b/lld/ELF/InputFiles.cpp
@@ -226,7 +226,7 @@ void elf::ObjectFile<ELFT>::initializeSections(
if (Sections[I] == &InputSection<ELFT>::Discarded)
continue;
- if (Sec.sh_flags & SHF_EXCLUDE) {
+ if (!Config->Relocatable && (Sec.sh_flags & SHF_EXCLUDE)) {
Sections[I] = &InputSection<ELFT>::Discarded;
continue;
}
diff --git a/lld/test/ELF/exclude.s b/lld/test/ELF/exclude.s
index addc3dc72ec..8fe003747b1 100644
--- a/lld/test/ELF/exclude.s
+++ b/lld/test/ELF/exclude.s
@@ -2,11 +2,18 @@
# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t
# RUN: ld.lld -o %t1 %t
# RUN: llvm-objdump -section-headers %t1 | FileCheck %s
+# RUN: ld.lld -r -o %t1 %t
+# RUN: llvm-objdump -section-headers %t1 | FileCheck --check-prefix=RELOCATABLE %s
+
# CHECK-NOT: .aaa
+# RELOCATABLE: .aaa
.globl _start
_start:
jmp _start
.section .aaa,"ae"
+ .quad .bbb
+
+.section .bbb,"a"
.quad 0
OpenPOWER on IntegriCloud