aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPedro Alves <palves@redhat.com>2014-05-02 00:59:31 +0100
committerPedro Alves <palves@redhat.com>2014-05-02 00:59:31 +0100
commit5b80f00d51b4eb40cb142a633bd657b84aca33eb (patch)
tree98bf476ee9216921e43f1c402b45b26cdfd13aeb
parentb46fa76826669b1496cac329d132485ede779d85 (diff)
downloadgdb-5b80f00d51b4eb40cb142a633bd657b84aca33eb.zip
gdb-5b80f00d51b4eb40cb142a633bd657b84aca33eb.tar.gz
gdb-5b80f00d51b4eb40cb142a633bd657b84aca33eb.tar.bz2
gdb_load: Fix latent bugs
In a test I was writting, I needed a procedure that would connect to the target, and do "load", or equivalent. Years ago, boards would override gdb_load to implement that. Then gdb_reload was added, and gdb_load was relaxed to allow boards avoid the spawing and connecting to the target. This sped up gdbserver testing. See https://www.sourceware.org/ml/gdb-patches/2007-02/msg00318.html. To actually spawn the target and load the executable on the target side, gdb_reload was born: # gdb_reload -- load a file into the target. Called before "running", # either the first time or after already starting the program once, # for remote targets. Most files that override gdb_load should now # override this instead. proc gdb_reload { } { # For the benefit of existing configurations, default to gdb_load. # Specifying no file defaults to the executable currently being # debugged. return [gdb_load ""] } Note the comment about specifying no file. Indeed looking at config/sid.exp, or config/monitor.exp, we see examples of that. However, the default gdb_load itself doesn't handle the case of no file specified. When passed no file, it just calls gdb_file_cmd with no file either, which ends up invocing the "file" command with no argument, which means unloading the file and its symbols... That means calling gdb_reload when testing against native targets is broken. We don't see that today because the only call to gdb_reload that exists today is guarded by target_info exists gdb,do_reload_on_run. The native-extended-gdbserver.exp board is likewise broken here. When [gdb_load ""] is called, the board sets the remote exec-file to "" ... Tested on x86_64 Fedora 17, native, remote gdbserver and extended-remote gdbserver. testsuite/ 2014-05-01 Pedro Alves <palves@redhat.com> * lib/gdb.exp (gdb_load): Extend comment. Skip calling gdb_file_cmd if no file is specified. * boards/native-extended-gdbserver.exp (gdb_load): Use the last_loaded_file to set the remote exec-file.
-rw-r--r--gdb/testsuite/ChangeLog7
-rw-r--r--gdb/testsuite/boards/native-extended-gdbserver.exp3
-rw-r--r--gdb/testsuite/lib/gdb.exp7
3 files changed, 14 insertions, 3 deletions
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index e03d39a..3dac79f 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,5 +1,12 @@
2014-05-01 Pedro Alves <palves@redhat.com>
+ * lib/gdb.exp (gdb_load): Extend comment. Skip calling
+ gdb_file_cmd if no file is specified.
+ * boards/native-extended-gdbserver.exp (gdb_load): Use the
+ last_loaded_file to set the remote exec-file.
+
+2014-05-01 Pedro Alves <palves@redhat.com>
+
* boards/local-remote-host.exp: New file.
2014-05-01 Pedro Alves <palves@redhat.com>
diff --git a/gdb/testsuite/boards/native-extended-gdbserver.exp b/gdb/testsuite/boards/native-extended-gdbserver.exp
index 8bb95db..2c405a8 100644
--- a/gdb/testsuite/boards/native-extended-gdbserver.exp
+++ b/gdb/testsuite/boards/native-extended-gdbserver.exp
@@ -78,12 +78,13 @@ proc mi_gdb_start { args } {
#
proc gdb_load { arg } {
global gdb_prompt
+ global last_loaded_file
if { $arg != "" } {
if [gdb_file_cmd $arg] then { return -1 }
}
- send_gdb "set remote exec-file $arg\n"
+ send_gdb "set remote exec-file $last_loaded_file\n"
gdb_expect {
-re "$gdb_prompt $" {}
timeout {
diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp
index 07249c6..3125e7a 100644
--- a/gdb/testsuite/lib/gdb.exp
+++ b/gdb/testsuite/lib/gdb.exp
@@ -3491,11 +3491,14 @@ proc gdb_load_shlibs { args } {
}
#
-# gdb_load -- load a file into the debugger.
+# gdb_load -- load a file into the debugger. Specifying no file
+# defaults to the executable currently being debugged.
# Many files in config/*.exp override this procedure.
#
proc gdb_load { arg } {
- return [gdb_file_cmd $arg]
+ if { $arg != "" } {
+ return [gdb_file_cmd $arg]
+ }
}
# gdb_reload -- load a file into the target. Called before "running",