diff options
| author | Eugene Leviant <evgeny.leviant@gmail.com> | 2016-10-04 12:05:42 +0000 |
|---|---|---|
| committer | Eugene Leviant <evgeny.leviant@gmail.com> | 2016-10-04 12:05:42 +0000 |
| commit | b90f3cf15ba286156fc43ec7882c162c24d6446c (patch) | |
| tree | 38983da3256f56121bbead60de83f2e1f6c4c9bf | |
| parent | 40be15cfb0c4df6d8013a62b013aba354855b8b1 (diff) | |
| download | bcm5719-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.cpp | 2 | ||||
| -rw-r--r-- | lld/test/ELF/exclude.s | 7 |
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 |

