[ELF] - Advance position in a memory region when change the Dot.
This is https://bugs.llvm.org//show_bug.cgi?id=37836 Previously LLD could assign to Dot or set the address for the section with address expression but did not advance the position in a memory region. Patch fixes the issue. llvm-svn: 336335
This commit is contained in:
parent
13f9425e3a
commit
9b99abcf99
|
@ -135,6 +135,9 @@ void LinkerScript::setDot(Expr E, const Twine &Loc, bool InSec) {
|
|||
// Update to location counter means update to section size.
|
||||
if (InSec)
|
||||
expandOutputSection(Val - Dot);
|
||||
else
|
||||
expandMemoryRegions(Val - Dot);
|
||||
|
||||
Dot = Val;
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,19 @@
|
|||
# REQUIRES: x86
|
||||
# RUN: echo ".section .text,\"ax\"; nop; .section .data,\"aw\"; nop;" \
|
||||
# RUN: | llvm-mc -filetype=obj -triple=x86_64-pc-linux - -o %t.o
|
||||
# RUN: ld.lld -o %t.so --script %s %t.o
|
||||
# RUN: llvm-objdump -section-headers %t.so | FileCheck %s
|
||||
|
||||
# CHECK: 1 .text 00000001 0000000000042000
|
||||
# CHECK-NEXT: 2 .data 00000001 0000000000042400
|
||||
|
||||
## Test that address expressions changes the position in a memory region.
|
||||
|
||||
MEMORY {
|
||||
ram (wxa) : ORIGIN = 0x42000, LENGTH = 0x100000
|
||||
}
|
||||
SECTIONS {
|
||||
.text : { *(.text*) }
|
||||
data_addr = ALIGN(1024);
|
||||
.data data_addr : { *(.data*) }
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
# REQUIRES: x86
|
||||
# RUN: echo ".section .text,\"ax\"; nop; .section .data,\"aw\"; nop;" \
|
||||
# RUN: | llvm-mc -filetype=obj -triple=x86_64-pc-linux - -o %t.o
|
||||
# RUN: ld.lld -o %t.so --script %s %t.o
|
||||
# RUN: llvm-objdump -section-headers %t.so | FileCheck %s
|
||||
|
||||
# CHECK: 1 .text 00000001 0000000000042000
|
||||
# CHECK-NEXT: 2 .data 00000001 0000000000044001
|
||||
|
||||
## Test that assign to Dot changes the position in a memory region.
|
||||
|
||||
MEMORY {
|
||||
ram (wxa) : ORIGIN = 0x42000, LENGTH = 0x100000
|
||||
}
|
||||
SECTIONS {
|
||||
.text : { *(.text*) }
|
||||
. += 0x2000;
|
||||
.data : { *(.data*) }
|
||||
}
|
Loading…
Reference in New Issue