Make gdb_exit into default_gdb_exit so it can be shared.

This commit is contained in:
Rob Savoye 1993-08-30 23:08:02 +00:00
parent 006f1ea2a4
commit c79f61db34

View file

@ -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
}