From b90f3cf15ba286156fc43ec7882c162c24d6446c Mon Sep 17 00:00:00 2001 From: Eugene Leviant Date: Tue, 4 Oct 2016 12:05:42 +0000 Subject: [PATCH] [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 --- lld/ELF/InputFiles.cpp | 2 +- lld/test/ELF/exclude.s | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/lld/ELF/InputFiles.cpp b/lld/ELF/InputFiles.cpp index 0981e2c..566da9c 100644 --- a/lld/ELF/InputFiles.cpp +++ b/lld/ELF/InputFiles.cpp @@ -226,7 +226,7 @@ void elf::ObjectFile::initializeSections( if (Sections[I] == &InputSection::Discarded) continue; - if (Sec.sh_flags & SHF_EXCLUDE) { + if (!Config->Relocatable && (Sec.sh_flags & SHF_EXCLUDE)) { Sections[I] = &InputSection::Discarded; continue; } diff --git a/lld/test/ELF/exclude.s b/lld/test/ELF/exclude.s index addc3dc..8fe0037 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 -- 2.7.4