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