forked from OSchip/llvm-project
[ELF] Fix error reporting for synthetic sections
Synthetic sections don't belong to any input file, but still they are input sections. Whenever problem occurs with relocations in these sections lld crashes in error reporting, trying to print input file name. Differential revision: https://reviews.llvm.org/D30889 llvm-svn: 297711
This commit is contained in:
parent
d614b3e6bd
commit
2968547997
|
@ -172,6 +172,11 @@ InputSectionBase *InputSectionBase::getLinkOrderDep() const {
|
|||
// Returns a source location string. Used to construct an error message.
|
||||
template <class ELFT>
|
||||
std::string InputSectionBase::getLocation(uint64_t Offset) {
|
||||
// We don't have file for synthetic sections.
|
||||
if (getFile<ELFT>() == nullptr)
|
||||
return (Config->OutputFile + ":(" + Name + "+0x" + utohexstr(Offset) + ")")
|
||||
.str();
|
||||
|
||||
// First check if we can get desired values from debugging information.
|
||||
std::string LineInfo = getFile<ELFT>()->getLineInfo(this, Offset);
|
||||
if (!LineInfo.empty())
|
||||
|
|
|
@ -0,0 +1,27 @@
|
|||
## Check that error is correctly reported when .eh_frame reloc
|
||||
## is out of range
|
||||
|
||||
# REQUIRES: x86
|
||||
# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t.o
|
||||
# RUN: echo "PHDRS { eh PT_LOAD; text PT_LOAD; } \
|
||||
# RUN: SECTIONS { . = 0x10000; \
|
||||
# RUN: .eh_frame_hdr : { *(.eh_frame_hdr*) } : eh \
|
||||
# RUN: .eh_frame : { *(.eh_frame) } : eh \
|
||||
# RUN: . = 0xF00000000; \
|
||||
# RUN: .text : { *(.text*) } : text \
|
||||
# RUN: }" > %t.script
|
||||
# RUN: not ld.lld %t.o -T %t.script -o %t 2>&1 | FileCheck %s
|
||||
|
||||
# CHECK: error: {{.*}}:(.eh_frame+0x20): relocation R_X86_64_PC32 out of range
|
||||
|
||||
.text
|
||||
.globl _start
|
||||
_start:
|
||||
.cfi_startproc
|
||||
.cfi_lsda 0, _ex
|
||||
nop
|
||||
.cfi_endproc
|
||||
|
||||
.data
|
||||
_ex:
|
||||
.word 0
|
Loading…
Reference in New Issue