forked from OSchip/llvm-project
[ELF] Expand regions for gaps due to explicit address
If the dot gets moved by an explicit section address, an empty gap between sections could be created. The encompassing region for the section being parsed needs to be expanded to include the gap. Differential Revision: https://reviews.llvm.org/D65722 Patch by Gabriel Smith! llvm-svn: 368379
This commit is contained in:
parent
84b55e61dd
commit
179dc276eb
|
@ -772,6 +772,14 @@ void LinkerScript::assignOffsets(OutputSection *sec) {
|
|||
if ((sec->flags & SHF_ALLOC) && sec->addrExpr)
|
||||
setDot(sec->addrExpr, sec->location, false);
|
||||
|
||||
// If the address of the section has been moved forward by an explicit
|
||||
// expression so that it now starts past the current curPos of the enclosing
|
||||
// region, we need to expand the current region to account for the space
|
||||
// between the previous section, if any, and the start of this section.
|
||||
if (ctx->memRegion && ctx->memRegion->curPos < dot)
|
||||
expandMemoryRegion(ctx->memRegion, dot - ctx->memRegion->curPos,
|
||||
ctx->memRegion->name, sec->name);
|
||||
|
||||
switchTo(sec);
|
||||
|
||||
if (sec->lmaExpr)
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
# REQUIRES: x86
|
||||
|
||||
# RUN: echo '.section .aaa, "a"; .quad 0; .section .bbb, "a"; .quad 0;' \
|
||||
# RUN: | llvm-mc -filetype=obj -triple=x86_64 - -o %t.o
|
||||
# RUN: ld.lld %t.o --script %s -o %t
|
||||
# RUN: llvm-readelf -S %t | FileCheck %s
|
||||
|
||||
# CHECK: .aaa PROGBITS 0000000000000000 001000 000008
|
||||
# CHECK: .bbb PROGBITS 0000000000000014 001014 000008
|
||||
|
||||
MEMORY {
|
||||
REGION (rwx) : ORIGIN = 0x0000, LENGTH = 0x100
|
||||
}
|
||||
|
||||
SECTIONS {
|
||||
.aaa 0 : { *(.aaa) } > REGION
|
||||
.bbb 0x14 : { *(.bbb) } > REGION
|
||||
}
|
Loading…
Reference in New Issue