2002-05-14 Daniel Jacobowitz <drow@mvista.com>
[deliverable/binutils-gdb.git] / gdb / remote.c
1 /* Remote target communications for serial-line targets in custom GDB protocol
2
3 Copyright 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,
4 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
5
6 This file is part of GDB.
7
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2 of the License, or
11 (at your option) any later version.
12
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 59 Temple Place - Suite 330,
21 Boston, MA 02111-1307, USA. */
22
23 /* See the GDB User Guide for details of the GDB remote protocol. */
24
25 #include "defs.h"
26 #include "gdb_string.h"
27 #include <ctype.h>
28 #include <fcntl.h>
29 #include "inferior.h"
30 #include "bfd.h"
31 #include "symfile.h"
32 #include "target.h"
33 /*#include "terminal.h" */
34 #include "gdbcmd.h"
35 #include "objfiles.h"
36 #include "gdb-stabs.h"
37 #include "gdbthread.h"
38 #include "remote.h"
39 #include "regcache.h"
40 #include "value.h"
41 #include "gdb_assert.h"
42
43 #include <ctype.h>
44 #include <sys/time.h>
45 #ifdef USG
46 #include <sys/types.h>
47 #endif
48
49 #include "event-loop.h"
50 #include "event-top.h"
51 #include "inf-loop.h"
52
53 #include <signal.h>
54 #include "serial.h"
55
56 #include "gdbcore.h" /* for exec_bfd */
57
58 /* Prototypes for local functions */
59 static void cleanup_sigint_signal_handler (void *dummy);
60 static void initialize_sigint_signal_handler (void);
61 static int getpkt_sane (char *buf, long sizeof_buf, int forever);
62
63 static void handle_remote_sigint (int);
64 static void handle_remote_sigint_twice (int);
65 static void async_remote_interrupt (gdb_client_data);
66 void async_remote_interrupt_twice (gdb_client_data);
67
68 static void build_remote_gdbarch_data (void);
69
70 static int remote_write_bytes (CORE_ADDR memaddr, char *myaddr, int len);
71
72 static int remote_read_bytes (CORE_ADDR memaddr, char *myaddr, int len);
73
74 static void remote_files_info (struct target_ops *ignore);
75
76 static int remote_xfer_memory (CORE_ADDR memaddr, char *myaddr,
77 int len, int should_write,
78 struct mem_attrib *attrib,
79 struct target_ops *target);
80
81 static void remote_prepare_to_store (void);
82
83 static void remote_fetch_registers (int regno);
84
85 static void remote_resume (ptid_t ptid, int step,
86 enum target_signal siggnal);
87 static void remote_async_resume (ptid_t ptid, int step,
88 enum target_signal siggnal);
89 static int remote_start_remote (PTR);
90
91 static void remote_open (char *name, int from_tty);
92 static void remote_async_open (char *name, int from_tty);
93
94 static void extended_remote_open (char *name, int from_tty);
95 static void extended_remote_async_open (char *name, int from_tty);
96
97 static void remote_open_1 (char *, int, struct target_ops *, int extended_p);
98 static void remote_async_open_1 (char *, int, struct target_ops *,
99 int extended_p);
100
101 static void remote_close (int quitting);
102
103 static void remote_store_registers (int regno);
104
105 static void remote_mourn (void);
106 static void remote_async_mourn (void);
107
108 static void extended_remote_restart (void);
109
110 static void extended_remote_mourn (void);
111
112 static void extended_remote_create_inferior (char *, char *, char **);
113 static void extended_remote_async_create_inferior (char *, char *, char **);
114
115 static void remote_mourn_1 (struct target_ops *);
116
117 static void remote_send (char *buf, long sizeof_buf);
118
119 static int readchar (int timeout);
120
121 static ptid_t remote_wait (ptid_t ptid,
122 struct target_waitstatus *status);
123 static ptid_t remote_async_wait (ptid_t ptid,
124 struct target_waitstatus *status);
125
126 static void remote_kill (void);
127 static void remote_async_kill (void);
128
129 static int tohex (int nib);
130
131 static void remote_detach (char *args, int from_tty);
132 static void remote_async_detach (char *args, int from_tty);
133
134 static void remote_interrupt (int signo);
135
136 static void remote_interrupt_twice (int signo);
137
138 static void interrupt_query (void);
139
140 static void set_thread (int, int);
141
142 static int remote_thread_alive (ptid_t);
143
144 static void get_offsets (void);
145
146 static long read_frame (char *buf, long sizeof_buf);
147
148 static int remote_insert_breakpoint (CORE_ADDR, char *);
149
150 static int remote_remove_breakpoint (CORE_ADDR, char *);
151
152 static int hexnumlen (ULONGEST num);
153
154 static void init_remote_ops (void);
155
156 static void init_extended_remote_ops (void);
157
158 static void init_remote_cisco_ops (void);
159
160 static struct target_ops remote_cisco_ops;
161
162 static void remote_stop (void);
163
164 static int ishex (int ch, int *val);
165
166 static int stubhex (int ch);
167
168 static int remote_query (int /*char */ , char *, char *, int *);
169
170 static int hexnumstr (char *, ULONGEST);
171
172 static int hexnumnstr (char *, ULONGEST, int);
173
174 static CORE_ADDR remote_address_masked (CORE_ADDR);
175
176 static void print_packet (char *);
177
178 static unsigned long crc32 (unsigned char *, int, unsigned int);
179
180 static void compare_sections_command (char *, int);
181
182 static void packet_command (char *, int);
183
184 static int stub_unpack_int (char *buff, int fieldlength);
185
186 static ptid_t remote_current_thread (ptid_t oldptid);
187
188 static void remote_find_new_threads (void);
189
190 static void record_currthread (int currthread);
191
192 static int fromhex (int a);
193
194 static int hex2bin (const char *hex, char *bin, int count);
195
196 static int bin2hex (const char *bin, char *hex, int count);
197
198 static int putpkt_binary (char *buf, int cnt);
199
200 static void check_binary_download (CORE_ADDR addr);
201
202 struct packet_config;
203
204 static void show_packet_config_cmd (struct packet_config *config);
205
206 static void update_packet_config (struct packet_config *config);
207
208 /* Define the target subroutine names */
209
210 void open_remote_target (char *, int, struct target_ops *, int);
211
212 void _initialize_remote (void);
213
214 /* Description of the remote protocol. Strictly speaking, when the
215 target is open()ed, remote.c should create a per-target description
216 of the remote protocol using that target's architecture.
217 Unfortunatly, the target stack doesn't include local state. For
218 the moment keep the information in the target's architecture
219 object. Sigh.. */
220
221 struct packet_reg
222 {
223 long offset; /* Offset into G packet. */
224 long regnum; /* GDB's internal register number. */
225 LONGEST pnum; /* Remote protocol register number. */
226 int in_g_packet; /* Always part of G packet. */
227 /* long size in bytes; == REGISTER_RAW_SIZE (regnum); at present. */
228 /* char *name; == REGISTER_NAME (regnum); at present. */
229 };
230
231 struct remote_state
232 {
233 /* Description of the remote protocol registers. */
234 long sizeof_g_packet;
235
236 /* Description of the remote protocol registers indexed by REGNUM
237 (making an array of NUM_REGS + NUM_PSEUDO_REGS in size). */
238 struct packet_reg *regs;
239
240 /* This is the size (in chars) of the first response to the ``g''
241 packet. It is used as a heuristic when determining the maximum
242 size of memory-read and memory-write packets. A target will
243 typically only reserve a buffer large enough to hold the ``g''
244 packet. The size does not include packet overhead (headers and
245 trailers). */
246 long actual_register_packet_size;
247
248 /* This is the maximum size (in chars) of a non read/write packet.
249 It is also used as a cap on the size of read/write packets. */
250 long remote_packet_size;
251 };
252
253 /* Handle for retreving the remote protocol data from gdbarch. */
254 static struct gdbarch_data *remote_gdbarch_data_handle;
255
256 static struct remote_state *
257 get_remote_state ()
258 {
259 return gdbarch_data (current_gdbarch, remote_gdbarch_data_handle);
260 }
261
262 static void *
263 init_remote_state (struct gdbarch *gdbarch)
264 {
265 int regnum;
266 struct remote_state *rs = xmalloc (sizeof (struct remote_state));
267
268 /* Start out by having the remote protocol mimic the existing
269 behavour - just copy in the description of the register cache. */
270 rs->sizeof_g_packet = REGISTER_BYTES; /* OK use. */
271
272 /* Assume a 1:1 regnum<->pnum table. */
273 rs->regs = xcalloc (NUM_REGS + NUM_PSEUDO_REGS, sizeof (struct packet_reg));
274 for (regnum = 0; regnum < NUM_REGS + NUM_PSEUDO_REGS; regnum++)
275 {
276 struct packet_reg *r = &rs->regs[regnum];
277 r->pnum = regnum;
278 r->regnum = regnum;
279 r->offset = REGISTER_BYTE (regnum);
280 r->in_g_packet = (regnum < NUM_REGS);
281 /* ...size = REGISTER_RAW_SIZE (regnum); */
282 /* ...name = REGISTER_NAME (regnum); */
283 }
284
285 /* Default maximum number of characters in a packet body. Many
286 remote stubs have a hardwired buffer size of 400 bytes
287 (c.f. BUFMAX in m68k-stub.c and i386-stub.c). BUFMAX-1 is used
288 as the maximum packet-size to ensure that the packet and an extra
289 NUL character can always fit in the buffer. This stops GDB
290 trashing stubs that try to squeeze an extra NUL into what is
291 already a full buffer (As of 1999-12-04 that was most stubs. */
292 rs->remote_packet_size = 400 - 1;
293
294 /* Should rs->sizeof_g_packet needs more space than the
295 default, adjust the size accordingly. Remember that each byte is
296 encoded as two characters. 32 is the overhead for the packet
297 header / footer. NOTE: cagney/1999-10-26: I suspect that 8
298 (``$NN:G...#NN'') is a better guess, the below has been padded a
299 little. */
300 if (rs->sizeof_g_packet > ((rs->remote_packet_size - 32) / 2))
301 rs->remote_packet_size = (rs->sizeof_g_packet * 2 + 32);
302
303 /* This one is filled in when a ``g'' packet is received. */
304 rs->actual_register_packet_size = 0;
305
306 return rs;
307 }
308
309 static void
310 free_remote_state (struct gdbarch *gdbarch, void *pointer)
311 {
312 struct remote_state *data = pointer;
313 xfree (data->regs);
314 xfree (data);
315 }
316
317 static struct packet_reg *
318 packet_reg_from_regnum (struct remote_state *rs, long regnum)
319 {
320 if (regnum < 0 && regnum >= NUM_REGS + NUM_PSEUDO_REGS)
321 return NULL;
322 else
323 {
324 struct packet_reg *r = &rs->regs[regnum];
325 gdb_assert (r->regnum == regnum);
326 return r;
327 }
328 }
329
330 static struct packet_reg *
331 packet_reg_from_pnum (struct remote_state *rs, LONGEST pnum)
332 {
333 int i;
334 for (i = 0; i < NUM_REGS + NUM_PSEUDO_REGS; i++)
335 {
336 struct packet_reg *r = &rs->regs[i];
337 if (r->pnum == pnum)
338 return r;
339 }
340 return NULL;
341 }
342
343 /* */
344
345 static struct target_ops remote_ops;
346
347 static struct target_ops extended_remote_ops;
348
349 /* Temporary target ops. Just like the remote_ops and
350 extended_remote_ops, but with asynchronous support. */
351 static struct target_ops remote_async_ops;
352
353 static struct target_ops extended_async_remote_ops;
354
355 /* FIXME: cagney/1999-09-23: Even though getpkt was called with
356 ``forever'' still use the normal timeout mechanism. This is
357 currently used by the ASYNC code to guarentee that target reads
358 during the initial connect always time-out. Once getpkt has been
359 modified to return a timeout indication and, in turn
360 remote_wait()/wait_for_inferior() have gained a timeout parameter
361 this can go away. */
362 static int wait_forever_enabled_p = 1;
363
364
365 /* This variable chooses whether to send a ^C or a break when the user
366 requests program interruption. Although ^C is usually what remote
367 systems expect, and that is the default here, sometimes a break is
368 preferable instead. */
369
370 static int remote_break;
371
372 /* Descriptor for I/O to remote machine. Initialize it to NULL so that
373 remote_open knows that we don't have a file open when the program
374 starts. */
375 static struct serial *remote_desc = NULL;
376
377 /* This is set by the target (thru the 'S' message)
378 to denote that the target is in kernel mode. */
379 static int cisco_kernel_mode = 0;
380
381 /* This variable sets the number of bits in an address that are to be
382 sent in a memory ("M" or "m") packet. Normally, after stripping
383 leading zeros, the entire address would be sent. This variable
384 restricts the address to REMOTE_ADDRESS_SIZE bits. HISTORY: The
385 initial implementation of remote.c restricted the address sent in
386 memory packets to ``host::sizeof long'' bytes - (typically 32
387 bits). Consequently, for 64 bit targets, the upper 32 bits of an
388 address was never sent. Since fixing this bug may cause a break in
389 some remote targets this variable is principly provided to
390 facilitate backward compatibility. */
391
392 static int remote_address_size;
393
394 /* Tempoary to track who currently owns the terminal. See
395 target_async_terminal_* for more details. */
396
397 static int remote_async_terminal_ours_p;
398
399 \f
400 /* User configurable variables for the number of characters in a
401 memory read/write packet. MIN ((rs->remote_packet_size),
402 rs->sizeof_g_packet) is the default. Some targets need smaller
403 values (fifo overruns, et.al.) and some users need larger values
404 (speed up transfers). The variables ``preferred_*'' (the user
405 request), ``current_*'' (what was actually set) and ``forced_*''
406 (Positive - a soft limit, negative - a hard limit). */
407
408 struct memory_packet_config
409 {
410 char *name;
411 long size;
412 int fixed_p;
413 };
414
415 /* Compute the current size of a read/write packet. Since this makes
416 use of ``actual_register_packet_size'' the computation is dynamic. */
417
418 static long
419 get_memory_packet_size (struct memory_packet_config *config)
420 {
421 struct remote_state *rs = get_remote_state ();
422 /* NOTE: The somewhat arbitrary 16k comes from the knowledge (folk
423 law?) that some hosts don't cope very well with large alloca()
424 calls. Eventually the alloca() code will be replaced by calls to
425 xmalloc() and make_cleanups() allowing this restriction to either
426 be lifted or removed. */
427 #ifndef MAX_REMOTE_PACKET_SIZE
428 #define MAX_REMOTE_PACKET_SIZE 16384
429 #endif
430 /* NOTE: 16 is just chosen at random. */
431 #ifndef MIN_REMOTE_PACKET_SIZE
432 #define MIN_REMOTE_PACKET_SIZE 16
433 #endif
434 long what_they_get;
435 if (config->fixed_p)
436 {
437 if (config->size <= 0)
438 what_they_get = MAX_REMOTE_PACKET_SIZE;
439 else
440 what_they_get = config->size;
441 }
442 else
443 {
444 what_they_get = (rs->remote_packet_size);
445 /* Limit the packet to the size specified by the user. */
446 if (config->size > 0
447 && what_they_get > config->size)
448 what_they_get = config->size;
449 /* Limit it to the size of the targets ``g'' response. */
450 if ((rs->actual_register_packet_size) > 0
451 && what_they_get > (rs->actual_register_packet_size))
452 what_they_get = (rs->actual_register_packet_size);
453 }
454 if (what_they_get > MAX_REMOTE_PACKET_SIZE)
455 what_they_get = MAX_REMOTE_PACKET_SIZE;
456 if (what_they_get < MIN_REMOTE_PACKET_SIZE)
457 what_they_get = MIN_REMOTE_PACKET_SIZE;
458 return what_they_get;
459 }
460
461 /* Update the size of a read/write packet. If they user wants
462 something really big then do a sanity check. */
463
464 static void
465 set_memory_packet_size (char *args, struct memory_packet_config *config)
466 {
467 int fixed_p = config->fixed_p;
468 long size = config->size;
469 if (args == NULL)
470 error ("Argument required (integer, `fixed' or `limited').");
471 else if (strcmp (args, "hard") == 0
472 || strcmp (args, "fixed") == 0)
473 fixed_p = 1;
474 else if (strcmp (args, "soft") == 0
475 || strcmp (args, "limit") == 0)
476 fixed_p = 0;
477 else
478 {
479 char *end;
480 size = strtoul (args, &end, 0);
481 if (args == end)
482 error ("Invalid %s (bad syntax).", config->name);
483 #if 0
484 /* Instead of explicitly capping the size of a packet to
485 MAX_REMOTE_PACKET_SIZE or dissallowing it, the user is
486 instead allowed to set the size to something arbitrarily
487 large. */
488 if (size > MAX_REMOTE_PACKET_SIZE)
489 error ("Invalid %s (too large).", config->name);
490 #endif
491 }
492 /* Extra checks? */
493 if (fixed_p && !config->fixed_p)
494 {
495 if (! query ("The target may not be able to correctly handle a %s\n"
496 "of %ld bytes. Change the packet size? ",
497 config->name, size))
498 error ("Packet size not changed.");
499 }
500 /* Update the config. */
501 config->fixed_p = fixed_p;
502 config->size = size;
503 }
504
505 static void
506 show_memory_packet_size (struct memory_packet_config *config)
507 {
508 printf_filtered ("The %s is %ld. ", config->name, config->size);
509 if (config->fixed_p)
510 printf_filtered ("Packets are fixed at %ld bytes.\n",
511 get_memory_packet_size (config));
512 else
513 printf_filtered ("Packets are limited to %ld bytes.\n",
514 get_memory_packet_size (config));
515 }
516
517 static struct memory_packet_config memory_write_packet_config =
518 {
519 "memory-write-packet-size",
520 };
521
522 static void
523 set_memory_write_packet_size (char *args, int from_tty)
524 {
525 set_memory_packet_size (args, &memory_write_packet_config);
526 }
527
528 static void
529 show_memory_write_packet_size (char *args, int from_tty)
530 {
531 show_memory_packet_size (&memory_write_packet_config);
532 }
533
534 static long
535 get_memory_write_packet_size (void)
536 {
537 return get_memory_packet_size (&memory_write_packet_config);
538 }
539
540 static struct memory_packet_config memory_read_packet_config =
541 {
542 "memory-read-packet-size",
543 };
544
545 static void
546 set_memory_read_packet_size (char *args, int from_tty)
547 {
548 set_memory_packet_size (args, &memory_read_packet_config);
549 }
550
551 static void
552 show_memory_read_packet_size (char *args, int from_tty)
553 {
554 show_memory_packet_size (&memory_read_packet_config);
555 }
556
557 static long
558 get_memory_read_packet_size (void)
559 {
560 struct remote_state *rs = get_remote_state ();
561 long size = get_memory_packet_size (&memory_read_packet_config);
562 /* FIXME: cagney/1999-11-07: Functions like getpkt() need to get an
563 extra buffer size argument before the memory read size can be
564 increased beyond (rs->remote_packet_size). */
565 if (size > (rs->remote_packet_size))
566 size = (rs->remote_packet_size);
567 return size;
568 }
569
570 \f
571 /* Generic configuration support for packets the stub optionally
572 supports. Allows the user to specify the use of the packet as well
573 as allowing GDB to auto-detect support in the remote stub. */
574
575 enum packet_support
576 {
577 PACKET_SUPPORT_UNKNOWN = 0,
578 PACKET_ENABLE,
579 PACKET_DISABLE
580 };
581
582 struct packet_config
583 {
584 char *name;
585 char *title;
586 enum cmd_auto_boolean detect;
587 enum packet_support support;
588 };
589
590 /* Analyze a packet's return value and update the packet config
591 accordingly. */
592
593 enum packet_result
594 {
595 PACKET_ERROR,
596 PACKET_OK,
597 PACKET_UNKNOWN
598 };
599
600 static void
601 update_packet_config (struct packet_config *config)
602 {
603 switch (config->detect)
604 {
605 case CMD_AUTO_BOOLEAN_TRUE:
606 config->support = PACKET_ENABLE;
607 break;
608 case CMD_AUTO_BOOLEAN_FALSE:
609 config->support = PACKET_DISABLE;
610 break;
611 case CMD_AUTO_BOOLEAN_AUTO:
612 config->support = PACKET_SUPPORT_UNKNOWN;
613 break;
614 }
615 }
616
617 static void
618 show_packet_config_cmd (struct packet_config *config)
619 {
620 char *support = "internal-error";
621 switch (config->support)
622 {
623 case PACKET_ENABLE:
624 support = "enabled";
625 break;
626 case PACKET_DISABLE:
627 support = "disabled";
628 break;
629 case PACKET_SUPPORT_UNKNOWN:
630 support = "unknown";
631 break;
632 }
633 switch (config->detect)
634 {
635 case CMD_AUTO_BOOLEAN_AUTO:
636 printf_filtered ("Support for remote protocol `%s' (%s) packet is auto-detected, currently %s.\n",
637 config->name, config->title, support);
638 break;
639 case CMD_AUTO_BOOLEAN_TRUE:
640 case CMD_AUTO_BOOLEAN_FALSE:
641 printf_filtered ("Support for remote protocol `%s' (%s) packet is currently %s.\n",
642 config->name, config->title, support);
643 break;
644 }
645 }
646
647 static void
648 add_packet_config_cmd (struct packet_config *config,
649 char *name,
650 char *title,
651 void (*set_func) (char *args, int from_tty,
652 struct cmd_list_element *
653 c),
654 void (*show_func) (char *name,
655 int from_tty),
656 struct cmd_list_element **set_remote_list,
657 struct cmd_list_element **show_remote_list,
658 int legacy)
659 {
660 struct cmd_list_element *set_cmd;
661 struct cmd_list_element *show_cmd;
662 char *set_doc;
663 char *show_doc;
664 char *cmd_name;
665 config->name = name;
666 config->title = title;
667 config->detect = CMD_AUTO_BOOLEAN_AUTO;
668 config->support = PACKET_SUPPORT_UNKNOWN;
669 xasprintf (&set_doc, "Set use of remote protocol `%s' (%s) packet",
670 name, title);
671 xasprintf (&show_doc, "Show current use of remote protocol `%s' (%s) packet",
672 name, title);
673 /* set/show TITLE-packet {auto,on,off} */
674 xasprintf (&cmd_name, "%s-packet", title);
675 set_cmd = add_set_auto_boolean_cmd (cmd_name, class_obscure,
676 &config->detect, set_doc,
677 set_remote_list);
678 set_cmd_sfunc (set_cmd, set_func);
679 show_cmd = add_cmd (cmd_name, class_obscure, show_func, show_doc,
680 show_remote_list);
681 /* set/show remote NAME-packet {auto,on,off} -- legacy */
682 if (legacy)
683 {
684 char *legacy_name;
685 xasprintf (&legacy_name, "%s-packet", name);
686 add_alias_cmd (legacy_name, cmd_name, class_obscure, 0,
687 set_remote_list);
688 add_alias_cmd (legacy_name, cmd_name, class_obscure, 0,
689 show_remote_list);
690 }
691 }
692
693 static enum packet_result
694 packet_ok (const char *buf, struct packet_config *config)
695 {
696 if (buf[0] != '\0')
697 {
698 /* The stub recognized the packet request. Check that the
699 operation succeeded. */
700 switch (config->support)
701 {
702 case PACKET_SUPPORT_UNKNOWN:
703 if (remote_debug)
704 fprintf_unfiltered (gdb_stdlog,
705 "Packet %s (%s) is supported\n",
706 config->name, config->title);
707 config->support = PACKET_ENABLE;
708 break;
709 case PACKET_DISABLE:
710 internal_error (__FILE__, __LINE__,
711 "packet_ok: attempt to use a disabled packet");
712 break;
713 case PACKET_ENABLE:
714 break;
715 }
716 if (buf[0] == 'O' && buf[1] == 'K' && buf[2] == '\0')
717 /* "OK" - definitly OK. */
718 return PACKET_OK;
719 if (buf[0] == 'E'
720 && isxdigit (buf[1]) && isxdigit (buf[2])
721 && buf[3] == '\0')
722 /* "Enn" - definitly an error. */
723 return PACKET_ERROR;
724 /* The packet may or may not be OK. Just assume it is */
725 return PACKET_OK;
726 }
727 else
728 {
729 /* The stub does not support the packet. */
730 switch (config->support)
731 {
732 case PACKET_ENABLE:
733 if (config->detect == CMD_AUTO_BOOLEAN_AUTO)
734 /* If the stub previously indicated that the packet was
735 supported then there is a protocol error.. */
736 error ("Protocol error: %s (%s) conflicting enabled responses.",
737 config->name, config->title);
738 else
739 /* The user set it wrong. */
740 error ("Enabled packet %s (%s) not recognized by stub",
741 config->name, config->title);
742 break;
743 case PACKET_SUPPORT_UNKNOWN:
744 if (remote_debug)
745 fprintf_unfiltered (gdb_stdlog,
746 "Packet %s (%s) is NOT supported\n",
747 config->name, config->title);
748 config->support = PACKET_DISABLE;
749 break;
750 case PACKET_DISABLE:
751 break;
752 }
753 return PACKET_UNKNOWN;
754 }
755 }
756
757 /* Should we try the 'qSymbol' (target symbol lookup service) request? */
758 static struct packet_config remote_protocol_qSymbol;
759
760 static void
761 set_remote_protocol_qSymbol_packet_cmd (char *args, int from_tty,
762 struct cmd_list_element *c)
763 {
764 update_packet_config (&remote_protocol_qSymbol);
765 }
766
767 static void
768 show_remote_protocol_qSymbol_packet_cmd (char *args, int from_tty)
769 {
770 show_packet_config_cmd (&remote_protocol_qSymbol);
771 }
772
773 /* Should we try the 'e' (step over range) request? */
774 static struct packet_config remote_protocol_e;
775
776 static void
777 set_remote_protocol_e_packet_cmd (char *args, int from_tty,
778 struct cmd_list_element *c)
779 {
780 update_packet_config (&remote_protocol_e);
781 }
782
783 static void
784 show_remote_protocol_e_packet_cmd (char *args, int from_tty)
785 {
786 show_packet_config_cmd (&remote_protocol_e);
787 }
788
789
790 /* Should we try the 'E' (step over range / w signal #) request? */
791 static struct packet_config remote_protocol_E;
792
793 static void
794 set_remote_protocol_E_packet_cmd (char *args, int from_tty,
795 struct cmd_list_element *c)
796 {
797 update_packet_config (&remote_protocol_E);
798 }
799
800 static void
801 show_remote_protocol_E_packet_cmd (char *args, int from_tty)
802 {
803 show_packet_config_cmd (&remote_protocol_E);
804 }
805
806
807 /* Should we try the 'P' (set register) request? */
808
809 static struct packet_config remote_protocol_P;
810
811 static void
812 set_remote_protocol_P_packet_cmd (char *args, int from_tty,
813 struct cmd_list_element *c)
814 {
815 update_packet_config (&remote_protocol_P);
816 }
817
818 static void
819 show_remote_protocol_P_packet_cmd (char *args, int from_tty)
820 {
821 show_packet_config_cmd (&remote_protocol_P);
822 }
823
824 /* Should we try one of the 'Z' requests? */
825
826 enum Z_packet_type
827 {
828 Z_PACKET_SOFTWARE_BP,
829 Z_PACKET_HARDWARE_BP,
830 Z_PACKET_WRITE_WP,
831 Z_PACKET_READ_WP,
832 Z_PACKET_ACCESS_WP,
833 NR_Z_PACKET_TYPES
834 };
835
836 static struct packet_config remote_protocol_Z[NR_Z_PACKET_TYPES];
837
838 /* FIXME: Instead of having all these boiler plate functions, the
839 command callback should include a context argument. */
840
841 static void
842 set_remote_protocol_Z_software_bp_packet_cmd (char *args, int from_tty,
843 struct cmd_list_element *c)
844 {
845 update_packet_config (&remote_protocol_Z[Z_PACKET_SOFTWARE_BP]);
846 }
847
848 static void
849 show_remote_protocol_Z_software_bp_packet_cmd (char *args, int from_tty)
850 {
851 show_packet_config_cmd (&remote_protocol_Z[Z_PACKET_SOFTWARE_BP]);
852 }
853
854 static void
855 set_remote_protocol_Z_hardware_bp_packet_cmd (char *args, int from_tty,
856 struct cmd_list_element *c)
857 {
858 update_packet_config (&remote_protocol_Z[Z_PACKET_HARDWARE_BP]);
859 }
860
861 static void
862 show_remote_protocol_Z_hardware_bp_packet_cmd (char *args, int from_tty)
863 {
864 show_packet_config_cmd (&remote_protocol_Z[Z_PACKET_HARDWARE_BP]);
865 }
866
867 static void
868 set_remote_protocol_Z_write_wp_packet_cmd (char *args, int from_tty,
869 struct cmd_list_element *c)
870 {
871 update_packet_config (&remote_protocol_Z[Z_PACKET_WRITE_WP]);
872 }
873
874 static void
875 show_remote_protocol_Z_write_wp_packet_cmd (char *args, int from_tty)
876 {
877 show_packet_config_cmd (&remote_protocol_Z[Z_PACKET_WRITE_WP]);
878 }
879
880 static void
881 set_remote_protocol_Z_read_wp_packet_cmd (char *args, int from_tty,
882 struct cmd_list_element *c)
883 {
884 update_packet_config (&remote_protocol_Z[Z_PACKET_READ_WP]);
885 }
886
887 static void
888 show_remote_protocol_Z_read_wp_packet_cmd (char *args, int from_tty)
889 {
890 show_packet_config_cmd (&remote_protocol_Z[Z_PACKET_READ_WP]);
891 }
892
893 static void
894 set_remote_protocol_Z_access_wp_packet_cmd (char *args, int from_tty,
895 struct cmd_list_element *c)
896 {
897 update_packet_config (&remote_protocol_Z[Z_PACKET_ACCESS_WP]);
898 }
899
900 static void
901 show_remote_protocol_Z_access_wp_packet_cmd (char *args, int from_tty)
902 {
903 show_packet_config_cmd (&remote_protocol_Z[Z_PACKET_ACCESS_WP]);
904 }
905
906 /* For compatibility with older distributions. Provide a ``set remote
907 Z-packet ...'' command that updates all the Z packet types. */
908
909 static enum cmd_auto_boolean remote_Z_packet_detect;
910
911 static void
912 set_remote_protocol_Z_packet_cmd (char *args, int from_tty,
913 struct cmd_list_element *c)
914 {
915 int i;
916 for (i = 0; i < NR_Z_PACKET_TYPES; i++)
917 {
918 remote_protocol_Z[i].detect = remote_Z_packet_detect;
919 update_packet_config (&remote_protocol_Z[i]);
920 }
921 }
922
923 static void
924 show_remote_protocol_Z_packet_cmd (char *args, int from_tty)
925 {
926 int i;
927 for (i = 0; i < NR_Z_PACKET_TYPES; i++)
928 {
929 show_packet_config_cmd (&remote_protocol_Z[i]);
930 }
931 }
932
933 /* Should we try the 'X' (remote binary download) packet?
934
935 This variable (available to the user via "set remote X-packet")
936 dictates whether downloads are sent in binary (via the 'X' packet).
937 We assume that the stub can, and attempt to do it. This will be
938 cleared if the stub does not understand it. This switch is still
939 needed, though in cases when the packet is supported in the stub,
940 but the connection does not allow it (i.e., 7-bit serial connection
941 only). */
942
943 static struct packet_config remote_protocol_binary_download;
944
945 /* Should we try the 'ThreadInfo' query packet?
946
947 This variable (NOT available to the user: auto-detect only!)
948 determines whether GDB will use the new, simpler "ThreadInfo"
949 query or the older, more complex syntax for thread queries.
950 This is an auto-detect variable (set to true at each connect,
951 and set to false when the target fails to recognize it). */
952
953 static int use_threadinfo_query;
954 static int use_threadextra_query;
955
956 static void
957 set_remote_protocol_binary_download_cmd (char *args,
958 int from_tty,
959 struct cmd_list_element *c)
960 {
961 update_packet_config (&remote_protocol_binary_download);
962 }
963
964 static void
965 show_remote_protocol_binary_download_cmd (char *args,
966 int from_tty)
967 {
968 show_packet_config_cmd (&remote_protocol_binary_download);
969 }
970
971
972 /* Tokens for use by the asynchronous signal handlers for SIGINT */
973 PTR sigint_remote_twice_token;
974 PTR sigint_remote_token;
975
976 /* These are pointers to hook functions that may be set in order to
977 modify resume/wait behavior for a particular architecture. */
978
979 void (*target_resume_hook) (void);
980 void (*target_wait_loop_hook) (void);
981 \f
982
983
984 /* These are the threads which we last sent to the remote system.
985 -1 for all or -2 for not sent yet. */
986 static int general_thread;
987 static int continue_thread;
988
989 /* Call this function as a result of
990 1) A halt indication (T packet) containing a thread id
991 2) A direct query of currthread
992 3) Successful execution of set thread
993 */
994
995 static void
996 record_currthread (int currthread)
997 {
998 general_thread = currthread;
999
1000 /* If this is a new thread, add it to GDB's thread list.
1001 If we leave it up to WFI to do this, bad things will happen. */
1002 if (!in_thread_list (pid_to_ptid (currthread)))
1003 {
1004 add_thread (pid_to_ptid (currthread));
1005 ui_out_text (uiout, "[New ");
1006 ui_out_text (uiout, target_pid_to_str (pid_to_ptid (currthread)));
1007 ui_out_text (uiout, "]\n");
1008 }
1009 }
1010
1011 #define MAGIC_NULL_PID 42000
1012
1013 static void
1014 set_thread (int th, int gen)
1015 {
1016 struct remote_state *rs = get_remote_state ();
1017 char *buf = alloca (rs->remote_packet_size);
1018 int state = gen ? general_thread : continue_thread;
1019
1020 if (state == th)
1021 return;
1022
1023 buf[0] = 'H';
1024 buf[1] = gen ? 'g' : 'c';
1025 if (th == MAGIC_NULL_PID)
1026 {
1027 buf[2] = '0';
1028 buf[3] = '\0';
1029 }
1030 else if (th < 0)
1031 sprintf (&buf[2], "-%x", -th);
1032 else
1033 sprintf (&buf[2], "%x", th);
1034 putpkt (buf);
1035 getpkt (buf, (rs->remote_packet_size), 0);
1036 if (gen)
1037 general_thread = th;
1038 else
1039 continue_thread = th;
1040 }
1041 \f
1042 /* Return nonzero if the thread TH is still alive on the remote system. */
1043
1044 static int
1045 remote_thread_alive (ptid_t ptid)
1046 {
1047 int tid = PIDGET (ptid);
1048 char buf[16];
1049
1050 if (tid < 0)
1051 sprintf (buf, "T-%08x", -tid);
1052 else
1053 sprintf (buf, "T%08x", tid);
1054 putpkt (buf);
1055 getpkt (buf, sizeof (buf), 0);
1056 return (buf[0] == 'O' && buf[1] == 'K');
1057 }
1058
1059 /* About these extended threadlist and threadinfo packets. They are
1060 variable length packets but, the fields within them are often fixed
1061 length. They are redundent enough to send over UDP as is the
1062 remote protocol in general. There is a matching unit test module
1063 in libstub. */
1064
1065 #define OPAQUETHREADBYTES 8
1066
1067 /* a 64 bit opaque identifier */
1068 typedef unsigned char threadref[OPAQUETHREADBYTES];
1069
1070 /* WARNING: This threadref data structure comes from the remote O.S., libstub
1071 protocol encoding, and remote.c. it is not particularly changable */
1072
1073 /* Right now, the internal structure is int. We want it to be bigger.
1074 Plan to fix this.
1075 */
1076
1077 typedef int gdb_threadref; /* internal GDB thread reference */
1078
1079 /* gdb_ext_thread_info is an internal GDB data structure which is
1080 equivalint to the reply of the remote threadinfo packet */
1081
1082 struct gdb_ext_thread_info
1083 {
1084 threadref threadid; /* External form of thread reference */
1085 int active; /* Has state interesting to GDB? , regs, stack */
1086 char display[256]; /* Brief state display, name, blocked/syspended */
1087 char shortname[32]; /* To be used to name threads */
1088 char more_display[256]; /* Long info, statistics, queue depth, whatever */
1089 };
1090
1091 /* The volume of remote transfers can be limited by submitting
1092 a mask containing bits specifying the desired information.
1093 Use a union of these values as the 'selection' parameter to
1094 get_thread_info. FIXME: Make these TAG names more thread specific.
1095 */
1096
1097 #define TAG_THREADID 1
1098 #define TAG_EXISTS 2
1099 #define TAG_DISPLAY 4
1100 #define TAG_THREADNAME 8
1101 #define TAG_MOREDISPLAY 16
1102
1103 #define BUF_THREAD_ID_SIZE (OPAQUETHREADBYTES*2)
1104
1105 char *unpack_varlen_hex (char *buff, int *result);
1106
1107 static char *unpack_nibble (char *buf, int *val);
1108
1109 static char *pack_nibble (char *buf, int nibble);
1110
1111 static char *pack_hex_byte (char *pkt, int /*unsigned char */ byte);
1112
1113 static char *unpack_byte (char *buf, int *value);
1114
1115 static char *pack_int (char *buf, int value);
1116
1117 static char *unpack_int (char *buf, int *value);
1118
1119 static char *unpack_string (char *src, char *dest, int length);
1120
1121 static char *pack_threadid (char *pkt, threadref * id);
1122
1123 static char *unpack_threadid (char *inbuf, threadref * id);
1124
1125 void int_to_threadref (threadref * id, int value);
1126
1127 static int threadref_to_int (threadref * ref);
1128
1129 static void copy_threadref (threadref * dest, threadref * src);
1130
1131 static int threadmatch (threadref * dest, threadref * src);
1132
1133 static char *pack_threadinfo_request (char *pkt, int mode, threadref * id);
1134
1135 static int remote_unpack_thread_info_response (char *pkt,
1136 threadref * expectedref,
1137 struct gdb_ext_thread_info
1138 *info);
1139
1140
1141 static int remote_get_threadinfo (threadref * threadid, int fieldset, /*TAG mask */
1142 struct gdb_ext_thread_info *info);
1143
1144 static int adapt_remote_get_threadinfo (gdb_threadref * ref,
1145 int selection,
1146 struct gdb_ext_thread_info *info);
1147
1148 static char *pack_threadlist_request (char *pkt, int startflag,
1149 int threadcount,
1150 threadref * nextthread);
1151
1152 static int parse_threadlist_response (char *pkt,
1153 int result_limit,
1154 threadref * original_echo,
1155 threadref * resultlist, int *doneflag);
1156
1157 static int remote_get_threadlist (int startflag,
1158 threadref * nextthread,
1159 int result_limit,
1160 int *done,
1161 int *result_count, threadref * threadlist);
1162
1163 typedef int (*rmt_thread_action) (threadref * ref, void *context);
1164
1165 static int remote_threadlist_iterator (rmt_thread_action stepfunction,
1166 void *context, int looplimit);
1167
1168 static int remote_newthread_step (threadref * ref, void *context);
1169
1170 /* encode 64 bits in 16 chars of hex */
1171
1172 static const char hexchars[] = "0123456789abcdef";
1173
1174 static int
1175 ishex (int ch, int *val)
1176 {
1177 if ((ch >= 'a') && (ch <= 'f'))
1178 {
1179 *val = ch - 'a' + 10;
1180 return 1;
1181 }
1182 if ((ch >= 'A') && (ch <= 'F'))
1183 {
1184 *val = ch - 'A' + 10;
1185 return 1;
1186 }
1187 if ((ch >= '0') && (ch <= '9'))
1188 {
1189 *val = ch - '0';
1190 return 1;
1191 }
1192 return 0;
1193 }
1194
1195 static int
1196 stubhex (int ch)
1197 {
1198 if (ch >= 'a' && ch <= 'f')
1199 return ch - 'a' + 10;
1200 if (ch >= '0' && ch <= '9')
1201 return ch - '0';
1202 if (ch >= 'A' && ch <= 'F')
1203 return ch - 'A' + 10;
1204 return -1;
1205 }
1206
1207 static int
1208 stub_unpack_int (char *buff, int fieldlength)
1209 {
1210 int nibble;
1211 int retval = 0;
1212
1213 while (fieldlength)
1214 {
1215 nibble = stubhex (*buff++);
1216 retval |= nibble;
1217 fieldlength--;
1218 if (fieldlength)
1219 retval = retval << 4;
1220 }
1221 return retval;
1222 }
1223
1224 char *
1225 unpack_varlen_hex (char *buff, /* packet to parse */
1226 int *result)
1227 {
1228 int nibble;
1229 int retval = 0;
1230
1231 while (ishex (*buff, &nibble))
1232 {
1233 buff++;
1234 retval = retval << 4;
1235 retval |= nibble & 0x0f;
1236 }
1237 *result = retval;
1238 return buff;
1239 }
1240
1241 static char *
1242 unpack_nibble (char *buf, int *val)
1243 {
1244 ishex (*buf++, val);
1245 return buf;
1246 }
1247
1248 static char *
1249 pack_nibble (char *buf, int nibble)
1250 {
1251 *buf++ = hexchars[(nibble & 0x0f)];
1252 return buf;
1253 }
1254
1255 static char *
1256 pack_hex_byte (char *pkt, int byte)
1257 {
1258 *pkt++ = hexchars[(byte >> 4) & 0xf];
1259 *pkt++ = hexchars[(byte & 0xf)];
1260 return pkt;
1261 }
1262
1263 static char *
1264 unpack_byte (char *buf, int *value)
1265 {
1266 *value = stub_unpack_int (buf, 2);
1267 return buf + 2;
1268 }
1269
1270 static char *
1271 pack_int (char *buf, int value)
1272 {
1273 buf = pack_hex_byte (buf, (value >> 24) & 0xff);
1274 buf = pack_hex_byte (buf, (value >> 16) & 0xff);
1275 buf = pack_hex_byte (buf, (value >> 8) & 0x0ff);
1276 buf = pack_hex_byte (buf, (value & 0xff));
1277 return buf;
1278 }
1279
1280 static char *
1281 unpack_int (char *buf, int *value)
1282 {
1283 *value = stub_unpack_int (buf, 8);
1284 return buf + 8;
1285 }
1286
1287 #if 0 /* currently unused, uncomment when needed */
1288 static char *pack_string (char *pkt, char *string);
1289
1290 static char *
1291 pack_string (char *pkt, char *string)
1292 {
1293 char ch;
1294 int len;
1295
1296 len = strlen (string);
1297 if (len > 200)
1298 len = 200; /* Bigger than most GDB packets, junk??? */
1299 pkt = pack_hex_byte (pkt, len);
1300 while (len-- > 0)
1301 {
1302 ch = *string++;
1303 if ((ch == '\0') || (ch == '#'))
1304 ch = '*'; /* Protect encapsulation */
1305 *pkt++ = ch;
1306 }
1307 return pkt;
1308 }
1309 #endif /* 0 (unused) */
1310
1311 static char *
1312 unpack_string (char *src, char *dest, int length)
1313 {
1314 while (length--)
1315 *dest++ = *src++;
1316 *dest = '\0';
1317 return src;
1318 }
1319
1320 static char *
1321 pack_threadid (char *pkt, threadref *id)
1322 {
1323 char *limit;
1324 unsigned char *altid;
1325
1326 altid = (unsigned char *) id;
1327 limit = pkt + BUF_THREAD_ID_SIZE;
1328 while (pkt < limit)
1329 pkt = pack_hex_byte (pkt, *altid++);
1330 return pkt;
1331 }
1332
1333
1334 static char *
1335 unpack_threadid (char *inbuf, threadref *id)
1336 {
1337 char *altref;
1338 char *limit = inbuf + BUF_THREAD_ID_SIZE;
1339 int x, y;
1340
1341 altref = (char *) id;
1342
1343 while (inbuf < limit)
1344 {
1345 x = stubhex (*inbuf++);
1346 y = stubhex (*inbuf++);
1347 *altref++ = (x << 4) | y;
1348 }
1349 return inbuf;
1350 }
1351
1352 /* Externally, threadrefs are 64 bits but internally, they are still
1353 ints. This is due to a mismatch of specifications. We would like
1354 to use 64bit thread references internally. This is an adapter
1355 function. */
1356
1357 void
1358 int_to_threadref (threadref *id, int value)
1359 {
1360 unsigned char *scan;
1361
1362 scan = (unsigned char *) id;
1363 {
1364 int i = 4;
1365 while (i--)
1366 *scan++ = 0;
1367 }
1368 *scan++ = (value >> 24) & 0xff;
1369 *scan++ = (value >> 16) & 0xff;
1370 *scan++ = (value >> 8) & 0xff;
1371 *scan++ = (value & 0xff);
1372 }
1373
1374 static int
1375 threadref_to_int (threadref *ref)
1376 {
1377 int i, value = 0;
1378 unsigned char *scan;
1379
1380 scan = (char *) ref;
1381 scan += 4;
1382 i = 4;
1383 while (i-- > 0)
1384 value = (value << 8) | ((*scan++) & 0xff);
1385 return value;
1386 }
1387
1388 static void
1389 copy_threadref (threadref *dest, threadref *src)
1390 {
1391 int i;
1392 unsigned char *csrc, *cdest;
1393
1394 csrc = (unsigned char *) src;
1395 cdest = (unsigned char *) dest;
1396 i = 8;
1397 while (i--)
1398 *cdest++ = *csrc++;
1399 }
1400
1401 static int
1402 threadmatch (threadref *dest, threadref *src)
1403 {
1404 /* things are broken right now, so just assume we got a match */
1405 #if 0
1406 unsigned char *srcp, *destp;
1407 int i, result;
1408 srcp = (char *) src;
1409 destp = (char *) dest;
1410
1411 result = 1;
1412 while (i-- > 0)
1413 result &= (*srcp++ == *destp++) ? 1 : 0;
1414 return result;
1415 #endif
1416 return 1;
1417 }
1418
1419 /*
1420 threadid:1, # always request threadid
1421 context_exists:2,
1422 display:4,
1423 unique_name:8,
1424 more_display:16
1425 */
1426
1427 /* Encoding: 'Q':8,'P':8,mask:32,threadid:64 */
1428
1429 static char *
1430 pack_threadinfo_request (char *pkt, int mode, threadref *id)
1431 {
1432 *pkt++ = 'q'; /* Info Query */
1433 *pkt++ = 'P'; /* process or thread info */
1434 pkt = pack_int (pkt, mode); /* mode */
1435 pkt = pack_threadid (pkt, id); /* threadid */
1436 *pkt = '\0'; /* terminate */
1437 return pkt;
1438 }
1439
1440 /* These values tag the fields in a thread info response packet */
1441 /* Tagging the fields allows us to request specific fields and to
1442 add more fields as time goes by */
1443
1444 #define TAG_THREADID 1 /* Echo the thread identifier */
1445 #define TAG_EXISTS 2 /* Is this process defined enough to
1446 fetch registers and its stack */
1447 #define TAG_DISPLAY 4 /* A short thing maybe to put on a window */
1448 #define TAG_THREADNAME 8 /* string, maps 1-to-1 with a thread is */
1449 #define TAG_MOREDISPLAY 16 /* Whatever the kernel wants to say about
1450 the process */
1451
1452 static int
1453 remote_unpack_thread_info_response (char *pkt, threadref *expectedref,
1454 struct gdb_ext_thread_info *info)
1455 {
1456 struct remote_state *rs = get_remote_state ();
1457 int mask, length;
1458 unsigned int tag;
1459 threadref ref;
1460 char *limit = pkt + (rs->remote_packet_size); /* plausable parsing limit */
1461 int retval = 1;
1462
1463 /* info->threadid = 0; FIXME: implement zero_threadref */
1464 info->active = 0;
1465 info->display[0] = '\0';
1466 info->shortname[0] = '\0';
1467 info->more_display[0] = '\0';
1468
1469 /* Assume the characters indicating the packet type have been stripped */
1470 pkt = unpack_int (pkt, &mask); /* arg mask */
1471 pkt = unpack_threadid (pkt, &ref);
1472
1473 if (mask == 0)
1474 warning ("Incomplete response to threadinfo request\n");
1475 if (!threadmatch (&ref, expectedref))
1476 { /* This is an answer to a different request */
1477 warning ("ERROR RMT Thread info mismatch\n");
1478 return 0;
1479 }
1480 copy_threadref (&info->threadid, &ref);
1481
1482 /* Loop on tagged fields , try to bail if somthing goes wrong */
1483
1484 while ((pkt < limit) && mask && *pkt) /* packets are terminated with nulls */
1485 {
1486 pkt = unpack_int (pkt, &tag); /* tag */
1487 pkt = unpack_byte (pkt, &length); /* length */
1488 if (!(tag & mask)) /* tags out of synch with mask */
1489 {
1490 warning ("ERROR RMT: threadinfo tag mismatch\n");
1491 retval = 0;
1492 break;
1493 }
1494 if (tag == TAG_THREADID)
1495 {
1496 if (length != 16)
1497 {
1498 warning ("ERROR RMT: length of threadid is not 16\n");
1499 retval = 0;
1500 break;
1501 }
1502 pkt = unpack_threadid (pkt, &ref);
1503 mask = mask & ~TAG_THREADID;
1504 continue;
1505 }
1506 if (tag == TAG_EXISTS)
1507 {
1508 info->active = stub_unpack_int (pkt, length);
1509 pkt += length;
1510 mask = mask & ~(TAG_EXISTS);
1511 if (length > 8)
1512 {
1513 warning ("ERROR RMT: 'exists' length too long\n");
1514 retval = 0;
1515 break;
1516 }
1517 continue;
1518 }
1519 if (tag == TAG_THREADNAME)
1520 {
1521 pkt = unpack_string (pkt, &info->shortname[0], length);
1522 mask = mask & ~TAG_THREADNAME;
1523 continue;
1524 }
1525 if (tag == TAG_DISPLAY)
1526 {
1527 pkt = unpack_string (pkt, &info->display[0], length);
1528 mask = mask & ~TAG_DISPLAY;
1529 continue;
1530 }
1531 if (tag == TAG_MOREDISPLAY)
1532 {
1533 pkt = unpack_string (pkt, &info->more_display[0], length);
1534 mask = mask & ~TAG_MOREDISPLAY;
1535 continue;
1536 }
1537 warning ("ERROR RMT: unknown thread info tag\n");
1538 break; /* Not a tag we know about */
1539 }
1540 return retval;
1541 }
1542
1543 static int
1544 remote_get_threadinfo (threadref *threadid, int fieldset, /* TAG mask */
1545 struct gdb_ext_thread_info *info)
1546 {
1547 struct remote_state *rs = get_remote_state ();
1548 int result;
1549 char *threadinfo_pkt = alloca (rs->remote_packet_size);
1550
1551 pack_threadinfo_request (threadinfo_pkt, fieldset, threadid);
1552 putpkt (threadinfo_pkt);
1553 getpkt (threadinfo_pkt, (rs->remote_packet_size), 0);
1554 result = remote_unpack_thread_info_response (threadinfo_pkt + 2, threadid,
1555 info);
1556 return result;
1557 }
1558
1559 /* Unfortunately, 61 bit thread-ids are bigger than the internal
1560 representation of a threadid. */
1561
1562 static int
1563 adapt_remote_get_threadinfo (gdb_threadref *ref, int selection,
1564 struct gdb_ext_thread_info *info)
1565 {
1566 threadref lclref;
1567
1568 int_to_threadref (&lclref, *ref);
1569 return remote_get_threadinfo (&lclref, selection, info);
1570 }
1571
1572 /* Format: i'Q':8,i"L":8,initflag:8,batchsize:16,lastthreadid:32 */
1573
1574 static char *
1575 pack_threadlist_request (char *pkt, int startflag, int threadcount,
1576 threadref *nextthread)
1577 {
1578 *pkt++ = 'q'; /* info query packet */
1579 *pkt++ = 'L'; /* Process LIST or threadLIST request */
1580 pkt = pack_nibble (pkt, startflag); /* initflag 1 bytes */
1581 pkt = pack_hex_byte (pkt, threadcount); /* threadcount 2 bytes */
1582 pkt = pack_threadid (pkt, nextthread); /* 64 bit thread identifier */
1583 *pkt = '\0';
1584 return pkt;
1585 }
1586
1587 /* Encoding: 'q':8,'M':8,count:16,done:8,argthreadid:64,(threadid:64)* */
1588
1589 static int
1590 parse_threadlist_response (char *pkt, int result_limit,
1591 threadref *original_echo, threadref *resultlist,
1592 int *doneflag)
1593 {
1594 struct remote_state *rs = get_remote_state ();
1595 char *limit;
1596 int count, resultcount, done;
1597
1598 resultcount = 0;
1599 /* Assume the 'q' and 'M chars have been stripped. */
1600 limit = pkt + ((rs->remote_packet_size) - BUF_THREAD_ID_SIZE); /* done parse past here */
1601 pkt = unpack_byte (pkt, &count); /* count field */
1602 pkt = unpack_nibble (pkt, &done);
1603 /* The first threadid is the argument threadid. */
1604 pkt = unpack_threadid (pkt, original_echo); /* should match query packet */
1605 while ((count-- > 0) && (pkt < limit))
1606 {
1607 pkt = unpack_threadid (pkt, resultlist++);
1608 if (resultcount++ >= result_limit)
1609 break;
1610 }
1611 if (doneflag)
1612 *doneflag = done;
1613 return resultcount;
1614 }
1615
1616 static int
1617 remote_get_threadlist (int startflag, threadref *nextthread, int result_limit,
1618 int *done, int *result_count, threadref *threadlist)
1619 {
1620 struct remote_state *rs = get_remote_state ();
1621 static threadref echo_nextthread;
1622 char *threadlist_packet = alloca (rs->remote_packet_size);
1623 char *t_response = alloca (rs->remote_packet_size);
1624 int result = 1;
1625
1626 /* Trancate result limit to be smaller than the packet size */
1627 if ((((result_limit + 1) * BUF_THREAD_ID_SIZE) + 10) >= (rs->remote_packet_size))
1628 result_limit = ((rs->remote_packet_size) / BUF_THREAD_ID_SIZE) - 2;
1629
1630 pack_threadlist_request (threadlist_packet,
1631 startflag, result_limit, nextthread);
1632 putpkt (threadlist_packet);
1633 getpkt (t_response, (rs->remote_packet_size), 0);
1634
1635 *result_count =
1636 parse_threadlist_response (t_response + 2, result_limit, &echo_nextthread,
1637 threadlist, done);
1638
1639 if (!threadmatch (&echo_nextthread, nextthread))
1640 {
1641 /* FIXME: This is a good reason to drop the packet */
1642 /* Possably, there is a duplicate response */
1643 /* Possabilities :
1644 retransmit immediatly - race conditions
1645 retransmit after timeout - yes
1646 exit
1647 wait for packet, then exit
1648 */
1649 warning ("HMM: threadlist did not echo arg thread, dropping it\n");
1650 return 0; /* I choose simply exiting */
1651 }
1652 if (*result_count <= 0)
1653 {
1654 if (*done != 1)
1655 {
1656 warning ("RMT ERROR : failed to get remote thread list\n");
1657 result = 0;
1658 }
1659 return result; /* break; */
1660 }
1661 if (*result_count > result_limit)
1662 {
1663 *result_count = 0;
1664 warning ("RMT ERROR: threadlist response longer than requested\n");
1665 return 0;
1666 }
1667 return result;
1668 }
1669
1670 /* This is the interface between remote and threads, remotes upper interface */
1671
1672 /* remote_find_new_threads retrieves the thread list and for each
1673 thread in the list, looks up the thread in GDB's internal list,
1674 ading the thread if it does not already exist. This involves
1675 getting partial thread lists from the remote target so, polling the
1676 quit_flag is required. */
1677
1678
1679 /* About this many threadisds fit in a packet. */
1680
1681 #define MAXTHREADLISTRESULTS 32
1682
1683 static int
1684 remote_threadlist_iterator (rmt_thread_action stepfunction, void *context,
1685 int looplimit)
1686 {
1687 int done, i, result_count;
1688 int startflag = 1;
1689 int result = 1;
1690 int loopcount = 0;
1691 static threadref nextthread;
1692 static threadref resultthreadlist[MAXTHREADLISTRESULTS];
1693
1694 done = 0;
1695 while (!done)
1696 {
1697 if (loopcount++ > looplimit)
1698 {
1699 result = 0;
1700 warning ("Remote fetch threadlist -infinite loop-\n");
1701 break;
1702 }
1703 if (!remote_get_threadlist (startflag, &nextthread, MAXTHREADLISTRESULTS,
1704 &done, &result_count, resultthreadlist))
1705 {
1706 result = 0;
1707 break;
1708 }
1709 /* clear for later iterations */
1710 startflag = 0;
1711 /* Setup to resume next batch of thread references, set nextthread. */
1712 if (result_count >= 1)
1713 copy_threadref (&nextthread, &resultthreadlist[result_count - 1]);
1714 i = 0;
1715 while (result_count--)
1716 if (!(result = (*stepfunction) (&resultthreadlist[i++], context)))
1717 break;
1718 }
1719 return result;
1720 }
1721
1722 static int
1723 remote_newthread_step (threadref *ref, void *context)
1724 {
1725 ptid_t ptid;
1726
1727 ptid = pid_to_ptid (threadref_to_int (ref));
1728
1729 if (!in_thread_list (ptid))
1730 add_thread (ptid);
1731 return 1; /* continue iterator */
1732 }
1733
1734 #define CRAZY_MAX_THREADS 1000
1735
1736 static ptid_t
1737 remote_current_thread (ptid_t oldpid)
1738 {
1739 struct remote_state *rs = get_remote_state ();
1740 char *buf = alloca (rs->remote_packet_size);
1741
1742 putpkt ("qC");
1743 getpkt (buf, (rs->remote_packet_size), 0);
1744 if (buf[0] == 'Q' && buf[1] == 'C')
1745 return pid_to_ptid (strtol (&buf[2], NULL, 16));
1746 else
1747 return oldpid;
1748 }
1749
1750 /* Find new threads for info threads command.
1751 * Original version, using John Metzler's thread protocol.
1752 */
1753
1754 static void
1755 remote_find_new_threads (void)
1756 {
1757 remote_threadlist_iterator (remote_newthread_step, 0,
1758 CRAZY_MAX_THREADS);
1759 if (PIDGET (inferior_ptid) == MAGIC_NULL_PID) /* ack ack ack */
1760 inferior_ptid = remote_current_thread (inferior_ptid);
1761 }
1762
1763 /*
1764 * Find all threads for info threads command.
1765 * Uses new thread protocol contributed by Cisco.
1766 * Falls back and attempts to use the older method (above)
1767 * if the target doesn't respond to the new method.
1768 */
1769
1770 static void
1771 remote_threads_info (void)
1772 {
1773 struct remote_state *rs = get_remote_state ();
1774 char *buf = alloca (rs->remote_packet_size);
1775 char *bufp;
1776 int tid;
1777
1778 if (remote_desc == 0) /* paranoia */
1779 error ("Command can only be used when connected to the remote target.");
1780
1781 if (use_threadinfo_query)
1782 {
1783 putpkt ("qfThreadInfo");
1784 bufp = buf;
1785 getpkt (bufp, (rs->remote_packet_size), 0);
1786 if (bufp[0] != '\0') /* q packet recognized */
1787 {
1788 while (*bufp++ == 'm') /* reply contains one or more TID */
1789 {
1790 do
1791 {
1792 tid = strtol (bufp, &bufp, 16);
1793 if (tid != 0 && !in_thread_list (pid_to_ptid (tid)))
1794 add_thread (pid_to_ptid (tid));
1795 }
1796 while (*bufp++ == ','); /* comma-separated list */
1797 putpkt ("qsThreadInfo");
1798 bufp = buf;
1799 getpkt (bufp, (rs->remote_packet_size), 0);
1800 }
1801 return; /* done */
1802 }
1803 }
1804
1805 /* Else fall back to old method based on jmetzler protocol. */
1806 use_threadinfo_query = 0;
1807 remote_find_new_threads ();
1808 return;
1809 }
1810
1811 /*
1812 * Collect a descriptive string about the given thread.
1813 * The target may say anything it wants to about the thread
1814 * (typically info about its blocked / runnable state, name, etc.).
1815 * This string will appear in the info threads display.
1816 *
1817 * Optional: targets are not required to implement this function.
1818 */
1819
1820 static char *
1821 remote_threads_extra_info (struct thread_info *tp)
1822 {
1823 struct remote_state *rs = get_remote_state ();
1824 int result;
1825 int set;
1826 threadref id;
1827 struct gdb_ext_thread_info threadinfo;
1828 static char display_buf[100]; /* arbitrary... */
1829 char *bufp = alloca (rs->remote_packet_size);
1830 int n = 0; /* position in display_buf */
1831
1832 if (remote_desc == 0) /* paranoia */
1833 internal_error (__FILE__, __LINE__,
1834 "remote_threads_extra_info");
1835
1836 if (use_threadextra_query)
1837 {
1838 sprintf (bufp, "qThreadExtraInfo,%x", PIDGET (tp->ptid));
1839 putpkt (bufp);
1840 getpkt (bufp, (rs->remote_packet_size), 0);
1841 if (bufp[0] != 0)
1842 {
1843 n = min (strlen (bufp) / 2, sizeof (display_buf));
1844 result = hex2bin (bufp, display_buf, n);
1845 display_buf [result] = '\0';
1846 return display_buf;
1847 }
1848 }
1849
1850 /* If the above query fails, fall back to the old method. */
1851 use_threadextra_query = 0;
1852 set = TAG_THREADID | TAG_EXISTS | TAG_THREADNAME
1853 | TAG_MOREDISPLAY | TAG_DISPLAY;
1854 int_to_threadref (&id, PIDGET (tp->ptid));
1855 if (remote_get_threadinfo (&id, set, &threadinfo))
1856 if (threadinfo.active)
1857 {
1858 if (*threadinfo.shortname)
1859 n += sprintf(&display_buf[0], " Name: %s,", threadinfo.shortname);
1860 if (*threadinfo.display)
1861 n += sprintf(&display_buf[n], " State: %s,", threadinfo.display);
1862 if (*threadinfo.more_display)
1863 n += sprintf(&display_buf[n], " Priority: %s",
1864 threadinfo.more_display);
1865
1866 if (n > 0)
1867 {
1868 /* for purely cosmetic reasons, clear up trailing commas */
1869 if (',' == display_buf[n-1])
1870 display_buf[n-1] = ' ';
1871 return display_buf;
1872 }
1873 }
1874 return NULL;
1875 }
1876
1877 \f
1878
1879 /* Restart the remote side; this is an extended protocol operation. */
1880
1881 static void
1882 extended_remote_restart (void)
1883 {
1884 struct remote_state *rs = get_remote_state ();
1885 char *buf = alloca (rs->remote_packet_size);
1886
1887 /* Send the restart command; for reasons I don't understand the
1888 remote side really expects a number after the "R". */
1889 buf[0] = 'R';
1890 sprintf (&buf[1], "%x", 0);
1891 putpkt (buf);
1892
1893 /* Now query for status so this looks just like we restarted
1894 gdbserver from scratch. */
1895 putpkt ("?");
1896 getpkt (buf, (rs->remote_packet_size), 0);
1897 }
1898 \f
1899 /* Clean up connection to a remote debugger. */
1900
1901 /* ARGSUSED */
1902 static void
1903 remote_close (int quitting)
1904 {
1905 if (remote_desc)
1906 serial_close (remote_desc);
1907 remote_desc = NULL;
1908 }
1909
1910 /* Query the remote side for the text, data and bss offsets. */
1911
1912 static void
1913 get_offsets (void)
1914 {
1915 struct remote_state *rs = get_remote_state ();
1916 char *buf = alloca (rs->remote_packet_size);
1917 char *ptr;
1918 int lose;
1919 CORE_ADDR text_addr, data_addr, bss_addr;
1920 struct section_offsets *offs;
1921
1922 putpkt ("qOffsets");
1923
1924 getpkt (buf, (rs->remote_packet_size), 0);
1925
1926 if (buf[0] == '\000')
1927 return; /* Return silently. Stub doesn't support
1928 this command. */
1929 if (buf[0] == 'E')
1930 {
1931 warning ("Remote failure reply: %s", buf);
1932 return;
1933 }
1934
1935 /* Pick up each field in turn. This used to be done with scanf, but
1936 scanf will make trouble if CORE_ADDR size doesn't match
1937 conversion directives correctly. The following code will work
1938 with any size of CORE_ADDR. */
1939 text_addr = data_addr = bss_addr = 0;
1940 ptr = buf;
1941 lose = 0;
1942
1943 if (strncmp (ptr, "Text=", 5) == 0)
1944 {
1945 ptr += 5;
1946 /* Don't use strtol, could lose on big values. */
1947 while (*ptr && *ptr != ';')
1948 text_addr = (text_addr << 4) + fromhex (*ptr++);
1949 }
1950 else
1951 lose = 1;
1952
1953 if (!lose && strncmp (ptr, ";Data=", 6) == 0)
1954 {
1955 ptr += 6;
1956 while (*ptr && *ptr != ';')
1957 data_addr = (data_addr << 4) + fromhex (*ptr++);
1958 }
1959 else
1960 lose = 1;
1961
1962 if (!lose && strncmp (ptr, ";Bss=", 5) == 0)
1963 {
1964 ptr += 5;
1965 while (*ptr && *ptr != ';')
1966 bss_addr = (bss_addr << 4) + fromhex (*ptr++);
1967 }
1968 else
1969 lose = 1;
1970
1971 if (lose)
1972 error ("Malformed response to offset query, %s", buf);
1973
1974 if (symfile_objfile == NULL)
1975 return;
1976
1977 offs = (struct section_offsets *) alloca (SIZEOF_SECTION_OFFSETS);
1978 memcpy (offs, symfile_objfile->section_offsets, SIZEOF_SECTION_OFFSETS);
1979
1980 offs->offsets[SECT_OFF_TEXT (symfile_objfile)] = text_addr;
1981
1982 /* This is a temporary kludge to force data and bss to use the same offsets
1983 because that's what nlmconv does now. The real solution requires changes
1984 to the stub and remote.c that I don't have time to do right now. */
1985
1986 offs->offsets[SECT_OFF_DATA (symfile_objfile)] = data_addr;
1987 offs->offsets[SECT_OFF_BSS (symfile_objfile)] = data_addr;
1988
1989 objfile_relocate (symfile_objfile, offs);
1990 }
1991
1992 /*
1993 * Cisco version of section offsets:
1994 *
1995 * Instead of having GDB query the target for the section offsets,
1996 * Cisco lets the target volunteer the information! It's also in
1997 * a different format, so here are the functions that will decode
1998 * a section offset packet from a Cisco target.
1999 */
2000
2001 /*
2002 * Function: remote_cisco_section_offsets
2003 *
2004 * Returns: zero for success, non-zero for failure
2005 */
2006
2007 static int
2008 remote_cisco_section_offsets (bfd_vma text_addr,
2009 bfd_vma data_addr,
2010 bfd_vma bss_addr,
2011 bfd_signed_vma *text_offs,
2012 bfd_signed_vma *data_offs,
2013 bfd_signed_vma *bss_offs)
2014 {
2015 bfd_vma text_base, data_base, bss_base;
2016 struct minimal_symbol *start;
2017 asection *sect;
2018 bfd *abfd;
2019 int len;
2020
2021 if (symfile_objfile == NULL)
2022 return -1; /* no can do nothin' */
2023
2024 start = lookup_minimal_symbol ("_start", NULL, NULL);
2025 if (start == NULL)
2026 return -1; /* Can't find "_start" symbol */
2027
2028 data_base = bss_base = 0;
2029 text_base = SYMBOL_VALUE_ADDRESS (start);
2030
2031 abfd = symfile_objfile->obfd;
2032 for (sect = abfd->sections;
2033 sect != 0;
2034 sect = sect->next)
2035 {
2036 const char *p = bfd_get_section_name (abfd, sect);
2037 len = strlen (p);
2038 if (strcmp (p + len - 4, "data") == 0) /* ends in "data" */
2039 if (data_base == 0 ||
2040 data_base > bfd_get_section_vma (abfd, sect))
2041 data_base = bfd_get_section_vma (abfd, sect);
2042 if (strcmp (p + len - 3, "bss") == 0) /* ends in "bss" */
2043 if (bss_base == 0 ||
2044 bss_base > bfd_get_section_vma (abfd, sect))
2045 bss_base = bfd_get_section_vma (abfd, sect);
2046 }
2047 *text_offs = text_addr - text_base;
2048 *data_offs = data_addr - data_base;
2049 *bss_offs = bss_addr - bss_base;
2050 if (remote_debug)
2051 {
2052 char tmp[128];
2053
2054 sprintf (tmp, "VMA: text = 0x");
2055 sprintf_vma (tmp + strlen (tmp), text_addr);
2056 sprintf (tmp + strlen (tmp), " data = 0x");
2057 sprintf_vma (tmp + strlen (tmp), data_addr);
2058 sprintf (tmp + strlen (tmp), " bss = 0x");
2059 sprintf_vma (tmp + strlen (tmp), bss_addr);
2060 fprintf_filtered (gdb_stdlog, tmp);
2061 fprintf_filtered (gdb_stdlog,
2062 "Reloc offset: text = 0x%s data = 0x%s bss = 0x%s\n",
2063 paddr_nz (*text_offs),
2064 paddr_nz (*data_offs),
2065 paddr_nz (*bss_offs));
2066 }
2067
2068 return 0;
2069 }
2070
2071 /*
2072 * Function: remote_cisco_objfile_relocate
2073 *
2074 * Relocate the symbol file for a remote target.
2075 */
2076
2077 void
2078 remote_cisco_objfile_relocate (bfd_signed_vma text_off, bfd_signed_vma data_off,
2079 bfd_signed_vma bss_off)
2080 {
2081 struct section_offsets *offs;
2082
2083 if (text_off != 0 || data_off != 0 || bss_off != 0)
2084 {
2085 /* FIXME: This code assumes gdb-stabs.h is being used; it's
2086 broken for xcoff, dwarf, sdb-coff, etc. But there is no
2087 simple canonical representation for this stuff. */
2088
2089 offs = (struct section_offsets *) alloca (SIZEOF_SECTION_OFFSETS);
2090 memcpy (offs, symfile_objfile->section_offsets, SIZEOF_SECTION_OFFSETS);
2091
2092 offs->offsets[SECT_OFF_TEXT (symfile_objfile)] = text_off;
2093 offs->offsets[SECT_OFF_DATA (symfile_objfile)] = data_off;
2094 offs->offsets[SECT_OFF_BSS (symfile_objfile)] = bss_off;
2095
2096 /* First call the standard objfile_relocate. */
2097 objfile_relocate (symfile_objfile, offs);
2098
2099 /* Now we need to fix up the section entries already attached to
2100 the exec target. These entries will control memory transfers
2101 from the exec file. */
2102
2103 exec_set_section_offsets (text_off, data_off, bss_off);
2104 }
2105 }
2106
2107 /* Stub for catch_errors. */
2108
2109 static int
2110 remote_start_remote_dummy (void *dummy)
2111 {
2112 start_remote (); /* Initialize gdb process mechanisms */
2113 return 1;
2114 }
2115
2116 static int
2117 remote_start_remote (PTR dummy)
2118 {
2119 immediate_quit++; /* Allow user to interrupt it */
2120
2121 /* Ack any packet which the remote side has already sent. */
2122 serial_write (remote_desc, "+", 1);
2123
2124 /* Let the stub know that we want it to return the thread. */
2125 set_thread (-1, 0);
2126
2127 inferior_ptid = remote_current_thread (inferior_ptid);
2128
2129 get_offsets (); /* Get text, data & bss offsets */
2130
2131 putpkt ("?"); /* initiate a query from remote machine */
2132 immediate_quit--;
2133
2134 return remote_start_remote_dummy (dummy);
2135 }
2136
2137 /* Open a connection to a remote debugger.
2138 NAME is the filename used for communication. */
2139
2140 static void
2141 remote_open (char *name, int from_tty)
2142 {
2143 remote_open_1 (name, from_tty, &remote_ops, 0);
2144 }
2145
2146 /* Just like remote_open, but with asynchronous support. */
2147 static void
2148 remote_async_open (char *name, int from_tty)
2149 {
2150 remote_async_open_1 (name, from_tty, &remote_async_ops, 0);
2151 }
2152
2153 /* Open a connection to a remote debugger using the extended
2154 remote gdb protocol. NAME is the filename used for communication. */
2155
2156 static void
2157 extended_remote_open (char *name, int from_tty)
2158 {
2159 remote_open_1 (name, from_tty, &extended_remote_ops, 1 /*extended_p */ );
2160 }
2161
2162 /* Just like extended_remote_open, but with asynchronous support. */
2163 static void
2164 extended_remote_async_open (char *name, int from_tty)
2165 {
2166 remote_async_open_1 (name, from_tty, &extended_async_remote_ops, 1 /*extended_p */ );
2167 }
2168
2169 /* Generic code for opening a connection to a remote target. */
2170
2171 static void
2172 init_all_packet_configs (void)
2173 {
2174 int i;
2175 update_packet_config (&remote_protocol_e);
2176 update_packet_config (&remote_protocol_E);
2177 update_packet_config (&remote_protocol_P);
2178 update_packet_config (&remote_protocol_qSymbol);
2179 for (i = 0; i < NR_Z_PACKET_TYPES; i++)
2180 update_packet_config (&remote_protocol_Z[i]);
2181 /* Force remote_write_bytes to check whether target supports binary
2182 downloading. */
2183 update_packet_config (&remote_protocol_binary_download);
2184 }
2185
2186 /* Symbol look-up. */
2187
2188 static void
2189 remote_check_symbols (struct objfile *objfile)
2190 {
2191 struct remote_state *rs = get_remote_state ();
2192 char *msg, *reply, *tmp;
2193 struct minimal_symbol *sym;
2194 int end;
2195
2196 if (remote_protocol_qSymbol.support == PACKET_DISABLE)
2197 return;
2198
2199 msg = alloca (rs->remote_packet_size);
2200 reply = alloca (rs->remote_packet_size);
2201
2202 /* Invite target to request symbol lookups. */
2203
2204 putpkt ("qSymbol::");
2205 getpkt (reply, (rs->remote_packet_size), 0);
2206 packet_ok (reply, &remote_protocol_qSymbol);
2207
2208 while (strncmp (reply, "qSymbol:", 8) == 0)
2209 {
2210 tmp = &reply[8];
2211 end = hex2bin (tmp, msg, strlen (tmp) / 2);
2212 msg[end] = '\0';
2213 sym = lookup_minimal_symbol (msg, NULL, NULL);
2214 if (sym == NULL)
2215 sprintf (msg, "qSymbol::%s", &reply[8]);
2216 else
2217 sprintf (msg, "qSymbol:%s:%s",
2218 paddr_nz (SYMBOL_VALUE_ADDRESS (sym)),
2219 &reply[8]);
2220 putpkt (msg);
2221 getpkt (reply, (rs->remote_packet_size), 0);
2222 }
2223 }
2224
2225 static struct serial *
2226 remote_serial_open (char *name)
2227 {
2228 static int udp_warning = 0;
2229
2230 /* FIXME: Parsing NAME here is a hack. But we want to warn here instead
2231 of in ser-tcp.c, because it is the remote protocol assuming that the
2232 serial connection is reliable and not the serial connection promising
2233 to be. */
2234 if (!udp_warning && strncmp (name, "udp:", 4) == 0)
2235 {
2236 warning ("The remote protocol may be unreliable over UDP.");
2237 warning ("Some events may be lost, rendering further debugging "
2238 "impossible.");
2239 udp_warning = 1;
2240 }
2241
2242 return serial_open (name);
2243 }
2244
2245 static void
2246 remote_open_1 (char *name, int from_tty, struct target_ops *target,
2247 int extended_p)
2248 {
2249 struct remote_state *rs = get_remote_state ();
2250 if (name == 0)
2251 error ("To open a remote debug connection, you need to specify what\n"
2252 "serial device is attached to the remote system\n"
2253 "(e.g. /dev/ttyS0, /dev/ttya, COM1, etc.).");
2254
2255 /* See FIXME above */
2256 wait_forever_enabled_p = 1;
2257
2258 target_preopen (from_tty);
2259
2260 unpush_target (target);
2261
2262 remote_desc = remote_serial_open (name);
2263 if (!remote_desc)
2264 perror_with_name (name);
2265
2266 if (baud_rate != -1)
2267 {
2268 if (serial_setbaudrate (remote_desc, baud_rate))
2269 {
2270 serial_close (remote_desc);
2271 perror_with_name (name);
2272 }
2273 }
2274
2275 serial_raw (remote_desc);
2276
2277 /* If there is something sitting in the buffer we might take it as a
2278 response to a command, which would be bad. */
2279 serial_flush_input (remote_desc);
2280
2281 if (from_tty)
2282 {
2283 puts_filtered ("Remote debugging using ");
2284 puts_filtered (name);
2285 puts_filtered ("\n");
2286 }
2287 push_target (target); /* Switch to using remote target now */
2288
2289 init_all_packet_configs ();
2290
2291 general_thread = -2;
2292 continue_thread = -2;
2293
2294 /* Probe for ability to use "ThreadInfo" query, as required. */
2295 use_threadinfo_query = 1;
2296 use_threadextra_query = 1;
2297
2298 /* Without this, some commands which require an active target (such
2299 as kill) won't work. This variable serves (at least) double duty
2300 as both the pid of the target process (if it has such), and as a
2301 flag indicating that a target is active. These functions should
2302 be split out into seperate variables, especially since GDB will
2303 someday have a notion of debugging several processes. */
2304
2305 inferior_ptid = pid_to_ptid (MAGIC_NULL_PID);
2306 #ifdef SOLIB_CREATE_INFERIOR_HOOK
2307 /* First delete any symbols previously loaded from shared libraries. */
2308 no_shared_libraries (NULL, 0);
2309 #endif
2310
2311 /* Start the remote connection; if error (0), discard this target.
2312 In particular, if the user quits, be sure to discard it
2313 (we'd be in an inconsistent state otherwise). */
2314 if (!catch_errors (remote_start_remote, NULL,
2315 "Couldn't establish connection to remote target\n",
2316 RETURN_MASK_ALL))
2317 {
2318 pop_target ();
2319 return;
2320 }
2321
2322 if (extended_p)
2323 {
2324 /* Tell the remote that we are using the extended protocol. */
2325 char *buf = alloca (rs->remote_packet_size);
2326 putpkt ("!");
2327 getpkt (buf, (rs->remote_packet_size), 0);
2328 }
2329 #ifdef SOLIB_CREATE_INFERIOR_HOOK
2330 /* FIXME: need a master target_open vector from which all
2331 remote_opens can be called, so that stuff like this can
2332 go there. Failing that, the following code must be copied
2333 to the open function for any remote target that wants to
2334 support svr4 shared libraries. */
2335
2336 /* Set up to detect and load shared libraries. */
2337 if (exec_bfd) /* No use without an exec file. */
2338 {
2339 SOLIB_CREATE_INFERIOR_HOOK (PIDGET (inferior_ptid));
2340 remote_check_symbols (symfile_objfile);
2341 }
2342 #endif
2343 }
2344
2345 /* Just like remote_open but with asynchronous support. */
2346 static void
2347 remote_async_open_1 (char *name, int from_tty, struct target_ops *target,
2348 int extended_p)
2349 {
2350 struct remote_state *rs = get_remote_state ();
2351 if (name == 0)
2352 error ("To open a remote debug connection, you need to specify what\n"
2353 "serial device is attached to the remote system\n"
2354 "(e.g. /dev/ttyS0, /dev/ttya, COM1, etc.).");
2355
2356 target_preopen (from_tty);
2357
2358 unpush_target (target);
2359
2360 remote_desc = remote_serial_open (name);
2361 if (!remote_desc)
2362 perror_with_name (name);
2363
2364 if (baud_rate != -1)
2365 {
2366 if (serial_setbaudrate (remote_desc, baud_rate))
2367 {
2368 serial_close (remote_desc);
2369 perror_with_name (name);
2370 }
2371 }
2372
2373 serial_raw (remote_desc);
2374
2375 /* If there is something sitting in the buffer we might take it as a
2376 response to a command, which would be bad. */
2377 serial_flush_input (remote_desc);
2378
2379 if (from_tty)
2380 {
2381 puts_filtered ("Remote debugging using ");
2382 puts_filtered (name);
2383 puts_filtered ("\n");
2384 }
2385
2386 push_target (target); /* Switch to using remote target now */
2387
2388 init_all_packet_configs ();
2389
2390 general_thread = -2;
2391 continue_thread = -2;
2392
2393 /* Probe for ability to use "ThreadInfo" query, as required. */
2394 use_threadinfo_query = 1;
2395 use_threadextra_query = 1;
2396
2397 /* Without this, some commands which require an active target (such
2398 as kill) won't work. This variable serves (at least) double duty
2399 as both the pid of the target process (if it has such), and as a
2400 flag indicating that a target is active. These functions should
2401 be split out into seperate variables, especially since GDB will
2402 someday have a notion of debugging several processes. */
2403 inferior_ptid = pid_to_ptid (MAGIC_NULL_PID);
2404
2405 /* With this target we start out by owning the terminal. */
2406 remote_async_terminal_ours_p = 1;
2407
2408 /* FIXME: cagney/1999-09-23: During the initial connection it is
2409 assumed that the target is already ready and able to respond to
2410 requests. Unfortunately remote_start_remote() eventually calls
2411 wait_for_inferior() with no timeout. wait_forever_enabled_p gets
2412 around this. Eventually a mechanism that allows
2413 wait_for_inferior() to expect/get timeouts will be
2414 implemented. */
2415 wait_forever_enabled_p = 0;
2416
2417 #ifdef SOLIB_CREATE_INFERIOR_HOOK
2418 /* First delete any symbols previously loaded from shared libraries. */
2419 no_shared_libraries (NULL, 0);
2420 #endif
2421
2422 /* Start the remote connection; if error (0), discard this target.
2423 In particular, if the user quits, be sure to discard it
2424 (we'd be in an inconsistent state otherwise). */
2425 if (!catch_errors (remote_start_remote, NULL,
2426 "Couldn't establish connection to remote target\n",
2427 RETURN_MASK_ALL))
2428 {
2429 pop_target ();
2430 wait_forever_enabled_p = 1;
2431 return;
2432 }
2433
2434 wait_forever_enabled_p = 1;
2435
2436 if (extended_p)
2437 {
2438 /* Tell the remote that we are using the extended protocol. */
2439 char *buf = alloca (rs->remote_packet_size);
2440 putpkt ("!");
2441 getpkt (buf, (rs->remote_packet_size), 0);
2442 }
2443 #ifdef SOLIB_CREATE_INFERIOR_HOOK
2444 /* FIXME: need a master target_open vector from which all
2445 remote_opens can be called, so that stuff like this can
2446 go there. Failing that, the following code must be copied
2447 to the open function for any remote target that wants to
2448 support svr4 shared libraries. */
2449
2450 /* Set up to detect and load shared libraries. */
2451 if (exec_bfd) /* No use without an exec file. */
2452 {
2453 SOLIB_CREATE_INFERIOR_HOOK (PIDGET (inferior_ptid));
2454 remote_check_symbols (symfile_objfile);
2455 }
2456 #endif
2457 }
2458
2459 /* This takes a program previously attached to and detaches it. After
2460 this is done, GDB can be used to debug some other program. We
2461 better not have left any breakpoints in the target program or it'll
2462 die when it hits one. */
2463
2464 static void
2465 remote_detach (char *args, int from_tty)
2466 {
2467 struct remote_state *rs = get_remote_state ();
2468 char *buf = alloca (rs->remote_packet_size);
2469
2470 if (args)
2471 error ("Argument given to \"detach\" when remotely debugging.");
2472
2473 /* Tell the remote target to detach. */
2474 strcpy (buf, "D");
2475 remote_send (buf, (rs->remote_packet_size));
2476
2477 target_mourn_inferior ();
2478 if (from_tty)
2479 puts_filtered ("Ending remote debugging.\n");
2480
2481 }
2482
2483 /* Same as remote_detach, but with async support. */
2484 static void
2485 remote_async_detach (char *args, int from_tty)
2486 {
2487 struct remote_state *rs = get_remote_state ();
2488 char *buf = alloca (rs->remote_packet_size);
2489
2490 if (args)
2491 error ("Argument given to \"detach\" when remotely debugging.");
2492
2493 /* Tell the remote target to detach. */
2494 strcpy (buf, "D");
2495 remote_send (buf, (rs->remote_packet_size));
2496
2497 /* Unregister the file descriptor from the event loop. */
2498 if (target_is_async_p ())
2499 serial_async (remote_desc, NULL, 0);
2500
2501 target_mourn_inferior ();
2502 if (from_tty)
2503 puts_filtered ("Ending remote debugging.\n");
2504 }
2505
2506 /* Convert hex digit A to a number. */
2507
2508 static int
2509 fromhex (int a)
2510 {
2511 if (a >= '0' && a <= '9')
2512 return a - '0';
2513 else if (a >= 'a' && a <= 'f')
2514 return a - 'a' + 10;
2515 else if (a >= 'A' && a <= 'F')
2516 return a - 'A' + 10;
2517 else
2518 error ("Reply contains invalid hex digit %d", a);
2519 }
2520
2521 static int
2522 hex2bin (const char *hex, char *bin, int count)
2523 {
2524 int i;
2525
2526 for (i = 0; i < count; i++)
2527 {
2528 if (hex[0] == 0 || hex[1] == 0)
2529 {
2530 /* Hex string is short, or of uneven length.
2531 Return the count that has been converted so far. */
2532 return i;
2533 }
2534 *bin++ = fromhex (hex[0]) * 16 + fromhex (hex[1]);
2535 hex += 2;
2536 }
2537 return i;
2538 }
2539
2540 /* Convert number NIB to a hex digit. */
2541
2542 static int
2543 tohex (int nib)
2544 {
2545 if (nib < 10)
2546 return '0' + nib;
2547 else
2548 return 'a' + nib - 10;
2549 }
2550
2551 static int
2552 bin2hex (const char *bin, char *hex, int count)
2553 {
2554 int i;
2555 /* May use a length, or a nul-terminated string as input. */
2556 if (count == 0)
2557 count = strlen (bin);
2558
2559 for (i = 0; i < count; i++)
2560 {
2561 *hex++ = tohex ((*bin >> 4) & 0xf);
2562 *hex++ = tohex (*bin++ & 0xf);
2563 }
2564 *hex = 0;
2565 return i;
2566 }
2567 \f
2568 /* Tell the remote machine to resume. */
2569
2570 static enum target_signal last_sent_signal = TARGET_SIGNAL_0;
2571
2572 static int last_sent_step;
2573
2574 static void
2575 remote_resume (ptid_t ptid, int step, enum target_signal siggnal)
2576 {
2577 struct remote_state *rs = get_remote_state ();
2578 char *buf = alloca (rs->remote_packet_size);
2579 int pid = PIDGET (ptid);
2580 char *p;
2581
2582 if (pid == -1)
2583 set_thread (0, 0); /* run any thread */
2584 else
2585 set_thread (pid, 0); /* run this thread */
2586
2587 last_sent_signal = siggnal;
2588 last_sent_step = step;
2589
2590 /* A hook for when we need to do something at the last moment before
2591 resumption. */
2592 if (target_resume_hook)
2593 (*target_resume_hook) ();
2594
2595
2596 /* The s/S/c/C packets do not return status. So if the target does
2597 not support the S or C packets, the debug agent returns an empty
2598 string which is detected in remote_wait(). This protocol defect
2599 is fixed in the e/E packets. */
2600
2601 if (step && step_range_end)
2602 {
2603 /* If the target does not support the 'E' packet, we try the 'S'
2604 packet. Ideally we would fall back to the 'e' packet if that
2605 too is not supported. But that would require another copy of
2606 the code to issue the 'e' packet (and fall back to 's' if not
2607 supported) in remote_wait(). */
2608
2609 if (siggnal != TARGET_SIGNAL_0)
2610 {
2611 if (remote_protocol_E.support != PACKET_DISABLE)
2612 {
2613 p = buf;
2614 *p++ = 'E';
2615 *p++ = tohex (((int) siggnal >> 4) & 0xf);
2616 *p++ = tohex (((int) siggnal) & 0xf);
2617 *p++ = ',';
2618 p += hexnumstr (p, (ULONGEST) step_range_start);
2619 *p++ = ',';
2620 p += hexnumstr (p, (ULONGEST) step_range_end);
2621 *p++ = 0;
2622
2623 putpkt (buf);
2624 getpkt (buf, (rs->remote_packet_size), 0);
2625
2626 if (packet_ok (buf, &remote_protocol_E) == PACKET_OK)
2627 return;
2628 }
2629 }
2630 else
2631 {
2632 if (remote_protocol_e.support != PACKET_DISABLE)
2633 {
2634 p = buf;
2635 *p++ = 'e';
2636 p += hexnumstr (p, (ULONGEST) step_range_start);
2637 *p++ = ',';
2638 p += hexnumstr (p, (ULONGEST) step_range_end);
2639 *p++ = 0;
2640
2641 putpkt (buf);
2642 getpkt (buf, (rs->remote_packet_size), 0);
2643
2644 if (packet_ok (buf, &remote_protocol_e) == PACKET_OK)
2645 return;
2646 }
2647 }
2648 }
2649
2650 if (siggnal != TARGET_SIGNAL_0)
2651 {
2652 buf[0] = step ? 'S' : 'C';
2653 buf[1] = tohex (((int) siggnal >> 4) & 0xf);
2654 buf[2] = tohex (((int) siggnal) & 0xf);
2655 buf[3] = '\0';
2656 }
2657 else
2658 strcpy (buf, step ? "s" : "c");
2659
2660 putpkt (buf);
2661 }
2662
2663 /* Same as remote_resume, but with async support. */
2664 static void
2665 remote_async_resume (ptid_t ptid, int step, enum target_signal siggnal)
2666 {
2667 struct remote_state *rs = get_remote_state ();
2668 char *buf = alloca (rs->remote_packet_size);
2669 int pid = PIDGET (ptid);
2670 char *p;
2671
2672 if (pid == -1)
2673 set_thread (0, 0); /* run any thread */
2674 else
2675 set_thread (pid, 0); /* run this thread */
2676
2677 last_sent_signal = siggnal;
2678 last_sent_step = step;
2679
2680 /* A hook for when we need to do something at the last moment before
2681 resumption. */
2682 if (target_resume_hook)
2683 (*target_resume_hook) ();
2684
2685 /* The s/S/c/C packets do not return status. So if the target does
2686 not support the S or C packets, the debug agent returns an empty
2687 string which is detected in remote_wait(). This protocol defect
2688 is fixed in the e/E packets. */
2689
2690 if (step && step_range_end)
2691 {
2692 /* If the target does not support the 'E' packet, we try the 'S'
2693 packet. Ideally we would fall back to the 'e' packet if that
2694 too is not supported. But that would require another copy of
2695 the code to issue the 'e' packet (and fall back to 's' if not
2696 supported) in remote_wait(). */
2697
2698 if (siggnal != TARGET_SIGNAL_0)
2699 {
2700 if (remote_protocol_E.support != PACKET_DISABLE)
2701 {
2702 p = buf;
2703 *p++ = 'E';
2704 *p++ = tohex (((int) siggnal >> 4) & 0xf);
2705 *p++ = tohex (((int) siggnal) & 0xf);
2706 *p++ = ',';
2707 p += hexnumstr (p, (ULONGEST) step_range_start);
2708 *p++ = ',';
2709 p += hexnumstr (p, (ULONGEST) step_range_end);
2710 *p++ = 0;
2711
2712 putpkt (buf);
2713 getpkt (buf, (rs->remote_packet_size), 0);
2714
2715 if (packet_ok (buf, &remote_protocol_E) == PACKET_OK)
2716 goto register_event_loop;
2717 }
2718 }
2719 else
2720 {
2721 if (remote_protocol_e.support != PACKET_DISABLE)
2722 {
2723 p = buf;
2724 *p++ = 'e';
2725 p += hexnumstr (p, (ULONGEST) step_range_start);
2726 *p++ = ',';
2727 p += hexnumstr (p, (ULONGEST) step_range_end);
2728 *p++ = 0;
2729
2730 putpkt (buf);
2731 getpkt (buf, (rs->remote_packet_size), 0);
2732
2733 if (packet_ok (buf, &remote_protocol_e) == PACKET_OK)
2734 goto register_event_loop;
2735 }
2736 }
2737 }
2738
2739 if (siggnal != TARGET_SIGNAL_0)
2740 {
2741 buf[0] = step ? 'S' : 'C';
2742 buf[1] = tohex (((int) siggnal >> 4) & 0xf);
2743 buf[2] = tohex ((int) siggnal & 0xf);
2744 buf[3] = '\0';
2745 }
2746 else
2747 strcpy (buf, step ? "s" : "c");
2748
2749 putpkt (buf);
2750
2751 register_event_loop:
2752 /* We are about to start executing the inferior, let's register it
2753 with the event loop. NOTE: this is the one place where all the
2754 execution commands end up. We could alternatively do this in each
2755 of the execution commands in infcmd.c.*/
2756 /* FIXME: ezannoni 1999-09-28: We may need to move this out of here
2757 into infcmd.c in order to allow inferior function calls to work
2758 NOT asynchronously. */
2759 if (event_loop_p && target_can_async_p ())
2760 target_async (inferior_event_handler, 0);
2761 /* Tell the world that the target is now executing. */
2762 /* FIXME: cagney/1999-09-23: Is it the targets responsibility to set
2763 this? Instead, should the client of target just assume (for
2764 async targets) that the target is going to start executing? Is
2765 this information already found in the continuation block? */
2766 if (target_is_async_p ())
2767 target_executing = 1;
2768 }
2769 \f
2770
2771 /* Set up the signal handler for SIGINT, while the target is
2772 executing, ovewriting the 'regular' SIGINT signal handler. */
2773 static void
2774 initialize_sigint_signal_handler (void)
2775 {
2776 sigint_remote_token =
2777 create_async_signal_handler (async_remote_interrupt, NULL);
2778 signal (SIGINT, handle_remote_sigint);
2779 }
2780
2781 /* Signal handler for SIGINT, while the target is executing. */
2782 static void
2783 handle_remote_sigint (int sig)
2784 {
2785 signal (sig, handle_remote_sigint_twice);
2786 sigint_remote_twice_token =
2787 create_async_signal_handler (async_remote_interrupt_twice, NULL);
2788 mark_async_signal_handler_wrapper (sigint_remote_token);
2789 }
2790
2791 /* Signal handler for SIGINT, installed after SIGINT has already been
2792 sent once. It will take effect the second time that the user sends
2793 a ^C. */
2794 static void
2795 handle_remote_sigint_twice (int sig)
2796 {
2797 signal (sig, handle_sigint);
2798 sigint_remote_twice_token =
2799 create_async_signal_handler (inferior_event_handler_wrapper, NULL);
2800 mark_async_signal_handler_wrapper (sigint_remote_twice_token);
2801 }
2802
2803 /* Perform the real interruption of the target execution, in response
2804 to a ^C. */
2805 static void
2806 async_remote_interrupt (gdb_client_data arg)
2807 {
2808 if (remote_debug)
2809 fprintf_unfiltered (gdb_stdlog, "remote_interrupt called\n");
2810
2811 target_stop ();
2812 }
2813
2814 /* Perform interrupt, if the first attempt did not succeed. Just give
2815 up on the target alltogether. */
2816 void
2817 async_remote_interrupt_twice (gdb_client_data arg)
2818 {
2819 if (remote_debug)
2820 fprintf_unfiltered (gdb_stdlog, "remote_interrupt_twice called\n");
2821 /* Do something only if the target was not killed by the previous
2822 cntl-C. */
2823 if (target_executing)
2824 {
2825 interrupt_query ();
2826 signal (SIGINT, handle_remote_sigint);
2827 }
2828 }
2829
2830 /* Reinstall the usual SIGINT handlers, after the target has
2831 stopped. */
2832 static void
2833 cleanup_sigint_signal_handler (void *dummy)
2834 {
2835 signal (SIGINT, handle_sigint);
2836 if (sigint_remote_twice_token)
2837 delete_async_signal_handler ((struct async_signal_handler **) & sigint_remote_twice_token);
2838 if (sigint_remote_token)
2839 delete_async_signal_handler ((struct async_signal_handler **) & sigint_remote_token);
2840 }
2841
2842 /* Send ^C to target to halt it. Target will respond, and send us a
2843 packet. */
2844 static void (*ofunc) (int);
2845
2846 /* The command line interface's stop routine. This function is installed
2847 as a signal handler for SIGINT. The first time a user requests a
2848 stop, we call remote_stop to send a break or ^C. If there is no
2849 response from the target (it didn't stop when the user requested it),
2850 we ask the user if he'd like to detach from the target. */
2851 static void
2852 remote_interrupt (int signo)
2853 {
2854 /* If this doesn't work, try more severe steps. */
2855 signal (signo, remote_interrupt_twice);
2856
2857 if (remote_debug)
2858 fprintf_unfiltered (gdb_stdlog, "remote_interrupt called\n");
2859
2860 target_stop ();
2861 }
2862
2863 /* The user typed ^C twice. */
2864
2865 static void
2866 remote_interrupt_twice (int signo)
2867 {
2868 signal (signo, ofunc);
2869 interrupt_query ();
2870 signal (signo, remote_interrupt);
2871 }
2872
2873 /* This is the generic stop called via the target vector. When a target
2874 interrupt is requested, either by the command line or the GUI, we
2875 will eventually end up here. */
2876 static void
2877 remote_stop (void)
2878 {
2879 /* Send a break or a ^C, depending on user preference. */
2880 if (remote_debug)
2881 fprintf_unfiltered (gdb_stdlog, "remote_stop called\n");
2882
2883 if (remote_break)
2884 serial_send_break (remote_desc);
2885 else
2886 serial_write (remote_desc, "\003", 1);
2887 }
2888
2889 /* Ask the user what to do when an interrupt is received. */
2890
2891 static void
2892 interrupt_query (void)
2893 {
2894 target_terminal_ours ();
2895
2896 if (query ("Interrupted while waiting for the program.\n\
2897 Give up (and stop debugging it)? "))
2898 {
2899 target_mourn_inferior ();
2900 throw_exception (RETURN_QUIT);
2901 }
2902
2903 target_terminal_inferior ();
2904 }
2905
2906 /* Enable/disable target terminal ownership. Most targets can use
2907 terminal groups to control terminal ownership. Remote targets are
2908 different in that explicit transfer of ownership to/from GDB/target
2909 is required. */
2910
2911 static void
2912 remote_async_terminal_inferior (void)
2913 {
2914 /* FIXME: cagney/1999-09-27: Shouldn't need to test for
2915 sync_execution here. This function should only be called when
2916 GDB is resuming the inferior in the forground. A background
2917 resume (``run&'') should leave GDB in control of the terminal and
2918 consequently should not call this code. */
2919 if (!sync_execution)
2920 return;
2921 /* FIXME: cagney/1999-09-27: Closely related to the above. Make
2922 calls target_terminal_*() idenpotent. The event-loop GDB talking
2923 to an asynchronous target with a synchronous command calls this
2924 function from both event-top.c and infrun.c/infcmd.c. Once GDB
2925 stops trying to transfer the terminal to the target when it
2926 shouldn't this guard can go away. */
2927 if (!remote_async_terminal_ours_p)
2928 return;
2929 delete_file_handler (input_fd);
2930 remote_async_terminal_ours_p = 0;
2931 initialize_sigint_signal_handler ();
2932 /* NOTE: At this point we could also register our selves as the
2933 recipient of all input. Any characters typed could then be
2934 passed on down to the target. */
2935 }
2936
2937 static void
2938 remote_async_terminal_ours (void)
2939 {
2940 /* See FIXME in remote_async_terminal_inferior. */
2941 if (!sync_execution)
2942 return;
2943 /* See FIXME in remote_async_terminal_inferior. */
2944 if (remote_async_terminal_ours_p)
2945 return;
2946 cleanup_sigint_signal_handler (NULL);
2947 add_file_handler (input_fd, stdin_event_handler, 0);
2948 remote_async_terminal_ours_p = 1;
2949 }
2950
2951 /* If nonzero, ignore the next kill. */
2952
2953 int kill_kludge;
2954
2955 void
2956 remote_console_output (char *msg)
2957 {
2958 char *p;
2959
2960 for (p = msg; p[0] && p[1]; p += 2)
2961 {
2962 char tb[2];
2963 char c = fromhex (p[0]) * 16 + fromhex (p[1]);
2964 tb[0] = c;
2965 tb[1] = 0;
2966 fputs_unfiltered (tb, gdb_stdtarg);
2967 }
2968 gdb_flush (gdb_stdtarg);
2969 }
2970
2971 /* Wait until the remote machine stops, then return,
2972 storing status in STATUS just as `wait' would.
2973 Returns "pid", which in the case of a multi-threaded
2974 remote OS, is the thread-id. */
2975
2976 static ptid_t
2977 remote_wait (ptid_t ptid, struct target_waitstatus *status)
2978 {
2979 struct remote_state *rs = get_remote_state ();
2980 unsigned char *buf = alloca (rs->remote_packet_size);
2981 int thread_num = -1;
2982
2983 status->kind = TARGET_WAITKIND_EXITED;
2984 status->value.integer = 0;
2985
2986 while (1)
2987 {
2988 unsigned char *p;
2989
2990 ofunc = signal (SIGINT, remote_interrupt);
2991 getpkt (buf, (rs->remote_packet_size), 1);
2992 signal (SIGINT, ofunc);
2993
2994 /* This is a hook for when we need to do something (perhaps the
2995 collection of trace data) every time the target stops. */
2996 if (target_wait_loop_hook)
2997 (*target_wait_loop_hook) ();
2998
2999 switch (buf[0])
3000 {
3001 case 'E': /* Error of some sort */
3002 warning ("Remote failure reply: %s", buf);
3003 continue;
3004 case 'T': /* Status with PC, SP, FP, ... */
3005 {
3006 int i;
3007 char* regs = (char*) alloca (MAX_REGISTER_RAW_SIZE);
3008
3009 /* Expedited reply, containing Signal, {regno, reg} repeat */
3010 /* format is: 'Tssn...:r...;n...:r...;n...:r...;#cc', where
3011 ss = signal number
3012 n... = register number
3013 r... = register contents
3014 */
3015 p = &buf[3]; /* after Txx */
3016
3017 while (*p)
3018 {
3019 unsigned char *p1;
3020 char *p_temp;
3021 int fieldsize;
3022
3023 /* Read the ``P'' register number. */
3024 LONGEST pnum = strtol ((const char *) p, &p_temp, 16);
3025 p1 = (unsigned char *) p_temp;
3026
3027 if (p1 == p) /* No register number present here */
3028 {
3029 p1 = (unsigned char *) strchr ((const char *) p, ':');
3030 if (p1 == NULL)
3031 warning ("Malformed packet(a) (missing colon): %s\n\
3032 Packet: '%s'\n",
3033 p, buf);
3034 if (strncmp ((const char *) p, "thread", p1 - p) == 0)
3035 {
3036 p_temp = unpack_varlen_hex (++p1, &thread_num);
3037 record_currthread (thread_num);
3038 p = (unsigned char *) p_temp;
3039 }
3040 }
3041 else
3042 {
3043 struct packet_reg *reg = packet_reg_from_pnum (rs, pnum);
3044 p = p1;
3045
3046 if (*p++ != ':')
3047 warning ("Malformed packet(b) (missing colon): %s\n\
3048 Packet: '%s'\n",
3049 p, buf);
3050
3051 if (reg == NULL)
3052 warning ("Remote sent bad register number %s: %s\n\
3053 Packet: '%s'\n",
3054 phex_nz (pnum, 0), p, buf);
3055
3056 fieldsize = hex2bin (p, regs, REGISTER_RAW_SIZE (reg->regnum));
3057 p += 2 * fieldsize;
3058 if (fieldsize < REGISTER_RAW_SIZE (reg->regnum))
3059 warning ("Remote reply is too short: %s", buf);
3060 supply_register (reg->regnum, regs);
3061 }
3062
3063 if (*p++ != ';')
3064 {
3065 warning ("Remote register badly formatted: %s", buf);
3066 warning (" here: %s", p);
3067 }
3068 }
3069 }
3070 /* fall through */
3071 case 'S': /* Old style status, just signal only */
3072 status->kind = TARGET_WAITKIND_STOPPED;
3073 status->value.sig = (enum target_signal)
3074 (((fromhex (buf[1])) << 4) + (fromhex (buf[2])));
3075
3076 if (buf[3] == 'p')
3077 {
3078 /* Export Cisco kernel mode as a convenience variable
3079 (so that it can be used in the GDB prompt if desired). */
3080
3081 if (cisco_kernel_mode == 1)
3082 set_internalvar (lookup_internalvar ("cisco_kernel_mode"),
3083 value_from_string ("PDEBUG-"));
3084 cisco_kernel_mode = 0;
3085 thread_num = strtol ((const char *) &buf[4], NULL, 16);
3086 record_currthread (thread_num);
3087 }
3088 else if (buf[3] == 'k')
3089 {
3090 /* Export Cisco kernel mode as a convenience variable
3091 (so that it can be used in the GDB prompt if desired). */
3092
3093 if (cisco_kernel_mode == 1)
3094 set_internalvar (lookup_internalvar ("cisco_kernel_mode"),
3095 value_from_string ("KDEBUG-"));
3096 cisco_kernel_mode = 1;
3097 }
3098 goto got_status;
3099 case 'N': /* Cisco special: status and offsets */
3100 {
3101 bfd_vma text_addr, data_addr, bss_addr;
3102 bfd_signed_vma text_off, data_off, bss_off;
3103 unsigned char *p1;
3104
3105 status->kind = TARGET_WAITKIND_STOPPED;
3106 status->value.sig = (enum target_signal)
3107 (((fromhex (buf[1])) << 4) + (fromhex (buf[2])));
3108
3109 if (symfile_objfile == NULL)
3110 {
3111 warning ("Relocation packet received with no symbol file. \
3112 Packet Dropped");
3113 goto got_status;
3114 }
3115
3116 /* Relocate object file. Buffer format is NAATT;DD;BB
3117 * where AA is the signal number, TT is the new text
3118 * address, DD * is the new data address, and BB is the
3119 * new bss address. */
3120
3121 p = &buf[3];
3122 text_addr = strtoul (p, (char **) &p1, 16);
3123 if (p1 == p || *p1 != ';')
3124 warning ("Malformed relocation packet: Packet '%s'", buf);
3125 p = p1 + 1;
3126 data_addr = strtoul (p, (char **) &p1, 16);
3127 if (p1 == p || *p1 != ';')
3128 warning ("Malformed relocation packet: Packet '%s'", buf);
3129 p = p1 + 1;
3130 bss_addr = strtoul (p, (char **) &p1, 16);
3131 if (p1 == p)
3132 warning ("Malformed relocation packet: Packet '%s'", buf);
3133
3134 if (remote_cisco_section_offsets (text_addr, data_addr, bss_addr,
3135 &text_off, &data_off, &bss_off)
3136 == 0)
3137 if (text_off != 0 || data_off != 0 || bss_off != 0)
3138 remote_cisco_objfile_relocate (text_off, data_off, bss_off);
3139
3140 goto got_status;
3141 }
3142 case 'W': /* Target exited */
3143 {
3144 /* The remote process exited. */
3145 status->kind = TARGET_WAITKIND_EXITED;
3146 status->value.integer = (fromhex (buf[1]) << 4) + fromhex (buf[2]);
3147 goto got_status;
3148 }
3149 case 'X':
3150 status->kind = TARGET_WAITKIND_SIGNALLED;
3151 status->value.sig = (enum target_signal)
3152 (((fromhex (buf[1])) << 4) + (fromhex (buf[2])));
3153 kill_kludge = 1;
3154
3155 goto got_status;
3156 case 'O': /* Console output */
3157 remote_console_output (buf + 1);
3158 continue;
3159 case '\0':
3160 if (last_sent_signal != TARGET_SIGNAL_0)
3161 {
3162 /* Zero length reply means that we tried 'S' or 'C' and
3163 the remote system doesn't support it. */
3164 target_terminal_ours_for_output ();
3165 printf_filtered
3166 ("Can't send signals to this remote system. %s not sent.\n",
3167 target_signal_to_name (last_sent_signal));
3168 last_sent_signal = TARGET_SIGNAL_0;
3169 target_terminal_inferior ();
3170
3171 strcpy ((char *) buf, last_sent_step ? "s" : "c");
3172 putpkt ((char *) buf);
3173 continue;
3174 }
3175 /* else fallthrough */
3176 default:
3177 warning ("Invalid remote reply: %s", buf);
3178 continue;
3179 }
3180 }
3181 got_status:
3182 if (thread_num != -1)
3183 {
3184 return pid_to_ptid (thread_num);
3185 }
3186 return inferior_ptid;
3187 }
3188
3189 /* Async version of remote_wait. */
3190 static ptid_t
3191 remote_async_wait (ptid_t ptid, struct target_waitstatus *status)
3192 {
3193 struct remote_state *rs = get_remote_state ();
3194 unsigned char *buf = alloca (rs->remote_packet_size);
3195 int thread_num = -1;
3196
3197 status->kind = TARGET_WAITKIND_EXITED;
3198 status->value.integer = 0;
3199
3200 while (1)
3201 {
3202 unsigned char *p;
3203
3204 if (!target_is_async_p ())
3205 ofunc = signal (SIGINT, remote_interrupt);
3206 /* FIXME: cagney/1999-09-27: If we're in async mode we should
3207 _never_ wait for ever -> test on target_is_async_p().
3208 However, before we do that we need to ensure that the caller
3209 knows how to take the target into/out of async mode. */
3210 getpkt (buf, (rs->remote_packet_size), wait_forever_enabled_p);
3211 if (!target_is_async_p ())
3212 signal (SIGINT, ofunc);
3213
3214 /* This is a hook for when we need to do something (perhaps the
3215 collection of trace data) every time the target stops. */
3216 if (target_wait_loop_hook)
3217 (*target_wait_loop_hook) ();
3218
3219 switch (buf[0])
3220 {
3221 case 'E': /* Error of some sort */
3222 warning ("Remote failure reply: %s", buf);
3223 continue;
3224 case 'T': /* Status with PC, SP, FP, ... */
3225 {
3226 int i;
3227 char* regs = (char*) alloca (MAX_REGISTER_RAW_SIZE);
3228
3229 /* Expedited reply, containing Signal, {regno, reg} repeat */
3230 /* format is: 'Tssn...:r...;n...:r...;n...:r...;#cc', where
3231 ss = signal number
3232 n... = register number
3233 r... = register contents
3234 */
3235 p = &buf[3]; /* after Txx */
3236
3237 while (*p)
3238 {
3239 unsigned char *p1;
3240 char *p_temp;
3241 int fieldsize;
3242
3243 /* Read the register number */
3244 long pnum = strtol ((const char *) p, &p_temp, 16);
3245 p1 = (unsigned char *) p_temp;
3246
3247 if (p1 == p) /* No register number present here */
3248 {
3249 p1 = (unsigned char *) strchr ((const char *) p, ':');
3250 if (p1 == NULL)
3251 warning ("Malformed packet(a) (missing colon): %s\n\
3252 Packet: '%s'\n",
3253 p, buf);
3254 if (strncmp ((const char *) p, "thread", p1 - p) == 0)
3255 {
3256 p_temp = unpack_varlen_hex (++p1, &thread_num);
3257 record_currthread (thread_num);
3258 p = (unsigned char *) p_temp;
3259 }
3260 }
3261 else
3262 {
3263 struct packet_reg *reg = packet_reg_from_pnum (rs, pnum);
3264 p = p1;
3265 if (*p++ != ':')
3266 warning ("Malformed packet(b) (missing colon): %s\n\
3267 Packet: '%s'\n",
3268 p, buf);
3269
3270 if (reg == NULL)
3271 warning ("Remote sent bad register number %ld: %s\n\
3272 Packet: '%s'\n",
3273 pnum, p, buf);
3274
3275 fieldsize = hex2bin (p, regs, REGISTER_RAW_SIZE (reg->regnum));
3276 p += 2 * fieldsize;
3277 if (fieldsize < REGISTER_RAW_SIZE (reg->regnum))
3278 warning ("Remote reply is too short: %s", buf);
3279 supply_register (reg->regnum, regs);
3280 }
3281
3282 if (*p++ != ';')
3283 {
3284 warning ("Remote register badly formatted: %s", buf);
3285 warning (" here: %s", p);
3286 }
3287 }
3288 }
3289 /* fall through */
3290 case 'S': /* Old style status, just signal only */
3291 status->kind = TARGET_WAITKIND_STOPPED;
3292 status->value.sig = (enum target_signal)
3293 (((fromhex (buf[1])) << 4) + (fromhex (buf[2])));
3294
3295 if (buf[3] == 'p')
3296 {
3297 /* Export Cisco kernel mode as a convenience variable
3298 (so that it can be used in the GDB prompt if desired). */
3299
3300 if (cisco_kernel_mode == 1)
3301 set_internalvar (lookup_internalvar ("cisco_kernel_mode"),
3302 value_from_string ("PDEBUG-"));
3303 cisco_kernel_mode = 0;
3304 thread_num = strtol ((const char *) &buf[4], NULL, 16);
3305 record_currthread (thread_num);
3306 }
3307 else if (buf[3] == 'k')
3308 {
3309 /* Export Cisco kernel mode as a convenience variable
3310 (so that it can be used in the GDB prompt if desired). */
3311
3312 if (cisco_kernel_mode == 1)
3313 set_internalvar (lookup_internalvar ("cisco_kernel_mode"),
3314 value_from_string ("KDEBUG-"));
3315 cisco_kernel_mode = 1;
3316 }
3317 goto got_status;
3318 case 'N': /* Cisco special: status and offsets */
3319 {
3320 bfd_vma text_addr, data_addr, bss_addr;
3321 bfd_signed_vma text_off, data_off, bss_off;
3322 unsigned char *p1;
3323
3324 status->kind = TARGET_WAITKIND_STOPPED;
3325 status->value.sig = (enum target_signal)
3326 (((fromhex (buf[1])) << 4) + (fromhex (buf[2])));
3327
3328 if (symfile_objfile == NULL)
3329 {
3330 warning ("Relocation packet recieved with no symbol file. \
3331 Packet Dropped");
3332 goto got_status;
3333 }
3334
3335 /* Relocate object file. Buffer format is NAATT;DD;BB
3336 * where AA is the signal number, TT is the new text
3337 * address, DD * is the new data address, and BB is the
3338 * new bss address. */
3339
3340 p = &buf[3];
3341 text_addr = strtoul (p, (char **) &p1, 16);
3342 if (p1 == p || *p1 != ';')
3343 warning ("Malformed relocation packet: Packet '%s'", buf);
3344 p = p1 + 1;
3345 data_addr = strtoul (p, (char **) &p1, 16);
3346 if (p1 == p || *p1 != ';')
3347 warning ("Malformed relocation packet: Packet '%s'", buf);
3348 p = p1 + 1;
3349 bss_addr = strtoul (p, (char **) &p1, 16);
3350 if (p1 == p)
3351 warning ("Malformed relocation packet: Packet '%s'", buf);
3352
3353 if (remote_cisco_section_offsets (text_addr, data_addr, bss_addr,
3354 &text_off, &data_off, &bss_off)
3355 == 0)
3356 if (text_off != 0 || data_off != 0 || bss_off != 0)
3357 remote_cisco_objfile_relocate (text_off, data_off, bss_off);
3358
3359 goto got_status;
3360 }
3361 case 'W': /* Target exited */
3362 {
3363 /* The remote process exited. */
3364 status->kind = TARGET_WAITKIND_EXITED;
3365 status->value.integer = (fromhex (buf[1]) << 4) + fromhex (buf[2]);
3366 goto got_status;
3367 }
3368 case 'X':
3369 status->kind = TARGET_WAITKIND_SIGNALLED;
3370 status->value.sig = (enum target_signal)
3371 (((fromhex (buf[1])) << 4) + (fromhex (buf[2])));
3372 kill_kludge = 1;
3373
3374 goto got_status;
3375 case 'O': /* Console output */
3376 remote_console_output (buf + 1);
3377 /* Return immediately to the event loop. The event loop will
3378 still be waiting on the inferior afterwards. */
3379 status->kind = TARGET_WAITKIND_IGNORE;
3380 goto got_status;
3381 case '\0':
3382 if (last_sent_signal != TARGET_SIGNAL_0)
3383 {
3384 /* Zero length reply means that we tried 'S' or 'C' and
3385 the remote system doesn't support it. */
3386 target_terminal_ours_for_output ();
3387 printf_filtered
3388 ("Can't send signals to this remote system. %s not sent.\n",
3389 target_signal_to_name (last_sent_signal));
3390 last_sent_signal = TARGET_SIGNAL_0;
3391 target_terminal_inferior ();
3392
3393 strcpy ((char *) buf, last_sent_step ? "s" : "c");
3394 putpkt ((char *) buf);
3395 continue;
3396 }
3397 /* else fallthrough */
3398 default:
3399 warning ("Invalid remote reply: %s", buf);
3400 continue;
3401 }
3402 }
3403 got_status:
3404 if (thread_num != -1)
3405 {
3406 return pid_to_ptid (thread_num);
3407 }
3408 return inferior_ptid;
3409 }
3410
3411 /* Number of bytes of registers this stub implements. */
3412
3413 static int register_bytes_found;
3414
3415 /* Read the remote registers into the block REGS. */
3416 /* Currently we just read all the registers, so we don't use regnum. */
3417
3418 /* ARGSUSED */
3419 static void
3420 remote_fetch_registers (int regnum)
3421 {
3422 struct remote_state *rs = get_remote_state ();
3423 char *buf = alloca (rs->remote_packet_size);
3424 int i;
3425 char *p;
3426 char *regs = alloca (rs->sizeof_g_packet);
3427
3428 set_thread (PIDGET (inferior_ptid), 1);
3429
3430 if (regnum >= 0)
3431 {
3432 struct packet_reg *reg = packet_reg_from_regnum (rs, regnum);
3433 gdb_assert (reg != NULL);
3434 if (!reg->in_g_packet)
3435 internal_error (__FILE__, __LINE__,
3436 "Attempt to fetch a non G-packet register when this "
3437 "remote.c does not support the p-packet.");
3438 }
3439
3440 sprintf (buf, "g");
3441 remote_send (buf, (rs->remote_packet_size));
3442
3443 /* Save the size of the packet sent to us by the target. Its used
3444 as a heuristic when determining the max size of packets that the
3445 target can safely receive. */
3446 if ((rs->actual_register_packet_size) == 0)
3447 (rs->actual_register_packet_size) = strlen (buf);
3448
3449 /* Unimplemented registers read as all bits zero. */
3450 memset (regs, 0, rs->sizeof_g_packet);
3451
3452 /* We can get out of synch in various cases. If the first character
3453 in the buffer is not a hex character, assume that has happened
3454 and try to fetch another packet to read. */
3455 while ((buf[0] < '0' || buf[0] > '9')
3456 && (buf[0] < 'a' || buf[0] > 'f')
3457 && buf[0] != 'x') /* New: unavailable register value */
3458 {
3459 if (remote_debug)
3460 fprintf_unfiltered (gdb_stdlog,
3461 "Bad register packet; fetching a new packet\n");
3462 getpkt (buf, (rs->remote_packet_size), 0);
3463 }
3464
3465 /* Reply describes registers byte by byte, each byte encoded as two
3466 hex characters. Suck them all up, then supply them to the
3467 register cacheing/storage mechanism. */
3468
3469 p = buf;
3470 for (i = 0; i < rs->sizeof_g_packet; i++)
3471 {
3472 if (p[0] == 0)
3473 break;
3474 if (p[1] == 0)
3475 {
3476 warning ("Remote reply is of odd length: %s", buf);
3477 /* Don't change register_bytes_found in this case, and don't
3478 print a second warning. */
3479 goto supply_them;
3480 }
3481 if (p[0] == 'x' && p[1] == 'x')
3482 regs[i] = 0; /* 'x' */
3483 else
3484 regs[i] = fromhex (p[0]) * 16 + fromhex (p[1]);
3485 p += 2;
3486 }
3487
3488 if (i != register_bytes_found)
3489 {
3490 register_bytes_found = i;
3491 if (REGISTER_BYTES_OK_P ()
3492 && !REGISTER_BYTES_OK (i))
3493 warning ("Remote reply is too short: %s", buf);
3494 }
3495
3496 supply_them:
3497 {
3498 int i;
3499 for (i = 0; i < NUM_REGS + NUM_PSEUDO_REGS; i++)
3500 {
3501 struct packet_reg *r = &rs->regs[i];
3502 if (r->in_g_packet)
3503 {
3504 supply_register (r->regnum, regs + r->offset);
3505 if (buf[r->offset * 2] == 'x')
3506 set_register_cached (i, -1);
3507 }
3508 }
3509 }
3510 }
3511
3512 /* Prepare to store registers. Since we may send them all (using a
3513 'G' request), we have to read out the ones we don't want to change
3514 first. */
3515
3516 static void
3517 remote_prepare_to_store (void)
3518 {
3519 /* Make sure the entire registers array is valid. */
3520 switch (remote_protocol_P.support)
3521 {
3522 case PACKET_DISABLE:
3523 case PACKET_SUPPORT_UNKNOWN:
3524 /* NOTE: This isn't rs->sizeof_g_packet because here, we are
3525 forcing the register cache to read its and not the target
3526 registers. */
3527 read_register_bytes (0, (char *) NULL, REGISTER_BYTES); /* OK use. */
3528 break;
3529 case PACKET_ENABLE:
3530 break;
3531 }
3532 }
3533
3534 /* Helper: Attempt to store REGNUM using the P packet. Return fail IFF
3535 packet was not recognized. */
3536
3537 static int
3538 store_register_using_P (int regnum)
3539 {
3540 struct remote_state *rs = get_remote_state ();
3541 struct packet_reg *reg = packet_reg_from_regnum (rs, regnum);
3542 /* Try storing a single register. */
3543 char *buf = alloca (rs->remote_packet_size);
3544 char *regp = alloca (MAX_REGISTER_RAW_SIZE);
3545 char *p;
3546 int i;
3547
3548 sprintf (buf, "P%s=", phex_nz (reg->pnum, 0));
3549 p = buf + strlen (buf);
3550 regcache_collect (reg->regnum, regp);
3551 bin2hex (regp, p, REGISTER_RAW_SIZE (reg->regnum));
3552 remote_send (buf, rs->remote_packet_size);
3553
3554 return buf[0] != '\0';
3555 }
3556
3557
3558 /* Store register REGNUM, or all registers if REGNUM == -1, from the contents
3559 of the register cache buffer. FIXME: ignores errors. */
3560
3561 static void
3562 remote_store_registers (int regnum)
3563 {
3564 struct remote_state *rs = get_remote_state ();
3565 char *buf;
3566 char *regs;
3567 int i;
3568 char *p;
3569
3570 set_thread (PIDGET (inferior_ptid), 1);
3571
3572 if (regnum >= 0)
3573 {
3574 switch (remote_protocol_P.support)
3575 {
3576 case PACKET_DISABLE:
3577 break;
3578 case PACKET_ENABLE:
3579 if (store_register_using_P (regnum))
3580 return;
3581 else
3582 error ("Protocol error: P packet not recognized by stub");
3583 case PACKET_SUPPORT_UNKNOWN:
3584 if (store_register_using_P (regnum))
3585 {
3586 /* The stub recognized the 'P' packet. Remember this. */
3587 remote_protocol_P.support = PACKET_ENABLE;
3588 return;
3589 }
3590 else
3591 {
3592 /* The stub does not support the 'P' packet. Use 'G'
3593 instead, and don't try using 'P' in the future (it
3594 will just waste our time). */
3595 remote_protocol_P.support = PACKET_DISABLE;
3596 break;
3597 }
3598 }
3599 }
3600
3601 /* Extract all the registers in the regcache copying them into a
3602 local buffer. */
3603 {
3604 int i;
3605 regs = alloca (rs->sizeof_g_packet);
3606 memset (regs, rs->sizeof_g_packet, 0);
3607 for (i = 0; i < NUM_REGS + NUM_PSEUDO_REGS; i++)
3608 {
3609 struct packet_reg *r = &rs->regs[i];
3610 if (r->in_g_packet)
3611 regcache_collect (r->regnum, regs + r->offset);
3612 }
3613 }
3614
3615 /* Command describes registers byte by byte,
3616 each byte encoded as two hex characters. */
3617 buf = alloca (rs->remote_packet_size);
3618 p = buf;
3619 *p++ = 'G';
3620 /* remote_prepare_to_store insures that register_bytes_found gets set. */
3621 bin2hex (regs, p, register_bytes_found);
3622 remote_send (buf, (rs->remote_packet_size));
3623 }
3624 \f
3625
3626 /* Return the number of hex digits in num. */
3627
3628 static int
3629 hexnumlen (ULONGEST num)
3630 {
3631 int i;
3632
3633 for (i = 0; num != 0; i++)
3634 num >>= 4;
3635
3636 return max (i, 1);
3637 }
3638
3639 /* Set BUF to the minimum number of hex digits representing NUM. */
3640
3641 static int
3642 hexnumstr (char *buf, ULONGEST num)
3643 {
3644 int len = hexnumlen (num);
3645 return hexnumnstr (buf, num, len);
3646 }
3647
3648
3649 /* Set BUF to the hex digits representing NUM, padded to WIDTH characters. */
3650
3651 static int
3652 hexnumnstr (char *buf, ULONGEST num, int width)
3653 {
3654 int i;
3655
3656 buf[width] = '\0';
3657
3658 for (i = width - 1; i >= 0; i--)
3659 {
3660 buf[i] = "0123456789abcdef"[(num & 0xf)];
3661 num >>= 4;
3662 }
3663
3664 return width;
3665 }
3666
3667 /* Mask all but the least significant REMOTE_ADDRESS_SIZE bits. */
3668
3669 static CORE_ADDR
3670 remote_address_masked (CORE_ADDR addr)
3671 {
3672 if (remote_address_size > 0
3673 && remote_address_size < (sizeof (ULONGEST) * 8))
3674 {
3675 /* Only create a mask when that mask can safely be constructed
3676 in a ULONGEST variable. */
3677 ULONGEST mask = 1;
3678 mask = (mask << remote_address_size) - 1;
3679 addr &= mask;
3680 }
3681 return addr;
3682 }
3683
3684 /* Determine whether the remote target supports binary downloading.
3685 This is accomplished by sending a no-op memory write of zero length
3686 to the target at the specified address. It does not suffice to send
3687 the whole packet, since many stubs strip the eighth bit and subsequently
3688 compute a wrong checksum, which causes real havoc with remote_write_bytes.
3689
3690 NOTE: This can still lose if the serial line is not eight-bit
3691 clean. In cases like this, the user should clear "remote
3692 X-packet". */
3693
3694 static void
3695 check_binary_download (CORE_ADDR addr)
3696 {
3697 struct remote_state *rs = get_remote_state ();
3698 switch (remote_protocol_binary_download.support)
3699 {
3700 case PACKET_DISABLE:
3701 break;
3702 case PACKET_ENABLE:
3703 break;
3704 case PACKET_SUPPORT_UNKNOWN:
3705 {
3706 char *buf = alloca (rs->remote_packet_size);
3707 char *p;
3708
3709 p = buf;
3710 *p++ = 'X';
3711 p += hexnumstr (p, (ULONGEST) addr);
3712 *p++ = ',';
3713 p += hexnumstr (p, (ULONGEST) 0);
3714 *p++ = ':';
3715 *p = '\0';
3716
3717 putpkt_binary (buf, (int) (p - buf));
3718 getpkt (buf, (rs->remote_packet_size), 0);
3719
3720 if (buf[0] == '\0')
3721 {
3722 if (remote_debug)
3723 fprintf_unfiltered (gdb_stdlog,
3724 "binary downloading NOT suppported by target\n");
3725 remote_protocol_binary_download.support = PACKET_DISABLE;
3726 }
3727 else
3728 {
3729 if (remote_debug)
3730 fprintf_unfiltered (gdb_stdlog,
3731 "binary downloading suppported by target\n");
3732 remote_protocol_binary_download.support = PACKET_ENABLE;
3733 }
3734 break;
3735 }
3736 }
3737 }
3738
3739 /* Write memory data directly to the remote machine.
3740 This does not inform the data cache; the data cache uses this.
3741 MEMADDR is the address in the remote memory space.
3742 MYADDR is the address of the buffer in our space.
3743 LEN is the number of bytes.
3744
3745 Returns number of bytes transferred, or 0 (setting errno) for
3746 error. Only transfer a single packet. */
3747
3748 static int
3749 remote_write_bytes (CORE_ADDR memaddr, char *myaddr, int len)
3750 {
3751 unsigned char *buf;
3752 int max_buf_size; /* Max size of packet output buffer */
3753 unsigned char *p;
3754 unsigned char *plen;
3755 long sizeof_buf;
3756 int plenlen;
3757 int todo;
3758 int nr_bytes;
3759
3760 /* Verify that the target can support a binary download */
3761 check_binary_download (memaddr);
3762
3763 /* Determine the max packet size. */
3764 max_buf_size = get_memory_write_packet_size ();
3765 sizeof_buf = max_buf_size + 1; /* Space for trailing NUL */
3766 buf = alloca (sizeof_buf);
3767
3768 /* Subtract header overhead from max payload size - $M<memaddr>,<len>:#nn */
3769 max_buf_size -= 2 + hexnumlen (memaddr + len - 1) + 1 + hexnumlen (len) + 4;
3770
3771 /* construct "M"<memaddr>","<len>":" */
3772 /* sprintf (buf, "M%lx,%x:", (unsigned long) memaddr, todo); */
3773 p = buf;
3774
3775 /* Append [XM]. Compute a best guess of the number of bytes
3776 actually transfered. */
3777 switch (remote_protocol_binary_download.support)
3778 {
3779 case PACKET_ENABLE:
3780 *p++ = 'X';
3781 /* Best guess at number of bytes that will fit. */
3782 todo = min (len, max_buf_size);
3783 break;
3784 case PACKET_DISABLE:
3785 *p++ = 'M';
3786 /* num bytes that will fit */
3787 todo = min (len, max_buf_size / 2);
3788 break;
3789 case PACKET_SUPPORT_UNKNOWN:
3790 internal_error (__FILE__, __LINE__,
3791 "remote_write_bytes: bad internal state");
3792 default:
3793 internal_error (__FILE__, __LINE__, "bad switch");
3794 }
3795
3796 /* Append <memaddr> */
3797 memaddr = remote_address_masked (memaddr);
3798 p += hexnumstr (p, (ULONGEST) memaddr);
3799 *p++ = ',';
3800
3801 /* Append <len>. Retain the location/size of <len>. It may
3802 need to be adjusted once the packet body has been created. */
3803 plen = p;
3804 plenlen = hexnumstr (p, (ULONGEST) todo);
3805 p += plenlen;
3806 *p++ = ':';
3807 *p = '\0';
3808
3809 /* Append the packet body. */
3810 switch (remote_protocol_binary_download.support)
3811 {
3812 case PACKET_ENABLE:
3813 /* Binary mode. Send target system values byte by byte, in
3814 increasing byte addresses. Only escape certain critical
3815 characters. */
3816 for (nr_bytes = 0;
3817 (nr_bytes < todo) && (p - buf) < (max_buf_size - 2);
3818 nr_bytes++)
3819 {
3820 switch (myaddr[nr_bytes] & 0xff)
3821 {
3822 case '$':
3823 case '#':
3824 case 0x7d:
3825 /* These must be escaped */
3826 *p++ = 0x7d;
3827 *p++ = (myaddr[nr_bytes] & 0xff) ^ 0x20;
3828 break;
3829 default:
3830 *p++ = myaddr[nr_bytes] & 0xff;
3831 break;
3832 }
3833 }
3834 if (nr_bytes < todo)
3835 {
3836 /* Escape chars have filled up the buffer prematurely,
3837 and we have actually sent fewer bytes than planned.
3838 Fix-up the length field of the packet. Use the same
3839 number of characters as before. */
3840
3841 plen += hexnumnstr (plen, (ULONGEST) nr_bytes, plenlen);
3842 *plen = ':'; /* overwrite \0 from hexnumnstr() */
3843 }
3844 break;
3845 case PACKET_DISABLE:
3846 /* Normal mode: Send target system values byte by byte, in
3847 increasing byte addresses. Each byte is encoded as a two hex
3848 value. */
3849 nr_bytes = bin2hex (myaddr, p, todo);
3850 p += 2 * nr_bytes;
3851 break;
3852 case PACKET_SUPPORT_UNKNOWN:
3853 internal_error (__FILE__, __LINE__,
3854 "remote_write_bytes: bad internal state");
3855 default:
3856 internal_error (__FILE__, __LINE__, "bad switch");
3857 }
3858
3859 putpkt_binary (buf, (int) (p - buf));
3860 getpkt (buf, sizeof_buf, 0);
3861
3862 if (buf[0] == 'E')
3863 {
3864 /* There is no correspondance between what the remote protocol
3865 uses for errors and errno codes. We would like a cleaner way
3866 of representing errors (big enough to include errno codes,
3867 bfd_error codes, and others). But for now just return EIO. */
3868 errno = EIO;
3869 return 0;
3870 }
3871
3872 /* Return NR_BYTES, not TODO, in case escape chars caused us to send fewer
3873 bytes than we'd planned. */
3874 return nr_bytes;
3875 }
3876
3877 /* Read memory data directly from the remote machine.
3878 This does not use the data cache; the data cache uses this.
3879 MEMADDR is the address in the remote memory space.
3880 MYADDR is the address of the buffer in our space.
3881 LEN is the number of bytes.
3882
3883 Returns number of bytes transferred, or 0 for error. */
3884
3885 /* NOTE: cagney/1999-10-18: This function (and its siblings in other
3886 remote targets) shouldn't attempt to read the entire buffer.
3887 Instead it should read a single packet worth of data and then
3888 return the byte size of that packet to the caller. The caller (its
3889 caller and its callers caller ;-) already contains code for
3890 handling partial reads. */
3891
3892 static int
3893 remote_read_bytes (CORE_ADDR memaddr, char *myaddr, int len)
3894 {
3895 char *buf;
3896 int max_buf_size; /* Max size of packet output buffer */
3897 long sizeof_buf;
3898 int origlen;
3899
3900 /* Create a buffer big enough for this packet. */
3901 max_buf_size = get_memory_read_packet_size ();
3902 sizeof_buf = max_buf_size + 1; /* Space for trailing NUL */
3903 buf = alloca (sizeof_buf);
3904
3905 origlen = len;
3906 while (len > 0)
3907 {
3908 char *p;
3909 int todo;
3910 int i;
3911
3912 todo = min (len, max_buf_size / 2); /* num bytes that will fit */
3913
3914 /* construct "m"<memaddr>","<len>" */
3915 /* sprintf (buf, "m%lx,%x", (unsigned long) memaddr, todo); */
3916 memaddr = remote_address_masked (memaddr);
3917 p = buf;
3918 *p++ = 'm';
3919 p += hexnumstr (p, (ULONGEST) memaddr);
3920 *p++ = ',';
3921 p += hexnumstr (p, (ULONGEST) todo);
3922 *p = '\0';
3923
3924 putpkt (buf);
3925 getpkt (buf, sizeof_buf, 0);
3926
3927 if (buf[0] == 'E')
3928 {
3929 /* There is no correspondance between what the remote protocol uses
3930 for errors and errno codes. We would like a cleaner way of
3931 representing errors (big enough to include errno codes, bfd_error
3932 codes, and others). But for now just return EIO. */
3933 errno = EIO;
3934 return 0;
3935 }
3936
3937 /* Reply describes memory byte by byte,
3938 each byte encoded as two hex characters. */
3939
3940 p = buf;
3941 if ((i = hex2bin (p, myaddr, todo)) < todo)
3942 {
3943 /* Reply is short. This means that we were able to read
3944 only part of what we wanted to. */
3945 return i + (origlen - len);
3946 }
3947 myaddr += todo;
3948 memaddr += todo;
3949 len -= todo;
3950 }
3951 return origlen;
3952 }
3953 \f
3954 /* Read or write LEN bytes from inferior memory at MEMADDR,
3955 transferring to or from debugger address BUFFER. Write to inferior if
3956 SHOULD_WRITE is nonzero. Returns length of data written or read; 0
3957 for error. TARGET is unused. */
3958
3959 /* ARGSUSED */
3960 static int
3961 remote_xfer_memory (CORE_ADDR mem_addr, char *buffer, int mem_len,
3962 int should_write, struct mem_attrib *attrib,
3963 struct target_ops *target)
3964 {
3965 CORE_ADDR targ_addr;
3966 int targ_len;
3967 int res;
3968
3969 REMOTE_TRANSLATE_XFER_ADDRESS (mem_addr, mem_len, &targ_addr, &targ_len);
3970 if (targ_len <= 0)
3971 return 0;
3972
3973 if (should_write)
3974 res = remote_write_bytes (targ_addr, buffer, targ_len);
3975 else
3976 res = remote_read_bytes (targ_addr, buffer, targ_len);
3977
3978 return res;
3979 }
3980
3981
3982 #if 0
3983 /* Enable after 4.12. */
3984
3985 void
3986 remote_search (int len, char *data, char *mask, CORE_ADDR startaddr,
3987 int increment, CORE_ADDR lorange, CORE_ADDR hirange,
3988 CORE_ADDR *addr_found, char *data_found)
3989 {
3990 if (increment == -4 && len == 4)
3991 {
3992 long mask_long, data_long;
3993 long data_found_long;
3994 CORE_ADDR addr_we_found;
3995 char *buf = alloca (rs->remote_packet_size);
3996 long returned_long[2];
3997 char *p;
3998
3999 mask_long = extract_unsigned_integer (mask, len);
4000 data_long = extract_unsigned_integer (data, len);
4001 sprintf (buf, "t%x:%x,%x", startaddr, data_long, mask_long);
4002 putpkt (buf);
4003 getpkt (buf, (rs->remote_packet_size), 0);
4004 if (buf[0] == '\0')
4005 {
4006 /* The stub doesn't support the 't' request. We might want to
4007 remember this fact, but on the other hand the stub could be
4008 switched on us. Maybe we should remember it only until
4009 the next "target remote". */
4010 generic_search (len, data, mask, startaddr, increment, lorange,
4011 hirange, addr_found, data_found);
4012 return;
4013 }
4014
4015 if (buf[0] == 'E')
4016 /* There is no correspondance between what the remote protocol uses
4017 for errors and errno codes. We would like a cleaner way of
4018 representing errors (big enough to include errno codes, bfd_error
4019 codes, and others). But for now just use EIO. */
4020 memory_error (EIO, startaddr);
4021 p = buf;
4022 addr_we_found = 0;
4023 while (*p != '\0' && *p != ',')
4024 addr_we_found = (addr_we_found << 4) + fromhex (*p++);
4025 if (*p == '\0')
4026 error ("Protocol error: short return for search");
4027
4028 data_found_long = 0;
4029 while (*p != '\0' && *p != ',')
4030 data_found_long = (data_found_long << 4) + fromhex (*p++);
4031 /* Ignore anything after this comma, for future extensions. */
4032
4033 if (addr_we_found < lorange || addr_we_found >= hirange)
4034 {
4035 *addr_found = 0;
4036 return;
4037 }
4038
4039 *addr_found = addr_we_found;
4040 *data_found = store_unsigned_integer (data_we_found, len);
4041 return;
4042 }
4043 generic_search (len, data, mask, startaddr, increment, lorange,
4044 hirange, addr_found, data_found);
4045 }
4046 #endif /* 0 */
4047 \f
4048 static void
4049 remote_files_info (struct target_ops *ignore)
4050 {
4051 puts_filtered ("Debugging a target over a serial line.\n");
4052 }
4053 \f
4054 /* Stuff for dealing with the packets which are part of this protocol.
4055 See comment at top of file for details. */
4056
4057 /* Read a single character from the remote end, masking it down to 7 bits. */
4058
4059 static int
4060 readchar (int timeout)
4061 {
4062 int ch;
4063
4064 ch = serial_readchar (remote_desc, timeout);
4065
4066 if (ch >= 0)
4067 return (ch & 0x7f);
4068
4069 switch ((enum serial_rc) ch)
4070 {
4071 case SERIAL_EOF:
4072 target_mourn_inferior ();
4073 error ("Remote connection closed");
4074 /* no return */
4075 case SERIAL_ERROR:
4076 perror_with_name ("Remote communication error");
4077 /* no return */
4078 case SERIAL_TIMEOUT:
4079 break;
4080 }
4081 return ch;
4082 }
4083
4084 /* Send the command in BUF to the remote machine, and read the reply
4085 into BUF. Report an error if we get an error reply. */
4086
4087 static void
4088 remote_send (char *buf,
4089 long sizeof_buf)
4090 {
4091 putpkt (buf);
4092 getpkt (buf, sizeof_buf, 0);
4093
4094 if (buf[0] == 'E')
4095 error ("Remote failure reply: %s", buf);
4096 }
4097
4098 /* Display a null-terminated packet on stdout, for debugging, using C
4099 string notation. */
4100
4101 static void
4102 print_packet (char *buf)
4103 {
4104 puts_filtered ("\"");
4105 fputstr_filtered (buf, '"', gdb_stdout);
4106 puts_filtered ("\"");
4107 }
4108
4109 int
4110 putpkt (char *buf)
4111 {
4112 return putpkt_binary (buf, strlen (buf));
4113 }
4114
4115 /* Send a packet to the remote machine, with error checking. The data
4116 of the packet is in BUF. The string in BUF can be at most (rs->remote_packet_size) - 5
4117 to account for the $, # and checksum, and for a possible /0 if we are
4118 debugging (remote_debug) and want to print the sent packet as a string */
4119
4120 static int
4121 putpkt_binary (char *buf, int cnt)
4122 {
4123 struct remote_state *rs = get_remote_state ();
4124 int i;
4125 unsigned char csum = 0;
4126 char *buf2 = alloca (cnt + 6);
4127 long sizeof_junkbuf = (rs->remote_packet_size);
4128 char *junkbuf = alloca (sizeof_junkbuf);
4129
4130 int ch;
4131 int tcount = 0;
4132 char *p;
4133
4134 /* Copy the packet into buffer BUF2, encapsulating it
4135 and giving it a checksum. */
4136
4137 p = buf2;
4138 *p++ = '$';
4139
4140 for (i = 0; i < cnt; i++)
4141 {
4142 csum += buf[i];
4143 *p++ = buf[i];
4144 }
4145 *p++ = '#';
4146 *p++ = tohex ((csum >> 4) & 0xf);
4147 *p++ = tohex (csum & 0xf);
4148
4149 /* Send it over and over until we get a positive ack. */
4150
4151 while (1)
4152 {
4153 int started_error_output = 0;
4154
4155 if (remote_debug)
4156 {
4157 *p = '\0';
4158 fprintf_unfiltered (gdb_stdlog, "Sending packet: ");
4159 fputstrn_unfiltered (buf2, p - buf2, 0, gdb_stdlog);
4160 fprintf_unfiltered (gdb_stdlog, "...");
4161 gdb_flush (gdb_stdlog);
4162 }
4163 if (serial_write (remote_desc, buf2, p - buf2))
4164 perror_with_name ("putpkt: write failed");
4165
4166 /* read until either a timeout occurs (-2) or '+' is read */
4167 while (1)
4168 {
4169 ch = readchar (remote_timeout);
4170
4171 if (remote_debug)
4172 {
4173 switch (ch)
4174 {
4175 case '+':
4176 case '-':
4177 case SERIAL_TIMEOUT:
4178 case '$':
4179 if (started_error_output)
4180 {
4181 putchar_unfiltered ('\n');
4182 started_error_output = 0;
4183 }
4184 }
4185 }
4186
4187 switch (ch)
4188 {
4189 case '+':
4190 if (remote_debug)
4191 fprintf_unfiltered (gdb_stdlog, "Ack\n");
4192 return 1;
4193 case '-':
4194 if (remote_debug)
4195 fprintf_unfiltered (gdb_stdlog, "Nak\n");
4196 case SERIAL_TIMEOUT:
4197 tcount++;
4198 if (tcount > 3)
4199 return 0;
4200 break; /* Retransmit buffer */
4201 case '$':
4202 {
4203 if (remote_debug)
4204 fprintf_unfiltered (gdb_stdlog, "Packet instead of Ack, ignoring it\n");
4205 /* It's probably an old response, and we're out of sync.
4206 Just gobble up the packet and ignore it. */
4207 read_frame (junkbuf, sizeof_junkbuf);
4208 continue; /* Now, go look for + */
4209 }
4210 default:
4211 if (remote_debug)
4212 {
4213 if (!started_error_output)
4214 {
4215 started_error_output = 1;
4216 fprintf_unfiltered (gdb_stdlog, "putpkt: Junk: ");
4217 }
4218 fputc_unfiltered (ch & 0177, gdb_stdlog);
4219 }
4220 continue;
4221 }
4222 break; /* Here to retransmit */
4223 }
4224
4225 #if 0
4226 /* This is wrong. If doing a long backtrace, the user should be
4227 able to get out next time we call QUIT, without anything as
4228 violent as interrupt_query. If we want to provide a way out of
4229 here without getting to the next QUIT, it should be based on
4230 hitting ^C twice as in remote_wait. */
4231 if (quit_flag)
4232 {
4233 quit_flag = 0;
4234 interrupt_query ();
4235 }
4236 #endif
4237 }
4238 }
4239
4240 static int remote_cisco_mode;
4241
4242 /* Come here after finding the start of the frame. Collect the rest
4243 into BUF, verifying the checksum, length, and handling run-length
4244 compression. No more than sizeof_buf-1 characters are read so that
4245 the buffer can be NUL terminated.
4246
4247 Returns -1 on error, number of characters in buffer (ignoring the
4248 trailing NULL) on success. (could be extended to return one of the
4249 SERIAL status indications). */
4250
4251 static long
4252 read_frame (char *buf,
4253 long sizeof_buf)
4254 {
4255 unsigned char csum;
4256 long bc;
4257 int c;
4258
4259 csum = 0;
4260 bc = 0;
4261
4262 while (1)
4263 {
4264 /* ASSERT (bc < sizeof_buf - 1) - space for trailing NUL */
4265 c = readchar (remote_timeout);
4266 switch (c)
4267 {
4268 case SERIAL_TIMEOUT:
4269 if (remote_debug)
4270 fputs_filtered ("Timeout in mid-packet, retrying\n", gdb_stdlog);
4271 return -1;
4272 case '$':
4273 if (remote_debug)
4274 fputs_filtered ("Saw new packet start in middle of old one\n",
4275 gdb_stdlog);
4276 return -1; /* Start a new packet, count retries */
4277 case '#':
4278 {
4279 unsigned char pktcsum;
4280 int check_0 = 0;
4281 int check_1 = 0;
4282
4283 buf[bc] = '\0';
4284
4285 check_0 = readchar (remote_timeout);
4286 if (check_0 >= 0)
4287 check_1 = readchar (remote_timeout);
4288
4289 if (check_0 == SERIAL_TIMEOUT || check_1 == SERIAL_TIMEOUT)
4290 {
4291 if (remote_debug)
4292 fputs_filtered ("Timeout in checksum, retrying\n", gdb_stdlog);
4293 return -1;
4294 }
4295 else if (check_0 < 0 || check_1 < 0)
4296 {
4297 if (remote_debug)
4298 fputs_filtered ("Communication error in checksum\n", gdb_stdlog);
4299 return -1;
4300 }
4301
4302 pktcsum = (fromhex (check_0) << 4) | fromhex (check_1);
4303 if (csum == pktcsum)
4304 return bc;
4305
4306 if (remote_debug)
4307 {
4308 fprintf_filtered (gdb_stdlog,
4309 "Bad checksum, sentsum=0x%x, csum=0x%x, buf=",
4310 pktcsum, csum);
4311 fputs_filtered (buf, gdb_stdlog);
4312 fputs_filtered ("\n", gdb_stdlog);
4313 }
4314 /* Number of characters in buffer ignoring trailing
4315 NUL. */
4316 return -1;
4317 }
4318 case '*': /* Run length encoding */
4319 {
4320 int repeat;
4321 csum += c;
4322
4323 if (remote_cisco_mode == 0)
4324 {
4325 c = readchar (remote_timeout);
4326 csum += c;
4327 repeat = c - ' ' + 3; /* Compute repeat count */
4328 }
4329 else
4330 {
4331 /* Cisco's run-length encoding variant uses two
4332 hex chars to represent the repeat count. */
4333
4334 c = readchar (remote_timeout);
4335 csum += c;
4336 repeat = fromhex (c) << 4;
4337 c = readchar (remote_timeout);
4338 csum += c;
4339 repeat += fromhex (c);
4340 }
4341
4342 /* The character before ``*'' is repeated. */
4343
4344 if (repeat > 0 && repeat <= 255
4345 && bc > 0
4346 && bc + repeat - 1 < sizeof_buf - 1)
4347 {
4348 memset (&buf[bc], buf[bc - 1], repeat);
4349 bc += repeat;
4350 continue;
4351 }
4352
4353 buf[bc] = '\0';
4354 printf_filtered ("Repeat count %d too large for buffer: ", repeat);
4355 puts_filtered (buf);
4356 puts_filtered ("\n");
4357 return -1;
4358 }
4359 default:
4360 if (bc < sizeof_buf - 1)
4361 {
4362 buf[bc++] = c;
4363 csum += c;
4364 continue;
4365 }
4366
4367 buf[bc] = '\0';
4368 puts_filtered ("Remote packet too long: ");
4369 puts_filtered (buf);
4370 puts_filtered ("\n");
4371
4372 return -1;
4373 }
4374 }
4375 }
4376
4377 /* Read a packet from the remote machine, with error checking, and
4378 store it in BUF. If FOREVER, wait forever rather than timing out;
4379 this is used (in synchronous mode) to wait for a target that is is
4380 executing user code to stop. */
4381 /* FIXME: ezannoni 2000-02-01 this wrapper is necessary so that we
4382 don't have to change all the calls to getpkt to deal with the
4383 return value, because at the moment I don't know what the right
4384 thing to do it for those. */
4385 void
4386 getpkt (char *buf,
4387 long sizeof_buf,
4388 int forever)
4389 {
4390 int timed_out;
4391
4392 timed_out = getpkt_sane (buf, sizeof_buf, forever);
4393 }
4394
4395
4396 /* Read a packet from the remote machine, with error checking, and
4397 store it in BUF. If FOREVER, wait forever rather than timing out;
4398 this is used (in synchronous mode) to wait for a target that is is
4399 executing user code to stop. If FOREVER == 0, this function is
4400 allowed to time out gracefully and return an indication of this to
4401 the caller. */
4402 static int
4403 getpkt_sane (char *buf,
4404 long sizeof_buf,
4405 int forever)
4406 {
4407 int c;
4408 int tries;
4409 int timeout;
4410 int val;
4411
4412 strcpy (buf, "timeout");
4413
4414 if (forever)
4415 {
4416 timeout = watchdog > 0 ? watchdog : -1;
4417 }
4418
4419 else
4420 timeout = remote_timeout;
4421
4422 #define MAX_TRIES 3
4423
4424 for (tries = 1; tries <= MAX_TRIES; tries++)
4425 {
4426 /* This can loop forever if the remote side sends us characters
4427 continuously, but if it pauses, we'll get a zero from readchar
4428 because of timeout. Then we'll count that as a retry. */
4429
4430 /* Note that we will only wait forever prior to the start of a packet.
4431 After that, we expect characters to arrive at a brisk pace. They
4432 should show up within remote_timeout intervals. */
4433
4434 do
4435 {
4436 c = readchar (timeout);
4437
4438 if (c == SERIAL_TIMEOUT)
4439 {
4440 if (forever) /* Watchdog went off? Kill the target. */
4441 {
4442 QUIT;
4443 target_mourn_inferior ();
4444 error ("Watchdog has expired. Target detached.\n");
4445 }
4446 if (remote_debug)
4447 fputs_filtered ("Timed out.\n", gdb_stdlog);
4448 goto retry;
4449 }
4450 }
4451 while (c != '$');
4452
4453 /* We've found the start of a packet, now collect the data. */
4454
4455 val = read_frame (buf, sizeof_buf);
4456
4457 if (val >= 0)
4458 {
4459 if (remote_debug)
4460 {
4461 fprintf_unfiltered (gdb_stdlog, "Packet received: ");
4462 fputstr_unfiltered (buf, 0, gdb_stdlog);
4463 fprintf_unfiltered (gdb_stdlog, "\n");
4464 }
4465 serial_write (remote_desc, "+", 1);
4466 return 0;
4467 }
4468
4469 /* Try the whole thing again. */
4470 retry:
4471 serial_write (remote_desc, "-", 1);
4472 }
4473
4474 /* We have tried hard enough, and just can't receive the packet. Give up. */
4475
4476 printf_unfiltered ("Ignoring packet error, continuing...\n");
4477 serial_write (remote_desc, "+", 1);
4478 return 1;
4479 }
4480 \f
4481 static void
4482 remote_kill (void)
4483 {
4484 /* For some mysterious reason, wait_for_inferior calls kill instead of
4485 mourn after it gets TARGET_WAITKIND_SIGNALLED. Work around it. */
4486 if (kill_kludge)
4487 {
4488 kill_kludge = 0;
4489 target_mourn_inferior ();
4490 return;
4491 }
4492
4493 /* Use catch_errors so the user can quit from gdb even when we aren't on
4494 speaking terms with the remote system. */
4495 catch_errors ((catch_errors_ftype *) putpkt, "k", "", RETURN_MASK_ERROR);
4496
4497 /* Don't wait for it to die. I'm not really sure it matters whether
4498 we do or not. For the existing stubs, kill is a noop. */
4499 target_mourn_inferior ();
4500 }
4501
4502 /* Async version of remote_kill. */
4503 static void
4504 remote_async_kill (void)
4505 {
4506 /* Unregister the file descriptor from the event loop. */
4507 if (target_is_async_p ())
4508 serial_async (remote_desc, NULL, 0);
4509
4510 /* For some mysterious reason, wait_for_inferior calls kill instead of
4511 mourn after it gets TARGET_WAITKIND_SIGNALLED. Work around it. */
4512 if (kill_kludge)
4513 {
4514 kill_kludge = 0;
4515 target_mourn_inferior ();
4516 return;
4517 }
4518
4519 /* Use catch_errors so the user can quit from gdb even when we aren't on
4520 speaking terms with the remote system. */
4521 catch_errors ((catch_errors_ftype *) putpkt, "k", "", RETURN_MASK_ERROR);
4522
4523 /* Don't wait for it to die. I'm not really sure it matters whether
4524 we do or not. For the existing stubs, kill is a noop. */
4525 target_mourn_inferior ();
4526 }
4527
4528 static void
4529 remote_mourn (void)
4530 {
4531 remote_mourn_1 (&remote_ops);
4532 }
4533
4534 static void
4535 remote_async_mourn (void)
4536 {
4537 remote_mourn_1 (&remote_async_ops);
4538 }
4539
4540 static void
4541 extended_remote_mourn (void)
4542 {
4543 /* We do _not_ want to mourn the target like this; this will
4544 remove the extended remote target from the target stack,
4545 and the next time the user says "run" it'll fail.
4546
4547 FIXME: What is the right thing to do here? */
4548 #if 0
4549 remote_mourn_1 (&extended_remote_ops);
4550 #endif
4551 }
4552
4553 /* Worker function for remote_mourn. */
4554 static void
4555 remote_mourn_1 (struct target_ops *target)
4556 {
4557 unpush_target (target);
4558 generic_mourn_inferior ();
4559 }
4560
4561 /* In the extended protocol we want to be able to do things like
4562 "run" and have them basically work as expected. So we need
4563 a special create_inferior function.
4564
4565 FIXME: One day add support for changing the exec file
4566 we're debugging, arguments and an environment. */
4567
4568 static void
4569 extended_remote_create_inferior (char *exec_file, char *args, char **env)
4570 {
4571 /* Rip out the breakpoints; we'll reinsert them after restarting
4572 the remote server. */
4573 remove_breakpoints ();
4574
4575 /* Now restart the remote server. */
4576 extended_remote_restart ();
4577
4578 /* Now put the breakpoints back in. This way we're safe if the
4579 restart function works via a unix fork on the remote side. */
4580 insert_breakpoints ();
4581
4582 /* Clean up from the last time we were running. */
4583 clear_proceed_status ();
4584
4585 /* Let the remote process run. */
4586 proceed (-1, TARGET_SIGNAL_0, 0);
4587 }
4588
4589 /* Async version of extended_remote_create_inferior. */
4590 static void
4591 extended_remote_async_create_inferior (char *exec_file, char *args, char **env)
4592 {
4593 /* Rip out the breakpoints; we'll reinsert them after restarting
4594 the remote server. */
4595 remove_breakpoints ();
4596
4597 /* If running asynchronously, register the target file descriptor
4598 with the event loop. */
4599 if (event_loop_p && target_can_async_p ())
4600 target_async (inferior_event_handler, 0);
4601
4602 /* Now restart the remote server. */
4603 extended_remote_restart ();
4604
4605 /* Now put the breakpoints back in. This way we're safe if the
4606 restart function works via a unix fork on the remote side. */
4607 insert_breakpoints ();
4608
4609 /* Clean up from the last time we were running. */
4610 clear_proceed_status ();
4611
4612 /* Let the remote process run. */
4613 proceed (-1, TARGET_SIGNAL_0, 0);
4614 }
4615 \f
4616
4617 /* On some machines, e.g. 68k, we may use a different breakpoint instruction
4618 than other targets; in those use REMOTE_BREAKPOINT instead of just
4619 BREAKPOINT. Also, bi-endian targets may define LITTLE_REMOTE_BREAKPOINT
4620 and BIG_REMOTE_BREAKPOINT. If none of these are defined, we just call
4621 the standard routines that are in mem-break.c. */
4622
4623 /* FIXME, these ought to be done in a more dynamic fashion. For instance,
4624 the choice of breakpoint instruction affects target program design and
4625 vice versa, and by making it user-tweakable, the special code here
4626 goes away and we need fewer special GDB configurations. */
4627
4628 #if defined (LITTLE_REMOTE_BREAKPOINT) && defined (BIG_REMOTE_BREAKPOINT) && !defined(REMOTE_BREAKPOINT)
4629 #define REMOTE_BREAKPOINT
4630 #endif
4631
4632 #ifdef REMOTE_BREAKPOINT
4633
4634 /* If the target isn't bi-endian, just pretend it is. */
4635 #if !defined (LITTLE_REMOTE_BREAKPOINT) && !defined (BIG_REMOTE_BREAKPOINT)
4636 #define LITTLE_REMOTE_BREAKPOINT REMOTE_BREAKPOINT
4637 #define BIG_REMOTE_BREAKPOINT REMOTE_BREAKPOINT
4638 #endif
4639
4640 static unsigned char big_break_insn[] = BIG_REMOTE_BREAKPOINT;
4641 static unsigned char little_break_insn[] = LITTLE_REMOTE_BREAKPOINT;
4642
4643 #endif /* REMOTE_BREAKPOINT */
4644
4645 /* Insert a breakpoint on targets that don't have any better breakpoint
4646 support. We read the contents of the target location and stash it,
4647 then overwrite it with a breakpoint instruction. ADDR is the target
4648 location in the target machine. CONTENTS_CACHE is a pointer to
4649 memory allocated for saving the target contents. It is guaranteed
4650 by the caller to be long enough to save sizeof BREAKPOINT bytes (this
4651 is accomplished via BREAKPOINT_MAX). */
4652
4653 static int
4654 remote_insert_breakpoint (CORE_ADDR addr, char *contents_cache)
4655 {
4656 struct remote_state *rs = get_remote_state ();
4657 #ifdef REMOTE_BREAKPOINT
4658 int val;
4659 #endif
4660 int bp_size;
4661
4662 /* Try the "Z" s/w breakpoint packet if it is not already disabled.
4663 If it succeeds, then set the support to PACKET_ENABLE. If it
4664 fails, and the user has explicitly requested the Z support then
4665 report an error, otherwise, mark it disabled and go on. */
4666
4667 if (remote_protocol_Z[Z_PACKET_SOFTWARE_BP].support != PACKET_DISABLE)
4668 {
4669 char *buf = alloca (rs->remote_packet_size);
4670 char *p = buf;
4671
4672 addr = remote_address_masked (addr);
4673 *(p++) = 'Z';
4674 *(p++) = '0';
4675 *(p++) = ',';
4676 p += hexnumstr (p, (ULONGEST) addr);
4677 BREAKPOINT_FROM_PC (&addr, &bp_size);
4678 sprintf (p, ",%d", bp_size);
4679
4680 putpkt (buf);
4681 getpkt (buf, (rs->remote_packet_size), 0);
4682
4683 switch (packet_ok (buf, &remote_protocol_Z[Z_PACKET_SOFTWARE_BP]))
4684 {
4685 case PACKET_ERROR:
4686 return -1;
4687 case PACKET_OK:
4688 return 0;
4689 case PACKET_UNKNOWN:
4690 break;
4691 }
4692 }
4693
4694 #ifdef REMOTE_BREAKPOINT
4695 val = target_read_memory (addr, contents_cache, sizeof big_break_insn);
4696
4697 if (val == 0)
4698 {
4699 if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG)
4700 val = target_write_memory (addr, (char *) big_break_insn,
4701 sizeof big_break_insn);
4702 else
4703 val = target_write_memory (addr, (char *) little_break_insn,
4704 sizeof little_break_insn);
4705 }
4706
4707 return val;
4708 #else
4709 return memory_insert_breakpoint (addr, contents_cache);
4710 #endif /* REMOTE_BREAKPOINT */
4711 }
4712
4713 static int
4714 remote_remove_breakpoint (CORE_ADDR addr, char *contents_cache)
4715 {
4716 struct remote_state *rs = get_remote_state ();
4717 int bp_size;
4718
4719 if (remote_protocol_Z[Z_PACKET_SOFTWARE_BP].support != PACKET_DISABLE)
4720 {
4721 char *buf = alloca (rs->remote_packet_size);
4722 char *p = buf;
4723
4724 *(p++) = 'z';
4725 *(p++) = '0';
4726 *(p++) = ',';
4727
4728 addr = remote_address_masked (addr);
4729 p += hexnumstr (p, (ULONGEST) addr);
4730 BREAKPOINT_FROM_PC (&addr, &bp_size);
4731 sprintf (p, ",%d", bp_size);
4732
4733 putpkt (buf);
4734 getpkt (buf, (rs->remote_packet_size), 0);
4735
4736 return (buf[0] == 'E');
4737 }
4738
4739 #ifdef REMOTE_BREAKPOINT
4740 return target_write_memory (addr, contents_cache, sizeof big_break_insn);
4741 #else
4742 return memory_remove_breakpoint (addr, contents_cache);
4743 #endif /* REMOTE_BREAKPOINT */
4744 }
4745
4746 static int
4747 watchpoint_to_Z_packet (int type)
4748 {
4749 switch (type)
4750 {
4751 case hw_write:
4752 return 2;
4753 break;
4754 case hw_read:
4755 return 3;
4756 break;
4757 case hw_access:
4758 return 4;
4759 break;
4760 default:
4761 internal_error (__FILE__, __LINE__,
4762 "hw_bp_to_z: bad watchpoint type %d", type);
4763 }
4764 }
4765
4766 /* FIXME: This function should be static and a member of the remote
4767 target vector. */
4768
4769 int
4770 remote_insert_watchpoint (CORE_ADDR addr, int len, int type)
4771 {
4772 struct remote_state *rs = get_remote_state ();
4773 char *buf = alloca (rs->remote_packet_size);
4774 char *p;
4775 enum Z_packet_type packet = watchpoint_to_Z_packet (type);
4776
4777 if (remote_protocol_Z[packet].support == PACKET_DISABLE)
4778 error ("Can't set hardware watchpoints without the '%s' (%s) packet\n",
4779 remote_protocol_Z[packet].name,
4780 remote_protocol_Z[packet].title);
4781
4782 sprintf (buf, "Z%x,", packet);
4783 p = strchr (buf, '\0');
4784 addr = remote_address_masked (addr);
4785 p += hexnumstr (p, (ULONGEST) addr);
4786 sprintf (p, ",%x", len);
4787
4788 putpkt (buf);
4789 getpkt (buf, (rs->remote_packet_size), 0);
4790
4791 switch (packet_ok (buf, &remote_protocol_Z[packet]))
4792 {
4793 case PACKET_ERROR:
4794 case PACKET_UNKNOWN:
4795 return -1;
4796 case PACKET_OK:
4797 return 0;
4798 }
4799 internal_error (__FILE__, __LINE__,
4800 "remote_insert_watchpoint: reached end of function");
4801 }
4802
4803 /* FIXME: This function should be static and a member of the remote
4804 target vector. */
4805
4806 int
4807 remote_remove_watchpoint (CORE_ADDR addr, int len, int type)
4808 {
4809 struct remote_state *rs = get_remote_state ();
4810 char *buf = alloca (rs->remote_packet_size);
4811 char *p;
4812 enum Z_packet_type packet = watchpoint_to_Z_packet (type);
4813
4814 if (remote_protocol_Z[packet].support == PACKET_DISABLE)
4815 error ("Can't clear hardware watchpoints without the '%s' (%s) packet\n",
4816 remote_protocol_Z[packet].name,
4817 remote_protocol_Z[packet].title);
4818
4819 sprintf (buf, "z%x,", packet);
4820 p = strchr (buf, '\0');
4821 addr = remote_address_masked (addr);
4822 p += hexnumstr (p, (ULONGEST) addr);
4823 sprintf (p, ",%x", len);
4824 putpkt (buf);
4825 getpkt (buf, (rs->remote_packet_size), 0);
4826
4827 switch (packet_ok (buf, &remote_protocol_Z[packet]))
4828 {
4829 case PACKET_ERROR:
4830 case PACKET_UNKNOWN:
4831 return -1;
4832 case PACKET_OK:
4833 return 0;
4834 }
4835 internal_error (__FILE__, __LINE__,
4836 "remote_remove_watchpoint: reached end of function");
4837 }
4838
4839 /* FIXME: This function should be static and a member of the remote
4840 target vector. */
4841
4842 int
4843 remote_insert_hw_breakpoint (CORE_ADDR addr, int len)
4844 {
4845 struct remote_state *rs = get_remote_state ();
4846 char *buf = alloca (rs->remote_packet_size);
4847 char *p = buf;
4848
4849 if (remote_protocol_Z[Z_PACKET_HARDWARE_BP].support == PACKET_DISABLE)
4850 error ("Can't set hardware breakpoint without the '%s' (%s) packet\n",
4851 remote_protocol_Z[Z_PACKET_HARDWARE_BP].name,
4852 remote_protocol_Z[Z_PACKET_HARDWARE_BP].title);
4853
4854 *(p++) = 'Z';
4855 *(p++) = '1';
4856 *(p++) = ',';
4857
4858 addr = remote_address_masked (addr);
4859 p += hexnumstr (p, (ULONGEST) addr);
4860 sprintf (p, ",%x", len);
4861
4862 putpkt (buf);
4863 getpkt (buf, (rs->remote_packet_size), 0);
4864
4865 switch (packet_ok (buf, &remote_protocol_Z[Z_PACKET_HARDWARE_BP]))
4866 {
4867 case PACKET_ERROR:
4868 case PACKET_UNKNOWN:
4869 return -1;
4870 case PACKET_OK:
4871 return 0;
4872 }
4873 internal_error (__FILE__, __LINE__,
4874 "remote_remove_watchpoint: reached end of function");
4875 }
4876
4877 /* FIXME: This function should be static and a member of the remote
4878 target vector. */
4879
4880 int
4881 remote_remove_hw_breakpoint (CORE_ADDR addr, int len)
4882 {
4883 struct remote_state *rs = get_remote_state ();
4884 char *buf = alloca (rs->remote_packet_size);
4885 char *p = buf;
4886
4887 if (remote_protocol_Z[Z_PACKET_HARDWARE_BP].support == PACKET_DISABLE)
4888 error ("Can't clear hardware breakpoint without the '%s' (%s) packet\n",
4889 remote_protocol_Z[Z_PACKET_HARDWARE_BP].name,
4890 remote_protocol_Z[Z_PACKET_HARDWARE_BP].title);
4891
4892 *(p++) = 'z';
4893 *(p++) = '1';
4894 *(p++) = ',';
4895
4896 addr = remote_address_masked (addr);
4897 p += hexnumstr (p, (ULONGEST) addr);
4898 sprintf (p, ",%x", len);
4899
4900 putpkt(buf);
4901 getpkt (buf, (rs->remote_packet_size), 0);
4902
4903 switch (packet_ok (buf, &remote_protocol_Z[Z_PACKET_HARDWARE_BP]))
4904 {
4905 case PACKET_ERROR:
4906 case PACKET_UNKNOWN:
4907 return -1;
4908 case PACKET_OK:
4909 return 0;
4910 }
4911 internal_error (__FILE__, __LINE__,
4912 "remote_remove_watchpoint: reached end of function");
4913 }
4914
4915 /* Some targets are only capable of doing downloads, and afterwards
4916 they switch to the remote serial protocol. This function provides
4917 a clean way to get from the download target to the remote target.
4918 It's basically just a wrapper so that we don't have to expose any
4919 of the internal workings of remote.c.
4920
4921 Prior to calling this routine, you should shutdown the current
4922 target code, else you will get the "A program is being debugged
4923 already..." message. Usually a call to pop_target() suffices. */
4924
4925 void
4926 push_remote_target (char *name, int from_tty)
4927 {
4928 printf_filtered ("Switching to remote protocol\n");
4929 remote_open (name, from_tty);
4930 }
4931
4932 /* Other targets want to use the entire remote serial module but with
4933 certain remote_ops overridden. */
4934
4935 void
4936 open_remote_target (char *name, int from_tty, struct target_ops *target,
4937 int extended_p)
4938 {
4939 printf_filtered ("Selecting the %sremote protocol\n",
4940 (extended_p ? "extended-" : ""));
4941 remote_open_1 (name, from_tty, target, extended_p);
4942 }
4943
4944 /* Table used by the crc32 function to calcuate the checksum. */
4945
4946 static unsigned long crc32_table[256] =
4947 {0, 0};
4948
4949 static unsigned long
4950 crc32 (unsigned char *buf, int len, unsigned int crc)
4951 {
4952 if (!crc32_table[1])
4953 {
4954 /* Initialize the CRC table and the decoding table. */
4955 int i, j;
4956 unsigned int c;
4957
4958 for (i = 0; i < 256; i++)
4959 {
4960 for (c = i << 24, j = 8; j > 0; --j)
4961 c = c & 0x80000000 ? (c << 1) ^ 0x04c11db7 : (c << 1);
4962 crc32_table[i] = c;
4963 }
4964 }
4965
4966 while (len--)
4967 {
4968 crc = (crc << 8) ^ crc32_table[((crc >> 24) ^ *buf) & 255];
4969 buf++;
4970 }
4971 return crc;
4972 }
4973
4974 /* compare-sections command
4975
4976 With no arguments, compares each loadable section in the exec bfd
4977 with the same memory range on the target, and reports mismatches.
4978 Useful for verifying the image on the target against the exec file.
4979 Depends on the target understanding the new "qCRC:" request. */
4980
4981 /* FIXME: cagney/1999-10-26: This command should be broken down into a
4982 target method (target verify memory) and generic version of the
4983 actual command. This will allow other high-level code (especially
4984 generic_load()) to make use of this target functionality. */
4985
4986 static void
4987 compare_sections_command (char *args, int from_tty)
4988 {
4989 struct remote_state *rs = get_remote_state ();
4990 asection *s;
4991 unsigned long host_crc, target_crc;
4992 extern bfd *exec_bfd;
4993 struct cleanup *old_chain;
4994 char *tmp;
4995 char *sectdata;
4996 const char *sectname;
4997 char *buf = alloca (rs->remote_packet_size);
4998 bfd_size_type size;
4999 bfd_vma lma;
5000 int matched = 0;
5001 int mismatched = 0;
5002
5003 if (!exec_bfd)
5004 error ("command cannot be used without an exec file");
5005 if (!current_target.to_shortname ||
5006 strcmp (current_target.to_shortname, "remote") != 0)
5007 error ("command can only be used with remote target");
5008
5009 for (s = exec_bfd->sections; s; s = s->next)
5010 {
5011 if (!(s->flags & SEC_LOAD))
5012 continue; /* skip non-loadable section */
5013
5014 size = bfd_get_section_size_before_reloc (s);
5015 if (size == 0)
5016 continue; /* skip zero-length section */
5017
5018 sectname = bfd_get_section_name (exec_bfd, s);
5019 if (args && strcmp (args, sectname) != 0)
5020 continue; /* not the section selected by user */
5021
5022 matched = 1; /* do this section */
5023 lma = s->lma;
5024 /* FIXME: assumes lma can fit into long */
5025 sprintf (buf, "qCRC:%lx,%lx", (long) lma, (long) size);
5026 putpkt (buf);
5027
5028 /* be clever; compute the host_crc before waiting for target reply */
5029 sectdata = xmalloc (size);
5030 old_chain = make_cleanup (xfree, sectdata);
5031 bfd_get_section_contents (exec_bfd, s, sectdata, 0, size);
5032 host_crc = crc32 ((unsigned char *) sectdata, size, 0xffffffff);
5033
5034 getpkt (buf, (rs->remote_packet_size), 0);
5035 if (buf[0] == 'E')
5036 error ("target memory fault, section %s, range 0x%s -- 0x%s",
5037 sectname, paddr (lma), paddr (lma + size));
5038 if (buf[0] != 'C')
5039 error ("remote target does not support this operation");
5040
5041 for (target_crc = 0, tmp = &buf[1]; *tmp; tmp++)
5042 target_crc = target_crc * 16 + fromhex (*tmp);
5043
5044 printf_filtered ("Section %s, range 0x%s -- 0x%s: ",
5045 sectname, paddr (lma), paddr (lma + size));
5046 if (host_crc == target_crc)
5047 printf_filtered ("matched.\n");
5048 else
5049 {
5050 printf_filtered ("MIS-MATCHED!\n");
5051 mismatched++;
5052 }
5053
5054 do_cleanups (old_chain);
5055 }
5056 if (mismatched > 0)
5057 warning ("One or more sections of the remote executable does not match\n\
5058 the loaded file\n");
5059 if (args && !matched)
5060 printf_filtered ("No loaded section named '%s'.\n", args);
5061 }
5062
5063 static int
5064 remote_query (int query_type, char *buf, char *outbuf, int *bufsiz)
5065 {
5066 struct remote_state *rs = get_remote_state ();
5067 int i;
5068 char *buf2 = alloca (rs->remote_packet_size);
5069 char *p2 = &buf2[0];
5070
5071 if (!bufsiz)
5072 error ("null pointer to remote bufer size specified");
5073
5074 /* minimum outbuf size is (rs->remote_packet_size) - if bufsiz is not large enough let
5075 the caller know and return what the minimum size is */
5076 /* Note: a zero bufsiz can be used to query the minimum buffer size */
5077 if (*bufsiz < (rs->remote_packet_size))
5078 {
5079 *bufsiz = (rs->remote_packet_size);
5080 return -1;
5081 }
5082
5083 /* except for querying the minimum buffer size, target must be open */
5084 if (!remote_desc)
5085 error ("remote query is only available after target open");
5086
5087 /* we only take uppercase letters as query types, at least for now */
5088 if ((query_type < 'A') || (query_type > 'Z'))
5089 error ("invalid remote query type");
5090
5091 if (!buf)
5092 error ("null remote query specified");
5093
5094 if (!outbuf)
5095 error ("remote query requires a buffer to receive data");
5096
5097 outbuf[0] = '\0';
5098
5099 *p2++ = 'q';
5100 *p2++ = query_type;
5101
5102 /* we used one buffer char for the remote protocol q command and another
5103 for the query type. As the remote protocol encapsulation uses 4 chars
5104 plus one extra in case we are debugging (remote_debug),
5105 we have PBUFZIZ - 7 left to pack the query string */
5106 i = 0;
5107 while (buf[i] && (i < ((rs->remote_packet_size) - 8)))
5108 {
5109 /* bad caller may have sent forbidden characters */
5110 if ((!isprint (buf[i])) || (buf[i] == '$') || (buf[i] == '#'))
5111 error ("illegal characters in query string");
5112
5113 *p2++ = buf[i];
5114 i++;
5115 }
5116 *p2 = buf[i];
5117
5118 if (buf[i])
5119 error ("query larger than available buffer");
5120
5121 i = putpkt (buf2);
5122 if (i < 0)
5123 return i;
5124
5125 getpkt (outbuf, *bufsiz, 0);
5126
5127 return 0;
5128 }
5129
5130 static void
5131 remote_rcmd (char *command,
5132 struct ui_file *outbuf)
5133 {
5134 struct remote_state *rs = get_remote_state ();
5135 int i;
5136 char *buf = alloca (rs->remote_packet_size);
5137 char *p = buf;
5138
5139 if (!remote_desc)
5140 error ("remote rcmd is only available after target open");
5141
5142 /* Send a NULL command across as an empty command */
5143 if (command == NULL)
5144 command = "";
5145
5146 /* The query prefix */
5147 strcpy (buf, "qRcmd,");
5148 p = strchr (buf, '\0');
5149
5150 if ((strlen (buf) + strlen (command) * 2 + 8/*misc*/) > (rs->remote_packet_size))
5151 error ("\"monitor\" command ``%s'' is too long\n", command);
5152
5153 /* Encode the actual command */
5154 bin2hex (command, p, 0);
5155
5156 if (putpkt (buf) < 0)
5157 error ("Communication problem with target\n");
5158
5159 /* get/display the response */
5160 while (1)
5161 {
5162 /* XXX - see also tracepoint.c:remote_get_noisy_reply() */
5163 buf[0] = '\0';
5164 getpkt (buf, (rs->remote_packet_size), 0);
5165 if (buf[0] == '\0')
5166 error ("Target does not support this command\n");
5167 if (buf[0] == 'O' && buf[1] != 'K')
5168 {
5169 remote_console_output (buf + 1); /* 'O' message from stub */
5170 continue;
5171 }
5172 if (strcmp (buf, "OK") == 0)
5173 break;
5174 if (strlen (buf) == 3 && buf[0] == 'E'
5175 && isdigit (buf[1]) && isdigit (buf[2]))
5176 {
5177 error ("Protocol error with Rcmd");
5178 }
5179 for (p = buf; p[0] != '\0' && p[1] != '\0'; p += 2)
5180 {
5181 char c = (fromhex (p[0]) << 4) + fromhex (p[1]);
5182 fputc_unfiltered (c, outbuf);
5183 }
5184 break;
5185 }
5186 }
5187
5188 static void
5189 packet_command (char *args, int from_tty)
5190 {
5191 struct remote_state *rs = get_remote_state ();
5192 char *buf = alloca (rs->remote_packet_size);
5193
5194 if (!remote_desc)
5195 error ("command can only be used with remote target");
5196
5197 if (!args)
5198 error ("remote-packet command requires packet text as argument");
5199
5200 puts_filtered ("sending: ");
5201 print_packet (args);
5202 puts_filtered ("\n");
5203 putpkt (args);
5204
5205 getpkt (buf, (rs->remote_packet_size), 0);
5206 puts_filtered ("received: ");
5207 print_packet (buf);
5208 puts_filtered ("\n");
5209 }
5210
5211 #if 0
5212 /* --------- UNIT_TEST for THREAD oriented PACKETS ------------------------- */
5213
5214 static void display_thread_info (struct gdb_ext_thread_info *info);
5215
5216 static void threadset_test_cmd (char *cmd, int tty);
5217
5218 static void threadalive_test (char *cmd, int tty);
5219
5220 static void threadlist_test_cmd (char *cmd, int tty);
5221
5222 int get_and_display_threadinfo (threadref * ref);
5223
5224 static void threadinfo_test_cmd (char *cmd, int tty);
5225
5226 static int thread_display_step (threadref * ref, void *context);
5227
5228 static void threadlist_update_test_cmd (char *cmd, int tty);
5229
5230 static void init_remote_threadtests (void);
5231
5232 #define SAMPLE_THREAD 0x05060708 /* Truncated 64 bit threadid */
5233
5234 static void
5235 threadset_test_cmd (char *cmd, int tty)
5236 {
5237 int sample_thread = SAMPLE_THREAD;
5238
5239 printf_filtered ("Remote threadset test\n");
5240 set_thread (sample_thread, 1);
5241 }
5242
5243
5244 static void
5245 threadalive_test (char *cmd, int tty)
5246 {
5247 int sample_thread = SAMPLE_THREAD;
5248
5249 if (remote_thread_alive (pid_to_ptid (sample_thread)))
5250 printf_filtered ("PASS: Thread alive test\n");
5251 else
5252 printf_filtered ("FAIL: Thread alive test\n");
5253 }
5254
5255 void output_threadid (char *title, threadref * ref);
5256
5257 void
5258 output_threadid (char *title, threadref *ref)
5259 {
5260 char hexid[20];
5261
5262 pack_threadid (&hexid[0], ref); /* Convert threead id into hex */
5263 hexid[16] = 0;
5264 printf_filtered ("%s %s\n", title, (&hexid[0]));
5265 }
5266
5267 static void
5268 threadlist_test_cmd (char *cmd, int tty)
5269 {
5270 int startflag = 1;
5271 threadref nextthread;
5272 int done, result_count;
5273 threadref threadlist[3];
5274
5275 printf_filtered ("Remote Threadlist test\n");
5276 if (!remote_get_threadlist (startflag, &nextthread, 3, &done,
5277 &result_count, &threadlist[0]))
5278 printf_filtered ("FAIL: threadlist test\n");
5279 else
5280 {
5281 threadref *scan = threadlist;
5282 threadref *limit = scan + result_count;
5283
5284 while (scan < limit)
5285 output_threadid (" thread ", scan++);
5286 }
5287 }
5288
5289 void
5290 display_thread_info (struct gdb_ext_thread_info *info)
5291 {
5292 output_threadid ("Threadid: ", &info->threadid);
5293 printf_filtered ("Name: %s\n ", info->shortname);
5294 printf_filtered ("State: %s\n", info->display);
5295 printf_filtered ("other: %s\n\n", info->more_display);
5296 }
5297
5298 int
5299 get_and_display_threadinfo (threadref *ref)
5300 {
5301 int result;
5302 int set;
5303 struct gdb_ext_thread_info threadinfo;
5304
5305 set = TAG_THREADID | TAG_EXISTS | TAG_THREADNAME
5306 | TAG_MOREDISPLAY | TAG_DISPLAY;
5307 if (0 != (result = remote_get_threadinfo (ref, set, &threadinfo)))
5308 display_thread_info (&threadinfo);
5309 return result;
5310 }
5311
5312 static void
5313 threadinfo_test_cmd (char *cmd, int tty)
5314 {
5315 int athread = SAMPLE_THREAD;
5316 threadref thread;
5317 int set;
5318
5319 int_to_threadref (&thread, athread);
5320 printf_filtered ("Remote Threadinfo test\n");
5321 if (!get_and_display_threadinfo (&thread))
5322 printf_filtered ("FAIL cannot get thread info\n");
5323 }
5324
5325 static int
5326 thread_display_step (threadref *ref, void *context)
5327 {
5328 /* output_threadid(" threadstep ",ref); *//* simple test */
5329 return get_and_display_threadinfo (ref);
5330 }
5331
5332 static void
5333 threadlist_update_test_cmd (char *cmd, int tty)
5334 {
5335 printf_filtered ("Remote Threadlist update test\n");
5336 remote_threadlist_iterator (thread_display_step, 0, CRAZY_MAX_THREADS);
5337 }
5338
5339 static void
5340 init_remote_threadtests (void)
5341 {
5342 add_com ("tlist", class_obscure, threadlist_test_cmd,
5343 "Fetch and print the remote list of thread identifiers, one pkt only");
5344 add_com ("tinfo", class_obscure, threadinfo_test_cmd,
5345 "Fetch and display info about one thread");
5346 add_com ("tset", class_obscure, threadset_test_cmd,
5347 "Test setting to a different thread");
5348 add_com ("tupd", class_obscure, threadlist_update_test_cmd,
5349 "Iterate through updating all remote thread info");
5350 add_com ("talive", class_obscure, threadalive_test,
5351 " Remote thread alive test ");
5352 }
5353
5354 #endif /* 0 */
5355
5356 /* Convert a thread ID to a string. Returns the string in a static
5357 buffer. */
5358
5359 static char *
5360 remote_pid_to_str (ptid_t ptid)
5361 {
5362 static char buf[30];
5363
5364 sprintf (buf, "Thread %d", PIDGET (ptid));
5365 return buf;
5366 }
5367
5368 static void
5369 init_remote_ops (void)
5370 {
5371 remote_ops.to_shortname = "remote";
5372 remote_ops.to_longname = "Remote serial target in gdb-specific protocol";
5373 remote_ops.to_doc =
5374 "Use a remote computer via a serial line, using a gdb-specific protocol.\n\
5375 Specify the serial device it is connected to\n\
5376 (e.g. /dev/ttyS0, /dev/ttya, COM1, etc.).";
5377 remote_ops.to_open = remote_open;
5378 remote_ops.to_close = remote_close;
5379 remote_ops.to_detach = remote_detach;
5380 remote_ops.to_resume = remote_resume;
5381 remote_ops.to_wait = remote_wait;
5382 remote_ops.to_fetch_registers = remote_fetch_registers;
5383 remote_ops.to_store_registers = remote_store_registers;
5384 remote_ops.to_prepare_to_store = remote_prepare_to_store;
5385 remote_ops.to_xfer_memory = remote_xfer_memory;
5386 remote_ops.to_files_info = remote_files_info;
5387 remote_ops.to_insert_breakpoint = remote_insert_breakpoint;
5388 remote_ops.to_remove_breakpoint = remote_remove_breakpoint;
5389 remote_ops.to_kill = remote_kill;
5390 remote_ops.to_load = generic_load;
5391 remote_ops.to_mourn_inferior = remote_mourn;
5392 remote_ops.to_thread_alive = remote_thread_alive;
5393 remote_ops.to_find_new_threads = remote_threads_info;
5394 remote_ops.to_pid_to_str = remote_pid_to_str;
5395 remote_ops.to_extra_thread_info = remote_threads_extra_info;
5396 remote_ops.to_stop = remote_stop;
5397 remote_ops.to_query = remote_query;
5398 remote_ops.to_rcmd = remote_rcmd;
5399 remote_ops.to_stratum = process_stratum;
5400 remote_ops.to_has_all_memory = 1;
5401 remote_ops.to_has_memory = 1;
5402 remote_ops.to_has_stack = 1;
5403 remote_ops.to_has_registers = 1;
5404 remote_ops.to_has_execution = 1;
5405 remote_ops.to_has_thread_control = tc_schedlock; /* can lock scheduler */
5406 remote_ops.to_magic = OPS_MAGIC;
5407 }
5408
5409 /* Set up the extended remote vector by making a copy of the standard
5410 remote vector and adding to it. */
5411
5412 static void
5413 init_extended_remote_ops (void)
5414 {
5415 extended_remote_ops = remote_ops;
5416
5417 extended_remote_ops.to_shortname = "extended-remote";
5418 extended_remote_ops.to_longname =
5419 "Extended remote serial target in gdb-specific protocol";
5420 extended_remote_ops.to_doc =
5421 "Use a remote computer via a serial line, using a gdb-specific protocol.\n\
5422 Specify the serial device it is connected to (e.g. /dev/ttya).",
5423 extended_remote_ops.to_open = extended_remote_open;
5424 extended_remote_ops.to_create_inferior = extended_remote_create_inferior;
5425 extended_remote_ops.to_mourn_inferior = extended_remote_mourn;
5426 }
5427
5428 /*
5429 * Command: info remote-process
5430 *
5431 * This implements Cisco's version of the "info proc" command.
5432 *
5433 * This query allows the target stub to return an arbitrary string
5434 * (or strings) giving arbitrary information about the target process.
5435 * This is optional; the target stub isn't required to implement it.
5436 *
5437 * Syntax: qfProcessInfo request first string
5438 * qsProcessInfo request subsequent string
5439 * reply: 'O'<hex-encoded-string>
5440 * 'l' last reply (empty)
5441 */
5442
5443 static void
5444 remote_info_process (char *args, int from_tty)
5445 {
5446 struct remote_state *rs = get_remote_state ();
5447 char *buf = alloca (rs->remote_packet_size);
5448
5449 if (remote_desc == 0)
5450 error ("Command can only be used when connected to the remote target.");
5451
5452 putpkt ("qfProcessInfo");
5453 getpkt (buf, (rs->remote_packet_size), 0);
5454 if (buf[0] == 0)
5455 return; /* Silently: target does not support this feature. */
5456
5457 if (buf[0] == 'E')
5458 error ("info proc: target error.");
5459
5460 while (buf[0] == 'O') /* Capitol-O packet */
5461 {
5462 remote_console_output (&buf[1]);
5463 putpkt ("qsProcessInfo");
5464 getpkt (buf, (rs->remote_packet_size), 0);
5465 }
5466 }
5467
5468 /*
5469 * Target Cisco
5470 */
5471
5472 static void
5473 remote_cisco_open (char *name, int from_tty)
5474 {
5475 if (name == 0)
5476 error ("To open a remote debug connection, you need to specify what \n"
5477 "device is attached to the remote system (e.g. host:port).");
5478
5479 /* See FIXME above */
5480 wait_forever_enabled_p = 1;
5481
5482 target_preopen (from_tty);
5483
5484 unpush_target (&remote_cisco_ops);
5485
5486 remote_desc = remote_serial_open (name);
5487 if (!remote_desc)
5488 perror_with_name (name);
5489
5490 /*
5491 * If a baud rate was specified on the gdb command line it will
5492 * be greater than the initial value of -1. If it is, use it otherwise
5493 * default to 9600
5494 */
5495
5496 baud_rate = (baud_rate > 0) ? baud_rate : 9600;
5497 if (serial_setbaudrate (remote_desc, baud_rate))
5498 {
5499 serial_close (remote_desc);
5500 perror_with_name (name);
5501 }
5502
5503 serial_raw (remote_desc);
5504
5505 /* If there is something sitting in the buffer we might take it as a
5506 response to a command, which would be bad. */
5507 serial_flush_input (remote_desc);
5508
5509 if (from_tty)
5510 {
5511 puts_filtered ("Remote debugging using ");
5512 puts_filtered (name);
5513 puts_filtered ("\n");
5514 }
5515
5516 remote_cisco_mode = 1;
5517
5518 push_target (&remote_cisco_ops); /* Switch to using cisco target now */
5519
5520 init_all_packet_configs ();
5521
5522 general_thread = -2;
5523 continue_thread = -2;
5524
5525 /* Probe for ability to use "ThreadInfo" query, as required. */
5526 use_threadinfo_query = 1;
5527 use_threadextra_query = 1;
5528
5529 /* Without this, some commands which require an active target (such
5530 as kill) won't work. This variable serves (at least) double duty
5531 as both the pid of the target process (if it has such), and as a
5532 flag indicating that a target is active. These functions should
5533 be split out into seperate variables, especially since GDB will
5534 someday have a notion of debugging several processes. */
5535 inferior_ptid = pid_to_ptid (MAGIC_NULL_PID);
5536
5537 /* Start the remote connection; if error (0), discard this target. */
5538
5539 if (!catch_errors (remote_start_remote_dummy, (char *) 0,
5540 "Couldn't establish connection to remote target\n",
5541 RETURN_MASK_ALL))
5542 {
5543 pop_target ();
5544 return;
5545 }
5546 }
5547
5548 static void
5549 remote_cisco_close (int quitting)
5550 {
5551 remote_cisco_mode = 0;
5552 remote_close (quitting);
5553 }
5554
5555 static void
5556 remote_cisco_mourn (void)
5557 {
5558 remote_mourn_1 (&remote_cisco_ops);
5559 }
5560
5561 enum
5562 {
5563 READ_MORE,
5564 FATAL_ERROR,
5565 ENTER_DEBUG,
5566 DISCONNECT_TELNET
5567 }
5568 minitelnet_return;
5569
5570 /* Shared between readsocket() and readtty(). The size is arbitrary,
5571 however all targets are known to support a 400 character packet. */
5572 static char tty_input[400];
5573
5574 static int escape_count;
5575 static int echo_check;
5576 extern int quit_flag;
5577
5578 static int
5579 readsocket (void)
5580 {
5581 int data;
5582
5583 /* Loop until the socket doesn't have any more data */
5584
5585 while ((data = readchar (0)) >= 0)
5586 {
5587 /* Check for the escape sequence */
5588 if (data == '|')
5589 {
5590 /* If this is the fourth escape, get out */
5591 if (++escape_count == 4)
5592 {
5593 return ENTER_DEBUG;
5594 }
5595 else
5596 { /* This is a '|', but not the fourth in a row.
5597 Continue without echoing it. If it isn't actually
5598 one of four in a row, it'll be echoed later. */
5599 continue;
5600 }
5601 }
5602 else
5603 /* Not a '|' */
5604 {
5605 /* Ensure any pending '|'s are flushed. */
5606
5607 for (; escape_count > 0; escape_count--)
5608 putchar ('|');
5609 }
5610
5611 if (data == '\r') /* If this is a return character, */
5612 continue; /* - just supress it. */
5613
5614 if (echo_check != -1) /* Check for echo of user input. */
5615 {
5616 if (tty_input[echo_check] == data)
5617 {
5618 gdb_assert (echo_check <= sizeof (tty_input));
5619 echo_check++; /* Character matched user input: */
5620 continue; /* Continue without echoing it. */
5621 }
5622 else if ((data == '\n') && (tty_input[echo_check] == '\r'))
5623 { /* End of the line (and of echo checking). */
5624 echo_check = -1; /* No more echo supression */
5625 continue; /* Continue without echoing. */
5626 }
5627 else
5628 { /* Failed check for echo of user input.
5629 We now have some suppressed output to flush! */
5630 int j;
5631
5632 for (j = 0; j < echo_check; j++)
5633 putchar (tty_input[j]);
5634 echo_check = -1;
5635 }
5636 }
5637 putchar (data); /* Default case: output the char. */
5638 }
5639
5640 if (data == SERIAL_TIMEOUT) /* Timeout returned from readchar. */
5641 return READ_MORE; /* Try to read some more */
5642 else
5643 return FATAL_ERROR; /* Trouble, bail out */
5644 }
5645
5646 static int
5647 readtty (void)
5648 {
5649 int tty_bytecount;
5650
5651 /* First, read a buffer full from the terminal */
5652 tty_bytecount = read (fileno (stdin), tty_input, sizeof (tty_input) - 1);
5653 if (tty_bytecount == -1)
5654 {
5655 perror ("readtty: read failed");
5656 return FATAL_ERROR;
5657 }
5658
5659 /* Remove a quoted newline. */
5660 if (tty_input[tty_bytecount - 1] == '\n' &&
5661 tty_input[tty_bytecount - 2] == '\\') /* line ending in backslash */
5662 {
5663 tty_input[--tty_bytecount] = 0; /* remove newline */
5664 tty_input[--tty_bytecount] = 0; /* remove backslash */
5665 }
5666
5667 /* Turn trailing newlines into returns */
5668 if (tty_input[tty_bytecount - 1] == '\n')
5669 tty_input[tty_bytecount - 1] = '\r';
5670
5671 /* If the line consists of a ~, enter debugging mode. */
5672 if ((tty_input[0] == '~') && (tty_bytecount == 2))
5673 return ENTER_DEBUG;
5674
5675 /* Make this a zero terminated string and write it out */
5676 tty_input[tty_bytecount] = 0;
5677 if (serial_write (remote_desc, tty_input, tty_bytecount))
5678 {
5679 perror_with_name ("readtty: write failed");
5680 return FATAL_ERROR;
5681 }
5682
5683 return READ_MORE;
5684 }
5685
5686 static int
5687 minitelnet (void)
5688 {
5689 fd_set input; /* file descriptors for select */
5690 int tablesize; /* max number of FDs for select */
5691 int status;
5692 int quit_count = 0;
5693
5694 extern int escape_count; /* global shared by readsocket */
5695 extern int echo_check; /* ditto */
5696
5697 escape_count = 0;
5698 echo_check = -1;
5699
5700 tablesize = 8 * sizeof (input);
5701
5702 for (;;)
5703 {
5704 /* Check for anything from our socket - doesn't block. Note that
5705 this must be done *before* the select as there may be
5706 buffered I/O waiting to be processed. */
5707
5708 if ((status = readsocket ()) == FATAL_ERROR)
5709 {
5710 error ("Debugging terminated by communications error");
5711 }
5712 else if (status != READ_MORE)
5713 {
5714 return (status);
5715 }
5716
5717 fflush (stdout); /* Flush output before blocking */
5718
5719 /* Now block on more socket input or TTY input */
5720
5721 FD_ZERO (&input);
5722 FD_SET (fileno (stdin), &input);
5723 FD_SET (deprecated_serial_fd (remote_desc), &input);
5724
5725 status = select (tablesize, &input, 0, 0, 0);
5726 if ((status == -1) && (errno != EINTR))
5727 {
5728 error ("Communications error on select %d", errno);
5729 }
5730
5731 /* Handle Control-C typed */
5732
5733 if (quit_flag)
5734 {
5735 if ((++quit_count) == 2)
5736 {
5737 if (query ("Interrupt GDB? "))
5738 {
5739 printf_filtered ("Interrupted by user.\n");
5740 throw_exception (RETURN_QUIT);
5741 }
5742 quit_count = 0;
5743 }
5744 quit_flag = 0;
5745
5746 if (remote_break)
5747 serial_send_break (remote_desc);
5748 else
5749 serial_write (remote_desc, "\003", 1);
5750
5751 continue;
5752 }
5753
5754 /* Handle console input */
5755
5756 if (FD_ISSET (fileno (stdin), &input))
5757 {
5758 quit_count = 0;
5759 echo_check = 0;
5760 status = readtty ();
5761 if (status == READ_MORE)
5762 continue;
5763
5764 return status; /* telnet session ended */
5765 }
5766 }
5767 }
5768
5769 static ptid_t
5770 remote_cisco_wait (ptid_t ptid, struct target_waitstatus *status)
5771 {
5772 if (minitelnet () != ENTER_DEBUG)
5773 {
5774 error ("Debugging session terminated by protocol error");
5775 }
5776 putpkt ("?");
5777 return remote_wait (ptid, status);
5778 }
5779
5780 static void
5781 init_remote_cisco_ops (void)
5782 {
5783 remote_cisco_ops.to_shortname = "cisco";
5784 remote_cisco_ops.to_longname = "Remote serial target in cisco-specific protocol";
5785 remote_cisco_ops.to_doc =
5786 "Use a remote machine via TCP, using a cisco-specific protocol.\n\
5787 Specify the serial device it is connected to (e.g. host:2020).";
5788 remote_cisco_ops.to_open = remote_cisco_open;
5789 remote_cisco_ops.to_close = remote_cisco_close;
5790 remote_cisco_ops.to_detach = remote_detach;
5791 remote_cisco_ops.to_resume = remote_resume;
5792 remote_cisco_ops.to_wait = remote_cisco_wait;
5793 remote_cisco_ops.to_fetch_registers = remote_fetch_registers;
5794 remote_cisco_ops.to_store_registers = remote_store_registers;
5795 remote_cisco_ops.to_prepare_to_store = remote_prepare_to_store;
5796 remote_cisco_ops.to_xfer_memory = remote_xfer_memory;
5797 remote_cisco_ops.to_files_info = remote_files_info;
5798 remote_cisco_ops.to_insert_breakpoint = remote_insert_breakpoint;
5799 remote_cisco_ops.to_remove_breakpoint = remote_remove_breakpoint;
5800 remote_cisco_ops.to_kill = remote_kill;
5801 remote_cisco_ops.to_load = generic_load;
5802 remote_cisco_ops.to_mourn_inferior = remote_cisco_mourn;
5803 remote_cisco_ops.to_thread_alive = remote_thread_alive;
5804 remote_cisco_ops.to_find_new_threads = remote_threads_info;
5805 remote_cisco_ops.to_pid_to_str = remote_pid_to_str;
5806 remote_cisco_ops.to_extra_thread_info = remote_threads_extra_info;
5807 remote_cisco_ops.to_stratum = process_stratum;
5808 remote_cisco_ops.to_has_all_memory = 1;
5809 remote_cisco_ops.to_has_memory = 1;
5810 remote_cisco_ops.to_has_stack = 1;
5811 remote_cisco_ops.to_has_registers = 1;
5812 remote_cisco_ops.to_has_execution = 1;
5813 remote_cisco_ops.to_magic = OPS_MAGIC;
5814 }
5815
5816 static int
5817 remote_can_async_p (void)
5818 {
5819 /* We're async whenever the serial device is. */
5820 return (current_target.to_async_mask_value) && serial_can_async_p (remote_desc);
5821 }
5822
5823 static int
5824 remote_is_async_p (void)
5825 {
5826 /* We're async whenever the serial device is. */
5827 return (current_target.to_async_mask_value) && serial_is_async_p (remote_desc);
5828 }
5829
5830 /* Pass the SERIAL event on and up to the client. One day this code
5831 will be able to delay notifying the client of an event until the
5832 point where an entire packet has been received. */
5833
5834 static void (*async_client_callback) (enum inferior_event_type event_type, void *context);
5835 static void *async_client_context;
5836 static serial_event_ftype remote_async_serial_handler;
5837
5838 static void
5839 remote_async_serial_handler (struct serial *scb, void *context)
5840 {
5841 /* Don't propogate error information up to the client. Instead let
5842 the client find out about the error by querying the target. */
5843 async_client_callback (INF_REG_EVENT, async_client_context);
5844 }
5845
5846 static void
5847 remote_async (void (*callback) (enum inferior_event_type event_type, void *context), void *context)
5848 {
5849 if (current_target.to_async_mask_value == 0)
5850 internal_error (__FILE__, __LINE__,
5851 "Calling remote_async when async is masked");
5852
5853 if (callback != NULL)
5854 {
5855 serial_async (remote_desc, remote_async_serial_handler, NULL);
5856 async_client_callback = callback;
5857 async_client_context = context;
5858 }
5859 else
5860 serial_async (remote_desc, NULL, NULL);
5861 }
5862
5863 /* Target async and target extended-async.
5864
5865 This are temporary targets, until it is all tested. Eventually
5866 async support will be incorporated int the usual 'remote'
5867 target. */
5868
5869 static void
5870 init_remote_async_ops (void)
5871 {
5872 remote_async_ops.to_shortname = "async";
5873 remote_async_ops.to_longname = "Remote serial target in async version of the gdb-specific protocol";
5874 remote_async_ops.to_doc =
5875 "Use a remote computer via a serial line, using a gdb-specific protocol.\n\
5876 Specify the serial device it is connected to (e.g. /dev/ttya).";
5877 remote_async_ops.to_open = remote_async_open;
5878 remote_async_ops.to_close = remote_close;
5879 remote_async_ops.to_detach = remote_async_detach;
5880 remote_async_ops.to_resume = remote_async_resume;
5881 remote_async_ops.to_wait = remote_async_wait;
5882 remote_async_ops.to_fetch_registers = remote_fetch_registers;
5883 remote_async_ops.to_store_registers = remote_store_registers;
5884 remote_async_ops.to_prepare_to_store = remote_prepare_to_store;
5885 remote_async_ops.to_xfer_memory = remote_xfer_memory;
5886 remote_async_ops.to_files_info = remote_files_info;
5887 remote_async_ops.to_insert_breakpoint = remote_insert_breakpoint;
5888 remote_async_ops.to_remove_breakpoint = remote_remove_breakpoint;
5889 remote_async_ops.to_terminal_inferior = remote_async_terminal_inferior;
5890 remote_async_ops.to_terminal_ours = remote_async_terminal_ours;
5891 remote_async_ops.to_kill = remote_async_kill;
5892 remote_async_ops.to_load = generic_load;
5893 remote_async_ops.to_mourn_inferior = remote_async_mourn;
5894 remote_async_ops.to_thread_alive = remote_thread_alive;
5895 remote_async_ops.to_find_new_threads = remote_threads_info;
5896 remote_async_ops.to_pid_to_str = remote_pid_to_str;
5897 remote_async_ops.to_extra_thread_info = remote_threads_extra_info;
5898 remote_async_ops.to_stop = remote_stop;
5899 remote_async_ops.to_query = remote_query;
5900 remote_async_ops.to_rcmd = remote_rcmd;
5901 remote_async_ops.to_stratum = process_stratum;
5902 remote_async_ops.to_has_all_memory = 1;
5903 remote_async_ops.to_has_memory = 1;
5904 remote_async_ops.to_has_stack = 1;
5905 remote_async_ops.to_has_registers = 1;
5906 remote_async_ops.to_has_execution = 1;
5907 remote_async_ops.to_has_thread_control = tc_schedlock; /* can lock scheduler */
5908 remote_async_ops.to_can_async_p = remote_can_async_p;
5909 remote_async_ops.to_is_async_p = remote_is_async_p;
5910 remote_async_ops.to_async = remote_async;
5911 remote_async_ops.to_async_mask_value = 1;
5912 remote_async_ops.to_magic = OPS_MAGIC;
5913 }
5914
5915 /* Set up the async extended remote vector by making a copy of the standard
5916 remote vector and adding to it. */
5917
5918 static void
5919 init_extended_async_remote_ops (void)
5920 {
5921 extended_async_remote_ops = remote_async_ops;
5922
5923 extended_async_remote_ops.to_shortname = "extended-async";
5924 extended_async_remote_ops.to_longname =
5925 "Extended remote serial target in async gdb-specific protocol";
5926 extended_async_remote_ops.to_doc =
5927 "Use a remote computer via a serial line, using an async gdb-specific protocol.\n\
5928 Specify the serial device it is connected to (e.g. /dev/ttya).",
5929 extended_async_remote_ops.to_open = extended_remote_async_open;
5930 extended_async_remote_ops.to_create_inferior = extended_remote_async_create_inferior;
5931 extended_async_remote_ops.to_mourn_inferior = extended_remote_mourn;
5932 }
5933
5934 static void
5935 set_remote_cmd (char *args, int from_tty)
5936 {
5937 }
5938
5939 static void
5940 show_remote_cmd (char *args, int from_tty)
5941 {
5942
5943 show_remote_protocol_Z_packet_cmd (args, from_tty);
5944 show_remote_protocol_e_packet_cmd (args, from_tty);
5945 show_remote_protocol_E_packet_cmd (args, from_tty);
5946 show_remote_protocol_P_packet_cmd (args, from_tty);
5947 show_remote_protocol_qSymbol_packet_cmd (args, from_tty);
5948 show_remote_protocol_binary_download_cmd (args, from_tty);
5949 }
5950
5951 static void
5952 build_remote_gdbarch_data (void)
5953 {
5954 remote_address_size = TARGET_ADDR_BIT;
5955 }
5956
5957 /* Saved pointer to previous owner of the new_objfile event. */
5958 static void (*remote_new_objfile_chain) (struct objfile *);
5959
5960 /* Function to be called whenever a new objfile (shlib) is detected. */
5961 static void
5962 remote_new_objfile (struct objfile *objfile)
5963 {
5964 if (remote_desc != 0) /* Have a remote connection */
5965 {
5966 remote_check_symbols (objfile);
5967 }
5968 /* Call predecessor on chain, if any. */
5969 if (remote_new_objfile_chain != 0 &&
5970 remote_desc == 0)
5971 remote_new_objfile_chain (objfile);
5972 }
5973
5974 void
5975 _initialize_remote (void)
5976 {
5977 static struct cmd_list_element *remote_set_cmdlist;
5978 static struct cmd_list_element *remote_show_cmdlist;
5979 struct cmd_list_element *tmpcmd;
5980
5981 /* architecture specific data */
5982 remote_gdbarch_data_handle = register_gdbarch_data (init_remote_state,
5983 free_remote_state);
5984
5985 /* Old tacky stuff. NOTE: This comes after the remote protocol so
5986 that the remote protocol has been initialized. */
5987 register_gdbarch_swap (&remote_address_size,
5988 sizeof (&remote_address_size), NULL);
5989 register_gdbarch_swap (NULL, 0, build_remote_gdbarch_data);
5990
5991 init_remote_ops ();
5992 add_target (&remote_ops);
5993
5994 init_extended_remote_ops ();
5995 add_target (&extended_remote_ops);
5996
5997 init_remote_async_ops ();
5998 add_target (&remote_async_ops);
5999
6000 init_extended_async_remote_ops ();
6001 add_target (&extended_async_remote_ops);
6002
6003 init_remote_cisco_ops ();
6004 add_target (&remote_cisco_ops);
6005
6006 /* Hook into new objfile notification. */
6007 remote_new_objfile_chain = target_new_objfile_hook;
6008 target_new_objfile_hook = remote_new_objfile;
6009
6010 #if 0
6011 init_remote_threadtests ();
6012 #endif
6013
6014 /* set/show remote ... */
6015
6016 add_prefix_cmd ("remote", class_maintenance, set_remote_cmd, "\
6017 Remote protocol specific variables\n\
6018 Configure various remote-protocol specific variables such as\n\
6019 the packets being used",
6020 &remote_set_cmdlist, "set remote ",
6021 0/*allow-unknown*/, &setlist);
6022 add_prefix_cmd ("remote", class_maintenance, show_remote_cmd, "\
6023 Remote protocol specific variables\n\
6024 Configure various remote-protocol specific variables such as\n\
6025 the packets being used",
6026 &remote_show_cmdlist, "show remote ",
6027 0/*allow-unknown*/, &showlist);
6028
6029 add_cmd ("compare-sections", class_obscure, compare_sections_command,
6030 "Compare section data on target to the exec file.\n\
6031 Argument is a single section name (default: all loaded sections).",
6032 &cmdlist);
6033
6034 add_cmd ("packet", class_maintenance, packet_command,
6035 "Send an arbitrary packet to a remote target.\n\
6036 maintenance packet TEXT\n\
6037 If GDB is talking to an inferior via the GDB serial protocol, then\n\
6038 this command sends the string TEXT to the inferior, and displays the\n\
6039 response packet. GDB supplies the initial `$' character, and the\n\
6040 terminating `#' character and checksum.",
6041 &maintenancelist);
6042
6043 add_show_from_set
6044 (add_set_boolean_cmd ("remotebreak", no_class, &remote_break,
6045 "Set whether to send break if interrupted.\n",
6046 &setlist),
6047 &showlist);
6048
6049 /* Install commands for configuring memory read/write packets. */
6050
6051 add_cmd ("remotewritesize", no_class, set_memory_write_packet_size,
6052 "Set the maximum number of bytes per memory write packet (deprecated).\n",
6053 &setlist);
6054 add_cmd ("remotewritesize", no_class, show_memory_write_packet_size,
6055 "Show the maximum number of bytes per memory write packet (deprecated).\n",
6056 &showlist);
6057 add_cmd ("memory-write-packet-size", no_class,
6058 set_memory_write_packet_size,
6059 "Set the maximum number of bytes per memory-write packet.\n"
6060 "Specify the number of bytes in a packet or 0 (zero) for the\n"
6061 "default packet size. The actual limit is further reduced\n"
6062 "dependent on the target. Specify ``fixed'' to disable the\n"
6063 "further restriction and ``limit'' to enable that restriction\n",
6064 &remote_set_cmdlist);
6065 add_cmd ("memory-read-packet-size", no_class,
6066 set_memory_read_packet_size,
6067 "Set the maximum number of bytes per memory-read packet.\n"
6068 "Specify the number of bytes in a packet or 0 (zero) for the\n"
6069 "default packet size. The actual limit is further reduced\n"
6070 "dependent on the target. Specify ``fixed'' to disable the\n"
6071 "further restriction and ``limit'' to enable that restriction\n",
6072 &remote_set_cmdlist);
6073 add_cmd ("memory-write-packet-size", no_class,
6074 show_memory_write_packet_size,
6075 "Show the maximum number of bytes per memory-write packet.\n",
6076 &remote_show_cmdlist);
6077 add_cmd ("memory-read-packet-size", no_class,
6078 show_memory_read_packet_size,
6079 "Show the maximum number of bytes per memory-read packet.\n",
6080 &remote_show_cmdlist);
6081
6082 add_show_from_set
6083 (add_set_cmd ("remoteaddresssize", class_obscure,
6084 var_integer, (char *) &remote_address_size,
6085 "Set the maximum size of the address (in bits) \
6086 in a memory packet.\n",
6087 &setlist),
6088 &showlist);
6089
6090 add_packet_config_cmd (&remote_protocol_binary_download,
6091 "X", "binary-download",
6092 set_remote_protocol_binary_download_cmd,
6093 show_remote_protocol_binary_download_cmd,
6094 &remote_set_cmdlist, &remote_show_cmdlist,
6095 1);
6096 #if 0
6097 /* XXXX - should ``set remotebinarydownload'' be retained for
6098 compatibility. */
6099 add_show_from_set
6100 (add_set_cmd ("remotebinarydownload", no_class,
6101 var_boolean, (char *) &remote_binary_download,
6102 "Set binary downloads.\n", &setlist),
6103 &showlist);
6104 #endif
6105
6106 add_info ("remote-process", remote_info_process,
6107 "Query the remote system for process info.");
6108
6109 add_packet_config_cmd (&remote_protocol_qSymbol,
6110 "qSymbol", "symbol-lookup",
6111 set_remote_protocol_qSymbol_packet_cmd,
6112 show_remote_protocol_qSymbol_packet_cmd,
6113 &remote_set_cmdlist, &remote_show_cmdlist,
6114 0);
6115
6116 add_packet_config_cmd (&remote_protocol_e,
6117 "e", "step-over-range",
6118 set_remote_protocol_e_packet_cmd,
6119 show_remote_protocol_e_packet_cmd,
6120 &remote_set_cmdlist, &remote_show_cmdlist,
6121 0);
6122 /* Disable by default. The ``e'' packet has nasty interactions with
6123 the threading code - it relies on global state. */
6124 remote_protocol_e.detect = CMD_AUTO_BOOLEAN_FALSE;
6125 update_packet_config (&remote_protocol_e);
6126
6127 add_packet_config_cmd (&remote_protocol_E,
6128 "E", "step-over-range-w-signal",
6129 set_remote_protocol_E_packet_cmd,
6130 show_remote_protocol_E_packet_cmd,
6131 &remote_set_cmdlist, &remote_show_cmdlist,
6132 0);
6133 /* Disable by default. The ``e'' packet has nasty interactions with
6134 the threading code - it relies on global state. */
6135 remote_protocol_E.detect = CMD_AUTO_BOOLEAN_FALSE;
6136 update_packet_config (&remote_protocol_E);
6137
6138 add_packet_config_cmd (&remote_protocol_P,
6139 "P", "set-register",
6140 set_remote_protocol_P_packet_cmd,
6141 show_remote_protocol_P_packet_cmd,
6142 &remote_set_cmdlist, &remote_show_cmdlist,
6143 1);
6144
6145 add_packet_config_cmd (&remote_protocol_Z[Z_PACKET_SOFTWARE_BP],
6146 "Z0", "software-breakpoint",
6147 set_remote_protocol_Z_software_bp_packet_cmd,
6148 show_remote_protocol_Z_software_bp_packet_cmd,
6149 &remote_set_cmdlist, &remote_show_cmdlist,
6150 0);
6151
6152 add_packet_config_cmd (&remote_protocol_Z[Z_PACKET_HARDWARE_BP],
6153 "Z1", "hardware-breakpoint",
6154 set_remote_protocol_Z_hardware_bp_packet_cmd,
6155 show_remote_protocol_Z_hardware_bp_packet_cmd,
6156 &remote_set_cmdlist, &remote_show_cmdlist,
6157 0);
6158
6159 add_packet_config_cmd (&remote_protocol_Z[Z_PACKET_WRITE_WP],
6160 "Z2", "write-watchpoint",
6161 set_remote_protocol_Z_write_wp_packet_cmd,
6162 show_remote_protocol_Z_write_wp_packet_cmd,
6163 &remote_set_cmdlist, &remote_show_cmdlist,
6164 0);
6165
6166 add_packet_config_cmd (&remote_protocol_Z[Z_PACKET_READ_WP],
6167 "Z3", "read-watchpoint",
6168 set_remote_protocol_Z_read_wp_packet_cmd,
6169 show_remote_protocol_Z_read_wp_packet_cmd,
6170 &remote_set_cmdlist, &remote_show_cmdlist,
6171 0);
6172
6173 add_packet_config_cmd (&remote_protocol_Z[Z_PACKET_ACCESS_WP],
6174 "Z4", "access-watchpoint",
6175 set_remote_protocol_Z_access_wp_packet_cmd,
6176 show_remote_protocol_Z_access_wp_packet_cmd,
6177 &remote_set_cmdlist, &remote_show_cmdlist,
6178 0);
6179
6180 /* Keep the old ``set remote Z-packet ...'' working. */
6181 tmpcmd = add_set_auto_boolean_cmd ("Z-packet", class_obscure,
6182 &remote_Z_packet_detect,
6183 "\
6184 Set use of remote protocol `Z' packets", &remote_set_cmdlist);
6185 set_cmd_sfunc (tmpcmd, set_remote_protocol_Z_packet_cmd);
6186 add_cmd ("Z-packet", class_obscure, show_remote_protocol_Z_packet_cmd,
6187 "Show use of remote protocol `Z' packets ",
6188 &remote_show_cmdlist);
6189 }
This page took 0.185211 seconds and 4 git commands to generate.