diff options
author | Alan Modra <amodra@gmail.com> | 2018-08-26 14:23:38 +0930 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2018-08-26 22:45:59 +0930 |
commit | 3d9c8f6b3f033a6092425b7344647fb51dbed5c6 (patch) | |
tree | 20093232792f1e8061ef1a406c15505571294198 /ld/ldexp.h | |
parent | ed60adf0a31db8ebc95edd09088465470a296671 (diff) | |
download | gdb-3d9c8f6b3f033a6092425b7344647fb51dbed5c6.zip gdb-3d9c8f6b3f033a6092425b7344647fb51dbed5c6.tar.gz gdb-3d9c8f6b3f033a6092425b7344647fb51dbed5c6.tar.bz2 |
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.
Diffstat (limited to 'ld/ldexp.h')
-rw-r--r-- | ld/ldexp.h | 4 |
1 files changed, 2 insertions, 2 deletions
@@ -229,8 +229,8 @@ void exp_print_tree (etree_type *); bfd_vma exp_get_vma (etree_type *, bfd_vma, char *); -int exp_get_value_int - (etree_type *, int, char *); +int exp_get_power + (etree_type *, char *); fill_type *exp_get_fill (etree_type *, fill_type *, char *); bfd_vma exp_get_abs_int |