summaryrefslogtreecommitdiff
path: root/gdb/testsuite/config/vx.exp
blob: b02142c5052cb57af0244e9cc0991c57dc900268 (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
#   Copyright 1988, 1990, 1991, 1992, 1995, 1997
#   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

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 { [remote_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
    for { set x 0; } { $x < 3 } { incr x } {
	set shell_id [remote_open target]
	if { $shell_id > 0 } {
	    verbose "Spawn id for remote shell is $shell_id"

	    set timeout 10
	    verbose "Timeout is now $timeout seconds" 2

	    set state [spawn_vxgdb];
	    if { $state == "pass" } {
		return 0;
	    }
	    if { $state == "fail" } {
		return -1;
	    }
	}
	remote_reboot target;
    }
}

proc spawn_vxgdb { } {
    global gdb_prompt

    default_gdb_start

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

    verbose "Setting up target, Please wait..."
    # set targets hostname
    send_gdb "target vxworks [target_info hostname]\n"
    set timeout 60
    verbose "Timeout is now $timeout seconds" 2
    gdb_expect {
	-re "Done\..*$gdb_prompt $"	{
	    verbose "Set target to [target_info hostname]" 1
	    set timeout 10;
	    return "pass";
	}
	-re "net_connect: RPC: (Program not registered|.*Timed out).*$" {
	    warning "Couldn't set GDB to target [target_info netport]."
	}
	timeout {
	    warning "Couldn't set target for vxworks."
	}
    }
    return "retry";
}

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." }
#}