[binutils-gdb] [gdb/testsuite] Handle remotedir in remote_upload

Tom de Vries vries@sourceware.org
Mon Mar 20 16:06:49 GMT 2023


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=80d6c79866f16cb2e184ea4952e2ca7f797dee44

commit 80d6c79866f16cb2e184ea4952e2ca7f797dee44
Author: Tom de Vries <tdevries@suse.de>
Date:   Mon Mar 20 17:06:49 2023 +0100

    [gdb/testsuite] Handle remotedir in remote_upload
    
    Dejagnu's remotedir implementation has support in remote_exec and
    remote_download, but not remote_upload.
    
    Consider the following scenario:
    - downloading an executable to target,
    - running it,
    - uploading a file produced by the executable
    while assuming remote target user remote-target with homedir
    /home/remote-target and remotedir set to /home/remote-target/tmp.
    
    Concretely, it looks like this:
    ...
     # binfile == "$outputs/gdb.abc/a.out"
     set target_binfile [remote_download target $binfile]
     # target_binfile == "/home/remote-target/tmp/a.out"
     remote_exec target $target_binfile
     # Running $target_binfile produced /home/remote-target/tmp/result.txt.
     set result [remote_upload target /home/remote-target/tmp/result.txt \
                     $outputs/gdb.abc/result.txt]
     # result == $outputs/gdb.abc/result.txt.
    ...
    
    Add a remote_upload implementation that also handles remotedir in lib/gdb.exp,
    overriding dejagnu's remote_upload, such that we can simplify the
    remote_upload call to:
    ...
     set result [remote_upload target result.txt $outputs/gdb.abc/result.txt]
    ...
    
    Tested on x86_64-linux.
    
    PR testsuite/30250
    Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30250

Diff:
---
 gdb/testsuite/gdb.testsuite/board-sanity.exp |  4 +---
 gdb/testsuite/lib/gdb.exp                    | 15 +++++++++++++++
 2 files changed, 16 insertions(+), 3 deletions(-)

diff --git a/gdb/testsuite/gdb.testsuite/board-sanity.exp b/gdb/testsuite/gdb.testsuite/board-sanity.exp
index d6402262f60..eb19db8699b 100644
--- a/gdb/testsuite/gdb.testsuite/board-sanity.exp
+++ b/gdb/testsuite/gdb.testsuite/board-sanity.exp
@@ -77,9 +77,7 @@ proc test_remote { remote host_is_target } {
 	}
 
     with_test_prefix copy-from-remote {
-	# Note: we're using $remote_file here instead of $file, otherwise
-	# this breaks with board_info remotedir.
-	set build_file [remote_upload $remote $remote_file]
+	set build_file [remote_upload $remote $file]
 	gdb_assert { [string equal [file tail $build_file] $file] == 1 } \
 	    "remote_upload returns valid value"
 	
diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp
index 86a05156e0a..111a158e7ce 100644
--- a/gdb/testsuite/lib/gdb.exp
+++ b/gdb/testsuite/lib/gdb.exp
@@ -5917,6 +5917,21 @@ proc gdb_touch_execfile { binfile } {
     }
 }
 
+# Override of dejagnu's remote_upload, which doesn't handle remotedir.
+
+rename remote_upload dejagnu_remote_upload
+proc remote_upload { dest srcfile args } {
+    if { [is_remote $dest] && [board_info $dest exists remotedir] } {
+	set remotedir [board_info $dest remotedir]
+	if { ![string match "$remotedir*" $srcfile] } {
+	    # Use hardcoded '/' as separator, as in dejagnu's remote_download.
+	    set srcfile $remotedir/$srcfile
+	}
+    }
+
+    return [dejagnu_remote_upload $dest $srcfile {*}$args]
+}
+
 # Like remote_download but provides a gdb-specific behavior.
 #
 # If the destination board is remote, the local file FROMFILE is transferred as


More information about the Gdb-cvs mailing list