Commit | Line | Data |
---|---|---|
ae0323a8 MS |
1 | # Test framework for GDB (remote protocol) using a "gdbserver", |
2 | # ie. a debug agent running as a native process on the same or | |
3 | # a different host. | |
4 | ||
b6ba6518 | 5 | # Copyright 2000 Free Software Foundation, Inc. |
ae0323a8 | 6 | |
c906108c SS |
7 | # This program is free software; you can redistribute it and/or modify |
8 | # it under the terms of the GNU General Public License as published by | |
9 | # the Free Software Foundation; either version 2 of the License, or | |
10 | # (at your option) any later version. | |
11 | # | |
12 | # This program is distributed in the hope that it will be useful, | |
13 | # but WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
15 | # GNU General Public License for more details. | |
16 | # | |
17 | # You should have received a copy of the GNU General Public License | |
18 | # along with this program; if not, write to the Free Software | |
19 | # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | |
ae0323a8 MS |
20 | |
21 | # Please email any bugs, comments, and/or additions to this file to: | |
22 | # bug-gdb@prep.ai.mit.edu | |
23 | ||
24 | # This file was written by Michael Snyder. (msnyder@redhat.com) | |
25 | ||
26 | # | |
27 | # This module to be used for testing gdb with a "gdbserver" | |
28 | # built either from libremote or from gdb/gdbserver. | |
29 | # | |
30 | ||
31 | # Load the basic testing library, and the remote stuff. | |
32 | load_lib ../config/monitor.exp | |
33 | ||
34 | # | |
35 | # To be addressed or set in your baseboard config file: | |
c906108c | 36 | # |
ae0323a8 MS |
37 | # set_board_info gdb_protocol "remote" |
38 | # Unles you have a gdbserver that uses a different protocol... | |
c906108c | 39 | # |
ae0323a8 MS |
40 | # set_board_info use_gdb_stub 1 |
41 | # This tells the rest of the test suite not to do things | |
42 | # like "run" which don't work well on remote targets. | |
c906108c | 43 | # |
ae0323a8 MS |
44 | # set_board_info gdb,do_reload_on_run 1 |
45 | # Unles you have a gdbserver that can handle multiple sessions. | |
c906108c | 46 | # |
ae0323a8 MS |
47 | # set_board_info noargs 1 |
48 | # At present there is no provision in the remote protocol | |
49 | # for passing arguments. This test framework does not | |
50 | # address the issue, so it's best to set this variable | |
51 | # in your baseboard configuration file. | |
52 | # FIXME: there's no reason why the test harness couldn't | |
53 | # pass commandline args when it spawns gdbserver. | |
54 | # | |
55 | # set_board_info gdb,noinferiorio 1 | |
56 | # Neither the traditional gdbserver nor the one in libremote | |
57 | # can presently capture stdout and relay it to GDB via the | |
58 | # 'O' packet. This means that tests involving printf will | |
59 | # fail unles you set this varibale in your baseboard | |
60 | # configuration file. | |
61 | # | |
62 | # set_board_info gdb,no_hardware_watchpoints 1 | |
63 | # Unles you have a gdbserver that supports hardware watchpoints. | |
64 | # FIXME: gdb should detect if the target doesn't support them, | |
65 | # and fall back to using software watchpoints. | |
66 | # | |
67 | # set_board_info gdb_server_prog | |
68 | # This will be the path to the gdbserver program you want to test. | |
69 | # Defaults to "gdbserver". | |
70 | # | |
71 | # set_board_info sockethost | |
72 | # The name of the host computer whose socket is being used. | |
73 | # Defaults to "localhost". Note: old gdbserver requires | |
74 | # that you define this, but libremote/gdbserver does not. | |
75 | # | |
76 | # set_board_info socketport | |
77 | # Port id to use for socket connection. If not set explicitly, | |
78 | # it will start at "2345" and increment for each use. | |
79 | # | |
80 | ||
c906108c | 81 | |
c906108c SS |
82 | |
83 | # | |
84 | # gdb_load -- load a file into the debugger. | |
85 | # return a -1 if anything goes wrong. | |
86 | # | |
ae0323a8 MS |
87 | |
88 | global server_exec; | |
89 | global portnum; | |
90 | set portnum "2345"; | |
91 | ||
92 | proc gdb_load { args } { | |
93 | global server_exec; | |
94 | global portnum; | |
95 | ||
96 | # Port id -- either specified in baseboard file, or managed here. | |
97 | if [target_info exists gdb,socketport] { | |
98 | set portnum [target_info gdb,socketport]; | |
99 | } else { | |
100 | # Bump the port number to avoid conflicts with hung ports. | |
101 | incr portnum; | |
102 | } | |
103 | ||
104 | # Extract the local and remote host ids from the target board struct. | |
105 | ||
106 | if [target_info exists sockethost] { | |
107 | set debughost [target_info sockethost]; | |
108 | } else { | |
109 | set debughost "localhost:"; | |
110 | } | |
111 | # Extract the protocol | |
112 | if [target_info exists gdb_protocol] { | |
113 | set protocol [target_info gdb_protocol]; | |
114 | } else { | |
115 | set protocol "remote"; | |
116 | } | |
117 | ||
118 | # Extract the name of the gdbserver, if known (default 'gdbserver'). | |
c906108c SS |
119 | if [target_info exists gdb_server_prog] { |
120 | set gdbserver [target_info gdb_server_prog]; | |
121 | } else { | |
122 | set gdbserver "gdbserver"; | |
123 | } | |
ae0323a8 MS |
124 | # Extract the socket hostname |
125 | if [target_info exists sockethost] { | |
126 | set sockethost [target_info sockethost]; | |
127 | } else { | |
128 | set sockethost "" | |
c906108c SS |
129 | } |
130 | ||
ae0323a8 MS |
131 | # Export the host:port pair. |
132 | set gdbport $debughost$portnum; | |
c906108c | 133 | |
ae0323a8 MS |
134 | if { $args == "" || $args == "{}" } { |
135 | if [info exists server_exec] { | |
136 | set args $server_exec; | |
137 | } else { | |
138 | send_gdb "info files\n"; | |
139 | gdb_expect 30 { | |
140 | -re "Symbols from \"(\[^\"\]+)\"" { | |
141 | set args $expect_out(1,string); | |
142 | exp_continue; | |
143 | } | |
144 | -re "Local exec file:\[\r\n\]+\[ \t\]*`(\[^'\]+)'," { | |
145 | set args $expect_out(1,string); | |
146 | exp_continue; | |
147 | } | |
148 | -re "$gdb_prompt $" { } | |
149 | } | |
150 | } | |
151 | } | |
152 | ||
153 | # remember new exec file | |
154 | set server_exec $args; | |
155 | ||
156 | # Fire off the debug agent | |
157 | remote_spawn host \ | |
158 | "$gdbserver $sockethost$portnum $args >& /dev/null < /dev/null &" \ | |
159 | writeonly | |
160 | ||
161 | # Give it a little time to establish | |
162 | sleep 2 | |
163 | ||
164 | # tell gdb what file we are debugging | |
165 | if [gdb_file_cmd $args] { | |
166 | return -1; | |
c906108c | 167 | } |
ae0323a8 MS |
168 | |
169 | # attach to the "serial port" | |
170 | gdb_target_cmd $protocol $gdbport; | |
171 | ||
172 | return 0; | |
c906108c | 173 | } |
ae0323a8 | 174 |