[PATCH v2] ld/testsuite: add support for remote testing in ld-cdtest
Maciej W. Rozycki
macro@orcam.me.uk
Tue Jun 30 23:06:18 GMT 2026
On Tue, 30 Jun 2026, Clément Chigot wrote:
> > > 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.
> >
> > Arf got Maciej's Redhat email rejected. Trying with macro@orcam.me.uk.
>
> Gentle ping to Maciej.
Hectic time here since I got back online on Jun 22nd, after a holiday.
I can see this works correctly here with native `powerpc64le-linux-gnu'
system as well as remote `mips-linux-gnu' cross target, enabling the tests
in the latter case. I have looked through the change and it seems good to
me except for one nit across two places; see below.
> > > 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
> > > @@ -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 } {
I find checking a boolean value against zero superfluous and tougher to
parse for a human being. How about just:
if { $failed } {
instead?
> > > } 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 } {
Likewise.
I can't approve, but I can see Alan has got that covered already and I
suppose won't object my suggestion. Thank you for your contribution, a
worthwhile test robustness improvement.
Maciej
More information about the Binutils
mailing list