Files
binutils-gdb/gdb/testsuite/config/unix-gdb.exp
Fred Fish 400b81b5e6 * config/unix-gdb.exp (gdb_exit): Remove close commands that
may be called after gdb goes away.  Previous versions of expect
	needed these to avoid file descriptor leaks, but they cause
	errors with the current revision of expect.
	* gdb.t00/gdbvars.exp:  Use -re on expected output after
	setting sevenbit-strings.
	* gdb.t04/setvar.exp, gdb.t13/bitfields.exp:  Make commands
	to set sevenbit-strings consistent across tests.
	**** start-sanitize-chill ****
	gdb.t30/chexp.exp, gdb.t31/chillvars.exp:  Make commands to
	set sevenbit-strings consistent across tests.
	**** end-sanitize-chill ****
1993-03-16 23:48:09 +00:00

221 lines
5.6 KiB
Plaintext

# Copyright (C) 1988, 1990, 1991, 1992 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
# Please email any bugs, comments, and/or additions to this file to:
# DejaGnu@cygnus.com
# This file was written by Rob Savoye. (rob@cygnus.com)
# variables that need to set up
#
if ![info exists prompt] then {
set prompt "\(gdb\)"
}
# some convenience abbreviations
#
if ![info exists hex] then {
set hex "0x\[0-9A-Fa-f\]+"
}
if ![info exists decimal] then {
set decimal "\[0-9\]+"
}
#
# gdb_version -- extract and print the version number of gcc
#
proc gdb_version {} {
global GDB
global GDBFLAGS
set tmp [exec echo "q" | $GDB]
set version [lindex $tmp [lsearch $tmp "\[0-9\]*"]]
set version [string range $version 0 [expr [string length $version]-2]]
clone_output "[which $GDB] version $version $GDBFLAGS\n"
}
#
# gdb_unload -- unload a file if one is loaded
#
proc gdb_unload {} {
global verbose
global GDB
global prompt
send "file\n"
expect {
-re "No exec file now\.\r" { continue -expect }
-re "No symbol file now\.\r" { continue -expect }
-re "A program is being debugged already..*Kill it\? \(y or n\) $"\
{ send "y\n"
if $verbose>1 then {
send_user "\t\tKilling previous program being debugged\n"
}
continue -expect
}
-re "Discard symbol table from .*\? \(y or n\) $" {
send "y\n"
continue -expect
}
-re "$prompt $" {}
timeout {
error "Couldn't unload file in $GDB (timed out)."
return -1
}
}
}
#
# gdb_load -- load a file into the debugger.
# return a -1 if anything goes wrong.
#
proc gdb_load { arg } {
global verbose
global loadpath
global loadfile
global GDB
global prompt
set loadfile [file tail $arg]
set loadpath [file dirname $arg]
send "file $arg\n"
expect {
-re "Reading symbols from.*done.*$prompt $"\
{ if $verbose>1 then {
send_user "\t\tLoaded $arg into the $GDB\n"
}
}
-re "has no symbol-table.*$prompt $" {
error "$arg wasn't compiled with \"-g\"\n"
return -1
}
-re "A program is being debugged already..*Kill it\? \(y or n\) $"\
{ send "y\n"
if $verbose>1 then {
send_user "\t\tKilling previous program being debugged\n"
}
continue -expect
}
-re "Load new symbol table from.*\? \(y or n\) $"\
{ send "y\n"
expect {
-re "Reading symbols from.*done.*$prompt $"
{ if $verbose>1 then {
send_user "\t\tLoaded $arg with new symbol table into $GDB\n"
}
}
timeout { error "(timeout) Couldn't load $arg, other program already loaded."; return -1 }
}
}
-re ".*No such file or directory.*$prompt $"\
{ error "($arg) No such file or directory\n"; return -1 }
-re "$prompt $" { error "couldn't load $arg into $GDB."; return -1 }
timeout { error "couldn't load $arg into $GDB (timed out)."; return -1 }
}
}
#
# gdb_exit -- kills the gdb process currently running
#
proc gdb_exit {} {
global verbose
global GDB
global GDBFLAGS
set timeout 1
if $verbose>1 then {
send_user "Quitting $GDB $GDBFLAGS\n"
}
catch "send \"quit\n\"" result
if [string match "write\(spawn_id=\[0-9\]+\): Bad file number" $result] then {
return 0
}
expect {
eof {
if $verbose>1 then {
send_user "Got EOF from $GDB\n"
}
}
timeout {
if $verbose>1 then {
send_user "Got TIMEOUT from $GDB\n"
}
close
}
-re "The program is running. Quit anyway? (y or n) $"\
{ send "y\n"
if $verbose>1 then {
send_user "\t\tKilling program being debugged\n"
}
close
}
}
}
#
# start gdb -- start gdb running
#
proc gdb_start {} {
global verbose
global GDB
global GDBFLAGS
global prompt
global spawn_id
global timeout
if $verbose>1 then {
send_user "Spawning $GDB $GDBFLAGS\n"
}
set oldtimeout $timeout
set timeout [expr "$timeout + 60"]
if [ llength $GDBFLAGS ] then {
spawn $GDB $GDBFLAGS
} else {
spawn $GDB
}
expect {
-re ".*$prompt $" { if $verbose>1 then {
send_user "GDB initialized for native mode\n" }
}
-re "$prompt $" { error "GDB never initialized."; return -1 }
timeout { error "(timeout) GDB never initialized."; return -1 }
}
set timeout $oldtimeout
# force the height to "unlimited", so no pagers get used
send "set height 0\n"
expect -re ".*$prompt $" {}
# force the width to "unlimited", so no wraparound occurs
send "set width 0\n"
expect -re ".*$prompt $" {}
}
expect_after {
"<return>" { send "\n"; error "Window too small." }
-re "\(y or n\) " { send "n\n"; error "Got interactive prompt." }
buffer_full { error "internal buffer is full." }
eof { error "eof -- pty is hosed." }
timeout { error "timeout." }
"virtual memory exhausted" { error "virtual memory exhausted." }
"Undefined command" { error "send string probably wrong." }
}
load_lib gdb.exp
set binpath /s1/users/rob/vxworks/bin/somewhere-bogus-that-needs-configuring
set bin $GDB
gdb_start