[ELF] - Do not segfault when doing logical and/or operations on symbols that have no output sections.
Previously we would crash on samples from testcase, because were trying to access zero pointer to output section. Differential revision: https://reviews.llvm.org/D36145 llvm-svn: 311311
This commit is contained in:
parent
c7392cbe9a
commit
5d0ea70ad5
|
@ -49,19 +49,24 @@ using namespace lld::elf;
|
|||
|
||||
LinkerScript *elf::Script;
|
||||
|
||||
static uint64_t getOutputSectionVA(SectionBase *InputSec, StringRef Loc) {
|
||||
if (OutputSection *OS = InputSec->getOutputSection())
|
||||
return OS->Addr;
|
||||
error(Loc + ": unable to evaluate expression: input section " +
|
||||
InputSec->Name + " has no output section assigned");
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint64_t ExprValue::getValue() const {
|
||||
if (Sec) {
|
||||
if (OutputSection *OS = Sec->getOutputSection())
|
||||
return alignTo(Sec->getOffset(Val) + OS->Addr, Alignment);
|
||||
error(Loc + ": unable to evaluate expression: input section " + Sec->Name +
|
||||
" has no output section assigned");
|
||||
}
|
||||
if (Sec)
|
||||
return alignTo(Sec->getOffset(Val) + getOutputSectionVA(Sec, Loc),
|
||||
Alignment);
|
||||
return alignTo(Val, Alignment);
|
||||
}
|
||||
|
||||
uint64_t ExprValue::getSecAddr() const {
|
||||
if (Sec)
|
||||
return Sec->getOffset(0) + Sec->getOutputSection()->Addr;
|
||||
return Sec->getOffset(0) + getOutputSectionVA(Sec, Loc);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -7,6 +7,9 @@
|
|||
# RUN: echo "SECTIONS { aaa = ABSOLUTE(foo - 1) + 1; .text : { *(.text*) } }" > %t2.script
|
||||
# RUN: not ld.lld -o %t --script %t2.script %t.o 2>&1 | FileCheck %s
|
||||
|
||||
# RUN: echo "SECTIONS { aaa = foo | 1; .text : { *(.text*) } }" > %t3.script
|
||||
# RUN: not ld.lld -o %t --script %t3.script %t.o 2>&1 | FileCheck %s
|
||||
|
||||
# CHECK: error: {{.*}}.script:1: unable to evaluate expression: input section .text has no output section assigned
|
||||
|
||||
.section .text
|
||||
|
|
Loading…
Reference in New Issue