5f2912ccce
(gdb_target_udi): New procedure to set the UDI target. (gdb_start): Don't remove *_soc files. Use gdb_target_udi. * gdb.t00/default.exp: Added expected failures for a29k-*-udi. Added waits for prompts after several question responses. Added some more responses used by a29k-amd-udi-gdb. * gdb.t01/run.exp, gdb.t06/break.exp: Added a29k-*-udi support: pass different arguments, restart UDI connection after program completion. * gdb.t02/whatis.exp, gdb.t03/ptype.exp, gdb.t07/watchpoint.exp, gdb.t08/opaque.exp, gdb.t11/list.exp, gdb.t12/scope.exp, gdb.t15/funcargs.exp, gdb.t16/printcmds.exp, gdb.t20/misc.exp, gdb.t21/cplusfuncs.exp: Added expected failures for a29k-*-*. * gdb.t04/setvar.exp, gdb.t05/expr.exp, gdb.t07/watchpoint.exp, gdb.t08/opaque.exp, gdb.t12/scope.exp, gdb.t13/bitfields.exp, gdb.t15/funcargs.exp, gdb.t16/printcmds.exp, gdb.t17/callfuncs.exp, gdb.t20/classes.exp, gdb.t20/inherit.exp, gdb.t20/misc.exp, gdb.t22/virtfuncs.exp: Restart UDI connection after program completion. * gdb.t10/crossload.exp: Does not work for a29k-*-*, since BFD is compiled with a SELECT_VECS setting. * gdb.t15/funcargs.exp: Use argument to backtrace to prevent infinite recursion. * gdb.t20/classes.exp, gdb.t20/inherit.exp, gdb.t22/virtfuncs.exp: Added checks for COFF results, and made them expected failures for all targets. It would be better to make them expected failures for COFF targets only.
218 lines
5.2 KiB
Text
218 lines
5.2 KiB
Text
# Test Framework Driver
|
|
# 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)
|
|
|
|
#
|
|
# NOTE: these test assume that there is a udi_soc file in th
|
|
#
|
|
|
|
# these need to be initialized only if site.exp doesn't set them
|
|
set prompt "\(gdb\)"
|
|
|
|
if ![info exists prompt] then {
|
|
set prompt "\(gdb\)"
|
|
}
|
|
|
|
#
|
|
# gdb_version -- extract and print the version number of gdb
|
|
#
|
|
proc gdb_version {} {
|
|
global GDB
|
|
global GDBFLAGS
|
|
global prompt
|
|
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_load -- load a file into the GDB.
|
|
# Returns a 0 if there was an error,
|
|
# 1 if it load successfully.
|
|
#
|
|
proc gdb_load { arg } {
|
|
global verbose
|
|
global loadpath
|
|
global loadfile
|
|
global prompt
|
|
global spawn_id
|
|
global GDB
|
|
global expect_out
|
|
|
|
send "load $arg\n"
|
|
if $verbose>1 then {
|
|
send_user "Loading $arg into $GDB\n"
|
|
}
|
|
expect {
|
|
-re "Loading.*\.text.*\.data.*\.bss.*Reading symbols from $arg.+done.*$prompt $" {
|
|
if $verbose>1 then {
|
|
send_user "Loaded $arg into $GDB\n"
|
|
}
|
|
return 1
|
|
}
|
|
-re "$prompt $" {
|
|
if $verbose>1 then {
|
|
error "GDB couldn't load."
|
|
}
|
|
}
|
|
timeout {
|
|
if $verbose>1 then {
|
|
error "Timed out trying to load $arg."
|
|
}
|
|
}
|
|
}
|
|
if [info exists expect_out(buffer)] then {
|
|
send_log $expect_out(buffer)
|
|
}
|
|
return 0
|
|
}
|
|
|
|
#
|
|
# gdb_exit -- exit the GDB
|
|
#
|
|
proc gdb_exit {} {
|
|
global GDB
|
|
global GDBFLAGS
|
|
global verbose
|
|
|
|
set timeout 5
|
|
send "quit\n"
|
|
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"
|
|
}
|
|
}
|
|
-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"
|
|
}
|
|
}
|
|
}
|
|
if $verbose>1 then {
|
|
send_user "Quitting $GDB $GDBFLAGS\n"
|
|
}
|
|
}
|
|
|
|
#
|
|
# gdb_target_udi
|
|
# Set gdb to the desired UDI target
|
|
#
|
|
proc gdb_target_udi { } {
|
|
global targetname
|
|
global prompt
|
|
global verbose
|
|
|
|
# set targets hostname
|
|
send "target udi $targetname\n"
|
|
set timeout 60
|
|
expect {
|
|
-re "TIP UDI 1.2 Conformant.*$prompt $" {
|
|
if $verbose>1 then {
|
|
send_user "Set target to $targetname\n"
|
|
}
|
|
}
|
|
-re "A program is being debugged already. Kill it\? \(y or n\)" {
|
|
send "y\n"
|
|
continue -expect
|
|
}
|
|
timeout {
|
|
error "Couldn't set target for UDI."
|
|
alldone
|
|
}
|
|
}
|
|
set timeout 10
|
|
}
|
|
|
|
#
|
|
# gdb_start -- start GDB running. This assumes that there the
|
|
# UDICONF enviroment variable is set.
|
|
#
|
|
proc gdb_start { } {
|
|
global GDB
|
|
global GDBFLAGS
|
|
global spawn_id
|
|
global prompt
|
|
global verbose
|
|
|
|
set GDB [which $GDB]
|
|
# start GDB
|
|
if [ llength $GDBFLAGS ] then {
|
|
spawn $GDB $GDBFLAGS
|
|
} else {
|
|
spawn $GDB
|
|
}
|
|
expect {
|
|
-re "GDB.*$prompt $" {
|
|
if $verbose>1 then {
|
|
send_user "$GDB initialized for cross mode\n\n"
|
|
}
|
|
}
|
|
-re "$prompt $" { error "GDB never initialized."; return -1 }
|
|
timeout { error "(timeout) GDB never initialized.";
|
|
return -1 }
|
|
}
|
|
|
|
# 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 $" {}
|
|
# set the default arguments to "main", so that "run" with no
|
|
# arguments will work correctly.
|
|
send "set args main\n"
|
|
expect -re ".*$prompt $" {}
|
|
|
|
if $verbose>1 then {
|
|
send_user "Setting up target, Please wait...\n"
|
|
}
|
|
|
|
gdb_target_udi
|
|
}
|
|
|
|
expect_after {
|
|
"<return>" { send "\n"; clone_output "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
|
|
|
|
gdb_start
|
|
|
|
# make sure gdb has actually started, otherwise if the first test
|
|
# timesout, DejaGnu crashes
|
|
send "\n"
|
|
expect {
|
|
-re "$prompt"
|
|
}
|