aboutsummaryrefslogtreecommitdiff
path: root/gdb/testsuite/config/vx.exp
blob: daf826e866c4b04ff99a172948dd5c781dd2ecd6 (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
#   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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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 gdb_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 } {
    set result 0

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

    return [gdb_file_cmd $arg]
}

#
# gdb_start -- start gdb running
#
proc gdb_start { } {
    global gdb_prompt
    global verbose
    global connectmode
    global reboot

    # get a connection to the board
    set shell_id [remote_open target]
    if { $shell_id < 0 } then {
	perror "Couldn't connect to target."
	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
	verbose "Timeout is now $timeout seconds" 2
	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
    verbose "Timeout is now $timeout seconds" 2

    catch "spawn_vxgdb"
}

proc spawn_vxgdb { } {
    global gdb_prompt
    global verbose

    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 ".*$gdb_prompt $" {}

    verbose "Setting up target, Please wait..."
    # set targets hostname
    send "target vxworks [target_info netport]\n"
    set timeout 60
    verbose "Timeout is now $timeout seconds" 2
    expect {
	-re "Done\..*$gdb_prompt $"	{
	    verbose "Set target to [target_info netport]" 1
	}
	-re "net_connect: RPC: Program not registered.*$" {
	    perror "Couldn't set GDB to target [target_info netport]."
	    exit 1
	}
	timeout { 
	    perror "Couldn't set target for vxworks."
	    set timeout 10
	    verbose "Timeout is now $timeout seconds" 2
	    return -1
	}
    }
    set timeout 10
    verbose "Timeout is now $timeout seconds" 2
}

proc gdb_exit { } {
    remote_close target;
    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." }
#}