This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[patch] Handle eof in nested gdb_expect in gdb_file_cmd
- From: dje at google dot com
- To: gdb-patches at sourceware dot org
- Date: Thu, 20 Sep 2012 15:23:40 -0700
- Subject: [patch] Handle eof in nested gdb_expect in gdb_file_cmd
Hi.
I couldn't understand why the nested gdb_expect in gdb_file_cmd
was behaving weirdly until I realized gdb was crashing
(which my test was trying to trigger :-)).
This patch adds an eof case to the nested gdb_expect.
The outer gdb_expect has an eof case, and there's a comment
there that says it doesn't work. I don't know the details,
but I do know it works for my testcase.
I also cleaned up some of the perror text to make it more consistent.
I will check this in in a few days if there are no objections.
2012-09-20 Doug Evans <dje@google.com>
* lib/gdb.exp (gdb_unload): Change wording of perror text to be
more consistent.
(runto,gdb_debug_format): Ditto.
(gdb_file_cmd): Watch for eof in nested gdb_expect.
Clean up logging and error messages.
Index: testsuite/lib/gdb.exp
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/lib/gdb.exp,v
retrieving revision 1.216
diff -u -p -r1.216 gdb.exp
--- testsuite/lib/gdb.exp 24 Aug 2012 15:26:23 -0000 1.216
+++ testsuite/lib/gdb.exp 20 Sep 2012 22:18:56 -0000
@@ -148,7 +148,7 @@ proc gdb_unload {} {
}
-re "$gdb_prompt $" {}
timeout {
- perror "couldn't unload file in $GDB (timed out)."
+ perror "couldn't unload file in $GDB (timeout)."
return -1
}
}
@@ -438,7 +438,7 @@ proc runto { function args } {
return 0
}
eof {
- fail "running to $function in runto (end of file)"
+ fail "running to $function in runto (eof)"
return 0
}
timeout {
@@ -1218,6 +1218,7 @@ proc gdb_file_cmd { arg } {
global GDB
global last_loaded_file
+ # Save this for the benefit of gdbserver-support.exp.
set last_loaded_file $arg
# Set whether debug info was found.
@@ -1250,12 +1251,12 @@ proc gdb_file_cmd { arg } {
send_gdb "file $arg\n"
gdb_expect 120 {
-re "Reading symbols from.*no debugging symbols found.*done.*$gdb_prompt $" {
- verbose "\t\tLoaded $arg into the $GDB with no debugging symbols"
+ verbose "\t\tLoaded $arg into $GDB with no debugging symbols"
set gdb_file_cmd_debug_info "nodebug"
return 0
}
-re "Reading symbols from.*done.*$gdb_prompt $" {
- verbose "\t\tLoaded $arg into the $GDB"
+ verbose "\t\tLoaded $arg into $GDB"
set gdb_file_cmd_debug_info "debug"
return 0
}
@@ -1268,9 +1269,13 @@ proc gdb_file_cmd { arg } {
return 0
}
timeout {
- perror "(timeout) Couldn't load $arg, other program already loaded."
+ perror "Couldn't load $arg, other program already loaded (timeout)."
return -1
}
+ eof {
+ perror "Couldn't load $arg, other program already loaded (eof)."
+ return -1
+ }
}
}
-re "No such file or directory.*$gdb_prompt $" {
@@ -1278,18 +1283,18 @@ proc gdb_file_cmd { arg } {
return -1
}
-re "$gdb_prompt $" {
- perror "couldn't load $arg into $GDB."
+ perror "Couldn't load $arg into $GDB."
return -1
}
timeout {
- perror "couldn't load $arg into $GDB (timed out)."
+ perror "Couldn't load $arg into $GDB (timeout)."
return -1
}
eof {
# This is an attempt to detect a core dump, but seems not to
# work. Perhaps we need to match .* followed by eof, in which
# gdb_expect does not seem to have a way to do that.
- perror "couldn't load $arg into $GDB (end of file)."
+ perror "Couldn't load $arg into $GDB (eof)."
return -1
}
}
@@ -3316,7 +3321,7 @@ proc get_debug_format { } {
return 1;
}
timeout {
- warning "couldn't check debug format (timed out)."
+ warning "couldn't check debug format (timeout)."
return 1;
}
}