410da591ba
This patch fixes INCLUDE directives in script files, so that when an INCLUDE appears inside a sections block, section commands block, or memory def block, the contents are parsed in the appropriate context. gold/ PR gold/18048 * script-c.h (script_include_directive): Add first_token parameter. * script.cc (script_include_directive): Add first_token parameter, and pass it to read_script_file. * yyscript.y (PARSING_SECTIONS_BLOCK, PARSING_SECTION_CMDS) (PARSING_MEMORY_DEF): New tokens. (top): Add new productions for INCLUDE files. (file_cmd): Replace file_or_sections_cmd with copy of its productions. Pass PARSING_LINKER_SCRIPT to script_include_directive. (section_block_cmd): Likewise; pass PARSING_SECTIONS_BLOCK. (section_cmd): Pass PARSING_SECTION_CMDS. (file_or_sections_cmd): Remove. (memory_def): Pass PARSING_MEMORY_DEF. * testsuite/Makefile.am (memory_test_2): New test. * testsuite/Makefile.in: Regenerate. * testsuite/memory_test_inc.t: New script file. * testsuite/memory_test_inc_1.t.src: New script file. * testsuite/memory_test_inc_2.t.src: New script file. * testsuite/memory_test_inc_3.t.src: New script file.
28 lines
533 B
Raku
28 lines
533 B
Raku
MEMORY
|
|
{
|
|
region1 : ORIGIN = 0x1000, LENGTH = 0x1000 ,
|
|
INCLUDE memory_test_inc_1.t
|
|
region3 (wx) : o = 0x4000, l = 4
|
|
region4 (!r) : o = 0x6000 + 60, len = 0x30 * 0x6
|
|
}
|
|
|
|
SECTIONS
|
|
{
|
|
.sec0 : { *(*.sec0) }
|
|
|
|
.sec1 ORIGIN (region1) : { *(*.sec1) } AT> region2
|
|
|
|
INCLUDE memory_test_inc_2.t
|
|
|
|
.sec2 : { *(*.sec2) } > region3 AT> region4
|
|
|
|
.sec3 0x5000 : {
|
|
INCLUDE memory_test_inc_3.t
|
|
}
|
|
|
|
.sec4 : { *(*.sec4) } AT> region2
|
|
|
|
.sec5 : { LONG(0x5555) } > region2
|
|
|
|
/DISCARD/ : { *(*) }
|
|
}
|