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 = xrealloc (rs->buf, 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 /* Convert BUFFER, binary data at least LEN bytes long, into escaped
3693 binary data in OUT_BUF. Set *OUT_LEN to the length of the data
3694 encoded in OUT_BUF, and return the number of bytes in OUT_BUF
3695 (which may be more than *OUT_LEN due to escape characters). The
3696 total number of bytes in the output buffer will be at most
3697 OUT_MAXLEN. */
3698
3699 static int
3700 remote_escape_output (const gdb_byte *buffer, int len,
3701 gdb_byte *out_buf, int *out_len,
3702 int out_maxlen)
3703 {
3704 int input_index, output_index;
3705
3706 output_index = 0;
3707 for (input_index = 0; input_index < len; input_index++)
3708 {
3709 gdb_byte b = buffer[input_index];
3710
3711 if (b == '$' || b == '#' || b == '}')
3712 {
3713 /* These must be escaped. */
3714 if (output_index + 2 > out_maxlen)
3715 break;
3716 out_buf[output_index++] = '}';
3717 out_buf[output_index++] = b ^ 0x20;
3718 }
3719 else
3720 {
3721 if (output_index + 1 > out_maxlen)
3722 break;
3723 out_buf[output_index++] = b;
3724 }
3725 }
3726
3727 *out_len = input_index;
3728 return output_index;
3729 }
3730
3731 /* Determine whether the remote target supports binary downloading.
3732 This is accomplished by sending a no-op memory write of zero length
3733 to the target at the specified address. It does not suffice to send
3734 the whole packet, since many stubs strip the eighth bit and
3735 subsequently compute a wrong checksum, which causes real havoc with
3736 remote_write_bytes.
3737
3738 NOTE: This can still lose if the serial line is not eight-bit
3739 clean. In cases like this, the user should clear "remote
3740 X-packet". */
3741
3742 static void
3743 check_binary_download (CORE_ADDR addr)
3744 {
3745 struct remote_state *rs = get_remote_state ();
3746
3747 switch (remote_protocol_packets[PACKET_X].support)
3748 {
3749 case PACKET_DISABLE:
3750 break;
3751 case PACKET_ENABLE:
3752 break;
3753 case PACKET_SUPPORT_UNKNOWN:
3754 {
3755 char *buf = rs->buf;
3756 char *p;
3757
3758 p = buf;
3759 *p++ = 'X';
3760 p += hexnumstr (p, (ULONGEST) addr);
3761 *p++ = ',';
3762 p += hexnumstr (p, (ULONGEST) 0);
3763 *p++ = ':';
3764 *p = '\0';
3765
3766 putpkt_binary (buf, (int) (p - buf));
3767 getpkt (&rs->buf, &rs->buf_size, 0);
3768
3769 if (buf[0] == '\0')
3770 {
3771 if (remote_debug)
3772 fprintf_unfiltered (gdb_stdlog,
3773 "binary downloading NOT suppported by target\n");
3774 remote_protocol_packets[PACKET_X].support = PACKET_DISABLE;
3775 }
3776 else
3777 {
3778 if (remote_debug)
3779 fprintf_unfiltered (gdb_stdlog,
3780 "binary downloading suppported by target\n");
3781 remote_protocol_packets[PACKET_X].support = PACKET_ENABLE;
3782 }
3783 break;
3784 }
3785 }
3786 }
3787
3788 /* Write memory data directly to the remote machine.
3789 This does not inform the data cache; the data cache uses this.
3790 MEMADDR is the address in the remote memory space.
3791 MYADDR is the address of the buffer in our space.
3792 LEN is the number of bytes.
3793
3794 Returns number of bytes transferred, or 0 (setting errno) for
3795 error. Only transfer a single packet. */
3796
3797 int
3798 remote_write_bytes (CORE_ADDR memaddr, gdb_byte *myaddr, int len)
3799 {
3800 struct remote_state *rs = get_remote_state ();
3801 char *buf;
3802 char *p;
3803 char *plen;
3804 int plenlen;
3805 int todo;
3806 int nr_bytes;
3807 int payload_size;
3808 char *payload_start;
3809
3810 /* Verify that the target can support a binary download. */
3811 check_binary_download (memaddr);
3812
3813 payload_size = get_memory_write_packet_size ();
3814
3815 /* The packet buffer will be large enough for the payload;
3816 get_memory_packet_size ensures this. */
3817 buf = rs->buf;
3818
3819 /* Compute the size of the actual payload by subtracting out the
3820 packet header and footer overhead: "$M<memaddr>,<len>:...#nn".
3821 */
3822 payload_size -= strlen ("$M,:#NN");
3823 payload_size -= hexnumlen (memaddr);
3824
3825 /* Construct the packet header: "[MX]<memaddr>,<len>:". */
3826
3827 /* Append "[XM]". Compute a best guess of the number of bytes
3828 actually transfered. */
3829 p = buf;
3830 switch (remote_protocol_packets[PACKET_X].support)
3831 {
3832 case PACKET_ENABLE:
3833 *p++ = 'X';
3834 /* Best guess at number of bytes that will fit. */
3835 todo = min (len, payload_size);
3836 payload_size -= hexnumlen (todo);
3837 todo = min (todo, payload_size);
3838 break;
3839 case PACKET_DISABLE:
3840 *p++ = 'M';
3841 /* Num bytes that will fit. */
3842 todo = min (len, payload_size / 2);
3843 payload_size -= hexnumlen (todo);
3844 todo = min (todo, payload_size / 2);
3845 break;
3846 case PACKET_SUPPORT_UNKNOWN:
3847 internal_error (__FILE__, __LINE__,
3848 _("remote_write_bytes: bad internal state"));
3849 default:
3850 internal_error (__FILE__, __LINE__, _("bad switch"));
3851 }
3852 if (todo <= 0)
3853 internal_error (__FILE__, __LINE__,
3854 _("minumum packet size too small to write data"));
3855
3856 /* Append "<memaddr>". */
3857 memaddr = remote_address_masked (memaddr);
3858 p += hexnumstr (p, (ULONGEST) memaddr);
3859
3860 /* Append ",". */
3861 *p++ = ',';
3862
3863 /* Append <len>. Retain the location/size of <len>. It may need to
3864 be adjusted once the packet body has been created. */
3865 plen = p;
3866 plenlen = hexnumstr (p, (ULONGEST) todo);
3867 p += plenlen;
3868
3869 /* Append ":". */
3870 *p++ = ':';
3871 *p = '\0';
3872
3873 /* Append the packet body. */
3874 payload_start = p;
3875 switch (remote_protocol_packets[PACKET_X].support)
3876 {
3877 case PACKET_ENABLE:
3878 /* Binary mode. Send target system values byte by byte, in
3879 increasing byte addresses. Only escape certain critical
3880 characters. */
3881 p += remote_escape_output (myaddr, todo, p, &nr_bytes, payload_size);
3882 if (nr_bytes < todo)
3883 {
3884 /* Escape chars have filled up the buffer prematurely,
3885 and we have actually sent fewer bytes than planned.
3886 Fix-up the length field of the packet. Use the same
3887 number of characters as before. */
3888 plen += hexnumnstr (plen, (ULONGEST) nr_bytes, plenlen);
3889 *plen = ':'; /* overwrite \0 from hexnumnstr() */
3890 }
3891 break;
3892 case PACKET_DISABLE:
3893 /* Normal mode: Send target system values byte by byte, in
3894 increasing byte addresses. Each byte is encoded as a two hex
3895 value. */
3896 nr_bytes = bin2hex (myaddr, p, todo);
3897 p += 2 * nr_bytes;
3898 break;
3899 case PACKET_SUPPORT_UNKNOWN:
3900 internal_error (__FILE__, __LINE__,
3901 _("remote_write_bytes: bad internal state"));
3902 default:
3903 internal_error (__FILE__, __LINE__, _("bad switch"));
3904 }
3905
3906 putpkt_binary (buf, (int) (p - buf));
3907 getpkt (&rs->buf, &rs->buf_size, 0);
3908
3909 if (buf[0] == 'E')
3910 {
3911 /* There is no correspondance between what the remote protocol
3912 uses for errors and errno codes. We would like a cleaner way
3913 of representing errors (big enough to include errno codes,
3914 bfd_error codes, and others). But for now just return EIO. */
3915 errno = EIO;
3916 return 0;
3917 }
3918
3919 /* Return NR_BYTES, not TODO, in case escape chars caused us to send
3920 fewer bytes than we'd planned. */
3921 return nr_bytes;
3922 }
3923
3924 /* Read memory data directly from the remote machine.
3925 This does not use the data cache; the data cache uses this.
3926 MEMADDR is the address in the remote memory space.
3927 MYADDR is the address of the buffer in our space.
3928 LEN is the number of bytes.
3929
3930 Returns number of bytes transferred, or 0 for error. */
3931
3932 /* NOTE: cagney/1999-10-18: This function (and its siblings in other
3933 remote targets) shouldn't attempt to read the entire buffer.
3934 Instead it should read a single packet worth of data and then
3935 return the byte size of that packet to the caller. The caller (its
3936 caller and its callers caller ;-) already contains code for
3937 handling partial reads. */
3938
3939 int
3940 remote_read_bytes (CORE_ADDR memaddr, gdb_byte *myaddr, int len)
3941 {
3942 struct remote_state *rs = get_remote_state ();
3943 char *buf;
3944 int max_buf_size; /* Max size of packet output buffer. */
3945 int origlen;
3946
3947 max_buf_size = get_memory_read_packet_size ();
3948 /* The packet buffer will be large enough for the payload;
3949 get_memory_packet_size ensures this. */
3950 buf = rs->buf;
3951
3952 origlen = len;
3953 while (len > 0)
3954 {
3955 char *p;
3956 int todo;
3957 int i;
3958
3959 todo = min (len, max_buf_size / 2); /* num bytes that will fit */
3960
3961 /* construct "m"<memaddr>","<len>" */
3962 /* sprintf (buf, "m%lx,%x", (unsigned long) memaddr, todo); */
3963 memaddr = remote_address_masked (memaddr);
3964 p = buf;
3965 *p++ = 'm';
3966 p += hexnumstr (p, (ULONGEST) memaddr);
3967 *p++ = ',';
3968 p += hexnumstr (p, (ULONGEST) todo);
3969 *p = '\0';
3970
3971 putpkt (buf);
3972 getpkt (&rs->buf, &rs->buf_size, 0);
3973
3974 if (buf[0] == 'E'
3975 && isxdigit (buf[1]) && isxdigit (buf[2])
3976 && buf[3] == '\0')
3977 {
3978 /* There is no correspondance between what the remote
3979 protocol uses for errors and errno codes. We would like
3980 a cleaner way of representing errors (big enough to
3981 include errno codes, bfd_error codes, and others). But
3982 for now just return EIO. */
3983 errno = EIO;
3984 return 0;
3985 }
3986
3987 /* Reply describes memory byte by byte,
3988 each byte encoded as two hex characters. */
3989
3990 p = buf;
3991 if ((i = hex2bin (p, myaddr, todo)) < todo)
3992 {
3993 /* Reply is short. This means that we were able to read
3994 only part of what we wanted to. */
3995 return i + (origlen - len);
3996 }
3997 myaddr += todo;
3998 memaddr += todo;
3999 len -= todo;
4000 }
4001 return origlen;
4002 }
4003 \f
4004 /* Read or write LEN bytes from inferior memory at MEMADDR,
4005 transferring to or from debugger address BUFFER. Write to inferior
4006 if SHOULD_WRITE is nonzero. Returns length of data written or
4007 read; 0 for error. TARGET is unused. */
4008
4009 static int
4010 remote_xfer_memory (CORE_ADDR mem_addr, gdb_byte *buffer, int mem_len,
4011 int should_write, struct mem_attrib *attrib,
4012 struct target_ops *target)
4013 {
4014 CORE_ADDR targ_addr;
4015 int targ_len;
4016 int res;
4017
4018 /* Should this be the selected frame? */
4019 gdbarch_remote_translate_xfer_address (current_gdbarch,
4020 current_regcache,
4021 mem_addr, mem_len,
4022 &targ_addr, &targ_len);
4023 if (targ_len <= 0)
4024 return 0;
4025
4026 if (should_write)
4027 res = remote_write_bytes (targ_addr, buffer, targ_len);
4028 else
4029 res = remote_read_bytes (targ_addr, buffer, targ_len);
4030
4031 return res;
4032 }
4033
4034 static void
4035 remote_files_info (struct target_ops *ignore)
4036 {
4037 puts_filtered ("Debugging a target over a serial line.\n");
4038 }
4039 \f
4040 /* Stuff for dealing with the packets which are part of this protocol.
4041 See comment at top of file for details. */
4042
4043 /* Read a single character from the remote end, masking it down to 7
4044 bits. */
4045
4046 static int
4047 readchar (int timeout)
4048 {
4049 int ch;
4050
4051 ch = serial_readchar (remote_desc, timeout);
4052
4053 if (ch >= 0)
4054 return (ch & 0x7f);
4055
4056 switch ((enum serial_rc) ch)
4057 {
4058 case SERIAL_EOF:
4059 target_mourn_inferior ();
4060 error (_("Remote connection closed"));
4061 /* no return */
4062 case SERIAL_ERROR:
4063 perror_with_name (_("Remote communication error"));
4064 /* no return */
4065 case SERIAL_TIMEOUT:
4066 break;
4067 }
4068 return ch;
4069 }
4070
4071 /* Send the command in *BUF to the remote machine, and read the reply
4072 into *BUF. Report an error if we get an error reply. Resize
4073 *BUF using xrealloc if necessary to hold the result, and update
4074 *SIZEOF_BUF. */
4075
4076 static void
4077 remote_send (char **buf,
4078 long *sizeof_buf)
4079 {
4080 putpkt (*buf);
4081 getpkt (buf, sizeof_buf, 0);
4082
4083 if ((*buf)[0] == 'E')
4084 error (_("Remote failure reply: %s"), *buf);
4085 }
4086
4087 /* Display a null-terminated packet on stdout, for debugging, using C
4088 string notation. */
4089
4090 static void
4091 print_packet (char *buf)
4092 {
4093 puts_filtered ("\"");
4094 fputstr_filtered (buf, '"', gdb_stdout);
4095 puts_filtered ("\"");
4096 }
4097
4098 int
4099 putpkt (char *buf)
4100 {
4101 return putpkt_binary (buf, strlen (buf));
4102 }
4103
4104 /* Send a packet to the remote machine, with error checking. The data
4105 of the packet is in BUF. The string in BUF can be at most
4106 get_remote_packet_size () - 5 to account for the $, # and checksum,
4107 and for a possible /0 if we are debugging (remote_debug) and want
4108 to print the sent packet as a string. */
4109
4110 static int
4111 putpkt_binary (char *buf, int cnt)
4112 {
4113 int i;
4114 unsigned char csum = 0;
4115 char *buf2 = alloca (cnt + 6);
4116
4117 int ch;
4118 int tcount = 0;
4119 char *p;
4120
4121 /* Copy the packet into buffer BUF2, encapsulating it
4122 and giving it a checksum. */
4123
4124 p = buf2;
4125 *p++ = '$';
4126
4127 for (i = 0; i < cnt; i++)
4128 {
4129 csum += buf[i];
4130 *p++ = buf[i];
4131 }
4132 *p++ = '#';
4133 *p++ = tohex ((csum >> 4) & 0xf);
4134 *p++ = tohex (csum & 0xf);
4135
4136 /* Send it over and over until we get a positive ack. */
4137
4138 while (1)
4139 {
4140 int started_error_output = 0;
4141
4142 if (remote_debug)
4143 {
4144 *p = '\0';
4145 fprintf_unfiltered (gdb_stdlog, "Sending packet: ");
4146 fputstrn_unfiltered (buf2, p - buf2, 0, gdb_stdlog);
4147 fprintf_unfiltered (gdb_stdlog, "...");
4148 gdb_flush (gdb_stdlog);
4149 }
4150 if (serial_write (remote_desc, buf2, p - buf2))
4151 perror_with_name (_("putpkt: write failed"));
4152
4153 /* Read until either a timeout occurs (-2) or '+' is read. */
4154 while (1)
4155 {
4156 ch = readchar (remote_timeout);
4157
4158 if (remote_debug)
4159 {
4160 switch (ch)
4161 {
4162 case '+':
4163 case '-':
4164 case SERIAL_TIMEOUT:
4165 case '$':
4166 if (started_error_output)
4167 {
4168 putchar_unfiltered ('\n');
4169 started_error_output = 0;
4170 }
4171 }
4172 }
4173
4174 switch (ch)
4175 {
4176 case '+':
4177 if (remote_debug)
4178 fprintf_unfiltered (gdb_stdlog, "Ack\n");
4179 return 1;
4180 case '-':
4181 if (remote_debug)
4182 fprintf_unfiltered (gdb_stdlog, "Nak\n");
4183 case SERIAL_TIMEOUT:
4184 tcount++;
4185 if (tcount > 3)
4186 return 0;
4187 break; /* Retransmit buffer. */
4188 case '$':
4189 {
4190 if (remote_debug)
4191 fprintf_unfiltered (gdb_stdlog,
4192 "Packet instead of Ack, ignoring it\n");
4193 /* It's probably an old response sent because an ACK
4194 was lost. Gobble up the packet and ack it so it
4195 doesn't get retransmitted when we resend this
4196 packet. */
4197 skip_frame ();
4198 serial_write (remote_desc, "+", 1);
4199 continue; /* Now, go look for +. */
4200 }
4201 default:
4202 if (remote_debug)
4203 {
4204 if (!started_error_output)
4205 {
4206 started_error_output = 1;
4207 fprintf_unfiltered (gdb_stdlog, "putpkt: Junk: ");
4208 }
4209 fputc_unfiltered (ch & 0177, gdb_stdlog);
4210 }
4211 continue;
4212 }
4213 break; /* Here to retransmit. */
4214 }
4215
4216 #if 0
4217 /* This is wrong. If doing a long backtrace, the user should be
4218 able to get out next time we call QUIT, without anything as
4219 violent as interrupt_query. If we want to provide a way out of
4220 here without getting to the next QUIT, it should be based on
4221 hitting ^C twice as in remote_wait. */
4222 if (quit_flag)
4223 {
4224 quit_flag = 0;
4225 interrupt_query ();
4226 }
4227 #endif
4228 }
4229 }
4230
4231 /* Come here after finding the start of a frame when we expected an
4232 ack. Do our best to discard the rest of this packet. */
4233
4234 static void
4235 skip_frame (void)
4236 {
4237 int c;
4238
4239 while (1)
4240 {
4241 c = readchar (remote_timeout);
4242 switch (c)
4243 {
4244 case SERIAL_TIMEOUT:
4245 /* Nothing we can do. */
4246 return;
4247 case '#':
4248 /* Discard the two bytes of checksum and stop. */
4249 c = readchar (remote_timeout);
4250 if (c >= 0)
4251 c = readchar (remote_timeout);
4252
4253 return;
4254 case '*': /* Run length encoding. */
4255 /* Discard the repeat count. */
4256 c = readchar (remote_timeout);
4257 if (c < 0)
4258 return;
4259 break;
4260 default:
4261 /* A regular character. */
4262 break;
4263 }
4264 }
4265 }
4266
4267 /* Come here after finding the start of the frame. Collect the rest
4268 into *BUF, verifying the checksum, length, and handling run-length
4269 compression. NUL terminate the buffer. If there is not enough room,
4270 expand *BUF using xrealloc.
4271
4272 Returns -1 on error, number of characters in buffer (ignoring the
4273 trailing NULL) on success. (could be extended to return one of the
4274 SERIAL status indications). */
4275
4276 static long
4277 read_frame (char **buf_p,
4278 long *sizeof_buf)
4279 {
4280 unsigned char csum;
4281 long bc;
4282 int c;
4283 char *buf = *buf_p;
4284
4285 csum = 0;
4286 bc = 0;
4287
4288 while (1)
4289 {
4290 c = readchar (remote_timeout);
4291 switch (c)
4292 {
4293 case SERIAL_TIMEOUT:
4294 if (remote_debug)
4295 fputs_filtered ("Timeout in mid-packet, retrying\n", gdb_stdlog);
4296 return -1;
4297 case '$':
4298 if (remote_debug)
4299 fputs_filtered ("Saw new packet start in middle of old one\n",
4300 gdb_stdlog);
4301 return -1; /* Start a new packet, count retries. */
4302 case '#':
4303 {
4304 unsigned char pktcsum;
4305 int check_0 = 0;
4306 int check_1 = 0;
4307
4308 buf[bc] = '\0';
4309
4310 check_0 = readchar (remote_timeout);
4311 if (check_0 >= 0)
4312 check_1 = readchar (remote_timeout);
4313
4314 if (check_0 == SERIAL_TIMEOUT || check_1 == SERIAL_TIMEOUT)
4315 {
4316 if (remote_debug)
4317 fputs_filtered ("Timeout in checksum, retrying\n",
4318 gdb_stdlog);
4319 return -1;
4320 }
4321 else if (check_0 < 0 || check_1 < 0)
4322 {
4323 if (remote_debug)
4324 fputs_filtered ("Communication error in checksum\n",
4325 gdb_stdlog);
4326 return -1;
4327 }
4328
4329 pktcsum = (fromhex (check_0) << 4) | fromhex (check_1);
4330 if (csum == pktcsum)
4331 return bc;
4332
4333 if (remote_debug)
4334 {
4335 fprintf_filtered (gdb_stdlog,
4336 "Bad checksum, sentsum=0x%x, csum=0x%x, buf=",
4337 pktcsum, csum);
4338 fputs_filtered (buf, gdb_stdlog);
4339 fputs_filtered ("\n", gdb_stdlog);
4340 }
4341 /* Number of characters in buffer ignoring trailing
4342 NULL. */
4343 return -1;
4344 }
4345 case '*': /* Run length encoding. */
4346 {
4347 int repeat;
4348 csum += c;
4349
4350 c = readchar (remote_timeout);
4351 csum += c;
4352 repeat = c - ' ' + 3; /* Compute repeat count. */
4353
4354 /* The character before ``*'' is repeated. */
4355
4356 if (repeat > 0 && repeat <= 255 && bc > 0)
4357 {
4358 if (bc + repeat - 1 >= *sizeof_buf - 1)
4359 {
4360 /* Make some more room in the buffer. */
4361 *sizeof_buf += repeat;
4362 *buf_p = xrealloc (*buf_p, *sizeof_buf);
4363 buf = *buf_p;
4364 }
4365
4366 memset (&buf[bc], buf[bc - 1], repeat);
4367 bc += repeat;
4368 continue;
4369 }
4370
4371 buf[bc] = '\0';
4372 printf_filtered (_("Invalid run length encoding: %s\n"), buf);
4373 return -1;
4374 }
4375 default:
4376 if (bc >= *sizeof_buf - 1)
4377 {
4378 /* Make some more room in the buffer. */
4379 *sizeof_buf *= 2;
4380 *buf_p = xrealloc (*buf_p, *sizeof_buf);
4381 buf = *buf_p;
4382 }
4383
4384 buf[bc++] = c;
4385 csum += c;
4386 continue;
4387 }
4388 }
4389 }
4390
4391 /* Read a packet from the remote machine, with error checking, and
4392 store it in *BUF. Resize *BUF using xrealloc if necessary to hold
4393 the result, and update *SIZEOF_BUF. If FOREVER, wait forever
4394 rather than timing out; this is used (in synchronous mode) to wait
4395 for a target that is is executing user code to stop. */
4396 /* FIXME: ezannoni 2000-02-01 this wrapper is necessary so that we
4397 don't have to change all the calls to getpkt to deal with the
4398 return value, because at the moment I don't know what the right
4399 thing to do it for those. */
4400 void
4401 getpkt (char **buf,
4402 long *sizeof_buf,
4403 int forever)
4404 {
4405 int timed_out;
4406
4407 timed_out = getpkt_sane (buf, sizeof_buf, forever);
4408 }
4409
4410
4411 /* Read a packet from the remote machine, with error checking, and
4412 store it in *BUF. Resize *BUF using xrealloc if necessary to hold
4413 the result, and update *SIZEOF_BUF. If FOREVER, wait forever
4414 rather than timing out; this is used (in synchronous mode) to wait
4415 for a target that is is executing user code to stop. If FOREVER ==
4416 0, this function is allowed to time out gracefully and return an
4417 indication of this to the caller. */
4418 static int
4419 getpkt_sane (char **buf, long *sizeof_buf, int forever)
4420 {
4421 int c;
4422 int tries;
4423 int timeout;
4424 int val;
4425
4426 strcpy (*buf, "timeout");
4427
4428 if (forever)
4429 {
4430 timeout = watchdog > 0 ? watchdog : -1;
4431 }
4432
4433 else
4434 timeout = remote_timeout;
4435
4436 #define MAX_TRIES 3
4437
4438 for (tries = 1; tries <= MAX_TRIES; tries++)
4439 {
4440 /* This can loop forever if the remote side sends us characters
4441 continuously, but if it pauses, we'll get a zero from
4442 readchar because of timeout. Then we'll count that as a
4443 retry. */
4444
4445 /* Note that we will only wait forever prior to the start of a
4446 packet. After that, we expect characters to arrive at a
4447 brisk pace. They should show up within remote_timeout
4448 intervals. */
4449
4450 do
4451 {
4452 c = readchar (timeout);
4453
4454 if (c == SERIAL_TIMEOUT)
4455 {
4456 if (forever) /* Watchdog went off? Kill the target. */
4457 {
4458 QUIT;
4459 target_mourn_inferior ();
4460 error (_("Watchdog has expired. Target detached."));
4461 }
4462 if (remote_debug)
4463 fputs_filtered ("Timed out.\n", gdb_stdlog);
4464 goto retry;
4465 }
4466 }
4467 while (c != '$');
4468
4469 /* We've found the start of a packet, now collect the data. */
4470
4471 val = read_frame (buf, sizeof_buf);
4472
4473 if (val >= 0)
4474 {
4475 if (remote_debug)
4476 {
4477 fprintf_unfiltered (gdb_stdlog, "Packet received: ");
4478 fputstr_unfiltered (*buf, 0, gdb_stdlog);
4479 fprintf_unfiltered (gdb_stdlog, "\n");
4480 }
4481 serial_write (remote_desc, "+", 1);
4482 return 0;
4483 }
4484
4485 /* Try the whole thing again. */
4486 retry:
4487 serial_write (remote_desc, "-", 1);
4488 }
4489
4490 /* We have tried hard enough, and just can't receive the packet.
4491 Give up. */
4492
4493 printf_unfiltered (_("Ignoring packet error, continuing...\n"));
4494 serial_write (remote_desc, "+", 1);
4495 return 1;
4496 }
4497 \f
4498 static void
4499 remote_kill (void)
4500 {
4501 /* For some mysterious reason, wait_for_inferior calls kill instead of
4502 mourn after it gets TARGET_WAITKIND_SIGNALLED. Work around it. */
4503 if (kill_kludge)
4504 {
4505 kill_kludge = 0;
4506 target_mourn_inferior ();
4507 return;
4508 }
4509
4510 /* Use catch_errors so the user can quit from gdb even when we aren't on
4511 speaking terms with the remote system. */
4512 catch_errors ((catch_errors_ftype *) putpkt, "k", "", RETURN_MASK_ERROR);
4513
4514 /* Don't wait for it to die. I'm not really sure it matters whether
4515 we do or not. For the existing stubs, kill is a noop. */
4516 target_mourn_inferior ();
4517 }
4518
4519 /* Async version of remote_kill. */
4520 static void
4521 remote_async_kill (void)
4522 {
4523 /* Unregister the file descriptor from the event loop. */
4524 if (target_is_async_p ())
4525 serial_async (remote_desc, NULL, 0);
4526
4527 /* For some mysterious reason, wait_for_inferior calls kill instead of
4528 mourn after it gets TARGET_WAITKIND_SIGNALLED. Work around it. */
4529 if (kill_kludge)
4530 {
4531 kill_kludge = 0;
4532 target_mourn_inferior ();
4533 return;
4534 }
4535
4536 /* Use catch_errors so the user can quit from gdb even when we
4537 aren't on speaking terms with the remote system. */
4538 catch_errors ((catch_errors_ftype *) putpkt, "k", "", RETURN_MASK_ERROR);
4539
4540 /* Don't wait for it to die. I'm not really sure it matters whether
4541 we do or not. For the existing stubs, kill is a noop. */
4542 target_mourn_inferior ();
4543 }
4544
4545 static void
4546 remote_mourn (void)
4547 {
4548 remote_mourn_1 (&remote_ops);
4549 }
4550
4551 static void
4552 remote_async_mourn (void)
4553 {
4554 remote_mourn_1 (&remote_async_ops);
4555 }
4556
4557 static void
4558 extended_remote_mourn (void)
4559 {
4560 /* We do _not_ want to mourn the target like this; this will
4561 remove the extended remote target from the target stack,
4562 and the next time the user says "run" it'll fail.
4563
4564 FIXME: What is the right thing to do here? */
4565 #if 0
4566 remote_mourn_1 (&extended_remote_ops);
4567 #endif
4568 }
4569
4570 /* Worker function for remote_mourn. */
4571 static void
4572 remote_mourn_1 (struct target_ops *target)
4573 {
4574 unpush_target (target);
4575 generic_mourn_inferior ();
4576 }
4577
4578 /* In the extended protocol we want to be able to do things like
4579 "run" and have them basically work as expected. So we need
4580 a special create_inferior function.
4581
4582 FIXME: One day add support for changing the exec file
4583 we're debugging, arguments and an environment. */
4584
4585 static void
4586 extended_remote_create_inferior (char *exec_file, char *args,
4587 char **env, int from_tty)
4588 {
4589 /* Rip out the breakpoints; we'll reinsert them after restarting
4590 the remote server. */
4591 remove_breakpoints ();
4592
4593 /* Now restart the remote server. */
4594 extended_remote_restart ();
4595
4596 /* Now put the breakpoints back in. This way we're safe if the
4597 restart function works via a unix fork on the remote side. */
4598 insert_breakpoints ();
4599
4600 /* Clean up from the last time we were running. */
4601 clear_proceed_status ();
4602 }
4603
4604 /* Async version of extended_remote_create_inferior. */
4605 static void
4606 extended_remote_async_create_inferior (char *exec_file, char *args,
4607 char **env, int from_tty)
4608 {
4609 /* Rip out the breakpoints; we'll reinsert them after restarting
4610 the remote server. */
4611 remove_breakpoints ();
4612
4613 /* If running asynchronously, register the target file descriptor
4614 with the event loop. */
4615 if (target_can_async_p ())
4616 target_async (inferior_event_handler, 0);
4617
4618 /* Now restart the remote server. */
4619 extended_remote_restart ();
4620
4621 /* Now put the breakpoints back in. This way we're safe if the
4622 restart function works via a unix fork on the remote side. */
4623 insert_breakpoints ();
4624
4625 /* Clean up from the last time we were running. */
4626 clear_proceed_status ();
4627 }
4628 \f
4629
4630 /* On some machines, e.g. 68k, we may use a different breakpoint
4631 instruction than other targets; in those use
4632 DEPRECATED_REMOTE_BREAKPOINT instead of just BREAKPOINT_FROM_PC.
4633 Also, bi-endian targets may define
4634 DEPRECATED_LITTLE_REMOTE_BREAKPOINT and
4635 DEPRECATED_BIG_REMOTE_BREAKPOINT. If none of these are defined, we
4636 just call the standard routines that are in mem-break.c. */
4637
4638 /* NOTE: cagney/2003-06-08: This is silly. A remote and simulator
4639 target should use an identical BREAKPOINT_FROM_PC. As for native,
4640 the ARCH-OS-tdep.c code can override the default. */
4641
4642 #if defined (DEPRECATED_LITTLE_REMOTE_BREAKPOINT) && defined (DEPRECATED_BIG_REMOTE_BREAKPOINT) && !defined(DEPRECATED_REMOTE_BREAKPOINT)
4643 #define DEPRECATED_REMOTE_BREAKPOINT
4644 #endif
4645
4646 #ifdef DEPRECATED_REMOTE_BREAKPOINT
4647
4648 /* If the target isn't bi-endian, just pretend it is. */
4649 #if !defined (DEPRECATED_LITTLE_REMOTE_BREAKPOINT) && !defined (DEPRECATED_BIG_REMOTE_BREAKPOINT)
4650 #define DEPRECATED_LITTLE_REMOTE_BREAKPOINT DEPRECATED_REMOTE_BREAKPOINT
4651 #define DEPRECATED_BIG_REMOTE_BREAKPOINT DEPRECATED_REMOTE_BREAKPOINT
4652 #endif
4653
4654 static unsigned char big_break_insn[] = DEPRECATED_BIG_REMOTE_BREAKPOINT;
4655 static unsigned char little_break_insn[] = DEPRECATED_LITTLE_REMOTE_BREAKPOINT;
4656
4657 #endif /* DEPRECATED_REMOTE_BREAKPOINT */
4658
4659 /* Insert a breakpoint. On targets that have software breakpoint
4660 support, we ask the remote target to do the work; on targets
4661 which don't, we insert a traditional memory breakpoint. */
4662
4663 static int
4664 remote_insert_breakpoint (struct bp_target_info *bp_tgt)
4665 {
4666 CORE_ADDR addr = bp_tgt->placed_address;
4667 struct remote_state *rs = get_remote_state ();
4668 #ifdef DEPRECATED_REMOTE_BREAKPOINT
4669 int val;
4670 #endif
4671
4672 /* Try the "Z" s/w breakpoint packet if it is not already disabled.
4673 If it succeeds, then set the support to PACKET_ENABLE. If it
4674 fails, and the user has explicitly requested the Z support then
4675 report an error, otherwise, mark it disabled and go on. */
4676
4677 if (remote_protocol_packets[PACKET_Z0].support != PACKET_DISABLE)
4678 {
4679 char *p = rs->buf;
4680
4681 *(p++) = 'Z';
4682 *(p++) = '0';
4683 *(p++) = ',';
4684 BREAKPOINT_FROM_PC (&bp_tgt->placed_address, &bp_tgt->placed_size);
4685 addr = (ULONGEST) remote_address_masked (bp_tgt->placed_address);
4686 p += hexnumstr (p, addr);
4687 sprintf (p, ",%d", bp_tgt->placed_size);
4688
4689 putpkt (rs->buf);
4690 getpkt (&rs->buf, &rs->buf_size, 0);
4691
4692 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0]))
4693 {
4694 case PACKET_ERROR:
4695 return -1;
4696 case PACKET_OK:
4697 return 0;
4698 case PACKET_UNKNOWN:
4699 break;
4700 }
4701 }
4702
4703 #ifdef DEPRECATED_REMOTE_BREAKPOINT
4704 bp_tgt->placed_size = bp_tgt->shadow_len = sizeof big_break_insn;
4705 val = target_read_memory (addr, bp_tgt->shadow_contents, bp_tgt->shadow_len);
4706
4707 if (val == 0)
4708 {
4709 if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG)
4710 val = target_write_memory (addr, (char *) big_break_insn,
4711 sizeof big_break_insn);
4712 else
4713 val = target_write_memory (addr, (char *) little_break_insn,
4714 sizeof little_break_insn);
4715 }
4716
4717 return val;
4718 #else
4719 return memory_insert_breakpoint (bp_tgt);
4720 #endif /* DEPRECATED_REMOTE_BREAKPOINT */
4721 }
4722
4723 static int
4724 remote_remove_breakpoint (struct bp_target_info *bp_tgt)
4725 {
4726 CORE_ADDR addr = bp_tgt->placed_address;
4727 struct remote_state *rs = get_remote_state ();
4728 int bp_size;
4729
4730 if (remote_protocol_packets[PACKET_Z0].support != PACKET_DISABLE)
4731 {
4732 char *p = rs->buf;
4733
4734 *(p++) = 'z';
4735 *(p++) = '0';
4736 *(p++) = ',';
4737
4738 addr = (ULONGEST) remote_address_masked (bp_tgt->placed_address);
4739 p += hexnumstr (p, addr);
4740 sprintf (p, ",%d", bp_tgt->placed_size);
4741
4742 putpkt (rs->buf);
4743 getpkt (&rs->buf, &rs->buf_size, 0);
4744
4745 return (rs->buf[0] == 'E');
4746 }
4747
4748 #ifdef DEPRECATED_REMOTE_BREAKPOINT
4749 return target_write_memory (bp_tgt->placed_address, bp_tgt->shadow_contents,
4750 bp_tgt->shadow_len);
4751 #else
4752 return memory_remove_breakpoint (bp_tgt);
4753 #endif /* DEPRECATED_REMOTE_BREAKPOINT */
4754 }
4755
4756 static int
4757 watchpoint_to_Z_packet (int type)
4758 {
4759 switch (type)
4760 {
4761 case hw_write:
4762 return Z_PACKET_WRITE_WP;
4763 break;
4764 case hw_read:
4765 return Z_PACKET_READ_WP;
4766 break;
4767 case hw_access:
4768 return Z_PACKET_ACCESS_WP;
4769 break;
4770 default:
4771 internal_error (__FILE__, __LINE__,
4772 _("hw_bp_to_z: bad watchpoint type %d"), type);
4773 }
4774 }
4775
4776 static int
4777 remote_insert_watchpoint (CORE_ADDR addr, int len, int type)
4778 {
4779 struct remote_state *rs = get_remote_state ();
4780 char *p;
4781 enum Z_packet_type packet = watchpoint_to_Z_packet (type);
4782
4783 if (remote_protocol_packets[PACKET_Z0 + packet].support == PACKET_DISABLE)
4784 return -1;
4785
4786 sprintf (rs->buf, "Z%x,", packet);
4787 p = strchr (rs->buf, '\0');
4788 addr = remote_address_masked (addr);
4789 p += hexnumstr (p, (ULONGEST) addr);
4790 sprintf (p, ",%x", len);
4791
4792 putpkt (rs->buf);
4793 getpkt (&rs->buf, &rs->buf_size, 0);
4794
4795 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0 + packet]))
4796 {
4797 case PACKET_ERROR:
4798 case PACKET_UNKNOWN:
4799 return -1;
4800 case PACKET_OK:
4801 return 0;
4802 }
4803 internal_error (__FILE__, __LINE__,
4804 _("remote_insert_watchpoint: reached end of function"));
4805 }
4806
4807
4808 static int
4809 remote_remove_watchpoint (CORE_ADDR addr, int len, int type)
4810 {
4811 struct remote_state *rs = get_remote_state ();
4812 char *p;
4813 enum Z_packet_type packet = watchpoint_to_Z_packet (type);
4814
4815 if (remote_protocol_packets[PACKET_Z0 + packet].support == PACKET_DISABLE)
4816 return -1;
4817
4818 sprintf (rs->buf, "z%x,", packet);
4819 p = strchr (rs->buf, '\0');
4820 addr = remote_address_masked (addr);
4821 p += hexnumstr (p, (ULONGEST) addr);
4822 sprintf (p, ",%x", len);
4823 putpkt (rs->buf);
4824 getpkt (&rs->buf, &rs->buf_size, 0);
4825
4826 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0 + packet]))
4827 {
4828 case PACKET_ERROR:
4829 case PACKET_UNKNOWN:
4830 return -1;
4831 case PACKET_OK:
4832 return 0;
4833 }
4834 internal_error (__FILE__, __LINE__,
4835 _("remote_remove_watchpoint: reached end of function"));
4836 }
4837
4838
4839 int remote_hw_watchpoint_limit = -1;
4840 int remote_hw_breakpoint_limit = -1;
4841
4842 static int
4843 remote_check_watch_resources (int type, int cnt, int ot)
4844 {
4845 if (type == bp_hardware_breakpoint)
4846 {
4847 if (remote_hw_breakpoint_limit == 0)
4848 return 0;
4849 else if (remote_hw_breakpoint_limit < 0)
4850 return 1;
4851 else if (cnt <= remote_hw_breakpoint_limit)
4852 return 1;
4853 }
4854 else
4855 {
4856 if (remote_hw_watchpoint_limit == 0)
4857 return 0;
4858 else if (remote_hw_watchpoint_limit < 0)
4859 return 1;
4860 else if (ot)
4861 return -1;
4862 else if (cnt <= remote_hw_watchpoint_limit)
4863 return 1;
4864 }
4865 return -1;
4866 }
4867
4868 static int
4869 remote_stopped_by_watchpoint (void)
4870 {
4871 return remote_stopped_by_watchpoint_p;
4872 }
4873
4874 extern int stepped_after_stopped_by_watchpoint;
4875
4876 static int
4877 remote_stopped_data_address (struct target_ops *target, CORE_ADDR *addr_p)
4878 {
4879 int rc = 0;
4880 if (remote_stopped_by_watchpoint ()
4881 || stepped_after_stopped_by_watchpoint)
4882 {
4883 *addr_p = remote_watch_data_address;
4884 rc = 1;
4885 }
4886
4887 return rc;
4888 }
4889
4890
4891 static int
4892 remote_insert_hw_breakpoint (struct bp_target_info *bp_tgt)
4893 {
4894 CORE_ADDR addr;
4895 struct remote_state *rs = get_remote_state ();
4896 char *p = rs->buf;
4897
4898 /* The length field should be set to the size of a breakpoint
4899 instruction, even though we aren't inserting one ourselves. */
4900
4901 BREAKPOINT_FROM_PC (&bp_tgt->placed_address, &bp_tgt->placed_size);
4902
4903 if (remote_protocol_packets[PACKET_Z1].support == PACKET_DISABLE)
4904 return -1;
4905
4906 *(p++) = 'Z';
4907 *(p++) = '1';
4908 *(p++) = ',';
4909
4910 addr = remote_address_masked (bp_tgt->placed_address);
4911 p += hexnumstr (p, (ULONGEST) addr);
4912 sprintf (p, ",%x", bp_tgt->placed_size);
4913
4914 putpkt (rs->buf);
4915 getpkt (&rs->buf, &rs->buf_size, 0);
4916
4917 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z1]))
4918 {
4919 case PACKET_ERROR:
4920 case PACKET_UNKNOWN:
4921 return -1;
4922 case PACKET_OK:
4923 return 0;
4924 }
4925 internal_error (__FILE__, __LINE__,
4926 _("remote_insert_hw_breakpoint: reached end of function"));
4927 }
4928
4929
4930 static int
4931 remote_remove_hw_breakpoint (struct bp_target_info *bp_tgt)
4932 {
4933 CORE_ADDR addr;
4934 struct remote_state *rs = get_remote_state ();
4935 char *p = rs->buf;
4936
4937 if (remote_protocol_packets[PACKET_Z1].support == PACKET_DISABLE)
4938 return -1;
4939
4940 *(p++) = 'z';
4941 *(p++) = '1';
4942 *(p++) = ',';
4943
4944 addr = remote_address_masked (bp_tgt->placed_address);
4945 p += hexnumstr (p, (ULONGEST) addr);
4946 sprintf (p, ",%x", bp_tgt->placed_size);
4947
4948 putpkt (rs->buf);
4949 getpkt (&rs->buf, &rs->buf_size, 0);
4950
4951 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z1]))
4952 {
4953 case PACKET_ERROR:
4954 case PACKET_UNKNOWN:
4955 return -1;
4956 case PACKET_OK:
4957 return 0;
4958 }
4959 internal_error (__FILE__, __LINE__,
4960 _("remote_remove_hw_breakpoint: reached end of function"));
4961 }
4962
4963 /* Some targets are only capable of doing downloads, and afterwards
4964 they switch to the remote serial protocol. This function provides
4965 a clean way to get from the download target to the remote target.
4966 It's basically just a wrapper so that we don't have to expose any
4967 of the internal workings of remote.c.
4968
4969 Prior to calling this routine, you should shutdown the current
4970 target code, else you will get the "A program is being debugged
4971 already..." message. Usually a call to pop_target() suffices. */
4972
4973 void
4974 push_remote_target (char *name, int from_tty)
4975 {
4976 printf_filtered (_("Switching to remote protocol\n"));
4977 remote_open (name, from_tty);
4978 }
4979
4980 /* Table used by the crc32 function to calcuate the checksum. */
4981
4982 static unsigned long crc32_table[256] =
4983 {0, 0};
4984
4985 static unsigned long
4986 crc32 (unsigned char *buf, int len, unsigned int crc)
4987 {
4988 if (!crc32_table[1])
4989 {
4990 /* Initialize the CRC table and the decoding table. */
4991 int i, j;
4992 unsigned int c;
4993
4994 for (i = 0; i < 256; i++)
4995 {
4996 for (c = i << 24, j = 8; j > 0; --j)
4997 c = c & 0x80000000 ? (c << 1) ^ 0x04c11db7 : (c << 1);
4998 crc32_table[i] = c;
4999 }
5000 }
5001
5002 while (len--)
5003 {
5004 crc = (crc << 8) ^ crc32_table[((crc >> 24) ^ *buf) & 255];
5005 buf++;
5006 }
5007 return crc;
5008 }
5009
5010 /* compare-sections command
5011
5012 With no arguments, compares each loadable section in the exec bfd
5013 with the same memory range on the target, and reports mismatches.
5014 Useful for verifying the image on the target against the exec file.
5015 Depends on the target understanding the new "qCRC:" request. */
5016
5017 /* FIXME: cagney/1999-10-26: This command should be broken down into a
5018 target method (target verify memory) and generic version of the
5019 actual command. This will allow other high-level code (especially
5020 generic_load()) to make use of this target functionality. */
5021
5022 static void
5023 compare_sections_command (char *args, int from_tty)
5024 {
5025 struct remote_state *rs = get_remote_state ();
5026 asection *s;
5027 unsigned long host_crc, target_crc;
5028 extern bfd *exec_bfd;
5029 struct cleanup *old_chain;
5030 char *tmp;
5031 char *sectdata;
5032 const char *sectname;
5033 bfd_size_type size;
5034 bfd_vma lma;
5035 int matched = 0;
5036 int mismatched = 0;
5037
5038 if (!exec_bfd)
5039 error (_("command cannot be used without an exec file"));
5040 if (!current_target.to_shortname ||
5041 strcmp (current_target.to_shortname, "remote") != 0)
5042 error (_("command can only be used with remote target"));
5043
5044 for (s = exec_bfd->sections; s; s = s->next)
5045 {
5046 if (!(s->flags & SEC_LOAD))
5047 continue; /* skip non-loadable section */
5048
5049 size = bfd_get_section_size (s);
5050 if (size == 0)
5051 continue; /* skip zero-length section */
5052
5053 sectname = bfd_get_section_name (exec_bfd, s);
5054 if (args && strcmp (args, sectname) != 0)
5055 continue; /* not the section selected by user */
5056
5057 matched = 1; /* do this section */
5058 lma = s->lma;
5059 /* FIXME: assumes lma can fit into long. */
5060 xsnprintf (rs->buf, get_remote_packet_size (), "qCRC:%lx,%lx",
5061 (long) lma, (long) size);
5062 putpkt (rs->buf);
5063
5064 /* Be clever; compute the host_crc before waiting for target
5065 reply. */
5066 sectdata = xmalloc (size);
5067 old_chain = make_cleanup (xfree, sectdata);
5068 bfd_get_section_contents (exec_bfd, s, sectdata, 0, size);
5069 host_crc = crc32 ((unsigned char *) sectdata, size, 0xffffffff);
5070
5071 getpkt (&rs->buf, &rs->buf_size, 0);
5072 if (rs->buf[0] == 'E')
5073 error (_("target memory fault, section %s, range 0x%s -- 0x%s"),
5074 sectname, paddr (lma), paddr (lma + size));
5075 if (rs->buf[0] != 'C')
5076 error (_("remote target does not support this operation"));
5077
5078 for (target_crc = 0, tmp = &rs->buf[1]; *tmp; tmp++)
5079 target_crc = target_crc * 16 + fromhex (*tmp);
5080
5081 printf_filtered ("Section %s, range 0x%s -- 0x%s: ",
5082 sectname, paddr (lma), paddr (lma + size));
5083 if (host_crc == target_crc)
5084 printf_filtered ("matched.\n");
5085 else
5086 {
5087 printf_filtered ("MIS-MATCHED!\n");
5088 mismatched++;
5089 }
5090
5091 do_cleanups (old_chain);
5092 }
5093 if (mismatched > 0)
5094 warning (_("One or more sections of the remote executable does not match\n\
5095 the loaded file\n"));
5096 if (args && !matched)
5097 printf_filtered (_("No loaded section named '%s'.\n"), args);
5098 }
5099
5100 static LONGEST
5101 remote_xfer_partial (struct target_ops *ops, enum target_object object,
5102 const char *annex, gdb_byte *readbuf,
5103 const gdb_byte *writebuf, ULONGEST offset, LONGEST len)
5104 {
5105 struct remote_state *rs = get_remote_state ();
5106 int i;
5107 char *p2;
5108 char query_type;
5109
5110 /* Handle memory using remote_xfer_memory. */
5111 if (object == TARGET_OBJECT_MEMORY)
5112 {
5113 int xfered;
5114 errno = 0;
5115
5116 if (writebuf != NULL)
5117 {
5118 void *buffer = xmalloc (len);
5119 struct cleanup *cleanup = make_cleanup (xfree, buffer);
5120 memcpy (buffer, writebuf, len);
5121 xfered = remote_xfer_memory (offset, buffer, len, 1, NULL, ops);
5122 do_cleanups (cleanup);
5123 }
5124 else
5125 xfered = remote_xfer_memory (offset, readbuf, len, 0, NULL, ops);
5126
5127 if (xfered > 0)
5128 return xfered;
5129 else if (xfered == 0 && errno == 0)
5130 return 0;
5131 else
5132 return -1;
5133 }
5134
5135 /* Only handle reads. */
5136 if (writebuf != NULL || readbuf == NULL)
5137 return -1;
5138
5139 /* Map pre-existing objects onto letters. DO NOT do this for new
5140 objects!!! Instead specify new query packets. */
5141 switch (object)
5142 {
5143 case TARGET_OBJECT_AVR:
5144 query_type = 'R';
5145 break;
5146
5147 case TARGET_OBJECT_AUXV:
5148 if (remote_protocol_packets[PACKET_qPart_auxv].support != PACKET_DISABLE)
5149 {
5150 unsigned int total = 0;
5151 while (len > 0)
5152 {
5153 LONGEST n = min ((get_remote_packet_size () - 2) / 2, len);
5154 snprintf (rs->buf, get_remote_packet_size (),
5155 "qPart:auxv:read::%s,%s",
5156 phex_nz (offset, sizeof offset),
5157 phex_nz (n, sizeof n));
5158 i = putpkt (rs->buf);
5159 if (i < 0)
5160 return total > 0 ? total : i;
5161 rs->buf[0] = '\0';
5162 getpkt (&rs->buf, &rs->buf_size, 0);
5163 if (packet_ok (rs->buf, &remote_protocol_packets[PACKET_qPart_auxv])
5164 != PACKET_OK)
5165 return total > 0 ? total : -1;
5166 if (strcmp (rs->buf, "OK") == 0)
5167 break; /* Got EOF indicator. */
5168 /* Got some data. */
5169 i = hex2bin (rs->buf, readbuf, len);
5170 if (i > 0)
5171 {
5172 readbuf = (void *) ((char *) readbuf + i);
5173 offset += i;
5174 len -= i;
5175 total += i;
5176 }
5177 }
5178 return total;
5179 }
5180 return -1;
5181
5182 default:
5183 return -1;
5184 }
5185
5186 /* Note: a zero OFFSET and LEN can be used to query the minimum
5187 buffer size. */
5188 if (offset == 0 && len == 0)
5189 return (get_remote_packet_size ());
5190 /* Minimum outbuf size is get_remote_packet_size (). If LEN is not
5191 large enough let the caller deal with it. */
5192 if (len < get_remote_packet_size ())
5193 return -1;
5194 len = get_remote_packet_size ();
5195
5196 /* Except for querying the minimum buffer size, target must be open. */
5197 if (!remote_desc)
5198 error (_("remote query is only available after target open"));
5199
5200 gdb_assert (annex != NULL);
5201 gdb_assert (readbuf != NULL);
5202
5203 p2 = rs->buf;
5204 *p2++ = 'q';
5205 *p2++ = query_type;
5206
5207 /* We used one buffer char for the remote protocol q command and
5208 another for the query type. As the remote protocol encapsulation
5209 uses 4 chars plus one extra in case we are debugging
5210 (remote_debug), we have PBUFZIZ - 7 left to pack the query
5211 string. */
5212 i = 0;
5213 while (annex[i] && (i < (get_remote_packet_size () - 8)))
5214 {
5215 /* Bad caller may have sent forbidden characters. */
5216 gdb_assert (isprint (annex[i]) && annex[i] != '$' && annex[i] != '#');
5217 *p2++ = annex[i];
5218 i++;
5219 }
5220 *p2 = '\0';
5221 gdb_assert (annex[i] == '\0');
5222
5223 i = putpkt (rs->buf);
5224 if (i < 0)
5225 return i;
5226
5227 getpkt (&rs->buf, &rs->buf_size, 0);
5228 strcpy ((char *) readbuf, rs->buf);
5229
5230 return strlen ((char *) readbuf);
5231 }
5232
5233 static void
5234 remote_rcmd (char *command,
5235 struct ui_file *outbuf)
5236 {
5237 struct remote_state *rs = get_remote_state ();
5238 char *buf = rs->buf;
5239 char *p = buf;
5240
5241 if (!remote_desc)
5242 error (_("remote rcmd is only available after target open"));
5243
5244 /* Send a NULL command across as an empty command. */
5245 if (command == NULL)
5246 command = "";
5247
5248 /* The query prefix. */
5249 strcpy (buf, "qRcmd,");
5250 p = strchr (buf, '\0');
5251
5252 if ((strlen (buf) + strlen (command) * 2 + 8/*misc*/) > get_remote_packet_size ())
5253 error (_("\"monitor\" command ``%s'' is too long."), command);
5254
5255 /* Encode the actual command. */
5256 bin2hex ((gdb_byte *) command, p, 0);
5257
5258 if (putpkt (rs->buf) < 0)
5259 error (_("Communication problem with target."));
5260
5261 /* get/display the response */
5262 while (1)
5263 {
5264 /* XXX - see also tracepoint.c:remote_get_noisy_reply(). */
5265 buf[0] = '\0';
5266 getpkt (&rs->buf, &rs->buf_size, 0);
5267 if (buf[0] == '\0')
5268 error (_("Target does not support this command."));
5269 if (buf[0] == 'O' && buf[1] != 'K')
5270 {
5271 remote_console_output (buf + 1); /* 'O' message from stub. */
5272 continue;
5273 }
5274 if (strcmp (buf, "OK") == 0)
5275 break;
5276 if (strlen (buf) == 3 && buf[0] == 'E'
5277 && isdigit (buf[1]) && isdigit (buf[2]))
5278 {
5279 error (_("Protocol error with Rcmd"));
5280 }
5281 for (p = buf; p[0] != '\0' && p[1] != '\0'; p += 2)
5282 {
5283 char c = (fromhex (p[0]) << 4) + fromhex (p[1]);
5284 fputc_unfiltered (c, outbuf);
5285 }
5286 break;
5287 }
5288 }
5289
5290 static void
5291 packet_command (char *args, int from_tty)
5292 {
5293 struct remote_state *rs = get_remote_state ();
5294
5295 if (!remote_desc)
5296 error (_("command can only be used with remote target"));
5297
5298 if (!args)
5299 error (_("remote-packet command requires packet text as argument"));
5300
5301 puts_filtered ("sending: ");
5302 print_packet (args);
5303 puts_filtered ("\n");
5304 putpkt (args);
5305
5306 getpkt (&rs->buf, &rs->buf_size, 0);
5307 puts_filtered ("received: ");
5308 print_packet (rs->buf);
5309 puts_filtered ("\n");
5310 }
5311
5312 #if 0
5313 /* --------- UNIT_TEST for THREAD oriented PACKETS ------------------- */
5314
5315 static void display_thread_info (struct gdb_ext_thread_info *info);
5316
5317 static void threadset_test_cmd (char *cmd, int tty);
5318
5319 static void threadalive_test (char *cmd, int tty);
5320
5321 static void threadlist_test_cmd (char *cmd, int tty);
5322
5323 int get_and_display_threadinfo (threadref *ref);
5324
5325 static void threadinfo_test_cmd (char *cmd, int tty);
5326
5327 static int thread_display_step (threadref *ref, void *context);
5328
5329 static void threadlist_update_test_cmd (char *cmd, int tty);
5330
5331 static void init_remote_threadtests (void);
5332
5333 #define SAMPLE_THREAD 0x05060708 /* Truncated 64 bit threadid. */
5334
5335 static void
5336 threadset_test_cmd (char *cmd, int tty)
5337 {
5338 int sample_thread = SAMPLE_THREAD;
5339
5340 printf_filtered (_("Remote threadset test\n"));
5341 set_thread (sample_thread, 1);
5342 }
5343
5344
5345 static void
5346 threadalive_test (char *cmd, int tty)
5347 {
5348 int sample_thread = SAMPLE_THREAD;
5349
5350 if (remote_thread_alive (pid_to_ptid (sample_thread)))
5351 printf_filtered ("PASS: Thread alive test\n");
5352 else
5353 printf_filtered ("FAIL: Thread alive test\n");
5354 }
5355
5356 void output_threadid (char *title, threadref *ref);
5357
5358 void
5359 output_threadid (char *title, threadref *ref)
5360 {
5361 char hexid[20];
5362
5363 pack_threadid (&hexid[0], ref); /* Convert threead id into hex. */
5364 hexid[16] = 0;
5365 printf_filtered ("%s %s\n", title, (&hexid[0]));
5366 }
5367
5368 static void
5369 threadlist_test_cmd (char *cmd, int tty)
5370 {
5371 int startflag = 1;
5372 threadref nextthread;
5373 int done, result_count;
5374 threadref threadlist[3];
5375
5376 printf_filtered ("Remote Threadlist test\n");
5377 if (!remote_get_threadlist (startflag, &nextthread, 3, &done,
5378 &result_count, &threadlist[0]))
5379 printf_filtered ("FAIL: threadlist test\n");
5380 else
5381 {
5382 threadref *scan = threadlist;
5383 threadref *limit = scan + result_count;
5384
5385 while (scan < limit)
5386 output_threadid (" thread ", scan++);
5387 }
5388 }
5389
5390 void
5391 display_thread_info (struct gdb_ext_thread_info *info)
5392 {
5393 output_threadid ("Threadid: ", &info->threadid);
5394 printf_filtered ("Name: %s\n ", info->shortname);
5395 printf_filtered ("State: %s\n", info->display);
5396 printf_filtered ("other: %s\n\n", info->more_display);
5397 }
5398
5399 int
5400 get_and_display_threadinfo (threadref *ref)
5401 {
5402 int result;
5403 int set;
5404 struct gdb_ext_thread_info threadinfo;
5405
5406 set = TAG_THREADID | TAG_EXISTS | TAG_THREADNAME
5407 | TAG_MOREDISPLAY | TAG_DISPLAY;
5408 if (0 != (result = remote_get_threadinfo (ref, set, &threadinfo)))
5409 display_thread_info (&threadinfo);
5410 return result;
5411 }
5412
5413 static void
5414 threadinfo_test_cmd (char *cmd, int tty)
5415 {
5416 int athread = SAMPLE_THREAD;
5417 threadref thread;
5418 int set;
5419
5420 int_to_threadref (&thread, athread);
5421 printf_filtered ("Remote Threadinfo test\n");
5422 if (!get_and_display_threadinfo (&thread))
5423 printf_filtered ("FAIL cannot get thread info\n");
5424 }
5425
5426 static int
5427 thread_display_step (threadref *ref, void *context)
5428 {
5429 /* output_threadid(" threadstep ",ref); *//* simple test */
5430 return get_and_display_threadinfo (ref);
5431 }
5432
5433 static void
5434 threadlist_update_test_cmd (char *cmd, int tty)
5435 {
5436 printf_filtered ("Remote Threadlist update test\n");
5437 remote_threadlist_iterator (thread_display_step, 0, CRAZY_MAX_THREADS);
5438 }
5439
5440 static void
5441 init_remote_threadtests (void)
5442 {
5443 add_com ("tlist", class_obscure, threadlist_test_cmd, _("\
5444 Fetch and print the remote list of thread identifiers, one pkt only"));
5445 add_com ("tinfo", class_obscure, threadinfo_test_cmd,
5446 _("Fetch and display info about one thread"));
5447 add_com ("tset", class_obscure, threadset_test_cmd,
5448 _("Test setting to a different thread"));
5449 add_com ("tupd", class_obscure, threadlist_update_test_cmd,
5450 _("Iterate through updating all remote thread info"));
5451 add_com ("talive", class_obscure, threadalive_test,
5452 _(" Remote thread alive test "));
5453 }
5454
5455 #endif /* 0 */
5456
5457 /* Convert a thread ID to a string. Returns the string in a static
5458 buffer. */
5459
5460 static char *
5461 remote_pid_to_str (ptid_t ptid)
5462 {
5463 static char buf[32];
5464
5465 xsnprintf (buf, sizeof buf, "thread %d", ptid_get_pid (ptid));
5466 return buf;
5467 }
5468
5469 /* Get the address of the thread local variable in OBJFILE which is
5470 stored at OFFSET within the thread local storage for thread PTID. */
5471
5472 static CORE_ADDR
5473 remote_get_thread_local_address (ptid_t ptid, CORE_ADDR lm, CORE_ADDR offset)
5474 {
5475 if (remote_protocol_packets[PACKET_qGetTLSAddr].support != PACKET_DISABLE)
5476 {
5477 struct remote_state *rs = get_remote_state ();
5478 char *p = rs->buf;
5479 enum packet_result result;
5480
5481 strcpy (p, "qGetTLSAddr:");
5482 p += strlen (p);
5483 p += hexnumstr (p, PIDGET (ptid));
5484 *p++ = ',';
5485 p += hexnumstr (p, offset);
5486 *p++ = ',';
5487 p += hexnumstr (p, lm);
5488 *p++ = '\0';
5489
5490 putpkt (rs->buf);
5491 getpkt (&rs->buf, &rs->buf_size, 0);
5492 result = packet_ok (rs->buf, &remote_protocol_packets[PACKET_qGetTLSAddr]);
5493 if (result == PACKET_OK)
5494 {
5495 ULONGEST result;
5496
5497 unpack_varlen_hex (rs->buf, &result);
5498 return result;
5499 }
5500 else if (result == PACKET_UNKNOWN)
5501 throw_error (TLS_GENERIC_ERROR,
5502 _("Remote target doesn't support qGetTLSAddr packet"));
5503 else
5504 throw_error (TLS_GENERIC_ERROR,
5505 _("Remote target failed to process qGetTLSAddr request"));
5506 }
5507 else
5508 throw_error (TLS_GENERIC_ERROR,
5509 _("TLS not supported or disabled on this target"));
5510 /* Not reached. */
5511 return 0;
5512 }
5513
5514 static void
5515 init_remote_ops (void)
5516 {
5517 remote_ops.to_shortname = "remote";
5518 remote_ops.to_longname = "Remote serial target in gdb-specific protocol";
5519 remote_ops.to_doc =
5520 "Use a remote computer via a serial line, using a gdb-specific protocol.\n\
5521 Specify the serial device it is connected to\n\
5522 (e.g. /dev/ttyS0, /dev/ttya, COM1, etc.).";
5523 remote_ops.to_open = remote_open;
5524 remote_ops.to_close = remote_close;
5525 remote_ops.to_detach = remote_detach;
5526 remote_ops.to_disconnect = remote_disconnect;
5527 remote_ops.to_resume = remote_resume;
5528 remote_ops.to_wait = remote_wait;
5529 remote_ops.to_fetch_registers = remote_fetch_registers;
5530 remote_ops.to_store_registers = remote_store_registers;
5531 remote_ops.to_prepare_to_store = remote_prepare_to_store;
5532 remote_ops.deprecated_xfer_memory = remote_xfer_memory;
5533 remote_ops.to_files_info = remote_files_info;
5534 remote_ops.to_insert_breakpoint = remote_insert_breakpoint;
5535 remote_ops.to_remove_breakpoint = remote_remove_breakpoint;
5536 remote_ops.to_stopped_by_watchpoint = remote_stopped_by_watchpoint;
5537 remote_ops.to_stopped_data_address = remote_stopped_data_address;
5538 remote_ops.to_can_use_hw_breakpoint = remote_check_watch_resources;
5539 remote_ops.to_insert_hw_breakpoint = remote_insert_hw_breakpoint;
5540 remote_ops.to_remove_hw_breakpoint = remote_remove_hw_breakpoint;
5541 remote_ops.to_insert_watchpoint = remote_insert_watchpoint;
5542 remote_ops.to_remove_watchpoint = remote_remove_watchpoint;
5543 remote_ops.to_kill = remote_kill;
5544 remote_ops.to_load = generic_load;
5545 remote_ops.to_mourn_inferior = remote_mourn;
5546 remote_ops.to_thread_alive = remote_thread_alive;
5547 remote_ops.to_find_new_threads = remote_threads_info;
5548 remote_ops.to_pid_to_str = remote_pid_to_str;
5549 remote_ops.to_extra_thread_info = remote_threads_extra_info;
5550 remote_ops.to_stop = remote_stop;
5551 remote_ops.to_xfer_partial = remote_xfer_partial;
5552 remote_ops.to_rcmd = remote_rcmd;
5553 remote_ops.to_get_thread_local_address = remote_get_thread_local_address;
5554 remote_ops.to_stratum = process_stratum;
5555 remote_ops.to_has_all_memory = 1;
5556 remote_ops.to_has_memory = 1;
5557 remote_ops.to_has_stack = 1;
5558 remote_ops.to_has_registers = 1;
5559 remote_ops.to_has_execution = 1;
5560 remote_ops.to_has_thread_control = tc_schedlock; /* can lock scheduler */
5561 remote_ops.to_magic = OPS_MAGIC;
5562 }
5563
5564 /* Set up the extended remote vector by making a copy of the standard
5565 remote vector and adding to it. */
5566
5567 static void
5568 init_extended_remote_ops (void)
5569 {
5570 extended_remote_ops = remote_ops;
5571
5572 extended_remote_ops.to_shortname = "extended-remote";
5573 extended_remote_ops.to_longname =
5574 "Extended remote serial target in gdb-specific protocol";
5575 extended_remote_ops.to_doc =
5576 "Use a remote computer via a serial line, using a gdb-specific protocol.\n\
5577 Specify the serial device it is connected to (e.g. /dev/ttya).",
5578 extended_remote_ops.to_open = extended_remote_open;
5579 extended_remote_ops.to_create_inferior = extended_remote_create_inferior;
5580 extended_remote_ops.to_mourn_inferior = extended_remote_mourn;
5581 }
5582
5583 static int
5584 remote_can_async_p (void)
5585 {
5586 /* We're async whenever the serial device is. */
5587 return (current_target.to_async_mask_value) && serial_can_async_p (remote_desc);
5588 }
5589
5590 static int
5591 remote_is_async_p (void)
5592 {
5593 /* We're async whenever the serial device is. */
5594 return (current_target.to_async_mask_value) && serial_is_async_p (remote_desc);
5595 }
5596
5597 /* Pass the SERIAL event on and up to the client. One day this code
5598 will be able to delay notifying the client of an event until the
5599 point where an entire packet has been received. */
5600
5601 static void (*async_client_callback) (enum inferior_event_type event_type,
5602 void *context);
5603 static void *async_client_context;
5604 static serial_event_ftype remote_async_serial_handler;
5605
5606 static void
5607 remote_async_serial_handler (struct serial *scb, void *context)
5608 {
5609 /* Don't propogate error information up to the client. Instead let
5610 the client find out about the error by querying the target. */
5611 async_client_callback (INF_REG_EVENT, async_client_context);
5612 }
5613
5614 static void
5615 remote_async (void (*callback) (enum inferior_event_type event_type,
5616 void *context), void *context)
5617 {
5618 if (current_target.to_async_mask_value == 0)
5619 internal_error (__FILE__, __LINE__,
5620 _("Calling remote_async when async is masked"));
5621
5622 if (callback != NULL)
5623 {
5624 serial_async (remote_desc, remote_async_serial_handler, NULL);
5625 async_client_callback = callback;
5626 async_client_context = context;
5627 }
5628 else
5629 serial_async (remote_desc, NULL, NULL);
5630 }
5631
5632 /* Target async and target extended-async.
5633
5634 This are temporary targets, until it is all tested. Eventually
5635 async support will be incorporated int the usual 'remote'
5636 target. */
5637
5638 static void
5639 init_remote_async_ops (void)
5640 {
5641 remote_async_ops.to_shortname = "async";
5642 remote_async_ops.to_longname =
5643 "Remote serial target in async version of the gdb-specific protocol";
5644 remote_async_ops.to_doc =
5645 "Use a remote computer via a serial line, using a gdb-specific protocol.\n\
5646 Specify the serial device it is connected to (e.g. /dev/ttya).";
5647 remote_async_ops.to_open = remote_async_open;
5648 remote_async_ops.to_close = remote_close;
5649 remote_async_ops.to_detach = remote_detach;
5650 remote_async_ops.to_disconnect = remote_disconnect;
5651 remote_async_ops.to_resume = remote_async_resume;
5652 remote_async_ops.to_wait = remote_async_wait;
5653 remote_async_ops.to_fetch_registers = remote_fetch_registers;
5654 remote_async_ops.to_store_registers = remote_store_registers;
5655 remote_async_ops.to_prepare_to_store = remote_prepare_to_store;
5656 remote_async_ops.deprecated_xfer_memory = remote_xfer_memory;
5657 remote_async_ops.to_files_info = remote_files_info;
5658 remote_async_ops.to_insert_breakpoint = remote_insert_breakpoint;
5659 remote_async_ops.to_remove_breakpoint = remote_remove_breakpoint;
5660 remote_async_ops.to_can_use_hw_breakpoint = remote_check_watch_resources;
5661 remote_async_ops.to_insert_hw_breakpoint = remote_insert_hw_breakpoint;
5662 remote_async_ops.to_remove_hw_breakpoint = remote_remove_hw_breakpoint;
5663 remote_async_ops.to_insert_watchpoint = remote_insert_watchpoint;
5664 remote_async_ops.to_remove_watchpoint = remote_remove_watchpoint;
5665 remote_async_ops.to_stopped_by_watchpoint = remote_stopped_by_watchpoint;
5666 remote_async_ops.to_stopped_data_address = remote_stopped_data_address;
5667 remote_async_ops.to_terminal_inferior = remote_async_terminal_inferior;
5668 remote_async_ops.to_terminal_ours = remote_async_terminal_ours;
5669 remote_async_ops.to_kill = remote_async_kill;
5670 remote_async_ops.to_load = generic_load;
5671 remote_async_ops.to_mourn_inferior = remote_async_mourn;
5672 remote_async_ops.to_thread_alive = remote_thread_alive;
5673 remote_async_ops.to_find_new_threads = remote_threads_info;
5674 remote_async_ops.to_pid_to_str = remote_pid_to_str;
5675 remote_async_ops.to_extra_thread_info = remote_threads_extra_info;
5676 remote_async_ops.to_stop = remote_stop;
5677 remote_async_ops.to_xfer_partial = remote_xfer_partial;
5678 remote_async_ops.to_rcmd = remote_rcmd;
5679 remote_async_ops.to_stratum = process_stratum;
5680 remote_async_ops.to_has_all_memory = 1;
5681 remote_async_ops.to_has_memory = 1;
5682 remote_async_ops.to_has_stack = 1;
5683 remote_async_ops.to_has_registers = 1;
5684 remote_async_ops.to_has_execution = 1;
5685 remote_async_ops.to_has_thread_control = tc_schedlock; /* can lock scheduler */
5686 remote_async_ops.to_can_async_p = remote_can_async_p;
5687 remote_async_ops.to_is_async_p = remote_is_async_p;
5688 remote_async_ops.to_async = remote_async;
5689 remote_async_ops.to_async_mask_value = 1;
5690 remote_async_ops.to_magic = OPS_MAGIC;
5691 }
5692
5693 /* Set up the async extended remote vector by making a copy of the standard
5694 remote vector and adding to it. */
5695
5696 static void
5697 init_extended_async_remote_ops (void)
5698 {
5699 extended_async_remote_ops = remote_async_ops;
5700
5701 extended_async_remote_ops.to_shortname = "extended-async";
5702 extended_async_remote_ops.to_longname =
5703 "Extended remote serial target in async gdb-specific protocol";
5704 extended_async_remote_ops.to_doc =
5705 "Use a remote computer via a serial line, using an async gdb-specific protocol.\n\
5706 Specify the serial device it is connected to (e.g. /dev/ttya).",
5707 extended_async_remote_ops.to_open = extended_remote_async_open;
5708 extended_async_remote_ops.to_create_inferior = extended_remote_async_create_inferior;
5709 extended_async_remote_ops.to_mourn_inferior = extended_remote_mourn;
5710 }
5711
5712 static void
5713 set_remote_cmd (char *args, int from_tty)
5714 {
5715 }
5716
5717 static void
5718 show_remote_cmd (char *args, int from_tty)
5719 {
5720 /* We can't just use cmd_show_list here, because we want to skip
5721 the redundant "show remote Z-packet". */
5722 struct cleanup *showlist_chain;
5723 struct cmd_list_element *list = remote_show_cmdlist;
5724
5725 showlist_chain = make_cleanup_ui_out_tuple_begin_end (uiout, "showlist");
5726 for (; list != NULL; list = list->next)
5727 if (strcmp (list->name, "Z-packet") == 0)
5728 continue;
5729 else if (list->type == show_cmd)
5730 {
5731 struct cleanup *option_chain
5732 = make_cleanup_ui_out_tuple_begin_end (uiout, "option");
5733 ui_out_field_string (uiout, "name", list->name);
5734 ui_out_text (uiout, ": ");
5735 do_setshow_command ((char *) NULL, from_tty, list);
5736 /* Close the tuple. */
5737 do_cleanups (option_chain);
5738 }
5739 }
5740
5741 static void
5742 build_remote_gdbarch_data (void)
5743 {
5744 remote_address_size = TARGET_ADDR_BIT;
5745 }
5746
5747 /* Saved pointer to previous owner of the new_objfile event. */
5748 static void (*remote_new_objfile_chain) (struct objfile *);
5749
5750 /* Function to be called whenever a new objfile (shlib) is detected. */
5751 static void
5752 remote_new_objfile (struct objfile *objfile)
5753 {
5754 if (remote_desc != 0) /* Have a remote connection. */
5755 {
5756 remote_check_symbols (objfile);
5757 }
5758 /* Call predecessor on chain, if any. */
5759 if (remote_new_objfile_chain != 0 &&
5760 remote_desc == 0)
5761 remote_new_objfile_chain (objfile);
5762 }
5763
5764 void
5765 _initialize_remote (void)
5766 {
5767 struct remote_state *rs;
5768
5769 /* architecture specific data */
5770 remote_gdbarch_data_handle =
5771 gdbarch_data_register_post_init (init_remote_state);
5772
5773 /* Old tacky stuff. NOTE: This comes after the remote protocol so
5774 that the remote protocol has been initialized. */
5775 DEPRECATED_REGISTER_GDBARCH_SWAP (remote_address_size);
5776 deprecated_register_gdbarch_swap (NULL, 0, build_remote_gdbarch_data);
5777
5778 /* Initialize the per-target state. At the moment there is only one
5779 of these, not one per target. Only one target is active at a
5780 time. The default buffer size is unimportant; it will be expanded
5781 whenever a larger buffer is needed. */
5782 rs = get_remote_state ();
5783 rs->buf_size = 400;
5784 rs->buf = xmalloc (rs->buf_size);
5785
5786 init_remote_ops ();
5787 add_target (&remote_ops);
5788
5789 init_extended_remote_ops ();
5790 add_target (&extended_remote_ops);
5791
5792 init_remote_async_ops ();
5793 add_target (&remote_async_ops);
5794
5795 init_extended_async_remote_ops ();
5796 add_target (&extended_async_remote_ops);
5797
5798 /* Hook into new objfile notification. */
5799 remote_new_objfile_chain = deprecated_target_new_objfile_hook;
5800 deprecated_target_new_objfile_hook = remote_new_objfile;
5801
5802 #if 0
5803 init_remote_threadtests ();
5804 #endif
5805
5806 /* set/show remote ... */
5807
5808 add_prefix_cmd ("remote", class_maintenance, set_remote_cmd, _("\
5809 Remote protocol specific variables\n\
5810 Configure various remote-protocol specific variables such as\n\
5811 the packets being used"),
5812 &remote_set_cmdlist, "set remote ",
5813 0 /* allow-unknown */, &setlist);
5814 add_prefix_cmd ("remote", class_maintenance, show_remote_cmd, _("\
5815 Remote protocol specific variables\n\
5816 Configure various remote-protocol specific variables such as\n\
5817 the packets being used"),
5818 &remote_show_cmdlist, "show remote ",
5819 0 /* allow-unknown */, &showlist);
5820
5821 add_cmd ("compare-sections", class_obscure, compare_sections_command, _("\
5822 Compare section data on target to the exec file.\n\
5823 Argument is a single section name (default: all loaded sections)."),
5824 &cmdlist);
5825
5826 add_cmd ("packet", class_maintenance, packet_command, _("\
5827 Send an arbitrary packet to a remote target.\n\
5828 maintenance packet TEXT\n\
5829 If GDB is talking to an inferior via the GDB serial protocol, then\n\
5830 this command sends the string TEXT to the inferior, and displays the\n\
5831 response packet. GDB supplies the initial `$' character, and the\n\
5832 terminating `#' character and checksum."),
5833 &maintenancelist);
5834
5835 add_setshow_boolean_cmd ("remotebreak", no_class, &remote_break, _("\
5836 Set whether to send break if interrupted."), _("\
5837 Show whether to send break if interrupted."), _("\
5838 If set, a break, instead of a cntrl-c, is sent to the remote target."),
5839 NULL, NULL, /* FIXME: i18n: Whether to send break if interrupted is %s. */
5840 &setlist, &showlist);
5841
5842 /* Install commands for configuring memory read/write packets. */
5843
5844 add_cmd ("remotewritesize", no_class, set_memory_write_packet_size, _("\
5845 Set the maximum number of bytes per memory write packet (deprecated)."),
5846 &setlist);
5847 add_cmd ("remotewritesize", no_class, show_memory_write_packet_size, _("\
5848 Show the maximum number of bytes per memory write packet (deprecated)."),
5849 &showlist);
5850 add_cmd ("memory-write-packet-size", no_class,
5851 set_memory_write_packet_size, _("\
5852 Set the maximum number of bytes per memory-write packet.\n\
5853 Specify the number of bytes in a packet or 0 (zero) for the\n\
5854 default packet size. The actual limit is further reduced\n\
5855 dependent on the target. Specify ``fixed'' to disable the\n\
5856 further restriction and ``limit'' to enable that restriction."),
5857 &remote_set_cmdlist);
5858 add_cmd ("memory-read-packet-size", no_class,
5859 set_memory_read_packet_size, _("\
5860 Set the maximum number of bytes per memory-read packet.\n\
5861 Specify the number of bytes in a packet or 0 (zero) for the\n\
5862 default packet size. The actual limit is further reduced\n\
5863 dependent on the target. Specify ``fixed'' to disable the\n\
5864 further restriction and ``limit'' to enable that restriction."),
5865 &remote_set_cmdlist);
5866 add_cmd ("memory-write-packet-size", no_class,
5867 show_memory_write_packet_size,
5868 _("Show the maximum number of bytes per memory-write packet."),
5869 &remote_show_cmdlist);
5870 add_cmd ("memory-read-packet-size", no_class,
5871 show_memory_read_packet_size,
5872 _("Show the maximum number of bytes per memory-read packet."),
5873 &remote_show_cmdlist);
5874
5875 add_setshow_zinteger_cmd ("hardware-watchpoint-limit", no_class,
5876 &remote_hw_watchpoint_limit, _("\
5877 Set the maximum number of target hardware watchpoints."), _("\
5878 Show the maximum number of target hardware watchpoints."), _("\
5879 Specify a negative limit for unlimited."),
5880 NULL, NULL, /* FIXME: i18n: The maximum number of target hardware watchpoints is %s. */
5881 &remote_set_cmdlist, &remote_show_cmdlist);
5882 add_setshow_zinteger_cmd ("hardware-breakpoint-limit", no_class,
5883 &remote_hw_breakpoint_limit, _("\
5884 Set the maximum number of target hardware breakpoints."), _("\
5885 Show the maximum number of target hardware breakpoints."), _("\
5886 Specify a negative limit for unlimited."),
5887 NULL, NULL, /* FIXME: i18n: The maximum number of target hardware breakpoints is %s. */
5888 &remote_set_cmdlist, &remote_show_cmdlist);
5889
5890 add_setshow_integer_cmd ("remoteaddresssize", class_obscure,
5891 &remote_address_size, _("\
5892 Set the maximum size of the address (in bits) in a memory packet."), _("\
5893 Show the maximum size of the address (in bits) in a memory packet."), NULL,
5894 NULL,
5895 NULL, /* FIXME: i18n: */
5896 &setlist, &showlist);
5897
5898 add_packet_config_cmd (&remote_protocol_packets[PACKET_X],
5899 "X", "binary-download", 1);
5900
5901 add_packet_config_cmd (&remote_protocol_packets[PACKET_vCont],
5902 "vCont", "verbose-resume", 0);
5903
5904 add_packet_config_cmd (&remote_protocol_packets[PACKET_qSymbol],
5905 "qSymbol", "symbol-lookup", 0);
5906
5907 add_packet_config_cmd (&remote_protocol_packets[PACKET_P],
5908 "P", "set-register", 1);
5909
5910 add_packet_config_cmd (&remote_protocol_packets[PACKET_p],
5911 "p", "fetch-register", 1);
5912
5913 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z0],
5914 "Z0", "software-breakpoint", 0);
5915
5916 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z1],
5917 "Z1", "hardware-breakpoint", 0);
5918
5919 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z2],
5920 "Z2", "write-watchpoint", 0);
5921
5922 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z3],
5923 "Z3", "read-watchpoint", 0);
5924
5925 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z4],
5926 "Z4", "access-watchpoint", 0);
5927
5928 add_packet_config_cmd (&remote_protocol_packets[PACKET_qPart_auxv],
5929 "qPart:auxv", "read-aux-vector", 0);
5930
5931 add_packet_config_cmd (&remote_protocol_packets[PACKET_qGetTLSAddr],
5932 "qGetTLSAddr", "get-thread-local-storage-address",
5933 0);
5934
5935 add_packet_config_cmd (&remote_protocol_packets[PACKET_qSupported],
5936 "qSupported", "supported-packets", 0);
5937
5938 /* Keep the old ``set remote Z-packet ...'' working. Each individual
5939 Z sub-packet has its own set and show commands, but users may
5940 have sets to this variable in their .gdbinit files (or in their
5941 documentation). */
5942 add_setshow_auto_boolean_cmd ("Z-packet", class_obscure,
5943 &remote_Z_packet_detect, _("\
5944 Set use of remote protocol `Z' packets"), _("\
5945 Show use of remote protocol `Z' packets "), _("\
5946 When set, GDB will attempt to use the remote breakpoint and watchpoint\n\
5947 packets."),
5948 set_remote_protocol_Z_packet_cmd,
5949 show_remote_protocol_Z_packet_cmd, /* FIXME: i18n: Use of remote protocol `Z' packets is %s. */
5950 &remote_set_cmdlist, &remote_show_cmdlist);
5951
5952 /* Eventually initialize fileio. See fileio.c */
5953 initialize_remote_fileio (remote_set_cmdlist, remote_show_cmdlist);
5954 }
This page took 0.274852 seconds and 4 git commands to generate.