mirror of
https://github.com/intel/llvm.git
synced 2026-01-26 03:56:16 +08:00
[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:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
14
lld/test/ELF/linkerscript/emit-relocs-discard.s
Normal file
14
lld/test/ELF/linkerscript/emit-relocs-discard.s
Normal 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
|
||||
11
lld/test/ELF/linkerscript/emit-relocs-ehframe-discard.s
Normal file
11
lld/test/ELF/linkerscript/emit-relocs-ehframe-discard.s
Normal 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
|
||||
Reference in New Issue
Block a user