[ELF] - Added support of linkerscript's "/DISCARD/" for --emit-relocs

Previously LLD crashed on on provided testcases because "/DISCARD/" was
not supported. Patch implements that.

After this I think there is no known issues with --emit-relocs implementation
required for linux kernel linking.

Differential revision: https://reviews.llvm.org/D29273

llvm-svn: 295488
This commit is contained in:
George Rimar
2017-02-17 19:46:47 +00:00
parent 184773d81f
commit 858a659a4f
3 changed files with 31 additions and 2 deletions

View File

@@ -406,8 +406,12 @@ elf::ObjectFile<ELFT>::createInputSection(const Elf_Shdr &Sec,
// from the output, so returning `nullptr` for the normal case.
// However, if -emit-relocs is given, we need to leave them in the output.
// (Some post link analysis tools need this information.)
if (Config->EmitRelocs)
return make<InputSection<ELFT>>(this, &Sec, Name);
if (Config->EmitRelocs) {
InputSection<ELFT> *RelocSec = make<InputSection<ELFT>>(this, &Sec, Name);
// We will not emit relocation section if target was discarded.
Target->DependentSections.push_back(RelocSec);
return RelocSec;
}
return nullptr;
}
}

View File

@@ -0,0 +1,14 @@
# REQUIRES: x86
# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t.o
# RUN: echo "SECTIONS { /DISCARD/ : { *(.bbb) } }" > %t.script
# RUN: ld.lld --emit-relocs --script %t.script %t.o -o %t1
# RUN: llvm-readobj -r %t1 | FileCheck %s
# CHECK: Relocations [
# CHECK-NEXT: ]
.section .aaa,"",@progbits
.Lfoo:
.section .bbb,"",@progbits
.long .Lfoo

View File

@@ -0,0 +1,11 @@
# REQUIRES: x86
# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t1.o
# RUN: echo "SECTIONS { /DISCARD/ : { *(.eh_frame) } }" > %t.script
# RUN: ld.lld --emit-relocs --script %t.script %t1.o -o %t
# RUN: llvm-objdump -section-headers %t | FileCheck %s
# CHECK-NOT: .rela.eh_frame
.section .foo,"ax",@progbits
.cfi_startproc
.cfi_endproc