aboutsummaryrefslogtreecommitdiff
path: root/ld
diff options
context:
space:
mode:
authorNick Alcock <nick.alcock@oracle.com>2021-11-17 14:47:44 +0000
committerNick Alcock <nick.alcock@oracle.com>2022-03-23 13:38:16 +0000
commita12c988767e5bd6b6a15dd6ca5e3b277f5627c64 (patch)
treef978e69ca1980d8abeb156d4ce1cb52172e41d8b /ld
parent5aee45879681a7a76754a25b3f4f96b4529f7ae3 (diff)
downloadfsf-binutils-gdb-a12c988767e5bd6b6a15dd6ca5e3b277f5627c64.zip
fsf-binutils-gdb-a12c988767e5bd6b6a15dd6ca5e3b277f5627c64.tar.gz
fsf-binutils-gdb-a12c988767e5bd6b6a15dd6ca5e3b277f5627c64.tar.bz2
ld, testsuite: improve CTF-availability test
The test for -gctf support in the compiler is used to determine when to run the ld-ctf tests and most of those in libctf. Unfortunately, because it uses check_compiler_available and compile_one_cc, it will fail whenever the compiler emits anything on stderr, even if it actually does support CTF perfectly well. So, instead, ask the compiler to emit assembler output and grep it for references to ".ctf": this is highly unlikely to be present if the compiler does not support CTF. (This will need adjusting when CTF grows support for non-ELF platforms that don't dot-prepend their section names, but right now the linker doesn't link CTF on any such platforms in any case.) With this in place we can do things like run all the libctf tests under leak sanitizers etc even if those spray warnings on simple CTF compilations, rather than being blocked from doing so just when we would most like to. ld/ * testsuite/lib/ld-lib.exp (check_ctf_available): detect CTF even if a CTF-capable compiler emits warnings.
Diffstat (limited to 'ld')
-rw-r--r--ld/testsuite/lib/ld-lib.exp24
1 files changed, 18 insertions, 6 deletions
diff --git a/ld/testsuite/lib/ld-lib.exp b/ld/testsuite/lib/ld-lib.exp
index 5c7771f..ec27388 100644
--- a/ld/testsuite/lib/ld-lib.exp
+++ b/ld/testsuite/lib/ld-lib.exp
@@ -1628,24 +1628,36 @@ proc compile_one_cc { src output additional_flags } {
return [run_host_cmd_yesno "$CC_FOR_TARGET" "$flags $CFLAGS_FOR_TARGET $additional_flags $src -o $output"]
}
-# Returns true if the target compiler supports -gctf
+# Returns true if the target compiler supports -gctf.
proc check_ctf_available { } {
global ctf_available_saved
if {![info exists ctf_available_saved]} {
- if { ![check_compiler_available] } {
- set ctf_available_saved 0
- } else {
+ set ctf_available_saved 0
+
+ # Don't check for compiler availability, because that FNs if the
+ # compiler is available but emits warnings. An unavailable
+ # compiler will fail this test anyway.
+
+ if ([check_compiler_available]) {
set basename "tmpdir/ctf_available[pid]"
set src ${basename}.c
- set output ${basename}.o
+ set output ${basename}.s
set f [open $src "w"]
puts $f "int main() { return 0; }"
close $f
- set ctf_available_saved [compile_one_cc $src $output "-gctf -c"]
+ compile_one_cc $src $output "-gctf -S -c"
remote_file host delete $src
+ if {! [remote_file host exists $output] } {
+ file delete $src
+ return 0
+ }
+ set status [remote_exec host fgrep ".ctf $output"]
remote_file host delete $output
file delete $src
+ if { [lindex $status 0] == 0 } {
+ set ctf_available_saved 1
+ }
}
}
return $ctf_available_saved