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
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
|
// OBSOLETE /* Remote debugging with the XLNT Designs, Inc (XDI) NetROM.
// OBSOLETE Copyright 1990, 1991, 1992, 1995, 1998, 1999, 2000
// OBSOLETE Free Software Foundation, Inc.
// OBSOLETE Contributed by:
// OBSOLETE Roger Moyers
// OBSOLETE XLNT Designs, Inc.
// OBSOLETE 15050 Avenue of Science, Suite 106
// OBSOLETE San Diego, CA 92128
// OBSOLETE (619)487-9320
// OBSOLETE roger@xlnt.com
// OBSOLETE Adapted from work done at Cygnus Support in remote-nindy.c,
// OBSOLETE later merged in by Stan Shebs at Cygnus.
// OBSOLETE
// OBSOLETE This file is part of GDB.
// OBSOLETE
// OBSOLETE This program is free software; you can redistribute it and/or modify
// OBSOLETE it under the terms of the GNU General Public License as published by
// OBSOLETE the Free Software Foundation; either version 2 of the License, or
// OBSOLETE (at your option) any later version.
// OBSOLETE
// OBSOLETE This program is distributed in the hope that it will be useful,
// OBSOLETE but WITHOUT ANY WARRANTY; without even the implied warranty of
// OBSOLETE MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// OBSOLETE GNU General Public License for more details.
// OBSOLETE
// OBSOLETE You should have received a copy of the GNU General Public License
// OBSOLETE along with this program; if not, write to the Free Software
// OBSOLETE Foundation, Inc., 59 Temple Place - Suite 330,
// OBSOLETE Boston, MA 02111-1307, USA. */
// OBSOLETE
// OBSOLETE #include "defs.h"
// OBSOLETE #include "gdbcmd.h"
// OBSOLETE #include "serial.h"
// OBSOLETE #include "target.h"
// OBSOLETE
// OBSOLETE /* Default ports used to talk with the NetROM. */
// OBSOLETE
// OBSOLETE #define DEFAULT_NETROM_LOAD_PORT 1236
// OBSOLETE #define DEFAULT_NETROM_CONTROL_PORT 1237
// OBSOLETE
// OBSOLETE static void nrom_close (int quitting);
// OBSOLETE
// OBSOLETE /* New commands. */
// OBSOLETE
// OBSOLETE static void nrom_passthru (char *, int);
// OBSOLETE
// OBSOLETE /* We talk to the NetROM over these sockets. */
// OBSOLETE
// OBSOLETE static struct serial *load_desc = NULL;
// OBSOLETE static struct serial *ctrl_desc = NULL;
// OBSOLETE
// OBSOLETE static int load_port = DEFAULT_NETROM_LOAD_PORT;
// OBSOLETE static int control_port = DEFAULT_NETROM_CONTROL_PORT;
// OBSOLETE
// OBSOLETE static char nrom_hostname[100];
// OBSOLETE
// OBSOLETE /* Forward data declaration. */
// OBSOLETE
// OBSOLETE extern struct target_ops nrom_ops;
// OBSOLETE
// OBSOLETE /* Scan input from the remote system, until STRING is found. Print chars that
// OBSOLETE don't match. */
// OBSOLETE
// OBSOLETE static int
// OBSOLETE expect (char *string)
// OBSOLETE {
// OBSOLETE char *p = string;
// OBSOLETE int c;
// OBSOLETE
// OBSOLETE immediate_quit++;
// OBSOLETE
// OBSOLETE while (1)
// OBSOLETE {
// OBSOLETE c = serial_readchar (ctrl_desc, 5);
// OBSOLETE
// OBSOLETE if (c == *p++)
// OBSOLETE {
// OBSOLETE if (*p == '\0')
// OBSOLETE {
// OBSOLETE immediate_quit--;
// OBSOLETE return 0;
// OBSOLETE }
// OBSOLETE }
// OBSOLETE else
// OBSOLETE {
// OBSOLETE fputc_unfiltered (c, gdb_stdout);
// OBSOLETE p = string;
// OBSOLETE if (c == *p)
// OBSOLETE p++;
// OBSOLETE }
// OBSOLETE }
// OBSOLETE }
// OBSOLETE
// OBSOLETE static void
// OBSOLETE nrom_kill (void)
// OBSOLETE {
// OBSOLETE nrom_close (0);
// OBSOLETE }
// OBSOLETE
// OBSOLETE static struct serial *
// OBSOLETE open_socket (char *name, int port)
// OBSOLETE {
// OBSOLETE char sockname[100];
// OBSOLETE struct serial *desc;
// OBSOLETE
// OBSOLETE sprintf (sockname, "%s:%d", name, port);
// OBSOLETE desc = serial_open (sockname);
// OBSOLETE if (!desc)
// OBSOLETE perror_with_name (sockname);
// OBSOLETE
// OBSOLETE return desc;
// OBSOLETE }
// OBSOLETE
// OBSOLETE static void
// OBSOLETE load_cleanup (void)
// OBSOLETE {
// OBSOLETE serial_close (load_desc);
// OBSOLETE load_desc = NULL;
// OBSOLETE }
// OBSOLETE
// OBSOLETE /* Download a file specified in ARGS to the netROM. */
// OBSOLETE
// OBSOLETE static void
// OBSOLETE nrom_load (char *args, int fromtty)
// OBSOLETE {
// OBSOLETE int fd, rd_amt, fsize;
// OBSOLETE bfd *pbfd;
// OBSOLETE asection *section;
// OBSOLETE char *downloadstring = "download 0\n";
// OBSOLETE struct cleanup *old_chain;
// OBSOLETE
// OBSOLETE /* Tell the netrom to get ready to download. */
// OBSOLETE if (serial_write (ctrl_desc, downloadstring, strlen (downloadstring)))
// OBSOLETE error ("nrom_load: control_send() of `%s' failed", downloadstring);
// OBSOLETE
// OBSOLETE expect ("Waiting for a connection...\n");
// OBSOLETE
// OBSOLETE load_desc = open_socket (nrom_hostname, load_port);
// OBSOLETE
// OBSOLETE old_chain = make_cleanup (load_cleanup, 0);
// OBSOLETE
// OBSOLETE pbfd = bfd_openr (args, 0);
// OBSOLETE
// OBSOLETE if (pbfd)
// OBSOLETE {
// OBSOLETE make_cleanup (bfd_close, pbfd);
// OBSOLETE
// OBSOLETE if (!bfd_check_format (pbfd, bfd_object))
// OBSOLETE error ("\"%s\": not in executable format: %s",
// OBSOLETE args, bfd_errmsg (bfd_get_error ()));
// OBSOLETE
// OBSOLETE for (section = pbfd->sections; section; section = section->next)
// OBSOLETE {
// OBSOLETE if (bfd_get_section_flags (pbfd, section) & SEC_ALLOC)
// OBSOLETE {
// OBSOLETE bfd_vma section_address;
// OBSOLETE unsigned long section_size;
// OBSOLETE const char *section_name;
// OBSOLETE
// OBSOLETE section_name = bfd_get_section_name (pbfd, section);
// OBSOLETE section_address = bfd_get_section_vma (pbfd, section);
// OBSOLETE section_size = bfd_section_size (pbfd, section);
// OBSOLETE
// OBSOLETE if (bfd_get_section_flags (pbfd, section) & SEC_LOAD)
// OBSOLETE {
// OBSOLETE file_ptr fptr;
// OBSOLETE
// OBSOLETE printf_filtered ("[Loading section %s at %x (%d bytes)]\n",
// OBSOLETE section_name, section_address,
// OBSOLETE section_size);
// OBSOLETE
// OBSOLETE fptr = 0;
// OBSOLETE
// OBSOLETE while (section_size > 0)
// OBSOLETE {
// OBSOLETE char buffer[1024];
// OBSOLETE int count;
// OBSOLETE
// OBSOLETE count = min (section_size, 1024);
// OBSOLETE
// OBSOLETE bfd_get_section_contents (pbfd, section, buffer, fptr,
// OBSOLETE count);
// OBSOLETE
// OBSOLETE serial_write (load_desc, buffer, count);
// OBSOLETE section_address += count;
// OBSOLETE fptr += count;
// OBSOLETE section_size -= count;
// OBSOLETE }
// OBSOLETE }
// OBSOLETE else
// OBSOLETE /* BSS and such */
// OBSOLETE {
// OBSOLETE printf_filtered ("[section %s: not loading]\n",
// OBSOLETE section_name);
// OBSOLETE }
// OBSOLETE }
// OBSOLETE }
// OBSOLETE }
// OBSOLETE else
// OBSOLETE error ("\"%s\": Could not open", args);
// OBSOLETE
// OBSOLETE do_cleanups (old_chain);
// OBSOLETE }
// OBSOLETE
// OBSOLETE /* Open a connection to the remote NetROM devices. */
// OBSOLETE
// OBSOLETE static void
// OBSOLETE nrom_open (char *name, int from_tty)
// OBSOLETE {
// OBSOLETE int errn;
// OBSOLETE
// OBSOLETE if (!name || strchr (name, '/') || strchr (name, ':'))
// OBSOLETE error (
// OBSOLETE "To open a NetROM connection, you must specify the hostname\n\
// OBSOLETE or IP address of the NetROM device you wish to use.");
// OBSOLETE
// OBSOLETE strcpy (nrom_hostname, name);
// OBSOLETE
// OBSOLETE target_preopen (from_tty);
// OBSOLETE
// OBSOLETE unpush_target (&nrom_ops);
// OBSOLETE
// OBSOLETE ctrl_desc = open_socket (nrom_hostname, control_port);
// OBSOLETE
// OBSOLETE push_target (&nrom_ops);
// OBSOLETE
// OBSOLETE if (from_tty)
// OBSOLETE printf_filtered ("Connected to NetROM device \"%s\"\n", nrom_hostname);
// OBSOLETE }
// OBSOLETE
// OBSOLETE /* Close out all files and local state before this target loses control. */
// OBSOLETE
// OBSOLETE static void
// OBSOLETE nrom_close (int quitting)
// OBSOLETE {
// OBSOLETE if (load_desc)
// OBSOLETE serial_close (load_desc);
// OBSOLETE if (ctrl_desc)
// OBSOLETE serial_close (ctrl_desc);
// OBSOLETE }
// OBSOLETE
// OBSOLETE /* Pass arguments directly to the NetROM. */
// OBSOLETE
// OBSOLETE static void
// OBSOLETE nrom_passthru (char *args, int fromtty)
// OBSOLETE {
// OBSOLETE char buf[1024];
// OBSOLETE
// OBSOLETE sprintf (buf, "%s\n", args);
// OBSOLETE if (serial_write (ctrl_desc, buf, strlen (buf)))
// OBSOLETE error ("nrom_reset: control_send() of `%s'failed", args);
// OBSOLETE }
// OBSOLETE
// OBSOLETE static void
// OBSOLETE nrom_mourn (void)
// OBSOLETE {
// OBSOLETE unpush_target (&nrom_ops);
// OBSOLETE generic_mourn_inferior ();
// OBSOLETE }
// OBSOLETE
// OBSOLETE /* Define the target vector. */
// OBSOLETE
// OBSOLETE struct target_ops nrom_ops;
// OBSOLETE
// OBSOLETE static void
// OBSOLETE init_nrom_ops (void)
// OBSOLETE {
// OBSOLETE nrom_ops.to_shortname = "nrom";
// OBSOLETE nrom_ops.to_longname = "Remote XDI `NetROM' target";
// OBSOLETE nrom_ops.to_doc = "Remote debug using a NetROM over Ethernet";
// OBSOLETE nrom_ops.to_open = nrom_open;
// OBSOLETE nrom_ops.to_close = nrom_close;
// OBSOLETE nrom_ops.to_attach = NULL;
// OBSOLETE nrom_ops.to_post_attach = NULL;
// OBSOLETE nrom_ops.to_require_attach = NULL;
// OBSOLETE nrom_ops.to_detach = NULL;
// OBSOLETE nrom_ops.to_require_detach = NULL;
// OBSOLETE nrom_ops.to_resume = NULL;
// OBSOLETE nrom_ops.to_wait = NULL;
// OBSOLETE nrom_ops.to_post_wait = NULL;
// OBSOLETE nrom_ops.to_fetch_registers = NULL;
// OBSOLETE nrom_ops.to_store_registers = NULL;
// OBSOLETE nrom_ops.to_prepare_to_store = NULL;
// OBSOLETE nrom_ops.to_xfer_memory = NULL;
// OBSOLETE nrom_ops.to_files_info = NULL;
// OBSOLETE nrom_ops.to_insert_breakpoint = NULL;
// OBSOLETE nrom_ops.to_remove_breakpoint = NULL;
// OBSOLETE nrom_ops.to_terminal_init = NULL;
// OBSOLETE nrom_ops.to_terminal_inferior = NULL;
// OBSOLETE nrom_ops.to_terminal_ours_for_output = NULL;
// OBSOLETE nrom_ops.to_terminal_ours = NULL;
// OBSOLETE nrom_ops.to_terminal_info = NULL;
// OBSOLETE nrom_ops.to_kill = nrom_kill;
// OBSOLETE nrom_ops.to_load = nrom_load;
// OBSOLETE nrom_ops.to_lookup_symbol = NULL;
// OBSOLETE nrom_ops.to_create_inferior = NULL;
// OBSOLETE nrom_ops.to_post_startup_inferior = NULL;
// OBSOLETE nrom_ops.to_acknowledge_created_inferior = NULL;
// OBSOLETE nrom_ops.to_clone_and_follow_inferior = NULL;
// OBSOLETE nrom_ops.to_post_follow_inferior_by_clone = NULL;
// OBSOLETE nrom_ops.to_insert_fork_catchpoint = NULL;
// OBSOLETE nrom_ops.to_remove_fork_catchpoint = NULL;
// OBSOLETE nrom_ops.to_insert_vfork_catchpoint = NULL;
// OBSOLETE nrom_ops.to_remove_vfork_catchpoint = NULL;
// OBSOLETE nrom_ops.to_has_forked = NULL;
// OBSOLETE nrom_ops.to_has_vforked = NULL;
// OBSOLETE nrom_ops.to_can_follow_vfork_prior_to_exec = NULL;
// OBSOLETE nrom_ops.to_post_follow_vfork = NULL;
// OBSOLETE nrom_ops.to_insert_exec_catchpoint = NULL;
// OBSOLETE nrom_ops.to_remove_exec_catchpoint = NULL;
// OBSOLETE nrom_ops.to_has_execd = NULL;
// OBSOLETE nrom_ops.to_reported_exec_events_per_exec_call = NULL;
// OBSOLETE nrom_ops.to_has_exited = NULL;
// OBSOLETE nrom_ops.to_mourn_inferior = nrom_mourn;
// OBSOLETE nrom_ops.to_can_run = NULL;
// OBSOLETE nrom_ops.to_notice_signals = 0;
// OBSOLETE nrom_ops.to_thread_alive = 0;
// OBSOLETE nrom_ops.to_stop = 0;
// OBSOLETE nrom_ops.to_pid_to_exec_file = NULL;
// OBSOLETE nrom_ops.to_stratum = download_stratum;
// OBSOLETE nrom_ops.DONT_USE = NULL;
// OBSOLETE nrom_ops.to_has_all_memory = 1;
// OBSOLETE nrom_ops.to_has_memory = 1;
// OBSOLETE nrom_ops.to_has_stack = 1;
// OBSOLETE nrom_ops.to_has_registers = 1;
// OBSOLETE nrom_ops.to_has_execution = 0;
// OBSOLETE nrom_ops.to_sections = NULL;
// OBSOLETE nrom_ops.to_sections_end = NULL;
// OBSOLETE nrom_ops.to_magic = OPS_MAGIC;
// OBSOLETE }
// OBSOLETE
// OBSOLETE void
// OBSOLETE _initialize_remote_nrom (void)
// OBSOLETE {
// OBSOLETE init_nrom_ops ();
// OBSOLETE add_target (&nrom_ops);
// OBSOLETE
// OBSOLETE add_show_from_set (
// OBSOLETE add_set_cmd ("nrom_load_port", no_class, var_zinteger, (char *) &load_port,
// OBSOLETE "Set the port to use for NetROM downloads\n", &setlist),
// OBSOLETE &showlist);
// OBSOLETE
// OBSOLETE add_show_from_set (
// OBSOLETE add_set_cmd ("nrom_control_port", no_class, var_zinteger, (char *) &control_port,
// OBSOLETE "Set the port to use for NetROM debugger services\n", &setlist),
// OBSOLETE &showlist);
// OBSOLETE
// OBSOLETE add_cmd ("nrom", no_class, nrom_passthru,
// OBSOLETE "Pass arguments as command to NetROM",
// OBSOLETE &cmdlist);
// OBSOLETE }
|