[ELF] Don't discard excluded section if -r is used
authorEugene Leviant <evgeny.leviant@gmail.com>
Tue, 4 Oct 2016 12:05:42 +0000 (12:05 +0000)
committerEugene Leviant <evgeny.leviant@gmail.com>
Tue, 4 Oct 2016 12:05:42 +0000 (12:05 +0000)
This conforms to GNU ld/gold behavior and fixes crash in case
excluded section also has associated relocation section

llvm-svn: 283214

lld/ELF/InputFiles.cpp
lld/test/ELF/exclude.s

index 0981e2c..566da9c 100644 (file)
@@ -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;
     }
index addc3dc..8fe0037 100644 (file)
@@ -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