From 31ca3f4ce56553a2bf5033a471bea07f7530d2b0 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Thu, 25 Feb 1993 19:15:32 +0000 Subject: [PATCH] * configure.in (mips-idt-ecoff): New target. * config/mips-gdb.exp: New file for remote board using MIPS remote debugging protocol. --- gdb/testsuite/config/.Sanitize | 1 + gdb/testsuite/config/mips-gdb.exp | 247 ++++++++++++++++++++++++++++++ gdb/testsuite/configure.in | 2 + 3 files changed, 250 insertions(+) create mode 100644 gdb/testsuite/config/mips-gdb.exp diff --git a/gdb/testsuite/config/.Sanitize b/gdb/testsuite/config/.Sanitize index ae160562063..c3141276a8d 100644 --- a/gdb/testsuite/config/.Sanitize +++ b/gdb/testsuite/config/.Sanitize @@ -29,6 +29,7 @@ Things-to-keep: aout-gdb.exp coff-gdb.exp +mips-gdb.exp udi-gdb.exp unix-gdb.exp vx-gdb.exp diff --git a/gdb/testsuite/config/mips-gdb.exp b/gdb/testsuite/config/mips-gdb.exp new file mode 100644 index 00000000000..628227598f4 --- /dev/null +++ b/gdb/testsuite/config/mips-gdb.exp @@ -0,0 +1,247 @@ +# Copyright (C) 1993 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 Ian Lance Taylor . + +# GDB support routines for a board using the MIPS remote debugging +# protocol. These are actually pretty generic. + +# DejaGnu currently assumes that debugging is being done over the main +# console port. It would probably be more convenient for people using +# IDT boards to permit the debugging port and the connected port to be +# different, since an IDT board has two ports. This would require +# extending some of the tests in a fashion similar to that done for +# VxWorks, because the test output would appear on the other port, +# rather than being displayed by gdb. + +set prompt "\(gdb\)" + +load_lib remote.exp +load_lib gdb.exp + +# +# 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 + + set loadfile [file tail $arg] + set loadpath [file dirname $arg] + gdb_unload + send "file $arg\n" + expect { + -re "A program is being debugged already. Kill it\? \(y or n\)" { + send "y\n" + continue -expect + } + -re "Reading symbols from.*done..*$prompt $" { } + -re "$prompt $" { error "GDB couldn't read file" } + timeout { error "(timeout) read symbol file" ; return } + } + send "load $arg\n" + if $verbose>1 then { + send_user "Loading $arg into $GDB\n" + } + set timeout 1200 + expect { + -re "Loading.*$prompt $" { + if $verbose>1 then { + send_user "Loaded $arg into $GDB\n" + } + set timeout 30 + 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." + } + } + } + set timeout 10 + 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" + } + close +} + +# +# gdb_start -- start GDB running. +# +proc gdb_start { } { + global GDB + global GDBFLAGS + global spawn_id + global shell_id + global prompt + global verbose + global targetname + global connectmode + global reboot + global baud + + # reboot the board to get a clean start + if $reboot then { + if ![info exists connectmode] then { + set connectmode "kermit" + } + if ![info exists baud] then { + set baud 9600 + } + set shell_id [ eval $connectmode "$targetname" $baud ] + send -i $shell_id "\CC" + expect -i $shell_id { + -re "$" { } + timeout { error "(timeout) board did not come up."; alldone } + } + send -i $shell_id "go 0xbfc00000" + expect -i $shell_id { + -re "$" { } + timeout { error "(timeout) board did not come up."; alldone } + } + exit_remote_shell $shell_id + } + + 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."; alldone } + timeout { error "(timeout) GDB never initialized."; + alldone } + } + + # 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 $" {} + + # Don't use floating point instructions, in case the board doesn't + # support them. + send "set mipsfpu off\n" + expect -re ".*$prompt $" {} + + if $verbose>1 then { + send_user "Setting up target, please wait...\n" + } + send "target mips $targetname\n" + set timeout 60 + expect { + -re "Remote MIPS debugging.*$prompt $" { + if $verbose>1 then { + send_user "Set target to $targetname\n" + } + } + timeout { + error "Couldn't set MIPS target." + set timeout 10 + alldone + } + } + set timeout 10 +} + +expect_after { + "" { 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." } +} + +gdb_start + +# make sure gdb has actually started, otherwise if the first test +# timesout, DejaGnu crashes +send "\n" +expect { + -re "$prompt" + } diff --git a/gdb/testsuite/configure.in b/gdb/testsuite/configure.in index 9839a5d9af7..b4ddffd2542 100644 --- a/gdb/testsuite/configure.in +++ b/gdb/testsuite/configure.in @@ -42,6 +42,8 @@ a29k-*-udi) target_abbrev=udi ; target_makefile_frag=config/mt-a29k-udi ;; a29k-isstip-*) target_abbrev=itip ; target_makefile_frag=config/mt-a29k-isstip ;; +mips-idt-ecoff) target_abbrev=mips ; + target_makefile_frag=config/mt-mips ;; esac # link in the lib directory if needed -- 2.30.2