From 5d18be69e837e0e5eb725bb15ef9b3cf7bb86c76 Mon Sep 17 00:00:00 2001 From: Ben Elliston Date: Tue, 16 Jan 2001 23:03:19 +0000 Subject: [PATCH] 2001-01-17 Ben Elliston * config/sid.exp: New file. --- gdb/testsuite/ChangeLog | 4 + gdb/testsuite/config/sid.exp | 188 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 192 insertions(+) create mode 100644 gdb/testsuite/config/sid.exp diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index ace11607db..0282d2e527 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2001-01-17 Ben Elliston + + * config/sid.exp: New file. + Fri Jan 12 18:29:01 2001 Andrew Cagney * gdb.base/callfuncs.exp: Add space after ``Value returned is''. diff --git a/gdb/testsuite/config/sid.exp b/gdb/testsuite/config/sid.exp new file mode 100644 index 0000000000..97200c1bfd --- /dev/null +++ b/gdb/testsuite/config/sid.exp @@ -0,0 +1,188 @@ +# Test Framework Driver for GDB driving an external simulator +# Copyright 1999 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +load_lib gdb.exp + +proc sid_start {} { + global sid_spawn_id + global verbose + + set port [lindex [split [target_info netport] ":"] 1] + + # Set a default endianness + case [target_info multilib_flags] in { + { *big-endian* *-EB* *-meb* } { set sidendian "-EB" } + { *little-endian* *-EL* *-mel* } { set sidendian "-EL" } + default { + if {[target_info exists sim,defaultendian]} then { + set sidendian [target_info sim,defaultendian] + } else { + warning "Unknown target endianness - assuming -EB" + set sidendian "-EB" + } + } + } + # set verbosity conditionally + if {$verbose > 0} then { set sidverbose "--verbose" } else { set sidverbose "" } + + # test to see whether to use use sid in build or install tree + set use_build_tree [file exists ../../sid] + + if {$use_build_tree} then { + set pre_spawn { + global env + set env(SID_LIBRARY_PATH) [join [glob "../../sid/component/*"] ":"] + set env(SID) "../../sid/main/dynamic/sid" + set env(MKSID) "../../sid/main/static/mksid" + if {! [file exists $env(SID)]} then { error "Cannot find sid in build tree" } + } + set spawncmd "../../sid/bsp/[target_info sim] $sidverbose $sidendian --persistent --gdb=$port [target_info sim,options]" + set post_spawn { + global env + unset env(SID_LIBRARY_PATH) + unset env(MKSID) + unset env(SID) + } + } else { + set pre_spawn {} + set spawncmd "[target_info sim] $sidverbose $sidendian --persistent --gdb=$port [target_info sim,options]" + set post_spawn {} + } + + eval $pre_spawn + if {[catch "spawn $spawncmd" msg]} { + perror $msg + exit 1 + } + eval $post_spawn + + expect_background { + -re \[^\n\]*\n { + regsub "\n" $expect_out(buffer) {} msg + verbose "SID: $msg" 2 + } + } + + # There should be no need to sleep to give SID time to start; + # GDB would wait for a fair while for the stub to respond. + sleep 4 + + set sid_spawn_id $spawn_id +} + +# +# Handle GDB talking to SID +# + +proc gdb_start {} { + sid_start + return [default_gdb_start] +} + +proc sid_exit {} { + global sid_spawn_id + if {[info exists sid_spawn_id]} { + catch {exec kill [exp_pid -i $sid_spawn_id]} + catch {wait -i $sid_spawn_id} + unset sid_spawn_id + sleep 4 + } +} + +proc gdb_exit {} { + set result [default_gdb_exit] + sid_exit + return $result +} + +# +# gdb_target_sid +# Set gdb to target the simulator +# +proc send_target_sid { } { + # wait a little while, giving sid time to shut down & restart its + # gdb socket + sleep 4 + send_gdb "target [target_info gdb_protocol] [target_info netport]\n" +} + +proc gdb_target_sid { } { + global gdb_prompt + global exit_status + + send_target_sid + + global timeout + set prev_timeout $timeout + set timeout 60 + verbose "Timeout is now $timeout seconds" 2 + gdb_expect { + -re "Remote debugging using.*$gdb_prompt" { + verbose "Set target to sid" + } + timeout { + perror "Couldn't set target for remote simulator." + cleanup + exit $exit_status + } + } + set timeout $prev_timeout + verbose "Timeout is now $timeout seconds" 2 +} + +# +# 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 gdb_prompt + + gdb_unload + if [gdb_file_cmd $arg] then { return -1 } + gdb_target_sid + + send_gdb "load\n" + global timeout + set prev_timeout $timeout + set timeout 2400 + verbose "Timeout is now $timeout seconds" 2 + gdb_expect { + -re ".*$gdb_prompt $" { + if $verbose>1 then { + send_user "Loaded $arg into $GDB\n" + } + set timeout 30 + verbose "Timeout is now $timeout seconds" 2 + return 1 + } + -re "$gdb_prompt $" { + if $verbose>1 then { + perror "GDB couldn't load." + } + } + timeout { + if $verbose>1 then { + perror "Timed out trying to load $arg." + } + } + } + set timeout $prev_timeout +} -- 2.11.0