aboutsummaryrefslogtreecommitdiff
path: root/gdb/testsuite/config/vx-gdb.exp
blob: c5225445937c82975576e6acb5738cdf4951f2e1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
#   Copyright (C) 1988, 1990, 1991, 1992, 1995 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)

#
# load support libraries
#
load_lib remote.exp
load_lib gdb.exp
load_lib vxworks.exp

set shell_prompt "->"
set prompt "\\(vxgdb\\)"

#
# gdb_version -- extract and print the version number of gcc
#
proc gdb_version {} {
    default_gdb_version
}

#
# gdb_load -- load a file into the debugger.
# We have to stop and start gdb each time we do this, because when
# vxgdb loads two files in a row, the symbols in the first file loaded
# take precedence. Returns -1 on error, else 0.
#
proc gdb_load { arg } {
    global shell_id

#    gdb_exit
#    spawn_vxgdb
    set result 0

    if { [vxworks_ld $shell_id $arg] != 0 } {
	perror "Couldn't load $arg"
	return -1
    }

    return [gdb_file_cmd $arg]
}

#
# gdb_start -- start gdb running and 
#
proc gdb_start { } {
    global prompt
    global verbose
    global targetname
    global connectmode
    global reboot
    global shell_id

    # get a connection to the board
    set shell_id [ eval $connectmode "$targetname" ]
    if $shell_id<0 then {
 perror "Couldn't connect to $targetname."
	return -1
    }
    verbose "Spawn id for remote shell is $shell_id"

    # reboot vxworks to get a clean start
    if $reboot then {
	verbose "Rebooting VxWorks, Please wait...\n"

	send -i $shell_id "\030"
	set timeout 120
	expect {
	    -i $shell_id -re "Connection closed.*$" {
		verbose "\nVxWorks has closed the shell"
		}
	    -i $shell_id eof {
	 perror "(eof) never disconnected from VxWorks shell."
		return -1
	    }
	    -i $shell_id timeout {
	 perror "(timeout) never disconnected from VxWorks shell."
		return -1
	    }
	}
	catch "close -i $shell_id" tmp
	wait -i $shell_id
    }
    set timeout 10

    catch "spawn_vxgdb"
}

proc spawn_vxgdb { } {
    global prompt
    global verbose
    global targetname

    default_gdb_start

    # set the default arguments to "main", so that "run" with no
    # arguments will work correctly.
    send "set args main\n"
    expect -re ".*$prompt $" {}

    verbose "Setting up target, Please wait..."
    # set targets hostname
    send "target vxworks $targetname\n"
    set timeout 60
    expect {
	-re "Done\..*$prompt $"	{
	    verbose "Set target to $targetname" 1
	}
	-re "net_connect: RPC: Program not registered.*$" {
	    perror "Couldn't set GDB to target $targetname."
	    exit 1
	}
	timeout { 
	    perror "Couldn't set target for vxworks."
	    set timeout 10
	    return -1
	}
    }
    set timeout 10
}

proc gdb_exit { } {
    global shell_id
    if [info exists shell_id] then {
	exit_remote_shell $shell_id
    }
    catch default_gdb_exit
}

#expect_after {
#    "<return>"		   { send "\n"; perror "Window too small." }
#    -re "\(y or n\) " 	   { send "n\n"; perror "Got interactive prompt." }
#    buffer_full		   { perror "internal buffer is full." }
#    eof			   { perror "eof -- pty is hosed." }
#    timeout			   { perror "timeout." }
#    "virtual memory exhausted" { perror "virtual memory exhausted." }
#    "Undefined command"	   { perror "send string probably wrong." }
#}

gdb_start