mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-19 23:33:31 +08:00
3d9c8f6b3f
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.
60 lines
1.7 KiB
Plaintext
60 lines
1.7 KiB
Plaintext
# Test ALIGN in a linker script.
|
|
# By Nathan Sidwell, CodeSourcery LLC
|
|
# Copyright (C) 2004-2018 Free Software Foundation, Inc.
|
|
#
|
|
# This file is part of the GNU Binutils.
|
|
#
|
|
# This program is free software; you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation; either version 3 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program; if not, write to the Free Software
|
|
# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
|
# MA 02110-1301, USA.
|
|
|
|
if {[istarget "powerpc*-*-aix*"] || [istarget "rs6000-*-aix*"]} {
|
|
# Target maps .text and .data to other sections.
|
|
return
|
|
}
|
|
|
|
set testname "align1"
|
|
|
|
if ![ld_assemble $as $srcdir/$subdir/align.s tmpdir/align.o] {
|
|
unresolved $testname
|
|
return
|
|
}
|
|
|
|
# mingw on x86_64 targets need to set the image base to 0 to avoid auto image-basing.
|
|
global LDFLAGS
|
|
set saved_LDFLAGS "$LDFLAGS"
|
|
if [istarget "x86_64-*-mingw*"] then {
|
|
set LDFLAGS "$LDFLAGS --image-base 0"
|
|
}
|
|
|
|
if ![ld_link $ld tmpdir/align "$LDFLAGS -T $srcdir/$subdir/align.t tmpdir/align.o"] {
|
|
fail $testname
|
|
} else {
|
|
pass $testname
|
|
}
|
|
|
|
if ![is_aout_format] {
|
|
run_dump_test align2a
|
|
run_dump_test align2b
|
|
run_dump_test align3
|
|
run_dump_test align4
|
|
run_dump_test align5
|
|
}
|
|
run_dump_test align2c
|
|
set LDFLAGS "$saved_LDFLAGS"
|
|
|
|
if { [is_elf_format] && ![is_generic_elf] } {
|
|
run_dump_test pr23571
|
|
}
|