Re: [PATCH v2] ld/testsuite: add support for remote testing in ld-cdtest

Clément Chigot <[email protected]>
Newsgroups gmane.comp.gnu.binutils
Message-ID <CAJ307Ej5cutoMYAt3hGkubD3VsMc0xXtrQtOeRmEWhG5OLwMzg@mail.gmail.com>
On Thu, Jun 18, 2026 at 10:04 AM Clément Chigot <[email protected]> wrote:
>
> On Thu, Jun 18, 2026 at 9:58 AM Clément Chigot <[email protected]> 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 [email protected].

Gentle ping to Maciej.
Otherwise, Alan ok to merge in a few days if he doesn't answer ?

> > ---
> >  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
> >
>
> On Thu, Jun 18, 2026 at 9:58 AM Clément Chigot <[email protected]> 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.
> > ---
> >  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
> >
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.