[PATCH v2] ld/testsuite: add support for remote testing in ld-cdtest
Clément Chigot
chigot@adacore.com
Thu Jun 18 07:58:56 GMT 2026
This converts the existing to code to use "remote_load" allowing
execution on both native and remote targets.
The "diff" between the output and the expected result has been
transformed to the usual regexp_diff. The previous could have been
transformed into `remote_exec build diff` but tends to be fickled with
new lines.
---
ld/testsuite/ld-cdtest/cdtest-nrv.dat | 26 ++++----
ld/testsuite/ld-cdtest/cdtest.dat | 30 ++++-----
ld/testsuite/ld-cdtest/cdtest.exp | 95 +++++++++++++--------------
3 files changed, 73 insertions(+), 78 deletions(-)
diff --git a/ld/testsuite/ld-cdtest/cdtest-nrv.dat b/ld/testsuite/ld-cdtest/cdtest-nrv.dat
index d3f871ff108..76fcbaa03d4 100644
--- a/ld/testsuite/ld-cdtest/cdtest-nrv.dat
+++ b/ld/testsuite/ld-cdtest/cdtest-nrv.dat
@@ -1,13 +1,13 @@
-Constructing Foo(1) "static_foo"
-Constructing Foo(2) "static_foo"
-Constructing Foo(3) "automatic_foo"
-Constructing Foo(4) "default-foo"
-Constructing Foo(5) "other_foo1"
-Constructing Foo(6) "other_foo2"
-Copying Foo(5) "other_foo1" to Foo(6)
-Destructing Foo(6) "other_foo1" (remaining foos: 5)
-Destructing Foo(5) "other_foo1" (remaining foos: 4)
-Destructing Foo(4) "default-foo" (remaining foos: 3)
-Destructing Foo(3) "automatic_foo" (remaining foos: 2)
-Destructing Foo(2) "static_foo" (remaining foos: 1)
-Destructing Foo(1) "static_foo" (remaining foos: 0)
+Constructing Foo\(1\) "static_foo"
+Constructing Foo\(2\) "static_foo"
+Constructing Foo\(3\) "automatic_foo"
+Constructing Foo\(4\) "default-foo"
+Constructing Foo\(5\) "other_foo1"
+Constructing Foo\(6\) "other_foo2"
+Copying Foo\(5\) "other_foo1" to Foo\(6\)
+Destructing Foo\(6\) "other_foo1" \(remaining foos: 5\)
+Destructing Foo\(5\) "other_foo1" \(remaining foos: 4\)
+Destructing Foo\(4\) "default-foo" \(remaining foos: 3\)
+Destructing Foo\(3\) "automatic_foo" \(remaining foos: 2\)
+Destructing Foo\(2\) "static_foo" \(remaining foos: 1\)
+Destructing Foo\(1\) "static_foo" \(remaining foos: 0\)
diff --git a/ld/testsuite/ld-cdtest/cdtest.dat b/ld/testsuite/ld-cdtest/cdtest.dat
index 39be0dbc2c7..c0bdffb3c26 100644
--- a/ld/testsuite/ld-cdtest/cdtest.dat
+++ b/ld/testsuite/ld-cdtest/cdtest.dat
@@ -1,15 +1,15 @@
-Constructing Foo(1) "static_foo"
-Constructing Foo(2) "static_foo"
-Constructing Foo(3) "automatic_foo"
-Constructing Foo(4) "default-foo"
-Initializing Foo(5) "default-foo" with Foo(4)
-Destructing Foo(4) "default-foo" (remaining foos: 4)
-Constructing Foo(5) "other_foo1"
-Constructing Foo(6) "other_foo2"
-Copying Foo(5) "other_foo1" to Foo(6)
-Destructing Foo(6) "other_foo1" (remaining foos: 5)
-Destructing Foo(5) "other_foo1" (remaining foos: 4)
-Destructing Foo(5) "default-foo" (remaining foos: 3)
-Destructing Foo(3) "automatic_foo" (remaining foos: 2)
-Destructing Foo(2) "static_foo" (remaining foos: 1)
-Destructing Foo(1) "static_foo" (remaining foos: 0)
+Constructing Foo\(1\) "static_foo"
+Constructing Foo\(2\) "static_foo"
+Constructing Foo\(3\) "automatic_foo"
+Constructing Foo\(4\) "default-foo"
+Initializing Foo\(5\) "default-foo" with Foo\(4\)
+Destructing Foo\(4\) "default-foo" \(remaining foos: 4\)
+Constructing Foo\(5\) "other_foo1"
+Constructing Foo\(6\) "other_foo2"
+Copying Foo\(5\) "other_foo1" to Foo\(6\)
+Destructing Foo\(6\) "other_foo1" \(remaining foos: 5\)
+Destructing Foo\(5\) "other_foo1" \(remaining foos: 4\)
+Destructing Foo\(5\) "default-foo" \(remaining foos: 3\)
+Destructing Foo\(3\) "automatic_foo" \(remaining foos: 2\)
+Destructing Foo\(2\) "static_foo" \(remaining foos: 1\)
+Destructing Foo\(1\) "static_foo" \(remaining foos: 0\)
diff --git a/ld/testsuite/ld-cdtest/cdtest.exp b/ld/testsuite/ld-cdtest/cdtest.exp
index 89fdd581abb..81547af3c9e 100644
--- a/ld/testsuite/ld-cdtest/cdtest.exp
+++ b/ld/testsuite/ld-cdtest/cdtest.exp
@@ -28,11 +28,7 @@ set test1 "cdtest"
set test2 "cdtest with -Ur"
# This test requires running the executable generated by ld.
-if ![isnative] {
- return
-}
-
-if { [which $CXX_FOR_TARGET] == 0 } {
+if { [which $CXX_FOR_TARGET] == 0 || ![check_execution_available] } {
untested $test1
untested $test2
return
@@ -51,44 +47,39 @@ set expected_output "$srcdir/$subdir/cdtest.dat"
if ![ld_link $CC_FOR_TARGET tmpdir/cdtest "$CFLAGS_FOR_TARGET tmpdir/cdtest-foo.o tmpdir/cdtest-bar.o tmpdir/cdtest-main.o"] {
fail $test1
} else {
- send_log "tmpdir/cdtest >tmpdir/cdtest.out\n"
- verbose "tmpdir/cdtest >tmpdir/cdtest.out"
- catch "exec tmpdir/cdtest >tmpdir/cdtest.out" exec_output
+ set failed 0
- if ![string match "" $exec_output] then {
+ send_log "Running: tmpdir/cdtest\n"
+ verbose "Running: tmpdir/cdtest"
+ set state [remote_load target tmpdir/cdtest]
+ set status [lindex $state 0]
+ set exec_output [lindex $state 1]
+
+ if { $status != "pass" } {
send_log "$exec_output\n"
verbose "$exec_output" 1
-
- fail $test1
+ set failed 1
} else {
- send_log "diff tmpdir/cdtest.out $expected_output\n"
- verbose "diff tmpdir/cdtest.out $expected_output"
- catch "exec diff tmpdir/cdtest.out $expected_output" exec_output
- set exec_output [prune_warnings $exec_output]
-
- if ![string match "" $exec_output] then {
- send_log "$exec_output\n"
- verbose "$exec_output" 1
+ set output_filename "tmpdir/cdtest.out"
+ set_file_contents $output_filename $exec_output
+ send_log [file_contents $output_filename]
+ verbose [file_contents $output_filename] 2
+ if [regexp_diff $output_filename $expected_output] {
send_log "Checking against Named Return Value optimization\n"
verbose "Checking against Named Return Value optimization" 1
set expected_output "$srcdir/$subdir/cdtest-nrv.dat"
-
- send_log "diff tmpdir/cdtest.out $expected_output\n"
- verbose "diff tmpdir/cdtest.out $expected_output"
- catch "exec diff tmpdir/cdtest.out $expected_output" exec_output
- set exec_output [prune_warnings $exec_output]
+ if [regexp_diff $output_filename $expected_output] {
+ set failed 1
+ }
}
+ }
- if [string match "" $exec_output] then {
- pass $test1
- } else {
- send_log "$exec_output\n"
- verbose "$exec_output" 1
-
- fail $test1
- }
+ if { $failed != 0 } {
+ fail $test1
+ } else {
+ pass $test1
}
}
@@ -103,29 +94,33 @@ if ![ld_relocate $ld tmpdir/cdtest.o {-Ur tmpdir/cdtest-foo.o tmpdir/cdtest-bar.
if ![ld_link $CC_FOR_TARGET tmpdir/cdtest "$CFLAGS_FOR_TARGET tmpdir/cdtest.o"] {
fail $test2
} else {
- send_log "tmpdir/cdtest >tmpdir/cdtest.out\n"
- verbose "tmpdir/cdtest >tmpdir/cdtest.out"
- catch "exec tmpdir/cdtest >tmpdir/cdtest.out" exec_output
+ set failed 0
+
+ send_log "Running: tmpdir/cdtest\n"
+ verbose "Running: tmpdir/cdtest"
+ set state [remote_load target tmpdir/cdtest]
+ set status [lindex $state 0]
+ set exec_output [lindex $state 1]
- if ![string match "" $exec_output] then {
+ if { $status != "pass" } {
send_log "$exec_output\n"
- verbose "$exec_output" 1
+ verbose "$exec_output" 1
+ set failed 1
+ } else {
+ set output_filename "tmpdir/cdtest.out"
+ set_file_contents $output_filename $exec_output
+ send_log [file_contents $output_filename]
+ verbose [file_contents $output_filename] 2
+ if [regexp_diff $output_filename $expected_output] {
+ set failed 1
+ }
+ }
+
+ if { $failed != 0 } {
fail $test2
} else {
- send_log "diff tmpdir/cdtest.out $expected_output\n"
- verbose "diff tmpdir/cdtest.out $expected_output"
- catch "exec diff tmpdir/cdtest.out $expected_output" exec_output
- set exec_output [prune_warnings $exec_output]
-
- if [string match "" $exec_output] then {
- pass $test2
- } else {
- send_log "$exec_output\n"
- verbose "$exec_output" 1
-
- fail $test2
- }
+ pass $test2
}
}
}
--
2.43.0
More information about the Binutils
mailing list