diff options
author | Ben Elliston <bje@au.ibm.com> | 2001-01-16 23:03:19 +0000 |
---|---|---|
committer | Ben Elliston <bje@au.ibm.com> | 2001-01-16 23:03:19 +0000 |
commit | 9c646a6e13e5f7851ea556c2884d7b36bc24aae6 (patch) | |
tree | 3214e276967bc6282a147556d991aeee4d2c207e /gdb/testsuite/config/sid.exp | |
parent | abdcb2a571a7ffb4e91e1782c223ff6270254416 (diff) | |
download | gdb-9c646a6e13e5f7851ea556c2884d7b36bc24aae6.zip gdb-9c646a6e13e5f7851ea556c2884d7b36bc24aae6.tar.gz gdb-9c646a6e13e5f7851ea556c2884d7b36bc24aae6.tar.bz2 |
2001-01-17 Ben Elliston <bje@redhat.com>
* config/sid.exp: New file.
Diffstat (limited to 'gdb/testsuite/config/sid.exp')
-rw-r--r-- | gdb/testsuite/config/sid.exp | 188 |
1 files changed, 188 insertions, 0 deletions
diff --git a/gdb/testsuite/config/sid.exp b/gdb/testsuite/config/sid.exp new file mode 100644 index 0000000..97200c1 --- /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 +} |