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..ccfcbaf226a 100644
--- a/ld/testsuite/ld-cdtest/cdtest.exp
+++ b/ld/testsuite/ld-cdtest/cdtest.exp
@@ -27,11 +27,6 @@
 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 } {
     untested $test1
     untested $test2
@@ -51,44 +46,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 +93,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
 
-	if ![string match "" $exec_output] then {
-	    send_log "$exec_output\n"
-	    verbose  "$exec_output" 1
+	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]
 
-	    fail $test2
+	if { $status != "pass" } {
+	    send_log "$exec_output\n"
+	    verbose "$exec_output" 1
+	    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 {
-		pass $test2
-	    } else {
-		send_log "$exec_output\n"
-		verbose  "$exec_output" 1
-
-		fail $test2
+	    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 {
+	pass $test2
+    }
 }
