2006-05-31 00:45:32 +08:00
|
|
|
# Expect script for binutils tests
|
2021-01-01 06:58:58 +08:00
|
|
|
# Copyright (C) 2006-2021 Free Software Foundation, Inc.
|
2006-05-31 00:45:32 +08:00
|
|
|
#
|
2007-07-06 22:09:45 +08:00
|
|
|
# This file is part of the GNU Binutils.
|
|
|
|
#
|
|
|
|
# This program is free software; you can redistribute it and/or modify
|
2006-05-31 00:45:32 +08:00
|
|
|
# it under the terms of the GNU General Public License as published by
|
2007-07-06 22:09:45 +08:00
|
|
|
# the Free Software Foundation; either version 3 of the License, or
|
2006-05-31 00:45:32 +08:00
|
|
|
# (at your option) any later version.
|
2007-07-06 22:09:45 +08:00
|
|
|
#
|
2006-05-31 00:45:32 +08:00
|
|
|
# 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.
|
2007-07-06 22:09:45 +08:00
|
|
|
#
|
2006-05-31 00:45:32 +08:00
|
|
|
# You should have received a copy of the GNU General Public License
|
|
|
|
# along with this program; if not, write to the Free Software
|
2007-07-06 22:09:45 +08:00
|
|
|
# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
|
|
|
# MA 02110-1301, USA.
|
2006-05-31 00:45:32 +08:00
|
|
|
#
|
|
|
|
# Written by H.J. Lu (hongjiu.lu@intel.com)
|
|
|
|
#
|
|
|
|
|
|
|
|
# Make sure that binutils can correctly handle ld output in ELF.
|
|
|
|
|
2020-06-20 09:17:32 +08:00
|
|
|
if { !([istarget *-*-linux*]
|
|
|
|
|| [istarget arm*-*-uclinuxfdpiceabi]
|
|
|
|
|| [istarget *-*-nacl*]
|
|
|
|
|| [istarget *-*-gnu*]) || [istarget *ecoff] } then {
|
2006-05-31 00:45:32 +08:00
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2012-08-13 22:52:54 +08:00
|
|
|
# The optional test_name argument provides a mechanism for the caller
|
|
|
|
# to hardwire the test name. This is important if ld_options contains
|
|
|
|
# absolute path names because the default test name is constructed
|
|
|
|
# from the prog_name and ld_options and we do not want absolute paths
|
2014-12-31 11:09:11 +08:00
|
|
|
# to appear in the test_name. The optional readelf_options can be
|
|
|
|
# used to specify different options for readelf.
|
|
|
|
proc binutils_test { prog_name ld_options test {test_name ""} {readelf_options "-l"}} {
|
2006-05-31 00:45:32 +08:00
|
|
|
global as
|
|
|
|
global ld
|
|
|
|
global READELF
|
2006-06-01 13:40:24 +08:00
|
|
|
global objcopy
|
2006-05-31 00:45:32 +08:00
|
|
|
global strip
|
|
|
|
global srcdir
|
|
|
|
global subdir
|
2006-06-01 13:40:24 +08:00
|
|
|
global link_output
|
|
|
|
|
|
|
|
eval set prog \$$prog_name
|
2012-08-13 22:52:54 +08:00
|
|
|
|
|
|
|
if { "$test_name" == "" } {
|
|
|
|
set test_name "$prog_name $ld_options ($test)"
|
|
|
|
}
|
2006-05-31 00:45:32 +08:00
|
|
|
|
|
|
|
if { ![ld_assemble $as $srcdir/$subdir/$test.s tmpdir/$test.o ] } {
|
ld testsuite: change unresolved to unsupported/fail
"unresolved" as a test result means runtest returns an error, which
can be confusing when there is no apparent error unless you look in
.log files. In particular many tests are skipped without reporting an
error if no target C compiler is found, but if a target C compiler is
found but won't compile a testcase for some reason we used to mark the
test as unresolved. Which is no more worthy of an error than when
lacking a C compiler entirely.
* testsuite/ld-cdtest/cdtest.exp,
* testsuite/ld-checks/checks.exp,
* testsuite/ld-elf/binutils.exp,
* testsuite/ld-elf/compress.exp,
* testsuite/ld-elf/dwarf.exp,
* testsuite/ld-elf/exclude.exp,
* testsuite/ld-elf/frame.exp,
* testsuite/ld-elf/indirect.exp,
* testsuite/ld-elf/linux-x86.exp,
* testsuite/ld-elf/sec-to-seg.exp,
* testsuite/ld-elf/tls_common.exp,
* testsuite/ld-elfcomm/elfcomm.exp,
* testsuite/ld-elfvers/vers.exp,
* testsuite/ld-elfvsb/elfvsb.exp,
* testsuite/ld-elfweak/elfweak.exp,
* testsuite/ld-ifunc/binutils.exp,
* testsuite/ld-mips-elf/mips-elf-flags.exp,
* testsuite/ld-misc/defsym.exp,
* testsuite/ld-mn10300/mn10300.exp,
* testsuite/ld-plugin/lto.exp,
* testsuite/ld-plugin/plugin.exp,
* testsuite/ld-scripts/align.exp,
* testsuite/ld-scripts/assert.exp,
* testsuite/ld-scripts/crossref.exp,
* testsuite/ld-scripts/defined.exp,
* testsuite/ld-scripts/extern.exp,
* testsuite/ld-scripts/log2.exp,
* testsuite/ld-scripts/map-address.exp,
* testsuite/ld-scripts/phdrs.exp,
* testsuite/ld-scripts/phdrs2.exp,
* testsuite/ld-scripts/script.exp,
* testsuite/ld-scripts/section-flags.exp,
* testsuite/ld-scripts/sizeof.exp,
* testsuite/ld-scripts/weak.exp,
* testsuite/ld-selective/selective.exp,
* testsuite/ld-sh/sh.exp,
* testsuite/ld-shared/shared.exp,
* testsuite/ld-srec/srec.exp,
* testsuite/ld-tic6x/tic6x.exp,
* testsuite/ld-undefined/undefined.exp,
* testsuite/ld-undefined/weak-undef.exp,
* testsuite/lib/ld-lib.exp: Don't use unresolved except after
perror. Instead report "unsupported" or "fail".
2021-02-13 07:21:17 +08:00
|
|
|
unsupported "$test_name"
|
2006-05-31 00:45:32 +08:00
|
|
|
return
|
|
|
|
}
|
|
|
|
|
Run more ld tests when not native
Many of the ld tests are not run for cross builds, in some cases
because the test needs to run a newly linked executable, and in others
simply because it was easier to write the test for native only. Even
when a test needs to run, it's good to compile and link to exercise
the linker. So that's what this patch does. I've also rid us of
the old ld_link procedure with all the HOSTING_CRT0 etc. setup. It's
much simpler to just link with $CC.
This does mean that a cross build with cross-compiler installed but
no cross C-library will give lots of failures. If that turns out to
be too annoying, I guess we can write a tcl procedure to detect it and
not run all the extra tests.
* Makefile.am (bootstrap): Delete rule.
(ld-partial, ld1, ld1-full, ld2, ld3): Likewise.
(HOSTING_CRT0, HOSTING_SCRT0): Don't define.
(HOSTING_LIBS, HOSTING_SLIBS, HOSTING_EMU): Likewise.
* configure.ac (HOSTING_CRT0, HOSTING_SCRT0): Don't define.
(HOSTING_LIBS, HOSTING_SLIBS): Likewise.
* configure.host (HOSTING_CRT0, HOSTING_LIBS): Don't define.
* Makefile.in: Regenerate.
* configure: Regenerate.
* testsuite/config/default.exp (get_link_files): Delete.
(HOSTING_CRT0, HOSTING_SCRT0, HOSTING_LIBS, HOSTING_SLIBS): Don't
define.
(ld_simple_link): Delete.
* testsuite/lib/ld-lib.exp (default_ld_link): Delete
(default_ld_simple_link): Rename to default_ld_link.
(ld_simple_link_defsyms): Rename to ld_link_defsyms.
(run_ld_link_tests): Use ld_link, not ld_simple_link.
(run_cc_link_tests): Likewise.
(run_ld_link_exec_tests): Use $CC or $CXX to link, not $ld.
Don't run exe when not native, and return unsupported.
* testsuite/ld-bootstrap/bootstrap.exp: Create gccld1 etc. dirs.
Link ld1 etc. using $CC.
* testsuite/ld-cdtest/cdtest.exp: Link cdtest using $CC.
* testsuite/ld-checks/checks.exp: Use ld_link, not ld_simple_link.
* testsuite/ld-cygwin/exe-export.exp: Likewise.
* testsuite/ld-elf/binutils.exp: Likewise.
* testsuite/ld-elf/eh-group.exp: Likewise.
* testsuite/ld-elf/exclude.exp: Likewise.
* testsuite/ld-elf/frame.exp: Likewise.
* testsuite/ld-elf/sec-to-seg.exp: Likewise.
* testsuite/ld-elf/tls_common.exp: Likewise.
* testsuite/ld-elfcomm/elfcomm.exp: Likewise.
* testsuite/ld-fastcall/fastcall.exp: Likewise.
* testsuite/ld-gc/gc.exp: Likewise.
* testsuite/ld-ifunc/binutils.exp: Likewise.
* testsuite/ld-mep/mep.exp: Likewise.
* testsuite/ld-mips-elf/mips-elf-flags.exp: Likewise.
* testsuite/ld-mn10300/mn10300.exp: Likewise.
* testsuite/ld-nios2/nios2.exp: Likewise.
* testsuite/ld-pe/pe-compile.exp: Likewise.
* testsuite/ld-pe/pe-run.exp: Likewise.
* testsuite/ld-pe/pe-run2.exp: Likewise.
* testsuite/ld-plugin/plugin.exp: Likewise.
* testsuite/ld-scripts/align.exp: Likewise.
* testsuite/ld-scripts/alignof.exp: Likewise.
* testsuite/ld-scripts/assert.exp: Likewise.
* testsuite/ld-scripts/defined.exp: Likewise.
* testsuite/ld-scripts/extern.exp: Likewise.
* testsuite/ld-scripts/log2.exp: Likewise.
* testsuite/ld-scripts/map-address.exp: Likewise.
* testsuite/ld-scripts/phdrs.exp: Likewise.
* testsuite/ld-scripts/phdrs2.exp: Likewise.
* testsuite/ld-scripts/script.exp: Likewise.
* testsuite/ld-scripts/section-flags.exp: Likewise.
* testsuite/ld-scripts/sizeof.exp: Likewise.
* testsuite/ld-scripts/sysroot-prefix.exp: Likewise.
* testsuite/ld-scripts/weak.exp: Likewise.
* testsuite/ld-selective/selective.exp: Likewise.
* testsuite/ld-sh/sh.exp: Likewise.
* testsuite/ld-sh/sh64/relax.exp: Likewise.
* testsuite/ld-sh/sh64/relfail.exp: Likewise.
* testsuite/ld-srec/srec.exp: Likewise.
* testsuite/ld-tic6x/tic6x.exp: Likewise.
* testsuite/ld-undefined/weak-undef.exp: Likewise.
* testsuite/ld-versados/versados.exp: Likewise.
* testsuite/ld-x86-64/dwarfreloc.exp: Likewise.
* testsuite/ld-xtensa/coalesce.exp: Likewise.
* testsuite/ld-xtensa/diff_overflow.exp: Likewise.
* testsuite/ld-xtensa/lcall.exp: Likewise.
* testsuite/ld-elf/audit.exp: Run non-native too.
* testsuite/ld-elf/compress.exp: Likewise. Replace ld options with
gcc -Wl, options.
* testsuite/ld-elf/dwarf.exp: Run non-native too. Use ld_link,
not ld_simple_link. Add -Wl,--no-as-needed to some tests.
* testsuite/ld-elf/elf.exp: Run non-native too. Formatting.
* testsuite/ld-elf/indirect.exp: Run non-native too. Add
-Wl,--no-as-needed to most tests.
* testsuite/ld-elf/shared.exp: Run non-native too. Use braces
to simplify quoting. Set run_tests using [list] rather than
brace assignment to expand $extralibs. Add -Wl,--no-as-needed
to many test. Prefix ld options with -Wl,.
(mix_pic_and_non_pic): Don't run exe if not native.
* testsuite/ld-elf/wrap.exp: Run non-native too. Add
-Wl,--no-as-needed and prefix ld options with -Wl,.
* testsuite/ld-elfvers/vers.exp: Run non-native too. Use ld_link,
not ld_simple_link.
* testsuite/ld-elfvsb/elfvsb.exp: Likewise.
(visibility_test): Don't run exe if not native.
* testsuite/ld-elfweak/elfweak.exp: Run non-native too. Use ld_link,
not ld_simple_link.
(build_exec): Don't run exe if not native.
* testsuite/ld-ifunc/ifunc.exp: Run non-native too. Use ld_link,
not ld_simple_link. Link using $CC. Add -Wl,--no-as-needed
to some tests and prefix ld options with -Wl,. Expect GNU
for hppa-linux even when no ifuncs. Delete cleanup.
* testsuite/ld-pie/pie.exp: Run non-native too.
* testsuite/ld-plugin/lto.exp: Likewise.
* testsuite/ld-shared/shared.exp: Likewise. Use ld_link,
not ld_simple_link.
(shared_test): Don't run exe if not native.
* testsuite/ld-size/size.exp: Run non-native too. Add
-Wl,--no-as-needed to some tests. Prefix ld options with -Wl,.
* testsuite/ld-unique/unique.exp: Run non-native too. Use ld_link,
not ld_simple_link. Link using $CC. Add -Wl,--no-as-needed
to some tests and prefix ld options with -Wl,. Expect GNU
for hppa-linux even when no unique syms. Delete cleanup.
* testsuite/ld-x86-64/tls.exp: Add -Wl,--no-as-needed to some
tests and prefix ld options with -Wl,.
* testsuite/ld-x86-64/x86-64.exp: Use ld_link, not ld_simple_link.
Add -Wl,--no-as-needed to some tests. Prefix ld options with -Wl,.
2017-01-02 20:15:37 +08:00
|
|
|
if { ![ld_link $ld tmpdir/$test "$ld_options -z stack-size=0 tmpdir/$test.o"] } {
|
2006-06-01 13:40:24 +08:00
|
|
|
if { [string match "*not supported*" $link_output]
|
2011-07-14 22:54:53 +08:00
|
|
|
|| [string match "*unrecognized option*" $link_output]
|
ld testsuite: change unresolved to unsupported/fail
"unresolved" as a test result means runtest returns an error, which
can be confusing when there is no apparent error unless you look in
.log files. In particular many tests are skipped without reporting an
error if no target C compiler is found, but if a target C compiler is
found but won't compile a testcase for some reason we used to mark the
test as unresolved. Which is no more worthy of an error than when
lacking a C compiler entirely.
* testsuite/ld-cdtest/cdtest.exp,
* testsuite/ld-checks/checks.exp,
* testsuite/ld-elf/binutils.exp,
* testsuite/ld-elf/compress.exp,
* testsuite/ld-elf/dwarf.exp,
* testsuite/ld-elf/exclude.exp,
* testsuite/ld-elf/frame.exp,
* testsuite/ld-elf/indirect.exp,
* testsuite/ld-elf/linux-x86.exp,
* testsuite/ld-elf/sec-to-seg.exp,
* testsuite/ld-elf/tls_common.exp,
* testsuite/ld-elfcomm/elfcomm.exp,
* testsuite/ld-elfvers/vers.exp,
* testsuite/ld-elfvsb/elfvsb.exp,
* testsuite/ld-elfweak/elfweak.exp,
* testsuite/ld-ifunc/binutils.exp,
* testsuite/ld-mips-elf/mips-elf-flags.exp,
* testsuite/ld-misc/defsym.exp,
* testsuite/ld-mn10300/mn10300.exp,
* testsuite/ld-plugin/lto.exp,
* testsuite/ld-plugin/plugin.exp,
* testsuite/ld-scripts/align.exp,
* testsuite/ld-scripts/assert.exp,
* testsuite/ld-scripts/crossref.exp,
* testsuite/ld-scripts/defined.exp,
* testsuite/ld-scripts/extern.exp,
* testsuite/ld-scripts/log2.exp,
* testsuite/ld-scripts/map-address.exp,
* testsuite/ld-scripts/phdrs.exp,
* testsuite/ld-scripts/phdrs2.exp,
* testsuite/ld-scripts/script.exp,
* testsuite/ld-scripts/section-flags.exp,
* testsuite/ld-scripts/sizeof.exp,
* testsuite/ld-scripts/weak.exp,
* testsuite/ld-selective/selective.exp,
* testsuite/ld-sh/sh.exp,
* testsuite/ld-shared/shared.exp,
* testsuite/ld-srec/srec.exp,
* testsuite/ld-tic6x/tic6x.exp,
* testsuite/ld-undefined/undefined.exp,
* testsuite/ld-undefined/weak-undef.exp,
* testsuite/lib/ld-lib.exp: Don't use unresolved except after
perror. Instead report "unsupported" or "fail".
2021-02-13 07:21:17 +08:00
|
|
|
|| [string match "*-z * ignored*" $link_output] } {
|
2006-06-01 13:40:24 +08:00
|
|
|
unsupported "$ld_options is not supported by this target"
|
|
|
|
} else {
|
ld testsuite: change unresolved to unsupported/fail
"unresolved" as a test result means runtest returns an error, which
can be confusing when there is no apparent error unless you look in
.log files. In particular many tests are skipped without reporting an
error if no target C compiler is found, but if a target C compiler is
found but won't compile a testcase for some reason we used to mark the
test as unresolved. Which is no more worthy of an error than when
lacking a C compiler entirely.
* testsuite/ld-cdtest/cdtest.exp,
* testsuite/ld-checks/checks.exp,
* testsuite/ld-elf/binutils.exp,
* testsuite/ld-elf/compress.exp,
* testsuite/ld-elf/dwarf.exp,
* testsuite/ld-elf/exclude.exp,
* testsuite/ld-elf/frame.exp,
* testsuite/ld-elf/indirect.exp,
* testsuite/ld-elf/linux-x86.exp,
* testsuite/ld-elf/sec-to-seg.exp,
* testsuite/ld-elf/tls_common.exp,
* testsuite/ld-elfcomm/elfcomm.exp,
* testsuite/ld-elfvers/vers.exp,
* testsuite/ld-elfvsb/elfvsb.exp,
* testsuite/ld-elfweak/elfweak.exp,
* testsuite/ld-ifunc/binutils.exp,
* testsuite/ld-mips-elf/mips-elf-flags.exp,
* testsuite/ld-misc/defsym.exp,
* testsuite/ld-mn10300/mn10300.exp,
* testsuite/ld-plugin/lto.exp,
* testsuite/ld-plugin/plugin.exp,
* testsuite/ld-scripts/align.exp,
* testsuite/ld-scripts/assert.exp,
* testsuite/ld-scripts/crossref.exp,
* testsuite/ld-scripts/defined.exp,
* testsuite/ld-scripts/extern.exp,
* testsuite/ld-scripts/log2.exp,
* testsuite/ld-scripts/map-address.exp,
* testsuite/ld-scripts/phdrs.exp,
* testsuite/ld-scripts/phdrs2.exp,
* testsuite/ld-scripts/script.exp,
* testsuite/ld-scripts/section-flags.exp,
* testsuite/ld-scripts/sizeof.exp,
* testsuite/ld-scripts/weak.exp,
* testsuite/ld-selective/selective.exp,
* testsuite/ld-sh/sh.exp,
* testsuite/ld-shared/shared.exp,
* testsuite/ld-srec/srec.exp,
* testsuite/ld-tic6x/tic6x.exp,
* testsuite/ld-undefined/undefined.exp,
* testsuite/ld-undefined/weak-undef.exp,
* testsuite/lib/ld-lib.exp: Don't use unresolved except after
perror. Instead report "unsupported" or "fail".
2021-02-13 07:21:17 +08:00
|
|
|
fail "$test_name"
|
2006-06-01 13:40:24 +08:00
|
|
|
}
|
2006-05-31 00:45:32 +08:00
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2014-12-31 11:09:11 +08:00
|
|
|
send_log "$READELF $readelf_options --wide tmpdir/$test > tmpdir/$test.exp\n"
|
|
|
|
set got [remote_exec host "$READELF $readelf_options --wide tmpdir/$test" "" "/dev/null" "tmpdir/$test.exp"]
|
2007-08-28 21:21:58 +08:00
|
|
|
if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then {
|
2006-05-31 00:45:32 +08:00
|
|
|
send_log "$got\n"
|
ld testsuite: change unresolved to unsupported/fail
"unresolved" as a test result means runtest returns an error, which
can be confusing when there is no apparent error unless you look in
.log files. In particular many tests are skipped without reporting an
error if no target C compiler is found, but if a target C compiler is
found but won't compile a testcase for some reason we used to mark the
test as unresolved. Which is no more worthy of an error than when
lacking a C compiler entirely.
* testsuite/ld-cdtest/cdtest.exp,
* testsuite/ld-checks/checks.exp,
* testsuite/ld-elf/binutils.exp,
* testsuite/ld-elf/compress.exp,
* testsuite/ld-elf/dwarf.exp,
* testsuite/ld-elf/exclude.exp,
* testsuite/ld-elf/frame.exp,
* testsuite/ld-elf/indirect.exp,
* testsuite/ld-elf/linux-x86.exp,
* testsuite/ld-elf/sec-to-seg.exp,
* testsuite/ld-elf/tls_common.exp,
* testsuite/ld-elfcomm/elfcomm.exp,
* testsuite/ld-elfvers/vers.exp,
* testsuite/ld-elfvsb/elfvsb.exp,
* testsuite/ld-elfweak/elfweak.exp,
* testsuite/ld-ifunc/binutils.exp,
* testsuite/ld-mips-elf/mips-elf-flags.exp,
* testsuite/ld-misc/defsym.exp,
* testsuite/ld-mn10300/mn10300.exp,
* testsuite/ld-plugin/lto.exp,
* testsuite/ld-plugin/plugin.exp,
* testsuite/ld-scripts/align.exp,
* testsuite/ld-scripts/assert.exp,
* testsuite/ld-scripts/crossref.exp,
* testsuite/ld-scripts/defined.exp,
* testsuite/ld-scripts/extern.exp,
* testsuite/ld-scripts/log2.exp,
* testsuite/ld-scripts/map-address.exp,
* testsuite/ld-scripts/phdrs.exp,
* testsuite/ld-scripts/phdrs2.exp,
* testsuite/ld-scripts/script.exp,
* testsuite/ld-scripts/section-flags.exp,
* testsuite/ld-scripts/sizeof.exp,
* testsuite/ld-scripts/weak.exp,
* testsuite/ld-selective/selective.exp,
* testsuite/ld-sh/sh.exp,
* testsuite/ld-shared/shared.exp,
* testsuite/ld-srec/srec.exp,
* testsuite/ld-tic6x/tic6x.exp,
* testsuite/ld-undefined/undefined.exp,
* testsuite/ld-undefined/weak-undef.exp,
* testsuite/lib/ld-lib.exp: Don't use unresolved except after
perror. Instead report "unsupported" or "fail".
2021-02-13 07:21:17 +08:00
|
|
|
fail "$test_name"
|
2006-05-31 00:45:32 +08:00
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2014-01-10 02:18:19 +08:00
|
|
|
if [string match "*-z relro*" $ld_options] {
|
2017-07-19 00:20:30 +08:00
|
|
|
# These targets set TEXT_DYNAMIC and therefore have `.dynamic'
|
|
|
|
# in the (read-only) text segment rather than data segment.
|
|
|
|
set relro_dynamic [expr !([istarget "hppa64*-*-*"] \
|
|
|
|
|| ([istarget "mips*-*-*"] \
|
|
|
|
&& ![istarget "*-*-vxworks*"]))]
|
LD/testsuite: Conditionalize the placement of `.got' in GNU_RELRO
Complement commit d345186d0535 ("Check if GNU_RELRO segment is is
generated") and exclude the presence of a `.got' section from implying
the creation of a GNU_RELRO segment for targets which place the section
along with small data, and therefore as it stands cannot have the
section assigned to GNU_RELRO. This is because we currently only
support a single GNU_RELRO segment and we place it at the beginning of
regular data which is then separated from small data by read-write data.
Currently the list of such targets consists of Alpha, Linux HPPA, NetBSD
HPPA, OpenBSD HPPA, Meta, MIPS, Nios II, OpenRISC 1000, RISC-V, SH and
X86-64, as determined by examining default linker scripts produced in a
`--enable-targets=all' build for those that have DATA_SEGMENT_RELRO_END
set and `.got' placed beyond. These targets do not set NO_SMALL_DATA or
DATA_GOT in their respective files in ld/emulparams/*, hovever checking
for the absence of these settings on its own is not very feasible due to
the structure of these files and the lack of support for GNU_RELRO by
some targets in the first place.
Add a separate control for `.got.plt' which does get placed in GNU_RELRO
on MIPS targets even though `.got' does not.
ld/
* testsuite/ld-elf/binutils.exp (binutils_test): Make the
expectation for `.got' in GNU_RELRO segment target-specific.
Handle `.got.plt' separately.
2017-07-19 00:20:30 +08:00
|
|
|
# These targets have `.got' in regular data even though they do
|
|
|
|
# not have `.got' there.
|
|
|
|
set relro_gotplt [expr [istarget "mips*-*-*"]]
|
|
|
|
# These targets do not set NO_SMALL_DATA or DATA_GOT and therefore
|
|
|
|
# have `.got' in (read-write) small data rather than regular data.
|
|
|
|
set relro_got [expr !([istarget "alpha*-*-*"] \
|
|
|
|
|| [istarget "hppa*-*-linux-*"] \
|
|
|
|
|| [istarget "hppa*-*-netbsd*"] \
|
|
|
|
|| [istarget "hppa*-*-openbsd*"] \
|
|
|
|
|| [istarget "metag-*-*"] \
|
|
|
|
|| [istarget "mips*-*-*"] \
|
|
|
|
|| [istarget "nios2*-*-*"] \
|
|
|
|
|| [istarget "or1k-*-*"] \
|
|
|
|
|| [istarget "riscv*-*-*"] \
|
|
|
|
|| [istarget "sh*-*-*"] \
|
|
|
|
|| [istarget "x86_64-*-rdos*"])]
|
2014-01-10 02:18:19 +08:00
|
|
|
# Check if GNU_RELRO segment is generated.
|
|
|
|
set got [remote_exec host "grep GNU_RELRO tmpdir/$test.exp"]
|
|
|
|
if { ![string match "*GNU_RELRO*" $got] } then {
|
|
|
|
set got [remote_exec host "cat tmpdir/$test.exp"]
|
|
|
|
if { [string match "*.data.rel.ro*" $got]
|
2017-07-19 00:20:30 +08:00
|
|
|
|| ($relro_dynamic && [string match "*.dynamic*" $got])
|
LD/testsuite: Conditionalize the placement of `.got' in GNU_RELRO
Complement commit d345186d0535 ("Check if GNU_RELRO segment is is
generated") and exclude the presence of a `.got' section from implying
the creation of a GNU_RELRO segment for targets which place the section
along with small data, and therefore as it stands cannot have the
section assigned to GNU_RELRO. This is because we currently only
support a single GNU_RELRO segment and we place it at the beginning of
regular data which is then separated from small data by read-write data.
Currently the list of such targets consists of Alpha, Linux HPPA, NetBSD
HPPA, OpenBSD HPPA, Meta, MIPS, Nios II, OpenRISC 1000, RISC-V, SH and
X86-64, as determined by examining default linker scripts produced in a
`--enable-targets=all' build for those that have DATA_SEGMENT_RELRO_END
set and `.got' placed beyond. These targets do not set NO_SMALL_DATA or
DATA_GOT in their respective files in ld/emulparams/*, hovever checking
for the absence of these settings on its own is not very feasible due to
the structure of these files and the lack of support for GNU_RELRO by
some targets in the first place.
Add a separate control for `.got.plt' which does get placed in GNU_RELRO
on MIPS targets even though `.got' does not.
ld/
* testsuite/ld-elf/binutils.exp (binutils_test): Make the
expectation for `.got' in GNU_RELRO segment target-specific.
Handle `.got.plt' separately.
2017-07-19 00:20:30 +08:00
|
|
|
|| ($relro_gotplt && [string match "*.got.plt*" $got])
|
|
|
|
|| ($relro_got && [string match "*.got*" $got])
|
2014-01-10 02:18:19 +08:00
|
|
|
|| [string match "*.eh_frame*" $got]
|
|
|
|
|| [string match "*.gcc_except_table*" $got]
|
|
|
|
|| [string match "*.exception_ranges*" $got]
|
|
|
|
|| [string match "*.ctors*" $got]
|
|
|
|
|| [string match "*.dtors*" $got]
|
|
|
|
|| [string match "*.tdata*" $got]
|
|
|
|
|| [string match "*.preinit_array*" $got]
|
|
|
|
|| [string match "*.init_array*" $got]
|
|
|
|
|| [string match "*.fini_array*" $got] } then {
|
|
|
|
# Fail if GNU_RELRO segment isn't generated, but should.
|
|
|
|
fail "$test_name"
|
|
|
|
return
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2006-06-01 13:40:24 +08:00
|
|
|
send_log "$prog tmpdir/$test\n"
|
2007-08-28 21:21:58 +08:00
|
|
|
set got [remote_exec host "$prog tmpdir/$test"]
|
|
|
|
if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then {
|
2006-05-31 00:45:32 +08:00
|
|
|
send_log "$got\n"
|
2006-06-01 13:40:24 +08:00
|
|
|
fail "$test_name"
|
2006-05-31 00:45:32 +08:00
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2014-12-31 11:09:11 +08:00
|
|
|
send_log "$READELF $readelf_options --wide tmpdir/$test > tmpdir/$test.out\n"
|
|
|
|
set got [remote_exec host "$READELF $readelf_options --wide tmpdir/$test" "" "/dev/null" "tmpdir/$test.out"]
|
2007-08-28 21:21:58 +08:00
|
|
|
if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then {
|
2006-05-31 00:45:32 +08:00
|
|
|
send_log "$got\n"
|
ld testsuite: change unresolved to unsupported/fail
"unresolved" as a test result means runtest returns an error, which
can be confusing when there is no apparent error unless you look in
.log files. In particular many tests are skipped without reporting an
error if no target C compiler is found, but if a target C compiler is
found but won't compile a testcase for some reason we used to mark the
test as unresolved. Which is no more worthy of an error than when
lacking a C compiler entirely.
* testsuite/ld-cdtest/cdtest.exp,
* testsuite/ld-checks/checks.exp,
* testsuite/ld-elf/binutils.exp,
* testsuite/ld-elf/compress.exp,
* testsuite/ld-elf/dwarf.exp,
* testsuite/ld-elf/exclude.exp,
* testsuite/ld-elf/frame.exp,
* testsuite/ld-elf/indirect.exp,
* testsuite/ld-elf/linux-x86.exp,
* testsuite/ld-elf/sec-to-seg.exp,
* testsuite/ld-elf/tls_common.exp,
* testsuite/ld-elfcomm/elfcomm.exp,
* testsuite/ld-elfvers/vers.exp,
* testsuite/ld-elfvsb/elfvsb.exp,
* testsuite/ld-elfweak/elfweak.exp,
* testsuite/ld-ifunc/binutils.exp,
* testsuite/ld-mips-elf/mips-elf-flags.exp,
* testsuite/ld-misc/defsym.exp,
* testsuite/ld-mn10300/mn10300.exp,
* testsuite/ld-plugin/lto.exp,
* testsuite/ld-plugin/plugin.exp,
* testsuite/ld-scripts/align.exp,
* testsuite/ld-scripts/assert.exp,
* testsuite/ld-scripts/crossref.exp,
* testsuite/ld-scripts/defined.exp,
* testsuite/ld-scripts/extern.exp,
* testsuite/ld-scripts/log2.exp,
* testsuite/ld-scripts/map-address.exp,
* testsuite/ld-scripts/phdrs.exp,
* testsuite/ld-scripts/phdrs2.exp,
* testsuite/ld-scripts/script.exp,
* testsuite/ld-scripts/section-flags.exp,
* testsuite/ld-scripts/sizeof.exp,
* testsuite/ld-scripts/weak.exp,
* testsuite/ld-selective/selective.exp,
* testsuite/ld-sh/sh.exp,
* testsuite/ld-shared/shared.exp,
* testsuite/ld-srec/srec.exp,
* testsuite/ld-tic6x/tic6x.exp,
* testsuite/ld-undefined/undefined.exp,
* testsuite/ld-undefined/weak-undef.exp,
* testsuite/lib/ld-lib.exp: Don't use unresolved except after
perror. Instead report "unsupported" or "fail".
2021-02-13 07:21:17 +08:00
|
|
|
fail "$test_name"
|
2006-05-31 00:45:32 +08:00
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
if { [catch {exec cmp tmpdir/$test.exp tmpdir/$test.out}] } then {
|
|
|
|
send_log "tmpdir/$test.exp tmpdir/$test.out differ.\n"
|
2006-06-01 13:40:24 +08:00
|
|
|
fail "$test_name"
|
2006-05-31 00:45:32 +08:00
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2006-06-01 13:40:24 +08:00
|
|
|
pass "$test_name"
|
2006-05-31 00:45:32 +08:00
|
|
|
}
|
|
|
|
|
2006-06-01 13:40:24 +08:00
|
|
|
binutils_test strip "-z max-page-size=0x200000" maxpage1
|
|
|
|
binutils_test strip "-z max-page-size=0x200000 -z common-page-size=0x100000" maxpage1
|
|
|
|
binutils_test strip "-z max-page-size=0x100000" maxpage1
|
|
|
|
binutils_test strip "-z max-page-size=0x100000 -z common-page-size=0x1000" maxpage1
|
|
|
|
|
|
|
|
binutils_test strip "" maxpage1
|
|
|
|
binutils_test strip "-shared" maxpage1
|
|
|
|
binutils_test objcopy "" maxpage1
|
|
|
|
binutils_test objcopy "-shared" maxpage1
|
|
|
|
|
2011-07-14 22:51:09 +08:00
|
|
|
binutils_test strip "-z relro" relro1
|
|
|
|
binutils_test strip "-z relro -shared" relro1
|
|
|
|
binutils_test objcopy "-z relro" relro1
|
|
|
|
binutils_test objcopy "-z relro -shared" relro1
|
bfd/
2012-04-03 Roland McGrath <mcgrathr@google.com>
* elf-nacl.c: New file.
* elf-nacl.h: New file.
* elf32-i386.c (elf_backend_modify_segment_map): Define for
bfd_elf32_i386_nacl_vec.
(elf_backend_modify_program_headers): Likewise.
* elf64-x86-64.c (elf_backend_modify_segment_map): Define for
bfd_elf64_x86_64_nacl_vec and bfd_elf32_x86_64_nacl_vec.
(elf_backend_modify_program_headers): Likewise.
* Makefile.am (BFD32_BACKENDS, BFD64_BACKENDS): Add elf-nacl.lo here.
(BFD32_BACKENDS_CFILES, BFD64_BACKENDS_CFILES): Add elf-nacl.c here.
* Makefile.in: Regenerated.
* configure.in (bfd_elf64_x86_64_nacl_vec): Add elf-nacl.o to tb here.
(bfd_elf32_x86_64_nacl_vec): Likewise.
(bfd_elf64_x86_64_vec, bfd_elf32_x86_64_vec): Likewise.
(bfd_elf64_x86_64_freebsd_vec, bfd_elf64_x86_64_sol2_vec): Likewise.
(bfd_elf64_l1om_vec, bfd_elf64_l1om_freebsd_vec): Likewise.
(bfd_elf64_k1om_vec, bfd_elf64_k1om_freebsd_vec): Likewise.
(bfd_elf32_i386_nacl_vec): Likewise.
(bfd_elf32_i386_sol2_vec, bfd_elf32_i386_freebsd_vec): Likewise.
(bfd_elf32_i386_vxworks_vec, bfd_elf32_i386_vec): Likewise.
* configure: Regenerated.
binutils/testsuite/
2012-04-03 Roland McGrath <mcgrathr@google.com>
* lib/binutils-common.exp (is_elf_format): Consider *-*-nacl* to
be ELF too.
* binutils-all/elfedit-4.d: Add "#as: --64" option.
* binutils-all/i386/i386.exp: Accept nacl targets too.
* binutils-all/x86-64/x86-64.exp: Likewise.
gas/testsuite/
2012-04-03 Roland McGrath <mcgrathr@google.com>
* gas/i386/k1om.d: Add not-target match for *-*-nacl*.
* gas/i386/l1om.d: Likewise.
ld/
2012-04-03 Roland McGrath <mcgrathr@google.com>
* configure.tgt (i[3-7]86-*-nacl*, x86_64-*-nacl*): Handle them.
* emulparams/elf_nacl.sh: New file.
* emulparams/elf_i386_nacl.sh: New file.
* emulparams/elf32_x86_64_nacl.sh: New file.
* emulparams/elf_x86_64_nacl.sh: New file.
* Makefile.am (ALL_EMULATION_SOURCES): Add eelf_i386_nacl.c here.
(ALL_64_EMULATION_SOURCES): Add eelf32_x86_64_nacl.c and
eelf_x86_64_nacl.c here.
(eelf_i386_nacl.c, eelf32_x86_64_nacl.c, eelf_x86_64_nacl.c):
New targets.
* Makefile.in: Regenerated.
* scripttempl/elf.sc: Handle SEPARATE_CODE cases.
ld/testsuite/
2012-04-03 Roland McGrath <mcgrathr@google.com>
* ld-x86-64/ilp32-4-nacl.d: New file.
* ld-x86-64/x86-64.exp: Run it.
* ld-discard/discard.exp: Accept nacl targets too.
* ld-elf/binutils.exp: Likewise.
* ld-elf/comm-data.exp: Likewise.
* ld-elf/elf.exp: Likewise.
* ld-elf/tls_common.exp: Likewise.
* ld-elfvers/vers.exp: Likewise.
* ld-elfvsb/elfvsb.exp: Likewise.
* ld-elfweak/elfweak.exp: Likewise.
* ld-gc/gc.exp: Likewise.
* ld-ifunc/binutils.exp: Likewise.
* ld-ifunc/ifunc.exp: Likewise.
* ld-linkonce/linkonce.exp:Likewise.
* ld-pie/pie.exp: Likewise.
* ld-shared/shared.exp: Likewise.
* ld-undefined/weak-undef.exp: Likewise.
* ld-unique/unique.exp: Likewise.
* ld-x86-64/dwarfreloc.exp: Likewise.
* ld-x86-64/line.exp: Likewise.
* lib/ld-lib.exp (slurp_options): Support global array
options_regsub to apply substitutions to the contents
of options lines read from the file.
* ld-i386/emit-relocs.d: Renamed to ...
* ld-i386/emit-relocs.rd: ... this.
* ld-i386/i386.exp: Accept nacl targets too.
For them, use options_regsub to replace elf_i386 with
elf_i386_nacl in run_dump_test cases; apply the same
substitution in $i386tests; replace foo.rd expectations
files with foo-nacl.rd in $i386tests.
(i386tests): Change emit-relocs.d to emit-relocs.rd here.
* ld-i386/emit-relocs-nacl.rd: New file.
* ld-i386/plt-nacl.pd: New file.
* ld-i386/plt-pic-nacl.pd: New file.
* ld-i386/tlsbin-nacl.rd: New file.
* ld-i386/tlsbindesc-nacl.rd: New file.
* ld-i386/tlsdesc-nacl.rd: New file.
* ld-i386/tlsgdesc-nacl.rd: New file.
* ld-i386/tlsnopic-nacl.rd: New file.
* ld-i386/tlspic-nacl.rd: New file.
* ld-x86-64/x86-64.exp: Accept nacl targets too.
For them, use options_regsub to replace elf_x86_64 with
elf_x86_64_nacl in run_dump_test cases; apply the same
substitution in $x86_64tests; replace foo.rd expectations
files with foo-nacl.rd in $x86_64tests.
Add explicit -melf_x86_64 to ld options in tests that need it,
in case the default emulation is x32 (as it is for x86_64-nacl).
* ld/testsuite/ld-x86-64/plt-nacl.pd: New file.
* ld/testsuite/ld-x86-64/split-by-file-nacl.rd: New file.
* ld/testsuite/ld-x86-64/tlsbin-nacl.rd: New file.
* ld/testsuite/ld-x86-64/tlsbindesc-nacl.rd: New file.
* ld/testsuite/ld-x86-64/tlsdesc-nacl.pd: New file.
* ld/testsuite/ld-x86-64/tlsdesc-nacl.rd: New file.
* ld/testsuite/ld-x86-64/tlsgdesc-nacl.rd: New file.
* ld/testsuite/ld-x86-64/tlspic-nacl.rd: New file.
* ld-i386/hidden2.d: Loosen regexps to match any file format variant,
and not to depend on exact addresses, displacements, etc. where
they are irrelevant.
* ld-i386/pcrel16.d: Likewise.
* ld-i386/pcrel16abs.d: Likewise.
* ld-i386/pr12718.d: Likewise.
* ld-i386/pr12921.d: Likewise.
* ld-i386/reloc.d: Likewise.
* ld-i386/tlsbin.dd: Likewise.
* ld-i386/tlsbin.sd: Likewise.
* ld-i386/tlsbin.td: Likewise.
* ld-i386/tlsbindesc.dd: Likewise.
* ld-i386/tlsbindesc.sd: Likewise.
* ld-i386/tlsbindesc.td: Likewise.
* ld-i386/tlsdesc.dd: Likewise.
* ld-i386/tlsdesc.sd: Likewise.
* ld-i386/tlsdesc.td: Likewise.
* ld-i386/tlsg.sd: Likewise.
* ld-i386/tlsgdesc.dd: Likewise.
* ld-i386/tlsindntpoff.dd: Likewise.
* ld-i386/tlsnopic.dd: Likewise.
* ld-i386/tlsnopic.sd: Likewise.
* ld-i386/tlspic.dd: Likewise.
* ld-i386/tlspic.sd: Likewise.
* ld-i386/tlspic.td: Likewise.
* ld-i386/tlspie2.d: Likewise.
* ld-x86-64/hidden2.d: Likewise.
* ld-x86-64/pcrel16.d: Likewise.
* ld-x86-64/pr12718.d: Likewise.
* ld-x86-64/pr12921.d: Likewise.
* ld-x86-64/protected3.d: Likewise.
* ld-x86-64/tlsbin.dd: Likewise.
* ld-x86-64/tlsbin.sd: Likewise.
* ld-x86-64/tlsbin.td: Likewise.
* ld-x86-64/tlsbindesc.dd: Likewise.
* ld-x86-64/tlsbindesc.sd: Likewise.
* ld-x86-64/tlsbindesc.td: Likewise.
* ld-x86-64/tlsdesc.dd: Likewise.
* ld-x86-64/tlsdesc.sd: Likewise.
* ld-x86-64/tlsdesc.td: Likewise.
* ld-x86-64/tlsg.sd: Likewise.
* ld-x86-64/tlsgd5.dd: Likewise.
* ld-x86-64/tlsgd6.dd: Likewise.
* ld-x86-64/tlsgdesc.dd: Likewise.
* ld-x86-64/tlspic.dd: Likewise.
* ld-x86-64/tlspic.sd: Likewise.
* ld-x86-64/tlspic.td: Likewise.
* ld-x86-64/ilp32-8.d: Match any file format variant.
Use a -Ttext and adjust expected results, to handle variant layouts.
* ld-x86-64/ilp32-9.d: Likewise.
* ld-i386/alloc.t: Remove superfluous OUTPUT_FORMAT statement.
* ld-i386/pr12627.t: Likewise.
* ld-x86-64/abs-l1om.d: Add target: constraint.
* ld-x86-64/protected2-l1om.d: Likewise.
* ld-x86-64/protected3-l1om.d: Likewise.
* ld-x86-64/ilp32-4.d: Likewise.
* ld-x86-64/plt.s: New file.
* ld-x86-64/pltlib.s: New file.
* ld-x86-64/plt.pd: New file.
* ld-x86-64/x86-64.exp (x86_64tests): Add them.
* ld-i386/plt.s: New file.
* ld-i386/pltlib.s: New file.
* ld-i386/plt.pd: New file.
* ld-i386/plt-pic.s: New file.
* ld-i386/plt-pic.pd: New file.
* ld-i386/i386.exp (i386tests): Add them.
2012-04-04 00:01:38 +08:00
|
|
|
if { ([istarget "i?86-*-elf*"]
|
2018-04-16 20:44:01 +08:00
|
|
|
|| [istarget "i?86-*-linux*"]
|
|
|
|
|| [istarget "i?86-*-gnu*"]
|
2007-09-18 08:25:07 +08:00
|
|
|
|| [istarget "x86_64-*-linux*"]
|
2020-06-30 23:47:02 +08:00
|
|
|
|| [istarget "amd64-*-linux*"]) } {
|
2007-09-18 08:25:07 +08:00
|
|
|
binutils_test strip "-z relro -shared" relro2
|
|
|
|
binutils_test objcopy "-z relro -shared" relro2
|
|
|
|
}
|
2006-08-17 10:04:53 +08:00
|
|
|
|
2012-08-13 22:52:54 +08:00
|
|
|
binutils_test strip "-T ${srcdir}/${subdir}/lma.lnk" lma "strip -T lma.lnk"
|
2008-05-07 12:52:35 +08:00
|
|
|
|
2011-05-23 13:29:38 +08:00
|
|
|
set tls_tests { "tdata1" "tdata2" }
|
2010-09-18 10:30:41 +08:00
|
|
|
# hppa64 has its own .tbss section, with different flags.
|
|
|
|
if { ![istarget "hppa64-*-*"] } {
|
2011-05-23 13:29:38 +08:00
|
|
|
lappend tls_tests "tdata3" "tbss1" "tbss2" "tbss3"
|
2010-09-18 10:30:41 +08:00
|
|
|
}
|
2011-05-20 23:33:29 +08:00
|
|
|
set tls_opts {
|
2018-02-17 21:37:37 +08:00
|
|
|
"-z noseparate-code"
|
|
|
|
"-z separate-code"
|
2011-05-20 23:33:29 +08:00
|
|
|
"-z relro"
|
2018-02-17 21:37:37 +08:00
|
|
|
"-shared -z noseparate-code"
|
|
|
|
"-shared -z separate-code"
|
2011-05-20 23:33:29 +08:00
|
|
|
"-shared -z relro"
|
|
|
|
"-z max-page-size=0x100000"
|
|
|
|
"-z max-page-size=0x100000 -z common-page-size=0x1000"
|
2010-09-18 10:30:41 +08:00
|
|
|
}
|
2007-09-18 08:25:07 +08:00
|
|
|
|
2011-05-20 23:33:29 +08:00
|
|
|
foreach testitem $tls_tests {
|
|
|
|
foreach testopt $tls_opts {
|
2011-07-14 22:51:09 +08:00
|
|
|
binutils_test objcopy $testopt $testitem
|
2011-05-20 23:33:29 +08:00
|
|
|
}
|
|
|
|
}
|
2014-12-31 11:09:11 +08:00
|
|
|
|
|
|
|
binutils_test strip "-s" gap "" "-lS"
|