Delay evaluation of alignment expressions in output sections
authorAlan Modra <amodra@gmail.com>
Sun, 26 Aug 2018 04:53:38 +0000 (14:23 +0930)
committerAlan Modra <amodra@gmail.com>
Sun, 26 Aug 2018 13:15:59 +0000 (22:45 +0930)
commit3d9c8f6b3f033a6092425b7344647fb51dbed5c6
tree20093232792f1e8061ef1a406c15505571294198
parented60adf0a31db8ebc95edd09088465470a296671
Delay evaluation of alignment expressions in output sections

git commit 702d16713 broke expressions using CONSTANT(COMMONPAGESIZE)
in ALIGN or SUBALIGN of output section statements, because these
optional fields were evaluated at script parse time and the patch in
question delayed setting of config.commonpagesize.  The right thing to
do is keep the tree representation of those fields for later
evaluation.

PR 23571
* ldlang.h (section_alignment): Make it an expression tree.
(subsection_alignment): Likewise.
* ldlang.c (topower): Delete.
(output_section_statement_newfunc): Adjust initialization.
(init_os): Evaluate section_alignment.
(lang_size_sections_1): Likewise.
(size_input_section): Evaluate subsection_alignment.
(lang_enter_output_section_statement): Don't evaluate here.
(lang_new_phdr): Use exp_get_vma rather than exp_get_value_int.
* ldexp.h (exp_get_value_int): Delete.
(exp_get_power): Declare.
* ldexp.c (exp_get_value_int): Delete.
(exp_get_power): New function.
* emultempl/pe.em (place_orphan): Build expression for section
alignment.
* emultempl/pep.em (place_orphan): Likewise.
* testsuite/ld-scripts/pr23571.d,
* testsuite/ld-scripts/pr23571.t: New test.
* testsuite/ld-scripts/align.exp: Run it.
ld/ChangeLog
ld/emultempl/pe.em
ld/emultempl/pep.em
ld/ldexp.c
ld/ldexp.h
ld/ldlang.c
ld/ldlang.h
ld/testsuite/ld-scripts/align.exp
ld/testsuite/ld-scripts/pr23571.d [new file with mode: 0644]
ld/testsuite/ld-scripts/pr23571.t [new file with mode: 0644]