aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorRob Savoye <rob@cygnus>1993-08-30 23:08:02 +0000
committerRob Savoye <rob@cygnus>1993-08-30 23:08:02 +0000
commitc79f61db34bcaaec6538703730d43b280762dc39 (patch)
tree822aa5229859bb36e6b6018216a5eaa6ac6f115c /gdb
parent006f1ea2a492ada6a360c6ea5f62b9cf2407e493 (diff)
downloadgdb-c79f61db34bcaaec6538703730d43b280762dc39.zip
gdb-c79f61db34bcaaec6538703730d43b280762dc39.tar.gz
gdb-c79f61db34bcaaec6538703730d43b280762dc39.tar.bz2
Make gdb_exit into default_gdb_exit so it can be shared.
Diffstat (limited to 'gdb')
-rw-r--r--gdb/testsuite/lib/gdb.exp87
1 files changed, 75 insertions, 12 deletions
diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp
index a8ba0ee..880ff0f 100644
--- a/gdb/testsuite/lib/gdb.exp
+++ b/gdb/testsuite/lib/gdb.exp
@@ -15,7 +15,7 @@
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
# Please email any bugs, comments, and/or additions to this file to:
-# DejaGnu@cygnus.com
+# bug-gdb@prep.ai.mit.edu
# This file was written by Fred Fish. (fnf@cygnus.com)
@@ -49,7 +49,7 @@ proc gdb_unload {} {
-re "$prompt $" {}
timeout {
error "couldn't unload file in $GDB (timed out)."
- alldone
+ return -1
}
}
}
@@ -108,19 +108,26 @@ proc runto { function } {
}
send "break $function\n"
+ # The first regexp is what we get with -g, the second without -g.
expect {
-re "Break.* at .*: file .*, line $decimal.\r\n$prompt $" {}
+ -re "Breakpoint \[0-9\]* at 0x\[0-9a-f\]*.*$prompt $" {}
-re "$prompt $" { fail "setting breakpoint at $function" ; return 0 }
timeout { fail "setting breakpoint at $function (timeout)" ; return 0 }
}
send "run\n"
+ # the "at foo.c:36" output we get with -g.
+ # the "in func" output we get without -g.
expect {
-re "The program .* has been started already.* \(y or n\) $" {
send "y\n"
continue -expect
}
- -re "Starting.*Break.*\(\) at .*:$decimal.*$prompt $" { return 1 }
+ -re "Starting.*Break.* at .*:$decimal.*$prompt $" { return 1 }
+ -re "Breakpoint \[0-9\]*, \[0-9xa-f\]* in $function.*$prompt $" {
+ return 1
+ }
-re "$prompt $" { fail "running to $function" ; return 0 }
timeout { fail "running to $function (timeout)" ; return 0 }
}
@@ -163,8 +170,10 @@ proc gdb_test { args } {
set errmess ""
# trap the send so any problems don't crash things
catch "send \"$command\n\"" errmess
- if ![string match "" $errmess] then {
- error "send \"$command\" got expect error \"$errmess\""
+ if [string match "write\(spawn_id=\[0-9\]+\):" $errmess] then {
+ error "sent \"$command\" got expect error \"$errmess\""
+ catch "close"
+ gdb_start
return -1
}
@@ -185,9 +194,11 @@ proc gdb_test { args } {
}
-re "Undefined command:.*$prompt" {
error "Undefined command \"$command\"."
+ set result 1
}
-re "Ambiguous command.*$prompt $" {
error "\"$command\" is not a unique command name."
+ set result 1
}
-re ".*$prompt $" {
if ![string match "" $message] then {
@@ -203,12 +214,13 @@ proc gdb_test { args } {
send "n\n"
error "Got interactive prompt."
}
+ eof {
+ error "Process no longer exists"
+ return -1
+ }
buffer_full {
error "internal buffer is full."
}
- eof {
- error "eof -- pty is hosed."
- }
timeout {
fail "(timeout) $message"
set result 1
@@ -217,10 +229,6 @@ proc gdb_test { args } {
return $result
}
-# "virtual memory exhausted" {
-# error "virtual memory exhausted."
-# }
-
proc gdb_reinitialize_dir { subdir } {
global prompt
global verbose
@@ -253,3 +261,58 @@ proc gdb_reinitialize_dir { subdir } {
}
}
}
+
+
+#
+# gdb_exit -- exit the GDB, killing the target program if necessary
+#
+proc default_gdb_exit {} {
+ global GDB
+ global GDBFLAGS
+ global verbose
+
+ verbose "Quitting $GDB $GDBFLAGS" 1
+
+ # This used to be 1 for unix-gdb.exp
+ set timeout 5
+
+ catch "send \"quit\n\"" result
+ # If the process has gone away (e.g. gdb dumped core), deal with it.
+ if [string match "write\(spawn_id=\[0-9\]+\):" $result] then {
+ catch "close"
+ # FIXME: Shouldn't we call "wait" too?
+ return -1
+ }
+ # FIXME: What is this catch statement doing here? Won't it prevent us
+ # from getting errors that we'd rather see?
+ catch {
+ expect {
+ eof {
+ verbose "Got EOF from $GDB" 2
+ }
+ timeout {
+ verbose "Got TIMEOUT from $GDB" 2
+ }
+ -re "The program is running. Quit anyway.*(y or n) $" {
+ send "y\n"
+ verbose "Killing program being debugged" 2
+ }
+ }
+ }
+
+ # FIXME: Does the catch prevent us from getting errors that we'd rather
+ # see? the old gdb_exit in unix-gdb.exp had "close" without catch
+ # in the above expect statement (for the timeout and -re "The
+ # program... cases) (as well as a catch "close" here).
+ catch "close"
+
+ # Before this was here sometimes "uit" would get sent to the next GDB
+ # (assuming this is immediately followed by gdb_start), which would
+ # cause a loss of syncronization (i.e. all the stuff that swallows a
+ # prompt would swallow the wrong one).
+ wait
+}
+
+
+
+