[PATCHv2] gdb: Don't call gdb_load_shlib unless GDB is running
Commit Message
Keith,
Thanks for your feedback.
I've updated the patch to add a check inside gdb_load_shlib as your
suggested, this should catch any future miss-uses of the function.
Thanks,
Andrew
---
The gdb_load_shlib function will, on remote targets, try to run some
GDB commands. This obviously isn't going to work unless GDB is
running.
The gdb.trace/tspeed.exp test calls gdb_load_shlib before starting
GDB. Don't do that.
The failure that's triggered is actually DeJaGNU complaining that the
variable $use_gdb_stub doesn't exist, this is only created when GDB is
started. Something like this should trigger a failure:
make check-gdb \
RUNTESTFLAGS="--target_board=remote-gdbserver-on-localhost \
gdb.trace/tspeed.exp"
This commit also adds a check to gdb_load_shlib that GDB is running.
The check is always performed, so this should catch cases where a GDB
developer adds a use of gdb_load_shlib but doesn't test their code
with a remote target.
gdb/testsuite/ChangeLog:
* gdb.trace/tspeed.exp: Only call gdb_load_shlib after gdb has
started.
* lib/gdb.exp (gdb_load_shlib): Call perror if GDB is not running.
---
gdb/testsuite/ChangeLog | 6 ++++++
gdb/testsuite/gdb.trace/tspeed.exp | 4 +++-
gdb/testsuite/lib/gdb.exp | 6 ++++++
3 files changed, 15 insertions(+), 1 deletion(-)
Comments
>>>>> "Andrew" == Andrew Burgess <andrew.burgess@embecosm.com> writes:
Andrew> This commit also adds a check to gdb_load_shlib that GDB is running.
Andrew> The check is always performed, so this should catch cases where a GDB
Andrew> developer adds a use of gdb_load_shlib but doesn't test their code
Andrew> with a remote target.
Andrew> gdb/testsuite/ChangeLog:
Andrew> * gdb.trace/tspeed.exp: Only call gdb_load_shlib after gdb has
Andrew> started.
Andrew> * lib/gdb.exp (gdb_load_shlib): Call perror if GDB is not running.
Thank you. This patch is OK.
Tom
@@ -19,7 +19,6 @@ standard_testfile
set executable $testfile
set ipalib [get_in_proc_agent]
-gdb_load_shlib $ipalib
if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile \
executable [concat {debug nowarnings c} shlib=$ipalib]] != "" } {
@@ -41,6 +40,7 @@ proc prepare_for_trace_test {} {
global executable
clean_restart $executable
+ gdb_load_shlib $ipalib
runto_main
@@ -126,6 +126,8 @@ proc gdb_trace_collection_test {} {
}
clean_restart $executable
+gdb_load_shlib $ipalib
+
runto_main
if { ![gdb_target_supports_trace] } then {
@@ -4483,6 +4483,12 @@ proc gdb_remote_download {dest fromfile {tofile {}}} {
# Copy the listed library to the target.
proc gdb_load_shlib { file } {
+ global gdb_spawn_id
+
+ if ![info exists gdb_spawn_id] {
+ perror "gdb_load_shlib: GDB is not running"
+ }
+
set dest [gdb_remote_download target [shlib_target_file $file]]
if {[is_remote target]} {