mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-01-24 12:35:55 +08:00
a2c5833233
The result of running etc/update-copyright.py --this-year, fixing all the files whose mode is changed by the script, plus a build with --enable-maintainer-mode --enable-cgen-maint=yes, then checking out */po/*.pot which we don't update frequently. The copy of cgen was with commit d1dd5fcc38ead reverted as that commit breaks building of bfp opcodes files.
225 lines
8.6 KiB
Plaintext
225 lines
8.6 KiB
Plaintext
# Copyright (C) 2014-2022 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.
|
|
|
|
# Don't run on alpha-vms which requires linking with other libraries,
|
|
# or on targets that complain about relocations in read-only sections.
|
|
if { [istarget *-*-vms]
|
|
|| [istarget bfin-*-*]
|
|
|| [istarget frv-*-*]
|
|
|| [istarget lm32-*-*] } then {
|
|
return
|
|
}
|
|
|
|
# Check that scripts using the "=" sysroot-prefix work, for both
|
|
# toolchains with and without --sysroot support.
|
|
|
|
# We test this by emitting archives into a subdirectory and expect
|
|
# constructs such as GROUP and AS_NEEDED (the only two constructs
|
|
# actually tested) to find them (or not); both quoted and unquoted
|
|
# paths, with different prefixes on the path and with --sysroot
|
|
# present or not, with different arguments.
|
|
|
|
# Find out if the linker supports sysroot; if it was configured
|
|
# "--with-sysroot X" where X is a non-empty string.
|
|
set with_sysroot [check_sysroot_available]
|
|
verbose -log "Has (non-empty) sysroot support: $with_sysroot; \"$ld_sysroot\""
|
|
|
|
# We also need to know if the sysroot is "/" (a common use) as some of
|
|
# the tests prepend sysroot to the current directory and on most
|
|
# common systems "//dir/path" is handled as "/dir/path".
|
|
if {$ld_sysroot == "/"} {
|
|
# Use a modified test-subset for testing.
|
|
set with_sysroot 3
|
|
}
|
|
|
|
# The linker on Windows expects Windows style paths.
|
|
# MSYS2 runtime converts paths in the command line automatically.
|
|
# However, for our test linker scripts, we have to prepare
|
|
# the correct paths manually.
|
|
proc get_base_dir_for_scripts {} {
|
|
global base_dir
|
|
global get_base_dir_for_scripts_saved
|
|
|
|
if { ![info exists get_base_dir_for_scripts_saved] } {
|
|
set get_base_dir_for_scripts_saved $base_dir
|
|
if { ([ishost *-*-cygwin] || [ishost *-*-mingw*] )
|
|
&& ![catch "exec cygpath -m $base_dir" base_dir_converted] } {
|
|
set get_base_dir_for_scripts_saved $base_dir_converted
|
|
}
|
|
}
|
|
return $get_base_dir_for_scripts_saved
|
|
}
|
|
|
|
# Entries in the array-tables:
|
|
# 0: Testtype; an inclusive bitmask indicating that the test should run on a
|
|
# build configured for: 1: non-sysroot, 2: sysroot != "/", 4: sysroot == "/".
|
|
# 1: Description, forming part of the dejagnu test-name.
|
|
# 2: Replacement for @p@.
|
|
# 3: Option to pass to linker (usually something with --sysroot).
|
|
# 4: Message substring; a substring to match against the error message
|
|
# if an error is expected, or empty if no error is expected.
|
|
#
|
|
# If the replacement or option contains @cwd@, that'll be replaced by
|
|
# "$base_dir/tmpdir", the full path to the location of the script
|
|
# (with the actual files in the "sysroot" subdirectory). If the
|
|
# description contains @cwd@, that will be replaced by "<CWD>".
|
|
|
|
set sysroot_prefix_tests {
|
|
{7 "plain -Lpath" "sysroot/" {} ""}
|
|
{7 "root-anchored but -Lpath" "/sysroot/" {} "cannot find"}
|
|
{7 "full-path" "@cwd@/sysroot/" {} ""}
|
|
{7 "root-anchored =-prefixed -Lpath" "=/sysroot/" {} "cannot find"}
|
|
{7 "root-anchored $SYSROOT-prefixed -Lpath" "$SYSROOT/sysroot/" {} "cannot find"}
|
|
{7 "plain =-prefixed with empty" "=sysroot/" "--sysroot=" ""}
|
|
{7 "plain $SYSROOT-prefixed with empty" "$SYSROOTsysroot/" "--sysroot=" ""}
|
|
{6 "root-anchored but script outside sysroot" "/" "--sysroot=@cwd@/sysroot" "cannot find"}
|
|
{6 "root-anchored and script inside sysroot" "/sysroot/" "--sysroot=@cwd@" ""}
|
|
{6 "root-anchored =-prefixed script outside" "=/" "--sysroot=@cwd@/sysroot" ""}
|
|
{6 "root-anchored $SYSROOT-prefixed script outside" "$SYSROOT/" "--sysroot=@cwd@/sysroot" ""}
|
|
{6 "root-anchored =-prefixed script inside" "=/sysroot/" "--sysroot=@cwd@" ""}
|
|
{6 "root-anchored $SYSROOT-prefixed script inside" "$SYSROOT/sysroot/" "--sysroot=@cwd@" ""}
|
|
{2 "plain =-prefixed without but -Lpath" "=sysroot/" {} "cannot find"}
|
|
{2 "plain $SYSROOT-prefixed without but -Lpath" "$SYSROOTsysroot/" {} "cannot find"}
|
|
{2 "full-path =-prefixed without" "=@cwd@/sysroot/" {} "cannot find"}
|
|
{2 "full-path $SYSROOT-prefixed without" "$SYSROOT@cwd@/sysroot/" {} "cannot find"}
|
|
{1 "plain =-prefixed -Lpath" "=sysroot/" {} ""}
|
|
{1 "plain $SYSROOT-prefixed -Lpath" "$SYSROOTsysroot/" {} ""}
|
|
{1 "full-path =-prefixed without" "=@cwd@/sysroot/" {} ""}
|
|
{1 "full-path $SYSROOT-prefixed without" "$SYSROOT@cwd@/sysroot/" {} ""}
|
|
}
|
|
|
|
# May have to provide a target-specific assembler option for some targets.
|
|
set gasopt ""
|
|
|
|
# Intentionally similar to the ubiquitous glibc libc.so script.
|
|
set template "GROUP ( @q@@p@tmp/ldtest-xyzzy/libx.a@q@ AS_NEEDED ( @q@@p@tmp/ldtest-xyzzy/liby.a@q@ ) )"
|
|
|
|
# Set up everything from the variables above.
|
|
proc sysroot_prefix_test_setup { } {
|
|
global as gasopt srcdir subdir ar
|
|
|
|
if {![ld_assemble_flags $as $gasopt $srcdir/$subdir/pr14962a.s tmpdir/main.o]} {
|
|
perror "Error assembling a trivial file for sysroot-prefix tests framework"
|
|
return 0
|
|
}
|
|
|
|
# We need somewhere under tmpdir to point the sysroot, a subdirectory
|
|
# that is benevolent if it escapes into "/".
|
|
remote_exec host "mkdir -p tmpdir/sysroot/tmp/ldtest-xyzzy"
|
|
|
|
# 0: a "main" object that needs a symbol (x) (most portably by
|
|
# using a pre-existing file). 1: a library with an object that
|
|
# provides that symbol and needs another one (y). 2: another
|
|
# library with a third object providing that other symbol.
|
|
set sysroot_prefix_tests_framework_objects {
|
|
{"pr14962a.s" "main" ""}
|
|
{"sysroot-prefix-x.s" "x" "x"}
|
|
{"sysroot-prefix-y.s" "y" "y"}
|
|
}
|
|
|
|
foreach test_object $sysroot_prefix_tests_framework_objects {
|
|
set sname [lindex $test_object 0]
|
|
set onamebase [lindex $test_object 1]
|
|
set oname "tmpdir/$onamebase.o"
|
|
set libnamebase [lindex $test_object 2]
|
|
|
|
if ![ld_assemble_flags $as $gasopt $srcdir/$subdir/$sname $oname] {
|
|
perror "Error assembling trivial file $sname for sysroot-prefix tests framework"
|
|
return 0
|
|
}
|
|
|
|
if { [string length $libnamebase] != 0 &&
|
|
![ar_simple_create $ar "" tmpdir/sysroot/tmp/ldtest-xyzzy/lib$libnamebase.a $oname] } {
|
|
perror "Error creating archive $libnamebase for sysroot-prefix tests framework"
|
|
return 0
|
|
}
|
|
}
|
|
|
|
return 1
|
|
}
|
|
|
|
# Run a single linker test.
|
|
proc single_sysroot_prefix_test { type xtestname finalscript ldopt errstr } {
|
|
global ld exec_output with_sysroot
|
|
set scriptname "tmpdir/libsysroottest.a"
|
|
set testname "sysroot-prefix $xtestname"
|
|
|
|
if { ($type & ($with_sysroot + 1)) == 0 } {
|
|
unsupported $testname
|
|
return
|
|
}
|
|
|
|
if [catch { set ofd [open $scriptname w] } x] {
|
|
perror "$x"
|
|
unresolved $testname
|
|
return
|
|
}
|
|
|
|
puts $ofd "$finalscript"
|
|
close $ofd
|
|
verbose -log "script $scriptname: $finalscript"
|
|
|
|
set res [ld_link $ld tmpdir/output "$ldopt tmpdir/main.o -Ltmpdir -lsysroottest"]
|
|
set ld_output "$exec_output"
|
|
set expect_success [expr [string length $errstr] == 0]
|
|
|
|
if { $res == $expect_success &&
|
|
($expect_success || [regexp "$errstr" $ld_output]) } {
|
|
pass $testname
|
|
catch "exec rm -f $scriptname"
|
|
} {
|
|
fail $testname
|
|
}
|
|
}
|
|
|
|
# Run all interesting variants from an option-and-path combination.
|
|
proc run_sysroot_prefix_test { type name templ p ldopt errstr } {
|
|
global base_dir
|
|
set qlist { { "quoted" "\"" } { "unquoted" {} } }
|
|
|
|
regsub -all "@p@" $templ $p templ
|
|
regsub -all "@cwd@" $templ "[get_base_dir_for_scripts]/tmpdir" templ
|
|
regsub -all "@cwd@" $ldopt "$base_dir/tmpdir" ldopt
|
|
regsub -all "@cwd@" $name "<CWD>" name
|
|
|
|
foreach qitems $qlist {
|
|
regsub -all "@q@" $templ [lindex $qitems 1] finalscript
|
|
single_sysroot_prefix_test $type "$name, [lindex $qitems 0]" \
|
|
$finalscript $ldopt $errstr
|
|
}
|
|
}
|
|
|
|
# Run a list of option-and-path test-combinations.
|
|
proc run_sysroot_prefix_tests { descr templ items } {
|
|
foreach item $items {
|
|
set type [lindex $item 0]
|
|
set name [lindex $item 1]
|
|
set p [lindex $item 2]
|
|
set ldopt [lindex $item 3]
|
|
set errstr [lindex $item 4]
|
|
run_sysroot_prefix_test $type "$descr $name" $templ "$p" "$ldopt" "$errstr"
|
|
}
|
|
}
|
|
|
|
if ![sysroot_prefix_test_setup] {
|
|
return
|
|
}
|
|
|
|
run_sysroot_prefix_tests "common" $template $sysroot_prefix_tests
|