binutils-gdb/ld/testsuite/ld-scripts/map-address.exp
Alan Modra 4b72a278f4 PR23881, pdp11 binutils fails if too much debug data
The PR testcase overflows one of the exec header fields, e_syms (the
size of the symbol table), leading to the string table offset being
wrong.  Things go downhill from there.  Fixed by checking for
overflow.  This happens to trigger in the ld testsuite, so xfail that
test.

	PR 23881
bfd/
	* libaout.h (swap_exec_header_out): Return a bool.
	* aoutx.h (swap_exec_header_out): Check for overflow in exec
	header.
	* pdp11.c (swap_exec_header_out): Likewise.
	* i386lynx.c (WRITE_HEADERS): Adjust.
ld/
	* testsuite/ld-scripts/map-address.exp: xfail pdp11.
2024-02-28 21:24:39 +10:30

151 lines
3.5 KiB
Plaintext

# Test address printed by --print-map
# Copyright (C) 2002-2024 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.
set testname "map addresses"
# The source file doesn't matter. Pinch one from the sizeof test.
if {![ld_assemble $as $srcdir/$subdir/sizeof.s tmpdir/map-address.o]} {
unsupported $testname
return
}
if { [is_pecoff_format] } then {
set IMAGE_BASE "--image-base 0"
} else {
set IMAGE_BASE ""
}
setup_xfail "pdp11-*-*"
if {![ld_link $ld tmpdir/map-address \
"$LDFLAGS -T $srcdir/$subdir/map-address.t \
$IMAGE_BASE tmpdir/map-address.o \
-Map tmpdir/map-address.map"]} {
fail $testname
return
}
if [is_remote host] then {
remote_upload host "tmpdir/map_address.map"
}
if {[regexp_diff \
"tmpdir/map-address.map" \
"$srcdir/$subdir/map-address.d"]} {
fail $testname
} else {
pass $testname
}
set testname "map to directory"
if {![ld_link $ld tmpdir/map-address \
"$LDFLAGS -T $srcdir/$subdir/map-address.t \
$IMAGE_BASE tmpdir/map-address.o \
-Map tmpdir --output fred"]} {
fail $testname
return
}
if [is_remote host] then {
remote_upload host "tmpdir/fred.map"
}
if {[regexp_diff \
"tmpdir/fred.map" \
"$srcdir/$subdir/map-address.d"]} {
fail $testname
} else {
pass $testname
}
set testname "map to % directory"
if {![ld_link $ld tmpdir/map-address \
"$LDFLAGS -T $srcdir/$subdir/map-address.t \
$IMAGE_BASE tmpdir/map-address.o \
-Map=tmpdir/% --output fred"]} {
fail $testname
return
}
if [is_remote host] then {
remote_upload host "tmpdir/fred.map"
}
if {[regexp_diff \
"tmpdir/fred.map" \
"$srcdir/$subdir/map-address.d"]} {
fail $testname
} else {
pass $testname
}
set testname "map to %.foo directory"
if {![ld_link $ld tmpdir/map-address \
"$LDFLAGS -T $srcdir/$subdir/map-address.t \
$IMAGE_BASE tmpdir/map-address.o \
-Map=tmpdir/%.foo --output fred"]} {
fail $testname
return
}
if [is_remote host] then {
remote_upload host "tmpdir/fred.foo"
}
if {[regexp_diff \
"tmpdir/fred.foo" \
"$srcdir/$subdir/map-address.d"]} {
fail $testname
} else {
pass $testname
}
if { [is_elf_format] } {
set testname "map with locals"
if {![ld_link $ld tmpdir/map-address \
"$LDFLAGS -T $srcdir/$subdir/map-address.t \
$IMAGE_BASE tmpdir/map-address.o \
-Map=tmpdir/map-locals.map --print-map-locals"]} {
fail $testname
return
}
if [is_remote host] then {
remote_upload host "tmpdir/map-locals.map"
}
# Some ELF targets do not preserve their local symbols.
setup_xfail "d30v-*-*" "dlx-*-*" "pj-*-*" "s12z-*-*" "xgate-*-*"
if {[regexp_diff \
"tmpdir/map-locals.map" \
"$srcdir/$subdir/map-locals.d"]} {
fail $testname
} else {
pass $testname
}
}