mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-21 04:42:53 +08:00
cc9ad334a7
This patch fixes PR 4643 by allowing symbols in the LENGTH and ORIGIN fields of MEMORY regions. Previously, only constants and constant expressions are allowed. For the AVR target, this helps define memory constraints more accurately (per device), without having to create a ton of device specific linker scripts. ld/ PR 4643 * ldexp.c (fold_name): Fold LENGTH only after lang_first_phase_enum. * ldgram.y (memory_spec): Don't evaluate ORIGIN and LENGTH rightaway. * ldlang.h (struct memory_region_struct): Add origin_exp and length_exp fields. * ldlang.c (lang_do_memory_regions): New. (lang_memory_region_lookup): Initialize origin_exp and length_exp fields. (lang_process): Call lang_do_memory_regions. ld/testsuite/ * ld-scripts/memory.t: Define new symbol tred. * ld-scripts/memory_sym.t: New. * ld-scripts/script.exp: Perform MEMORY with symbols test, and conditionally check values of linker symbols.
37 lines
645 B
Raku
37 lines
645 B
Raku
TXT_ORIGIN = 0x100;
|
|
TXT_LENGTH = 32K;
|
|
MEMORY
|
|
{
|
|
R_TEXTMEM (ARX) : ORIGIN = TXT_ORIGIN, LENGTH = TXT_LENGTH
|
|
R_DATAMEM (AW) : org = DATA_ORIGIN, l = DATA_LENGTH
|
|
}
|
|
|
|
REGION_ALIAS ("A_TEXTMEM", R_TEXTMEM);
|
|
REGION_ALIAS ("A_DATAMEM", R_DATAMEM);
|
|
|
|
REGION_ALIAS ("TEXTMEM", A_TEXTMEM);
|
|
REGION_ALIAS ("DATAMEM", A_DATAMEM);
|
|
|
|
SECTIONS
|
|
{
|
|
. = 0;
|
|
.text :
|
|
{
|
|
text_start = ORIGIN (TEXTMEM);
|
|
*(.text)
|
|
*(.pr)
|
|
text_end = .;
|
|
} > TEXTMEM
|
|
|
|
data_start = ORIGIN (DATAMEM);
|
|
.data :
|
|
{
|
|
*(.data)
|
|
*(.rw)
|
|
data_end = .;
|
|
} >DATAMEM
|
|
|
|
fred = ORIGIN(DATAMEM) + LENGTH(DATAMEM);
|
|
tred = ORIGIN(TEXTMEM) + LENGTH(TEXTMEM);
|
|
}
|