1 /* Remote target communications for serial-line targets in custom GDB protocol
3 Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
4 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
5 Free Software Foundation, Inc.
7 This file is part of GDB.
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 3 of the License, or
12 (at your option) any later version.
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.
19 You should have received a copy of the GNU General Public License
20 along with this program. If not, see <http://www.gnu.org/licenses/>. */
22 /* See the GDB User Guide for details of the GDB remote protocol. */
25 #include "gdb_string.h"
31 #include "exceptions.h"
33 /*#include "terminal.h" */
36 #include "gdb-stabs.h"
37 #include "gdbthread.h"
41 #include "gdb_assert.h"
44 #include "cli/cli-decode.h"
45 #include "cli/cli-setshow.h"
46 #include "target-descriptions.h"
51 #include "event-loop.h"
52 #include "event-top.h"
58 #include "gdbcore.h" /* for exec_bfd */
60 #include "remote-fileio.h"
61 #include "gdb/fileio.h"
63 #include "memory-map.h"
65 /* The size to align memory write packets, when practical. The protocol
66 does not guarantee any alignment, and gdb will generate short
67 writes and unaligned writes, but even as a best-effort attempt this
68 can improve bulk transfers. For instance, if a write is misaligned
69 relative to the target's data bus, the stub may need to make an extra
70 round trip fetching data from the target. This doesn't make a
71 huge difference, but it's easy to do, so we try to be helpful.
73 The alignment chosen is arbitrary; usually data bus width is
74 important here, not the possibly larger cache line size. */
75 enum { REMOTE_ALIGN_WRITES = 16 };
77 /* Prototypes for local functions. */
78 static void cleanup_sigint_signal_handler (void *dummy);
79 static void initialize_sigint_signal_handler (void);
80 static int getpkt_sane (char **buf, long *sizeof_buf, int forever);
82 static void handle_remote_sigint (int);
83 static void handle_remote_sigint_twice (int);
84 static void async_remote_interrupt (gdb_client_data);
85 void async_remote_interrupt_twice (gdb_client_data);
87 static void remote_files_info (struct target_ops *ignore);
89 static void remote_prepare_to_store (struct regcache *regcache);
91 static void remote_fetch_registers (struct regcache *regcache, int regno);
93 static void remote_resume (ptid_t ptid, int step,
94 enum target_signal siggnal);
95 static void remote_async_resume (ptid_t ptid, int step,
96 enum target_signal siggnal);
97 static void remote_open (char *name, int from_tty);
98 static void remote_async_open (char *name, int from_tty);
100 static void extended_remote_open (char *name, int from_tty);
101 static void extended_remote_async_open (char *name, int from_tty);
103 static void remote_open_1 (char *, int, struct target_ops *, int extended_p,
106 static void remote_close (int quitting);
108 static void remote_store_registers (struct regcache *regcache, int regno);
110 static void remote_mourn (void);
111 static void remote_async_mourn (void);
113 static void extended_remote_restart (void);
115 static void extended_remote_mourn (void);
117 static void remote_mourn_1 (struct target_ops *);
119 static void remote_send (char **buf, long *sizeof_buf_p);
121 static int readchar (int timeout);
123 static ptid_t remote_wait (ptid_t ptid,
124 struct target_waitstatus *status);
125 static ptid_t remote_async_wait (ptid_t ptid,
126 struct target_waitstatus *status);
128 static void remote_kill (void);
129 static void remote_async_kill (void);
131 static int tohex (int nib);
133 static void remote_detach (char *args, int from_tty);
135 static void remote_interrupt (int signo);
137 static void remote_interrupt_twice (int signo);
139 static void interrupt_query (void);
141 static void set_thread (int, int);
143 static int remote_thread_alive (ptid_t);
145 static void get_offsets (void);
147 static void skip_frame (void);
149 static long read_frame (char **buf_p, long *sizeof_buf);
151 static int hexnumlen (ULONGEST num);
153 static void init_remote_ops (void);
155 static void init_extended_remote_ops (void);
157 static void remote_stop (void);
159 static int ishex (int ch, int *val);
161 static int stubhex (int ch);
163 static int hexnumstr (char *, ULONGEST);
165 static int hexnumnstr (char *, ULONGEST, int);
167 static CORE_ADDR remote_address_masked (CORE_ADDR);
169 static void print_packet (char *);
171 static unsigned long crc32 (unsigned char *, int, unsigned int);
173 static void compare_sections_command (char *, int);
175 static void packet_command (char *, int);
177 static int stub_unpack_int (char *buff, int fieldlength);
179 static ptid_t remote_current_thread (ptid_t oldptid);
181 static void remote_find_new_threads (void);
183 static void record_currthread (int currthread);
185 static int fromhex (int a);
187 static int hex2bin (const char *hex, gdb_byte *bin, int count);
189 static int bin2hex (const gdb_byte *bin, char *hex, int count);
191 static int putpkt_binary (char *buf, int cnt);
193 static void check_binary_download (CORE_ADDR addr);
195 struct packet_config;
197 static void show_packet_config_cmd (struct packet_config *config);
199 static void update_packet_config (struct packet_config *config);
201 static void set_remote_protocol_packet_cmd (char *args, int from_tty,
202 struct cmd_list_element *c);
204 static void show_remote_protocol_packet_cmd (struct ui_file *file,
206 struct cmd_list_element *c,
209 void _initialize_remote (void);
213 static struct cmd_list_element *remote_cmdlist;
215 /* For "set remote" and "show remote". */
217 static struct cmd_list_element *remote_set_cmdlist;
218 static struct cmd_list_element *remote_show_cmdlist;
220 /* Description of the remote protocol state for the currently
221 connected target. This is per-target state, and independent of the
222 selected architecture. */
226 /* A buffer to use for incoming packets, and its current size. The
227 buffer is grown dynamically for larger incoming packets.
228 Outgoing packets may also be constructed in this buffer.
229 BUF_SIZE is always at least REMOTE_PACKET_SIZE;
230 REMOTE_PACKET_SIZE should be used to limit the length of outgoing
235 /* If we negotiated packet size explicitly (and thus can bypass
236 heuristics for the largest packet size that will not overflow
237 a buffer in the stub), this will be set to that packet size.
238 Otherwise zero, meaning to use the guessed size. */
239 long explicit_packet_size;
242 /* This data could be associated with a target, but we do not always
243 have access to the current target when we need it, so for now it is
244 static. This will be fine for as long as only one target is in use
246 static struct remote_state remote_state;
248 static struct remote_state *
249 get_remote_state_raw (void)
251 return &remote_state;
254 /* Description of the remote protocol for a given architecture. */
258 long offset; /* Offset into G packet. */
259 long regnum; /* GDB's internal register number. */
260 LONGEST pnum; /* Remote protocol register number. */
261 int in_g_packet; /* Always part of G packet. */
262 /* long size in bytes; == register_size (current_gdbarch, regnum);
264 /* char *name; == gdbarch_register_name (current_gdbarch, regnum);
268 struct remote_arch_state
270 /* Description of the remote protocol registers. */
271 long sizeof_g_packet;
273 /* Description of the remote protocol registers indexed by REGNUM
274 (making an array gdbarch_num_regs in size). */
275 struct packet_reg *regs;
277 /* This is the size (in chars) of the first response to the ``g''
278 packet. It is used as a heuristic when determining the maximum
279 size of memory-read and memory-write packets. A target will
280 typically only reserve a buffer large enough to hold the ``g''
281 packet. The size does not include packet overhead (headers and
283 long actual_register_packet_size;
285 /* This is the maximum size (in chars) of a non read/write packet.
286 It is also used as a cap on the size of read/write packets. */
287 long remote_packet_size;
291 /* Handle for retreving the remote protocol data from gdbarch. */
292 static struct gdbarch_data *remote_gdbarch_data_handle;
294 static struct remote_arch_state *
295 get_remote_arch_state (void)
297 return gdbarch_data (current_gdbarch, remote_gdbarch_data_handle);
300 /* Fetch the global remote target state. */
302 static struct remote_state *
303 get_remote_state (void)
305 /* Make sure that the remote architecture state has been
306 initialized, because doing so might reallocate rs->buf. Any
307 function which calls getpkt also needs to be mindful of changes
308 to rs->buf, but this call limits the number of places which run
310 get_remote_arch_state ();
312 return get_remote_state_raw ();
316 compare_pnums (const void *lhs_, const void *rhs_)
318 const struct packet_reg * const *lhs = lhs_;
319 const struct packet_reg * const *rhs = rhs_;
321 if ((*lhs)->pnum < (*rhs)->pnum)
323 else if ((*lhs)->pnum == (*rhs)->pnum)
330 init_remote_state (struct gdbarch *gdbarch)
332 int regnum, num_remote_regs, offset;
333 struct remote_state *rs = get_remote_state_raw ();
334 struct remote_arch_state *rsa;
335 struct packet_reg **remote_regs;
337 rsa = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct remote_arch_state);
339 /* Use the architecture to build a regnum<->pnum table, which will be
340 1:1 unless a feature set specifies otherwise. */
341 rsa->regs = GDBARCH_OBSTACK_CALLOC (gdbarch,
342 gdbarch_num_regs (gdbarch),
344 for (regnum = 0; regnum < gdbarch_num_regs (gdbarch); regnum++)
346 struct packet_reg *r = &rsa->regs[regnum];
348 if (register_size (gdbarch, regnum) == 0)
349 /* Do not try to fetch zero-sized (placeholder) registers. */
352 r->pnum = gdbarch_remote_register_number (gdbarch, regnum);
357 /* Define the g/G packet format as the contents of each register
358 with a remote protocol number, in order of ascending protocol
361 remote_regs = alloca (gdbarch_num_regs (gdbarch)
362 * sizeof (struct packet_reg *));
363 for (num_remote_regs = 0, regnum = 0;
364 regnum < gdbarch_num_regs (gdbarch);
366 if (rsa->regs[regnum].pnum != -1)
367 remote_regs[num_remote_regs++] = &rsa->regs[regnum];
369 qsort (remote_regs, num_remote_regs, sizeof (struct packet_reg *),
372 for (regnum = 0, offset = 0; regnum < num_remote_regs; regnum++)
374 remote_regs[regnum]->in_g_packet = 1;
375 remote_regs[regnum]->offset = offset;
376 offset += register_size (gdbarch, remote_regs[regnum]->regnum);
379 /* Record the maximum possible size of the g packet - it may turn out
381 rsa->sizeof_g_packet = offset;
383 /* Default maximum number of characters in a packet body. Many
384 remote stubs have a hardwired buffer size of 400 bytes
385 (c.f. BUFMAX in m68k-stub.c and i386-stub.c). BUFMAX-1 is used
386 as the maximum packet-size to ensure that the packet and an extra
387 NUL character can always fit in the buffer. This stops GDB
388 trashing stubs that try to squeeze an extra NUL into what is
389 already a full buffer (As of 1999-12-04 that was most stubs). */
390 rsa->remote_packet_size = 400 - 1;
392 /* This one is filled in when a ``g'' packet is received. */
393 rsa->actual_register_packet_size = 0;
395 /* Should rsa->sizeof_g_packet needs more space than the
396 default, adjust the size accordingly. Remember that each byte is
397 encoded as two characters. 32 is the overhead for the packet
398 header / footer. NOTE: cagney/1999-10-26: I suspect that 8
399 (``$NN:G...#NN'') is a better guess, the below has been padded a
401 if (rsa->sizeof_g_packet > ((rsa->remote_packet_size - 32) / 2))
402 rsa->remote_packet_size = (rsa->sizeof_g_packet * 2 + 32);
404 /* Make sure that the packet buffer is plenty big enough for
405 this architecture. */
406 if (rs->buf_size < rsa->remote_packet_size)
408 rs->buf_size = 2 * rsa->remote_packet_size;
409 rs->buf = xrealloc (rs->buf, rs->buf_size);
415 /* Return the current allowed size of a remote packet. This is
416 inferred from the current architecture, and should be used to
417 limit the length of outgoing packets. */
419 get_remote_packet_size (void)
421 struct remote_state *rs = get_remote_state ();
422 struct remote_arch_state *rsa = get_remote_arch_state ();
424 if (rs->explicit_packet_size)
425 return rs->explicit_packet_size;
427 return rsa->remote_packet_size;
430 static struct packet_reg *
431 packet_reg_from_regnum (struct remote_arch_state *rsa, long regnum)
433 if (regnum < 0 && regnum >= gdbarch_num_regs (current_gdbarch))
437 struct packet_reg *r = &rsa->regs[regnum];
438 gdb_assert (r->regnum == regnum);
443 static struct packet_reg *
444 packet_reg_from_pnum (struct remote_arch_state *rsa, LONGEST pnum)
447 for (i = 0; i < gdbarch_num_regs (current_gdbarch); i++)
449 struct packet_reg *r = &rsa->regs[i];
456 /* FIXME: graces/2002-08-08: These variables should eventually be
457 bound to an instance of the target object (as in gdbarch-tdep()),
458 when such a thing exists. */
460 /* This is set to the data address of the access causing the target
461 to stop for a watchpoint. */
462 static CORE_ADDR remote_watch_data_address;
464 /* This is non-zero if target stopped for a watchpoint. */
465 static int remote_stopped_by_watchpoint_p;
467 static struct target_ops remote_ops;
469 static struct target_ops extended_remote_ops;
471 /* Temporary target ops. Just like the remote_ops and
472 extended_remote_ops, but with asynchronous support. */
473 static struct target_ops remote_async_ops;
475 static struct target_ops extended_async_remote_ops;
477 /* FIXME: cagney/1999-09-23: Even though getpkt was called with
478 ``forever'' still use the normal timeout mechanism. This is
479 currently used by the ASYNC code to guarentee that target reads
480 during the initial connect always time-out. Once getpkt has been
481 modified to return a timeout indication and, in turn
482 remote_wait()/wait_for_inferior() have gained a timeout parameter
484 static int wait_forever_enabled_p = 1;
487 /* This variable chooses whether to send a ^C or a break when the user
488 requests program interruption. Although ^C is usually what remote
489 systems expect, and that is the default here, sometimes a break is
490 preferable instead. */
492 static int remote_break;
494 /* Descriptor for I/O to remote machine. Initialize it to NULL so that
495 remote_open knows that we don't have a file open when the program
497 static struct serial *remote_desc = NULL;
499 /* This variable sets the number of bits in an address that are to be
500 sent in a memory ("M" or "m") packet. Normally, after stripping
501 leading zeros, the entire address would be sent. This variable
502 restricts the address to REMOTE_ADDRESS_SIZE bits. HISTORY: The
503 initial implementation of remote.c restricted the address sent in
504 memory packets to ``host::sizeof long'' bytes - (typically 32
505 bits). Consequently, for 64 bit targets, the upper 32 bits of an
506 address was never sent. Since fixing this bug may cause a break in
507 some remote targets this variable is principly provided to
508 facilitate backward compatibility. */
510 static int remote_address_size;
512 /* Tempoary to track who currently owns the terminal. See
513 target_async_terminal_* for more details. */
515 static int remote_async_terminal_ours_p;
518 /* User configurable variables for the number of characters in a
519 memory read/write packet. MIN (rsa->remote_packet_size,
520 rsa->sizeof_g_packet) is the default. Some targets need smaller
521 values (fifo overruns, et.al.) and some users need larger values
522 (speed up transfers). The variables ``preferred_*'' (the user
523 request), ``current_*'' (what was actually set) and ``forced_*''
524 (Positive - a soft limit, negative - a hard limit). */
526 struct memory_packet_config
533 /* Compute the current size of a read/write packet. Since this makes
534 use of ``actual_register_packet_size'' the computation is dynamic. */
537 get_memory_packet_size (struct memory_packet_config *config)
539 struct remote_state *rs = get_remote_state ();
540 struct remote_arch_state *rsa = get_remote_arch_state ();
542 /* NOTE: The somewhat arbitrary 16k comes from the knowledge (folk
543 law?) that some hosts don't cope very well with large alloca()
544 calls. Eventually the alloca() code will be replaced by calls to
545 xmalloc() and make_cleanups() allowing this restriction to either
546 be lifted or removed. */
547 #ifndef MAX_REMOTE_PACKET_SIZE
548 #define MAX_REMOTE_PACKET_SIZE 16384
550 /* NOTE: 20 ensures we can write at least one byte. */
551 #ifndef MIN_REMOTE_PACKET_SIZE
552 #define MIN_REMOTE_PACKET_SIZE 20
557 if (config->size <= 0)
558 what_they_get = MAX_REMOTE_PACKET_SIZE;
560 what_they_get = config->size;
564 what_they_get = get_remote_packet_size ();
565 /* Limit the packet to the size specified by the user. */
567 && what_they_get > config->size)
568 what_they_get = config->size;
570 /* Limit it to the size of the targets ``g'' response unless we have
571 permission from the stub to use a larger packet size. */
572 if (rs->explicit_packet_size == 0
573 && rsa->actual_register_packet_size > 0
574 && what_they_get > rsa->actual_register_packet_size)
575 what_they_get = rsa->actual_register_packet_size;
577 if (what_they_get > MAX_REMOTE_PACKET_SIZE)
578 what_they_get = MAX_REMOTE_PACKET_SIZE;
579 if (what_they_get < MIN_REMOTE_PACKET_SIZE)
580 what_they_get = MIN_REMOTE_PACKET_SIZE;
582 /* Make sure there is room in the global buffer for this packet
583 (including its trailing NUL byte). */
584 if (rs->buf_size < what_they_get + 1)
586 rs->buf_size = 2 * what_they_get;
587 rs->buf = xrealloc (rs->buf, 2 * what_they_get);
590 return what_they_get;
593 /* Update the size of a read/write packet. If they user wants
594 something really big then do a sanity check. */
597 set_memory_packet_size (char *args, struct memory_packet_config *config)
599 int fixed_p = config->fixed_p;
600 long size = config->size;
602 error (_("Argument required (integer, `fixed' or `limited')."));
603 else if (strcmp (args, "hard") == 0
604 || strcmp (args, "fixed") == 0)
606 else if (strcmp (args, "soft") == 0
607 || strcmp (args, "limit") == 0)
612 size = strtoul (args, &end, 0);
614 error (_("Invalid %s (bad syntax)."), config->name);
616 /* Instead of explicitly capping the size of a packet to
617 MAX_REMOTE_PACKET_SIZE or dissallowing it, the user is
618 instead allowed to set the size to something arbitrarily
620 if (size > MAX_REMOTE_PACKET_SIZE)
621 error (_("Invalid %s (too large)."), config->name);
625 if (fixed_p && !config->fixed_p)
627 if (! query (_("The target may not be able to correctly handle a %s\n"
628 "of %ld bytes. Change the packet size? "),
630 error (_("Packet size not changed."));
632 /* Update the config. */
633 config->fixed_p = fixed_p;
638 show_memory_packet_size (struct memory_packet_config *config)
640 printf_filtered (_("The %s is %ld. "), config->name, config->size);
642 printf_filtered (_("Packets are fixed at %ld bytes.\n"),
643 get_memory_packet_size (config));
645 printf_filtered (_("Packets are limited to %ld bytes.\n"),
646 get_memory_packet_size (config));
649 static struct memory_packet_config memory_write_packet_config =
651 "memory-write-packet-size",
655 set_memory_write_packet_size (char *args, int from_tty)
657 set_memory_packet_size (args, &memory_write_packet_config);
661 show_memory_write_packet_size (char *args, int from_tty)
663 show_memory_packet_size (&memory_write_packet_config);
667 get_memory_write_packet_size (void)
669 return get_memory_packet_size (&memory_write_packet_config);
672 static struct memory_packet_config memory_read_packet_config =
674 "memory-read-packet-size",
678 set_memory_read_packet_size (char *args, int from_tty)
680 set_memory_packet_size (args, &memory_read_packet_config);
684 show_memory_read_packet_size (char *args, int from_tty)
686 show_memory_packet_size (&memory_read_packet_config);
690 get_memory_read_packet_size (void)
692 long size = get_memory_packet_size (&memory_read_packet_config);
693 /* FIXME: cagney/1999-11-07: Functions like getpkt() need to get an
694 extra buffer size argument before the memory read size can be
695 increased beyond this. */
696 if (size > get_remote_packet_size ())
697 size = get_remote_packet_size ();
702 /* Generic configuration support for packets the stub optionally
703 supports. Allows the user to specify the use of the packet as well
704 as allowing GDB to auto-detect support in the remote stub. */
708 PACKET_SUPPORT_UNKNOWN = 0,
717 enum auto_boolean detect;
718 enum packet_support support;
721 /* Analyze a packet's return value and update the packet config
732 update_packet_config (struct packet_config *config)
734 switch (config->detect)
736 case AUTO_BOOLEAN_TRUE:
737 config->support = PACKET_ENABLE;
739 case AUTO_BOOLEAN_FALSE:
740 config->support = PACKET_DISABLE;
742 case AUTO_BOOLEAN_AUTO:
743 config->support = PACKET_SUPPORT_UNKNOWN;
749 show_packet_config_cmd (struct packet_config *config)
751 char *support = "internal-error";
752 switch (config->support)
758 support = "disabled";
760 case PACKET_SUPPORT_UNKNOWN:
764 switch (config->detect)
766 case AUTO_BOOLEAN_AUTO:
767 printf_filtered (_("Support for the `%s' packet is auto-detected, currently %s.\n"),
768 config->name, support);
770 case AUTO_BOOLEAN_TRUE:
771 case AUTO_BOOLEAN_FALSE:
772 printf_filtered (_("Support for the `%s' packet is currently %s.\n"),
773 config->name, support);
779 add_packet_config_cmd (struct packet_config *config, const char *name,
780 const char *title, int legacy)
787 config->title = title;
788 config->detect = AUTO_BOOLEAN_AUTO;
789 config->support = PACKET_SUPPORT_UNKNOWN;
790 set_doc = xstrprintf ("Set use of remote protocol `%s' (%s) packet",
792 show_doc = xstrprintf ("Show current use of remote protocol `%s' (%s) packet",
794 /* set/show TITLE-packet {auto,on,off} */
795 cmd_name = xstrprintf ("%s-packet", title);
796 add_setshow_auto_boolean_cmd (cmd_name, class_obscure,
797 &config->detect, set_doc, show_doc, NULL, /* help_doc */
798 set_remote_protocol_packet_cmd,
799 show_remote_protocol_packet_cmd,
800 &remote_set_cmdlist, &remote_show_cmdlist);
801 /* set/show remote NAME-packet {auto,on,off} -- legacy. */
805 legacy_name = xstrprintf ("%s-packet", name);
806 add_alias_cmd (legacy_name, cmd_name, class_obscure, 0,
807 &remote_set_cmdlist);
808 add_alias_cmd (legacy_name, cmd_name, class_obscure, 0,
809 &remote_show_cmdlist);
813 static enum packet_result
814 packet_check_result (const char *buf)
818 /* The stub recognized the packet request. Check that the
819 operation succeeded. */
821 && isxdigit (buf[1]) && isxdigit (buf[2])
823 /* "Enn" - definitly an error. */
826 /* Always treat "E." as an error. This will be used for
827 more verbose error messages, such as E.memtypes. */
828 if (buf[0] == 'E' && buf[1] == '.')
831 /* The packet may or may not be OK. Just assume it is. */
835 /* The stub does not support the packet. */
836 return PACKET_UNKNOWN;
839 static enum packet_result
840 packet_ok (const char *buf, struct packet_config *config)
842 enum packet_result result;
844 result = packet_check_result (buf);
849 /* The stub recognized the packet request. */
850 switch (config->support)
852 case PACKET_SUPPORT_UNKNOWN:
854 fprintf_unfiltered (gdb_stdlog,
855 "Packet %s (%s) is supported\n",
856 config->name, config->title);
857 config->support = PACKET_ENABLE;
860 internal_error (__FILE__, __LINE__,
861 _("packet_ok: attempt to use a disabled packet"));
868 /* The stub does not support the packet. */
869 switch (config->support)
872 if (config->detect == AUTO_BOOLEAN_AUTO)
873 /* If the stub previously indicated that the packet was
874 supported then there is a protocol error.. */
875 error (_("Protocol error: %s (%s) conflicting enabled responses."),
876 config->name, config->title);
878 /* The user set it wrong. */
879 error (_("Enabled packet %s (%s) not recognized by stub"),
880 config->name, config->title);
882 case PACKET_SUPPORT_UNKNOWN:
884 fprintf_unfiltered (gdb_stdlog,
885 "Packet %s (%s) is NOT supported\n",
886 config->name, config->title);
887 config->support = PACKET_DISABLE;
915 PACKET_qXfer_features,
916 PACKET_qXfer_libraries,
917 PACKET_qXfer_memory_map,
918 PACKET_qXfer_spu_read,
919 PACKET_qXfer_spu_write,
926 static struct packet_config remote_protocol_packets[PACKET_MAX];
929 set_remote_protocol_packet_cmd (char *args, int from_tty,
930 struct cmd_list_element *c)
932 struct packet_config *packet;
934 for (packet = remote_protocol_packets;
935 packet < &remote_protocol_packets[PACKET_MAX];
938 if (&packet->detect == c->var)
940 update_packet_config (packet);
944 internal_error (__FILE__, __LINE__, "Could not find config for %s",
949 show_remote_protocol_packet_cmd (struct ui_file *file, int from_tty,
950 struct cmd_list_element *c,
953 struct packet_config *packet;
955 for (packet = remote_protocol_packets;
956 packet < &remote_protocol_packets[PACKET_MAX];
959 if (&packet->detect == c->var)
961 show_packet_config_cmd (packet);
965 internal_error (__FILE__, __LINE__, "Could not find config for %s",
969 /* Should we try one of the 'Z' requests? */
973 Z_PACKET_SOFTWARE_BP,
974 Z_PACKET_HARDWARE_BP,
981 /* For compatibility with older distributions. Provide a ``set remote
982 Z-packet ...'' command that updates all the Z packet types. */
984 static enum auto_boolean remote_Z_packet_detect;
987 set_remote_protocol_Z_packet_cmd (char *args, int from_tty,
988 struct cmd_list_element *c)
991 for (i = 0; i < NR_Z_PACKET_TYPES; i++)
993 remote_protocol_packets[PACKET_Z0 + i].detect = remote_Z_packet_detect;
994 update_packet_config (&remote_protocol_packets[PACKET_Z0 + i]);
999 show_remote_protocol_Z_packet_cmd (struct ui_file *file, int from_tty,
1000 struct cmd_list_element *c,
1004 for (i = 0; i < NR_Z_PACKET_TYPES; i++)
1006 show_packet_config_cmd (&remote_protocol_packets[PACKET_Z0 + i]);
1010 /* Should we try the 'ThreadInfo' query packet?
1012 This variable (NOT available to the user: auto-detect only!)
1013 determines whether GDB will use the new, simpler "ThreadInfo"
1014 query or the older, more complex syntax for thread queries.
1015 This is an auto-detect variable (set to true at each connect,
1016 and set to false when the target fails to recognize it). */
1018 static int use_threadinfo_query;
1019 static int use_threadextra_query;
1021 /* Tokens for use by the asynchronous signal handlers for SIGINT. */
1022 static struct async_signal_handler *sigint_remote_twice_token;
1023 static struct async_signal_handler *sigint_remote_token;
1025 /* These are pointers to hook functions that may be set in order to
1026 modify resume/wait behavior for a particular architecture. */
1028 void (*deprecated_target_resume_hook) (void);
1029 void (*deprecated_target_wait_loop_hook) (void);
1033 /* These are the threads which we last sent to the remote system.
1034 -1 for all or -2 for not sent yet. */
1035 static int general_thread;
1036 static int continue_thread;
1038 /* Call this function as a result of
1039 1) A halt indication (T packet) containing a thread id
1040 2) A direct query of currthread
1041 3) Successful execution of set thread
1045 record_currthread (int currthread)
1047 general_thread = currthread;
1049 /* If this is a new thread, add it to GDB's thread list.
1050 If we leave it up to WFI to do this, bad things will happen. */
1051 if (!in_thread_list (pid_to_ptid (currthread)))
1053 add_thread (pid_to_ptid (currthread));
1054 ui_out_text (uiout, "[New ");
1055 ui_out_text (uiout, target_pid_to_str (pid_to_ptid (currthread)));
1056 ui_out_text (uiout, "]\n");
1060 static char *last_pass_packet;
1062 /* If 'QPassSignals' is supported, tell the remote stub what signals
1063 it can simply pass through to the inferior without reporting. */
1066 remote_pass_signals (void)
1068 if (remote_protocol_packets[PACKET_QPassSignals].support != PACKET_DISABLE)
1070 char *pass_packet, *p;
1071 int numsigs = (int) TARGET_SIGNAL_LAST;
1074 gdb_assert (numsigs < 256);
1075 for (i = 0; i < numsigs; i++)
1077 if (signal_stop_state (i) == 0
1078 && signal_print_state (i) == 0
1079 && signal_pass_state (i) == 1)
1082 pass_packet = xmalloc (count * 3 + strlen ("QPassSignals:") + 1);
1083 strcpy (pass_packet, "QPassSignals:");
1084 p = pass_packet + strlen (pass_packet);
1085 for (i = 0; i < numsigs; i++)
1087 if (signal_stop_state (i) == 0
1088 && signal_print_state (i) == 0
1089 && signal_pass_state (i) == 1)
1092 *p++ = tohex (i >> 4);
1093 *p++ = tohex (i & 15);
1102 if (!last_pass_packet || strcmp (last_pass_packet, pass_packet))
1104 struct remote_state *rs = get_remote_state ();
1105 char *buf = rs->buf;
1107 putpkt (pass_packet);
1108 getpkt (&rs->buf, &rs->buf_size, 0);
1109 packet_ok (buf, &remote_protocol_packets[PACKET_QPassSignals]);
1110 if (last_pass_packet)
1111 xfree (last_pass_packet);
1112 last_pass_packet = pass_packet;
1115 xfree (pass_packet);
1119 #define MAGIC_NULL_PID 42000
1122 set_thread (int th, int gen)
1124 struct remote_state *rs = get_remote_state ();
1125 char *buf = rs->buf;
1126 int state = gen ? general_thread : continue_thread;
1132 buf[1] = gen ? 'g' : 'c';
1133 if (th == MAGIC_NULL_PID)
1139 xsnprintf (&buf[2], get_remote_packet_size () - 2, "-%x", -th);
1141 xsnprintf (&buf[2], get_remote_packet_size () - 2, "%x", th);
1143 getpkt (&rs->buf, &rs->buf_size, 0);
1145 general_thread = th;
1147 continue_thread = th;
1150 /* Return nonzero if the thread TH is still alive on the remote system. */
1153 remote_thread_alive (ptid_t ptid)
1155 struct remote_state *rs = get_remote_state ();
1156 int tid = PIDGET (ptid);
1159 xsnprintf (rs->buf, get_remote_packet_size (), "T-%08x", -tid);
1161 xsnprintf (rs->buf, get_remote_packet_size (), "T%08x", tid);
1163 getpkt (&rs->buf, &rs->buf_size, 0);
1164 return (rs->buf[0] == 'O' && rs->buf[1] == 'K');
1167 /* About these extended threadlist and threadinfo packets. They are
1168 variable length packets but, the fields within them are often fixed
1169 length. They are redundent enough to send over UDP as is the
1170 remote protocol in general. There is a matching unit test module
1173 #define OPAQUETHREADBYTES 8
1175 /* a 64 bit opaque identifier */
1176 typedef unsigned char threadref[OPAQUETHREADBYTES];
1178 /* WARNING: This threadref data structure comes from the remote O.S.,
1179 libstub protocol encoding, and remote.c. it is not particularly
1182 /* Right now, the internal structure is int. We want it to be bigger.
1186 typedef int gdb_threadref; /* Internal GDB thread reference. */
1188 /* gdb_ext_thread_info is an internal GDB data structure which is
1189 equivalent to the reply of the remote threadinfo packet. */
1191 struct gdb_ext_thread_info
1193 threadref threadid; /* External form of thread reference. */
1194 int active; /* Has state interesting to GDB?
1196 char display[256]; /* Brief state display, name,
1197 blocked/suspended. */
1198 char shortname[32]; /* To be used to name threads. */
1199 char more_display[256]; /* Long info, statistics, queue depth,
1203 /* The volume of remote transfers can be limited by submitting
1204 a mask containing bits specifying the desired information.
1205 Use a union of these values as the 'selection' parameter to
1206 get_thread_info. FIXME: Make these TAG names more thread specific.
1209 #define TAG_THREADID 1
1210 #define TAG_EXISTS 2
1211 #define TAG_DISPLAY 4
1212 #define TAG_THREADNAME 8
1213 #define TAG_MOREDISPLAY 16
1215 #define BUF_THREAD_ID_SIZE (OPAQUETHREADBYTES * 2)
1217 char *unpack_varlen_hex (char *buff, ULONGEST *result);
1219 static char *unpack_nibble (char *buf, int *val);
1221 static char *pack_nibble (char *buf, int nibble);
1223 static char *pack_hex_byte (char *pkt, int /* unsigned char */ byte);
1225 static char *unpack_byte (char *buf, int *value);
1227 static char *pack_int (char *buf, int value);
1229 static char *unpack_int (char *buf, int *value);
1231 static char *unpack_string (char *src, char *dest, int length);
1233 static char *pack_threadid (char *pkt, threadref *id);
1235 static char *unpack_threadid (char *inbuf, threadref *id);
1237 void int_to_threadref (threadref *id, int value);
1239 static int threadref_to_int (threadref *ref);
1241 static void copy_threadref (threadref *dest, threadref *src);
1243 static int threadmatch (threadref *dest, threadref *src);
1245 static char *pack_threadinfo_request (char *pkt, int mode,
1248 static int remote_unpack_thread_info_response (char *pkt,
1249 threadref *expectedref,
1250 struct gdb_ext_thread_info
1254 static int remote_get_threadinfo (threadref *threadid,
1255 int fieldset, /*TAG mask */
1256 struct gdb_ext_thread_info *info);
1258 static char *pack_threadlist_request (char *pkt, int startflag,
1260 threadref *nextthread);
1262 static int parse_threadlist_response (char *pkt,
1264 threadref *original_echo,
1265 threadref *resultlist,
1268 static int remote_get_threadlist (int startflag,
1269 threadref *nextthread,
1273 threadref *threadlist);
1275 typedef int (*rmt_thread_action) (threadref *ref, void *context);
1277 static int remote_threadlist_iterator (rmt_thread_action stepfunction,
1278 void *context, int looplimit);
1280 static int remote_newthread_step (threadref *ref, void *context);
1282 /* Encode 64 bits in 16 chars of hex. */
1284 static const char hexchars[] = "0123456789abcdef";
1287 ishex (int ch, int *val)
1289 if ((ch >= 'a') && (ch <= 'f'))
1291 *val = ch - 'a' + 10;
1294 if ((ch >= 'A') && (ch <= 'F'))
1296 *val = ch - 'A' + 10;
1299 if ((ch >= '0') && (ch <= '9'))
1310 if (ch >= 'a' && ch <= 'f')
1311 return ch - 'a' + 10;
1312 if (ch >= '0' && ch <= '9')
1314 if (ch >= 'A' && ch <= 'F')
1315 return ch - 'A' + 10;
1320 stub_unpack_int (char *buff, int fieldlength)
1327 nibble = stubhex (*buff++);
1331 retval = retval << 4;
1337 unpack_varlen_hex (char *buff, /* packet to parse */
1341 ULONGEST retval = 0;
1343 while (ishex (*buff, &nibble))
1346 retval = retval << 4;
1347 retval |= nibble & 0x0f;
1354 unpack_nibble (char *buf, int *val)
1356 *val = fromhex (*buf++);
1361 pack_nibble (char *buf, int nibble)
1363 *buf++ = hexchars[(nibble & 0x0f)];
1368 pack_hex_byte (char *pkt, int byte)
1370 *pkt++ = hexchars[(byte >> 4) & 0xf];
1371 *pkt++ = hexchars[(byte & 0xf)];
1376 unpack_byte (char *buf, int *value)
1378 *value = stub_unpack_int (buf, 2);
1383 pack_int (char *buf, int value)
1385 buf = pack_hex_byte (buf, (value >> 24) & 0xff);
1386 buf = pack_hex_byte (buf, (value >> 16) & 0xff);
1387 buf = pack_hex_byte (buf, (value >> 8) & 0x0ff);
1388 buf = pack_hex_byte (buf, (value & 0xff));
1393 unpack_int (char *buf, int *value)
1395 *value = stub_unpack_int (buf, 8);
1399 #if 0 /* Currently unused, uncomment when needed. */
1400 static char *pack_string (char *pkt, char *string);
1403 pack_string (char *pkt, char *string)
1408 len = strlen (string);
1410 len = 200; /* Bigger than most GDB packets, junk??? */
1411 pkt = pack_hex_byte (pkt, len);
1415 if ((ch == '\0') || (ch == '#'))
1416 ch = '*'; /* Protect encapsulation. */
1421 #endif /* 0 (unused) */
1424 unpack_string (char *src, char *dest, int length)
1433 pack_threadid (char *pkt, threadref *id)
1436 unsigned char *altid;
1438 altid = (unsigned char *) id;
1439 limit = pkt + BUF_THREAD_ID_SIZE;
1441 pkt = pack_hex_byte (pkt, *altid++);
1447 unpack_threadid (char *inbuf, threadref *id)
1450 char *limit = inbuf + BUF_THREAD_ID_SIZE;
1453 altref = (char *) id;
1455 while (inbuf < limit)
1457 x = stubhex (*inbuf++);
1458 y = stubhex (*inbuf++);
1459 *altref++ = (x << 4) | y;
1464 /* Externally, threadrefs are 64 bits but internally, they are still
1465 ints. This is due to a mismatch of specifications. We would like
1466 to use 64bit thread references internally. This is an adapter
1470 int_to_threadref (threadref *id, int value)
1472 unsigned char *scan;
1474 scan = (unsigned char *) id;
1480 *scan++ = (value >> 24) & 0xff;
1481 *scan++ = (value >> 16) & 0xff;
1482 *scan++ = (value >> 8) & 0xff;
1483 *scan++ = (value & 0xff);
1487 threadref_to_int (threadref *ref)
1490 unsigned char *scan;
1496 value = (value << 8) | ((*scan++) & 0xff);
1501 copy_threadref (threadref *dest, threadref *src)
1504 unsigned char *csrc, *cdest;
1506 csrc = (unsigned char *) src;
1507 cdest = (unsigned char *) dest;
1514 threadmatch (threadref *dest, threadref *src)
1516 /* Things are broken right now, so just assume we got a match. */
1518 unsigned char *srcp, *destp;
1520 srcp = (char *) src;
1521 destp = (char *) dest;
1525 result &= (*srcp++ == *destp++) ? 1 : 0;
1532 threadid:1, # always request threadid
1539 /* Encoding: 'Q':8,'P':8,mask:32,threadid:64 */
1542 pack_threadinfo_request (char *pkt, int mode, threadref *id)
1544 *pkt++ = 'q'; /* Info Query */
1545 *pkt++ = 'P'; /* process or thread info */
1546 pkt = pack_int (pkt, mode); /* mode */
1547 pkt = pack_threadid (pkt, id); /* threadid */
1548 *pkt = '\0'; /* terminate */
1552 /* These values tag the fields in a thread info response packet. */
1553 /* Tagging the fields allows us to request specific fields and to
1554 add more fields as time goes by. */
1556 #define TAG_THREADID 1 /* Echo the thread identifier. */
1557 #define TAG_EXISTS 2 /* Is this process defined enough to
1558 fetch registers and its stack? */
1559 #define TAG_DISPLAY 4 /* A short thing maybe to put on a window */
1560 #define TAG_THREADNAME 8 /* string, maps 1-to-1 with a thread is. */
1561 #define TAG_MOREDISPLAY 16 /* Whatever the kernel wants to say about
1565 remote_unpack_thread_info_response (char *pkt, threadref *expectedref,
1566 struct gdb_ext_thread_info *info)
1568 struct remote_state *rs = get_remote_state ();
1572 char *limit = pkt + rs->buf_size; /* Plausible parsing limit. */
1575 /* info->threadid = 0; FIXME: implement zero_threadref. */
1577 info->display[0] = '\0';
1578 info->shortname[0] = '\0';
1579 info->more_display[0] = '\0';
1581 /* Assume the characters indicating the packet type have been
1583 pkt = unpack_int (pkt, &mask); /* arg mask */
1584 pkt = unpack_threadid (pkt, &ref);
1587 warning (_("Incomplete response to threadinfo request."));
1588 if (!threadmatch (&ref, expectedref))
1589 { /* This is an answer to a different request. */
1590 warning (_("ERROR RMT Thread info mismatch."));
1593 copy_threadref (&info->threadid, &ref);
1595 /* Loop on tagged fields , try to bail if somthing goes wrong. */
1597 /* Packets are terminated with nulls. */
1598 while ((pkt < limit) && mask && *pkt)
1600 pkt = unpack_int (pkt, &tag); /* tag */
1601 pkt = unpack_byte (pkt, &length); /* length */
1602 if (!(tag & mask)) /* Tags out of synch with mask. */
1604 warning (_("ERROR RMT: threadinfo tag mismatch."));
1608 if (tag == TAG_THREADID)
1612 warning (_("ERROR RMT: length of threadid is not 16."));
1616 pkt = unpack_threadid (pkt, &ref);
1617 mask = mask & ~TAG_THREADID;
1620 if (tag == TAG_EXISTS)
1622 info->active = stub_unpack_int (pkt, length);
1624 mask = mask & ~(TAG_EXISTS);
1627 warning (_("ERROR RMT: 'exists' length too long."));
1633 if (tag == TAG_THREADNAME)
1635 pkt = unpack_string (pkt, &info->shortname[0], length);
1636 mask = mask & ~TAG_THREADNAME;
1639 if (tag == TAG_DISPLAY)
1641 pkt = unpack_string (pkt, &info->display[0], length);
1642 mask = mask & ~TAG_DISPLAY;
1645 if (tag == TAG_MOREDISPLAY)
1647 pkt = unpack_string (pkt, &info->more_display[0], length);
1648 mask = mask & ~TAG_MOREDISPLAY;
1651 warning (_("ERROR RMT: unknown thread info tag."));
1652 break; /* Not a tag we know about. */
1658 remote_get_threadinfo (threadref *threadid, int fieldset, /* TAG mask */
1659 struct gdb_ext_thread_info *info)
1661 struct remote_state *rs = get_remote_state ();
1664 pack_threadinfo_request (rs->buf, fieldset, threadid);
1666 getpkt (&rs->buf, &rs->buf_size, 0);
1667 result = remote_unpack_thread_info_response (rs->buf + 2,
1672 /* Format: i'Q':8,i"L":8,initflag:8,batchsize:16,lastthreadid:32 */
1675 pack_threadlist_request (char *pkt, int startflag, int threadcount,
1676 threadref *nextthread)
1678 *pkt++ = 'q'; /* info query packet */
1679 *pkt++ = 'L'; /* Process LIST or threadLIST request */
1680 pkt = pack_nibble (pkt, startflag); /* initflag 1 bytes */
1681 pkt = pack_hex_byte (pkt, threadcount); /* threadcount 2 bytes */
1682 pkt = pack_threadid (pkt, nextthread); /* 64 bit thread identifier */
1687 /* Encoding: 'q':8,'M':8,count:16,done:8,argthreadid:64,(threadid:64)* */
1690 parse_threadlist_response (char *pkt, int result_limit,
1691 threadref *original_echo, threadref *resultlist,
1694 struct remote_state *rs = get_remote_state ();
1696 int count, resultcount, done;
1699 /* Assume the 'q' and 'M chars have been stripped. */
1700 limit = pkt + (rs->buf_size - BUF_THREAD_ID_SIZE);
1701 /* done parse past here */
1702 pkt = unpack_byte (pkt, &count); /* count field */
1703 pkt = unpack_nibble (pkt, &done);
1704 /* The first threadid is the argument threadid. */
1705 pkt = unpack_threadid (pkt, original_echo); /* should match query packet */
1706 while ((count-- > 0) && (pkt < limit))
1708 pkt = unpack_threadid (pkt, resultlist++);
1709 if (resultcount++ >= result_limit)
1718 remote_get_threadlist (int startflag, threadref *nextthread, int result_limit,
1719 int *done, int *result_count, threadref *threadlist)
1721 struct remote_state *rs = get_remote_state ();
1722 static threadref echo_nextthread;
1725 /* Trancate result limit to be smaller than the packet size. */
1726 if ((((result_limit + 1) * BUF_THREAD_ID_SIZE) + 10) >= get_remote_packet_size ())
1727 result_limit = (get_remote_packet_size () / BUF_THREAD_ID_SIZE) - 2;
1729 pack_threadlist_request (rs->buf, startflag, result_limit, nextthread);
1731 getpkt (&rs->buf, &rs->buf_size, 0);
1734 parse_threadlist_response (rs->buf + 2, result_limit, &echo_nextthread,
1737 if (!threadmatch (&echo_nextthread, nextthread))
1739 /* FIXME: This is a good reason to drop the packet. */
1740 /* Possably, there is a duplicate response. */
1742 retransmit immediatly - race conditions
1743 retransmit after timeout - yes
1745 wait for packet, then exit
1747 warning (_("HMM: threadlist did not echo arg thread, dropping it."));
1748 return 0; /* I choose simply exiting. */
1750 if (*result_count <= 0)
1754 warning (_("RMT ERROR : failed to get remote thread list."));
1757 return result; /* break; */
1759 if (*result_count > result_limit)
1762 warning (_("RMT ERROR: threadlist response longer than requested."));
1768 /* This is the interface between remote and threads, remotes upper
1771 /* remote_find_new_threads retrieves the thread list and for each
1772 thread in the list, looks up the thread in GDB's internal list,
1773 ading the thread if it does not already exist. This involves
1774 getting partial thread lists from the remote target so, polling the
1775 quit_flag is required. */
1778 /* About this many threadisds fit in a packet. */
1780 #define MAXTHREADLISTRESULTS 32
1783 remote_threadlist_iterator (rmt_thread_action stepfunction, void *context,
1786 int done, i, result_count;
1790 static threadref nextthread;
1791 static threadref resultthreadlist[MAXTHREADLISTRESULTS];
1796 if (loopcount++ > looplimit)
1799 warning (_("Remote fetch threadlist -infinite loop-."));
1802 if (!remote_get_threadlist (startflag, &nextthread, MAXTHREADLISTRESULTS,
1803 &done, &result_count, resultthreadlist))
1808 /* Clear for later iterations. */
1810 /* Setup to resume next batch of thread references, set nextthread. */
1811 if (result_count >= 1)
1812 copy_threadref (&nextthread, &resultthreadlist[result_count - 1]);
1814 while (result_count--)
1815 if (!(result = (*stepfunction) (&resultthreadlist[i++], context)))
1822 remote_newthread_step (threadref *ref, void *context)
1826 ptid = pid_to_ptid (threadref_to_int (ref));
1828 if (!in_thread_list (ptid))
1830 return 1; /* continue iterator */
1833 #define CRAZY_MAX_THREADS 1000
1836 remote_current_thread (ptid_t oldpid)
1838 struct remote_state *rs = get_remote_state ();
1841 getpkt (&rs->buf, &rs->buf_size, 0);
1842 if (rs->buf[0] == 'Q' && rs->buf[1] == 'C')
1843 /* Use strtoul here, so we'll correctly parse values whose highest
1844 bit is set. The protocol carries them as a simple series of
1845 hex digits; in the absence of a sign, strtol will see such
1846 values as positive numbers out of range for signed 'long', and
1847 return LONG_MAX to indicate an overflow. */
1848 return pid_to_ptid (strtoul (&rs->buf[2], NULL, 16));
1853 /* Find new threads for info threads command.
1854 * Original version, using John Metzler's thread protocol.
1858 remote_find_new_threads (void)
1860 remote_threadlist_iterator (remote_newthread_step, 0,
1862 if (PIDGET (inferior_ptid) == MAGIC_NULL_PID) /* ack ack ack */
1863 inferior_ptid = remote_current_thread (inferior_ptid);
1867 * Find all threads for info threads command.
1868 * Uses new thread protocol contributed by Cisco.
1869 * Falls back and attempts to use the older method (above)
1870 * if the target doesn't respond to the new method.
1874 remote_threads_info (void)
1876 struct remote_state *rs = get_remote_state ();
1880 if (remote_desc == 0) /* paranoia */
1881 error (_("Command can only be used when connected to the remote target."));
1883 if (use_threadinfo_query)
1885 putpkt ("qfThreadInfo");
1886 getpkt (&rs->buf, &rs->buf_size, 0);
1888 if (bufp[0] != '\0') /* q packet recognized */
1890 while (*bufp++ == 'm') /* reply contains one or more TID */
1894 /* Use strtoul here, so we'll correctly parse values
1895 whose highest bit is set. The protocol carries
1896 them as a simple series of hex digits; in the
1897 absence of a sign, strtol will see such values as
1898 positive numbers out of range for signed 'long',
1899 and return LONG_MAX to indicate an overflow. */
1900 tid = strtoul (bufp, &bufp, 16);
1901 if (tid != 0 && !in_thread_list (pid_to_ptid (tid)))
1902 add_thread (pid_to_ptid (tid));
1904 while (*bufp++ == ','); /* comma-separated list */
1905 putpkt ("qsThreadInfo");
1906 getpkt (&rs->buf, &rs->buf_size, 0);
1913 /* Else fall back to old method based on jmetzler protocol. */
1914 use_threadinfo_query = 0;
1915 remote_find_new_threads ();
1920 * Collect a descriptive string about the given thread.
1921 * The target may say anything it wants to about the thread
1922 * (typically info about its blocked / runnable state, name, etc.).
1923 * This string will appear in the info threads display.
1925 * Optional: targets are not required to implement this function.
1929 remote_threads_extra_info (struct thread_info *tp)
1931 struct remote_state *rs = get_remote_state ();
1935 struct gdb_ext_thread_info threadinfo;
1936 static char display_buf[100]; /* arbitrary... */
1937 int n = 0; /* position in display_buf */
1939 if (remote_desc == 0) /* paranoia */
1940 internal_error (__FILE__, __LINE__,
1941 _("remote_threads_extra_info"));
1943 if (use_threadextra_query)
1945 xsnprintf (rs->buf, get_remote_packet_size (), "qThreadExtraInfo,%x",
1948 getpkt (&rs->buf, &rs->buf_size, 0);
1949 if (rs->buf[0] != 0)
1951 n = min (strlen (rs->buf) / 2, sizeof (display_buf));
1952 result = hex2bin (rs->buf, (gdb_byte *) display_buf, n);
1953 display_buf [result] = '\0';
1958 /* If the above query fails, fall back to the old method. */
1959 use_threadextra_query = 0;
1960 set = TAG_THREADID | TAG_EXISTS | TAG_THREADNAME
1961 | TAG_MOREDISPLAY | TAG_DISPLAY;
1962 int_to_threadref (&id, PIDGET (tp->ptid));
1963 if (remote_get_threadinfo (&id, set, &threadinfo))
1964 if (threadinfo.active)
1966 if (*threadinfo.shortname)
1967 n += xsnprintf (&display_buf[0], sizeof (display_buf) - n,
1968 " Name: %s,", threadinfo.shortname);
1969 if (*threadinfo.display)
1970 n += xsnprintf (&display_buf[n], sizeof (display_buf) - n,
1971 " State: %s,", threadinfo.display);
1972 if (*threadinfo.more_display)
1973 n += xsnprintf (&display_buf[n], sizeof (display_buf) - n,
1974 " Priority: %s", threadinfo.more_display);
1978 /* For purely cosmetic reasons, clear up trailing commas. */
1979 if (',' == display_buf[n-1])
1980 display_buf[n-1] = ' ';
1988 /* Restart the remote side; this is an extended protocol operation. */
1991 extended_remote_restart (void)
1993 struct remote_state *rs = get_remote_state ();
1995 /* Send the restart command; for reasons I don't understand the
1996 remote side really expects a number after the "R". */
1997 xsnprintf (rs->buf, get_remote_packet_size (), "R%x", 0);
2000 remote_fileio_reset ();
2002 /* Now query for status so this looks just like we restarted
2003 gdbserver from scratch. */
2005 getpkt (&rs->buf, &rs->buf_size, 0);
2008 /* Clean up connection to a remote debugger. */
2011 remote_close (int quitting)
2014 serial_close (remote_desc);
2018 /* Query the remote side for the text, data and bss offsets. */
2023 struct remote_state *rs = get_remote_state ();
2026 int lose, num_segments = 0, do_sections, do_segments;
2027 CORE_ADDR text_addr, data_addr, bss_addr, segments[2];
2028 struct section_offsets *offs;
2029 struct symfile_segment_data *data;
2031 if (symfile_objfile == NULL)
2034 putpkt ("qOffsets");
2035 getpkt (&rs->buf, &rs->buf_size, 0);
2038 if (buf[0] == '\000')
2039 return; /* Return silently. Stub doesn't support
2043 warning (_("Remote failure reply: %s"), buf);
2047 /* Pick up each field in turn. This used to be done with scanf, but
2048 scanf will make trouble if CORE_ADDR size doesn't match
2049 conversion directives correctly. The following code will work
2050 with any size of CORE_ADDR. */
2051 text_addr = data_addr = bss_addr = 0;
2055 if (strncmp (ptr, "Text=", 5) == 0)
2058 /* Don't use strtol, could lose on big values. */
2059 while (*ptr && *ptr != ';')
2060 text_addr = (text_addr << 4) + fromhex (*ptr++);
2062 if (strncmp (ptr, ";Data=", 6) == 0)
2065 while (*ptr && *ptr != ';')
2066 data_addr = (data_addr << 4) + fromhex (*ptr++);
2071 if (!lose && strncmp (ptr, ";Bss=", 5) == 0)
2074 while (*ptr && *ptr != ';')
2075 bss_addr = (bss_addr << 4) + fromhex (*ptr++);
2077 if (bss_addr != data_addr)
2078 warning (_("Target reported unsupported offsets: %s"), buf);
2083 else if (strncmp (ptr, "TextSeg=", 8) == 0)
2086 /* Don't use strtol, could lose on big values. */
2087 while (*ptr && *ptr != ';')
2088 text_addr = (text_addr << 4) + fromhex (*ptr++);
2091 if (strncmp (ptr, ";DataSeg=", 9) == 0)
2094 while (*ptr && *ptr != ';')
2095 data_addr = (data_addr << 4) + fromhex (*ptr++);
2103 error (_("Malformed response to offset query, %s"), buf);
2104 else if (*ptr != '\0')
2105 warning (_("Target reported unsupported offsets: %s"), buf);
2107 offs = ((struct section_offsets *)
2108 alloca (SIZEOF_N_SECTION_OFFSETS (symfile_objfile->num_sections)));
2109 memcpy (offs, symfile_objfile->section_offsets,
2110 SIZEOF_N_SECTION_OFFSETS (symfile_objfile->num_sections));
2112 data = get_symfile_segment_data (symfile_objfile->obfd);
2113 do_segments = (data != NULL);
2114 do_sections = num_segments == 0;
2116 if (num_segments > 0)
2118 segments[0] = text_addr;
2119 segments[1] = data_addr;
2121 /* If we have two segments, we can still try to relocate everything
2122 by assuming that the .text and .data offsets apply to the whole
2123 text and data segments. Convert the offsets given in the packet
2124 to base addresses for symfile_map_offsets_to_segments. */
2125 else if (data && data->num_segments == 2)
2127 segments[0] = data->segment_bases[0] + text_addr;
2128 segments[1] = data->segment_bases[1] + data_addr;
2131 /* There's no way to relocate by segment. */
2137 int ret = symfile_map_offsets_to_segments (symfile_objfile->obfd, data,
2138 offs, num_segments, segments);
2140 if (ret == 0 && !do_sections)
2141 error (_("Can not handle qOffsets TextSeg response with this symbol file"));
2148 free_symfile_segment_data (data);
2152 offs->offsets[SECT_OFF_TEXT (symfile_objfile)] = text_addr;
2154 /* This is a temporary kludge to force data and bss to use the same offsets
2155 because that's what nlmconv does now. The real solution requires changes
2156 to the stub and remote.c that I don't have time to do right now. */
2158 offs->offsets[SECT_OFF_DATA (symfile_objfile)] = data_addr;
2159 offs->offsets[SECT_OFF_BSS (symfile_objfile)] = data_addr;
2162 objfile_relocate (symfile_objfile, offs);
2165 /* Stub for catch_exception. */
2168 remote_start_remote (struct ui_out *uiout, void *from_tty_p)
2170 int from_tty = * (int *) from_tty_p;
2172 immediate_quit++; /* Allow user to interrupt it. */
2174 /* Ack any packet which the remote side has already sent. */
2175 serial_write (remote_desc, "+", 1);
2177 /* Let the stub know that we want it to return the thread. */
2180 inferior_ptid = remote_current_thread (inferior_ptid);
2182 get_offsets (); /* Get text, data & bss offsets. */
2184 putpkt ("?"); /* Initiate a query from remote machine. */
2187 start_remote (from_tty); /* Initialize gdb process mechanisms. */
2190 /* Open a connection to a remote debugger.
2191 NAME is the filename used for communication. */
2194 remote_open (char *name, int from_tty)
2196 remote_open_1 (name, from_tty, &remote_ops, 0, 0);
2199 /* Just like remote_open, but with asynchronous support. */
2201 remote_async_open (char *name, int from_tty)
2203 remote_open_1 (name, from_tty, &remote_async_ops, 0, 1);
2206 /* Open a connection to a remote debugger using the extended
2207 remote gdb protocol. NAME is the filename used for communication. */
2210 extended_remote_open (char *name, int from_tty)
2212 remote_open_1 (name, from_tty, &extended_remote_ops, 1 /*extended_p */,
2216 /* Just like extended_remote_open, but with asynchronous support. */
2218 extended_remote_async_open (char *name, int from_tty)
2220 remote_open_1 (name, from_tty, &extended_async_remote_ops,
2221 1 /*extended_p */, 1 /* async_p */);
2224 /* Generic code for opening a connection to a remote target. */
2227 init_all_packet_configs (void)
2230 for (i = 0; i < PACKET_MAX; i++)
2231 update_packet_config (&remote_protocol_packets[i]);
2234 /* Symbol look-up. */
2237 remote_check_symbols (struct objfile *objfile)
2239 struct remote_state *rs = get_remote_state ();
2240 char *msg, *reply, *tmp;
2241 struct minimal_symbol *sym;
2244 if (remote_protocol_packets[PACKET_qSymbol].support == PACKET_DISABLE)
2247 /* Allocate a message buffer. We can't reuse the input buffer in RS,
2248 because we need both at the same time. */
2249 msg = alloca (get_remote_packet_size ());
2251 /* Invite target to request symbol lookups. */
2253 putpkt ("qSymbol::");
2254 getpkt (&rs->buf, &rs->buf_size, 0);
2255 packet_ok (rs->buf, &remote_protocol_packets[PACKET_qSymbol]);
2258 while (strncmp (reply, "qSymbol:", 8) == 0)
2261 end = hex2bin (tmp, (gdb_byte *) msg, strlen (tmp) / 2);
2263 sym = lookup_minimal_symbol (msg, NULL, NULL);
2265 xsnprintf (msg, get_remote_packet_size (), "qSymbol::%s", &reply[8]);
2268 CORE_ADDR sym_addr = SYMBOL_VALUE_ADDRESS (sym);
2270 /* If this is a function address, return the start of code
2271 instead of any data function descriptor. */
2272 sym_addr = gdbarch_convert_from_func_ptr_addr (current_gdbarch,
2276 xsnprintf (msg, get_remote_packet_size (), "qSymbol:%s:%s",
2277 paddr_nz (sym_addr), &reply[8]);
2281 getpkt (&rs->buf, &rs->buf_size, 0);
2286 static struct serial *
2287 remote_serial_open (char *name)
2289 static int udp_warning = 0;
2291 /* FIXME: Parsing NAME here is a hack. But we want to warn here instead
2292 of in ser-tcp.c, because it is the remote protocol assuming that the
2293 serial connection is reliable and not the serial connection promising
2295 if (!udp_warning && strncmp (name, "udp:", 4) == 0)
2298 The remote protocol may be unreliable over UDP.\n\
2299 Some events may be lost, rendering further debugging impossible."));
2303 return serial_open (name);
2306 /* This type describes each known response to the qSupported
2308 struct protocol_feature
2310 /* The name of this protocol feature. */
2313 /* The default for this protocol feature. */
2314 enum packet_support default_support;
2316 /* The function to call when this feature is reported, or after
2317 qSupported processing if the feature is not supported.
2318 The first argument points to this structure. The second
2319 argument indicates whether the packet requested support be
2320 enabled, disabled, or probed (or the default, if this function
2321 is being called at the end of processing and this feature was
2322 not reported). The third argument may be NULL; if not NULL, it
2323 is a NUL-terminated string taken from the packet following
2324 this feature's name and an equals sign. */
2325 void (*func) (const struct protocol_feature *, enum packet_support,
2328 /* The corresponding packet for this feature. Only used if
2329 FUNC is remote_supported_packet. */
2334 remote_supported_packet (const struct protocol_feature *feature,
2335 enum packet_support support,
2336 const char *argument)
2340 warning (_("Remote qSupported response supplied an unexpected value for"
2341 " \"%s\"."), feature->name);
2345 if (remote_protocol_packets[feature->packet].support
2346 == PACKET_SUPPORT_UNKNOWN)
2347 remote_protocol_packets[feature->packet].support = support;
2351 remote_packet_size (const struct protocol_feature *feature,
2352 enum packet_support support, const char *value)
2354 struct remote_state *rs = get_remote_state ();
2359 if (support != PACKET_ENABLE)
2362 if (value == NULL || *value == '\0')
2364 warning (_("Remote target reported \"%s\" without a size."),
2370 packet_size = strtol (value, &value_end, 16);
2371 if (errno != 0 || *value_end != '\0' || packet_size < 0)
2373 warning (_("Remote target reported \"%s\" with a bad size: \"%s\"."),
2374 feature->name, value);
2378 if (packet_size > MAX_REMOTE_PACKET_SIZE)
2380 warning (_("limiting remote suggested packet size (%d bytes) to %d"),
2381 packet_size, MAX_REMOTE_PACKET_SIZE);
2382 packet_size = MAX_REMOTE_PACKET_SIZE;
2385 /* Record the new maximum packet size. */
2386 rs->explicit_packet_size = packet_size;
2389 static struct protocol_feature remote_protocol_features[] = {
2390 { "PacketSize", PACKET_DISABLE, remote_packet_size, -1 },
2391 { "qXfer:auxv:read", PACKET_DISABLE, remote_supported_packet,
2392 PACKET_qXfer_auxv },
2393 { "qXfer:features:read", PACKET_DISABLE, remote_supported_packet,
2394 PACKET_qXfer_features },
2395 { "qXfer:libraries:read", PACKET_DISABLE, remote_supported_packet,
2396 PACKET_qXfer_libraries },
2397 { "qXfer:memory-map:read", PACKET_DISABLE, remote_supported_packet,
2398 PACKET_qXfer_memory_map },
2399 { "qXfer:spu:read", PACKET_DISABLE, remote_supported_packet,
2400 PACKET_qXfer_spu_read },
2401 { "qXfer:spu:write", PACKET_DISABLE, remote_supported_packet,
2402 PACKET_qXfer_spu_write },
2403 { "QPassSignals", PACKET_DISABLE, remote_supported_packet,
2404 PACKET_QPassSignals },
2408 remote_query_supported (void)
2410 struct remote_state *rs = get_remote_state ();
2413 unsigned char seen [ARRAY_SIZE (remote_protocol_features)];
2415 /* The packet support flags are handled differently for this packet
2416 than for most others. We treat an error, a disabled packet, and
2417 an empty response identically: any features which must be reported
2418 to be used will be automatically disabled. An empty buffer
2419 accomplishes this, since that is also the representation for a list
2420 containing no features. */
2423 if (remote_protocol_packets[PACKET_qSupported].support != PACKET_DISABLE)
2425 putpkt ("qSupported");
2426 getpkt (&rs->buf, &rs->buf_size, 0);
2428 /* If an error occured, warn, but do not return - just reset the
2429 buffer to empty and go on to disable features. */
2430 if (packet_ok (rs->buf, &remote_protocol_packets[PACKET_qSupported])
2433 warning (_("Remote failure reply: %s"), rs->buf);
2438 memset (seen, 0, sizeof (seen));
2443 enum packet_support is_supported;
2444 char *p, *end, *name_end, *value;
2446 /* First separate out this item from the rest of the packet. If
2447 there's another item after this, we overwrite the separator
2448 (terminated strings are much easier to work with). */
2450 end = strchr (p, ';');
2453 end = p + strlen (p);
2463 warning (_("empty item in \"qSupported\" response"));
2468 name_end = strchr (p, '=');
2471 /* This is a name=value entry. */
2472 is_supported = PACKET_ENABLE;
2473 value = name_end + 1;
2482 is_supported = PACKET_ENABLE;
2486 is_supported = PACKET_DISABLE;
2490 is_supported = PACKET_SUPPORT_UNKNOWN;
2494 warning (_("unrecognized item \"%s\" in \"qSupported\" response"), p);
2500 for (i = 0; i < ARRAY_SIZE (remote_protocol_features); i++)
2501 if (strcmp (remote_protocol_features[i].name, p) == 0)
2503 const struct protocol_feature *feature;
2506 feature = &remote_protocol_features[i];
2507 feature->func (feature, is_supported, value);
2512 /* If we increased the packet size, make sure to increase the global
2513 buffer size also. We delay this until after parsing the entire
2514 qSupported packet, because this is the same buffer we were
2516 if (rs->buf_size < rs->explicit_packet_size)
2518 rs->buf_size = rs->explicit_packet_size;
2519 rs->buf = xrealloc (rs->buf, rs->buf_size);
2522 /* Handle the defaults for unmentioned features. */
2523 for (i = 0; i < ARRAY_SIZE (remote_protocol_features); i++)
2526 const struct protocol_feature *feature;
2528 feature = &remote_protocol_features[i];
2529 feature->func (feature, feature->default_support, NULL);
2535 remote_open_1 (char *name, int from_tty, struct target_ops *target,
2536 int extended_p, int async_p)
2538 struct remote_state *rs = get_remote_state ();
2540 error (_("To open a remote debug connection, you need to specify what\n"
2541 "serial device is attached to the remote system\n"
2542 "(e.g. /dev/ttyS0, /dev/ttya, COM1, etc.)."));
2544 /* See FIXME above. */
2546 wait_forever_enabled_p = 1;
2548 target_preopen (from_tty);
2550 unpush_target (target);
2552 /* Make sure we send the passed signals list the next time we resume. */
2553 xfree (last_pass_packet);
2554 last_pass_packet = NULL;
2556 remote_fileio_reset ();
2557 reopen_exec_file ();
2560 remote_desc = remote_serial_open (name);
2562 perror_with_name (name);
2564 if (baud_rate != -1)
2566 if (serial_setbaudrate (remote_desc, baud_rate))
2568 /* The requested speed could not be set. Error out to
2569 top level after closing remote_desc. Take care to
2570 set remote_desc to NULL to avoid closing remote_desc
2572 serial_close (remote_desc);
2574 perror_with_name (name);
2578 serial_raw (remote_desc);
2580 /* If there is something sitting in the buffer we might take it as a
2581 response to a command, which would be bad. */
2582 serial_flush_input (remote_desc);
2586 puts_filtered ("Remote debugging using ");
2587 puts_filtered (name);
2588 puts_filtered ("\n");
2590 push_target (target); /* Switch to using remote target now. */
2592 /* Reset the target state; these things will be queried either by
2593 remote_query_supported or as they are needed. */
2594 init_all_packet_configs ();
2595 rs->explicit_packet_size = 0;
2597 general_thread = -2;
2598 continue_thread = -2;
2600 /* Probe for ability to use "ThreadInfo" query, as required. */
2601 use_threadinfo_query = 1;
2602 use_threadextra_query = 1;
2604 /* The first packet we send to the target is the optional "supported
2605 packets" request. If the target can answer this, it will tell us
2606 which later probes to skip. */
2607 remote_query_supported ();
2609 /* Next, if the target can specify a description, read it. We do
2610 this before anything involving memory or registers. */
2611 target_find_description ();
2613 /* Without this, some commands which require an active target (such
2614 as kill) won't work. This variable serves (at least) double duty
2615 as both the pid of the target process (if it has such), and as a
2616 flag indicating that a target is active. These functions should
2617 be split out into seperate variables, especially since GDB will
2618 someday have a notion of debugging several processes. */
2620 inferior_ptid = pid_to_ptid (MAGIC_NULL_PID);
2624 /* With this target we start out by owning the terminal. */
2625 remote_async_terminal_ours_p = 1;
2627 /* FIXME: cagney/1999-09-23: During the initial connection it is
2628 assumed that the target is already ready and able to respond to
2629 requests. Unfortunately remote_start_remote() eventually calls
2630 wait_for_inferior() with no timeout. wait_forever_enabled_p gets
2631 around this. Eventually a mechanism that allows
2632 wait_for_inferior() to expect/get timeouts will be
2634 wait_forever_enabled_p = 0;
2637 /* First delete any symbols previously loaded from shared libraries. */
2638 no_shared_libraries (NULL, 0);
2640 /* Start the remote connection. If error() or QUIT, discard this
2641 target (we'd otherwise be in an inconsistent state) and then
2642 propogate the error on up the exception chain. This ensures that
2643 the caller doesn't stumble along blindly assuming that the
2644 function succeeded. The CLI doesn't have this problem but other
2645 UI's, such as MI do.
2647 FIXME: cagney/2002-05-19: Instead of re-throwing the exception,
2648 this function should return an error indication letting the
2649 caller restore the previous state. Unfortunately the command
2650 ``target remote'' is directly wired to this function making that
2651 impossible. On a positive note, the CLI side of this problem has
2652 been fixed - the function set_cmd_context() makes it possible for
2653 all the ``target ....'' commands to share a common callback
2654 function. See cli-dump.c. */
2656 struct gdb_exception ex
2657 = catch_exception (uiout, remote_start_remote, &from_tty,
2663 wait_forever_enabled_p = 1;
2664 throw_exception (ex);
2669 wait_forever_enabled_p = 1;
2673 /* Tell the remote that we are using the extended protocol. */
2675 getpkt (&rs->buf, &rs->buf_size, 0);
2678 if (exec_bfd) /* No use without an exec file. */
2679 remote_check_symbols (symfile_objfile);
2682 /* This takes a program previously attached to and detaches it. After
2683 this is done, GDB can be used to debug some other program. We
2684 better not have left any breakpoints in the target program or it'll
2685 die when it hits one. */
2688 remote_detach (char *args, int from_tty)
2690 struct remote_state *rs = get_remote_state ();
2693 error (_("Argument given to \"detach\" when remotely debugging."));
2695 /* Tell the remote target to detach. */
2696 strcpy (rs->buf, "D");
2698 getpkt (&rs->buf, &rs->buf_size, 0);
2700 if (rs->buf[0] == 'E')
2701 error (_("Can't detach process."));
2703 /* Unregister the file descriptor from the event loop. */
2704 if (target_is_async_p ())
2705 serial_async (remote_desc, NULL, 0);
2707 target_mourn_inferior ();
2709 puts_filtered ("Ending remote debugging.\n");
2712 /* Same as remote_detach, but don't send the "D" packet; just disconnect. */
2715 remote_disconnect (struct target_ops *target, char *args, int from_tty)
2718 error (_("Argument given to \"detach\" when remotely debugging."));
2720 /* Unregister the file descriptor from the event loop. */
2721 if (target_is_async_p ())
2722 serial_async (remote_desc, NULL, 0);
2724 target_mourn_inferior ();
2726 puts_filtered ("Ending remote debugging.\n");
2729 /* Convert hex digit A to a number. */
2734 if (a >= '0' && a <= '9')
2736 else if (a >= 'a' && a <= 'f')
2737 return a - 'a' + 10;
2738 else if (a >= 'A' && a <= 'F')
2739 return a - 'A' + 10;
2741 error (_("Reply contains invalid hex digit %d"), a);
2745 hex2bin (const char *hex, gdb_byte *bin, int count)
2749 for (i = 0; i < count; i++)
2751 if (hex[0] == 0 || hex[1] == 0)
2753 /* Hex string is short, or of uneven length.
2754 Return the count that has been converted so far. */
2757 *bin++ = fromhex (hex[0]) * 16 + fromhex (hex[1]);
2763 /* Convert number NIB to a hex digit. */
2771 return 'a' + nib - 10;
2775 bin2hex (const gdb_byte *bin, char *hex, int count)
2778 /* May use a length, or a nul-terminated string as input. */
2780 count = strlen ((char *) bin);
2782 for (i = 0; i < count; i++)
2784 *hex++ = tohex ((*bin >> 4) & 0xf);
2785 *hex++ = tohex (*bin++ & 0xf);
2791 /* Check for the availability of vCont. This function should also check
2795 remote_vcont_probe (struct remote_state *rs)
2799 strcpy (rs->buf, "vCont?");
2801 getpkt (&rs->buf, &rs->buf_size, 0);
2804 /* Make sure that the features we assume are supported. */
2805 if (strncmp (buf, "vCont", 5) == 0)
2808 int support_s, support_S, support_c, support_C;
2814 while (p && *p == ';')
2817 if (*p == 's' && (*(p + 1) == ';' || *(p + 1) == 0))
2819 else if (*p == 'S' && (*(p + 1) == ';' || *(p + 1) == 0))
2821 else if (*p == 'c' && (*(p + 1) == ';' || *(p + 1) == 0))
2823 else if (*p == 'C' && (*(p + 1) == ';' || *(p + 1) == 0))
2826 p = strchr (p, ';');
2829 /* If s, S, c, and C are not all supported, we can't use vCont. Clearing
2830 BUF will make packet_ok disable the packet. */
2831 if (!support_s || !support_S || !support_c || !support_C)
2835 packet_ok (buf, &remote_protocol_packets[PACKET_vCont]);
2838 /* Resume the remote inferior by using a "vCont" packet. The thread
2839 to be resumed is PTID; STEP and SIGGNAL indicate whether the
2840 resumed thread should be single-stepped and/or signalled. If PTID's
2841 PID is -1, then all threads are resumed; the thread to be stepped and/or
2842 signalled is given in the global INFERIOR_PTID. This function returns
2843 non-zero iff it resumes the inferior.
2845 This function issues a strict subset of all possible vCont commands at the
2849 remote_vcont_resume (ptid_t ptid, int step, enum target_signal siggnal)
2851 struct remote_state *rs = get_remote_state ();
2852 int pid = PIDGET (ptid);
2853 char *buf = NULL, *outbuf;
2854 struct cleanup *old_cleanup;
2856 if (remote_protocol_packets[PACKET_vCont].support == PACKET_SUPPORT_UNKNOWN)
2857 remote_vcont_probe (rs);
2859 if (remote_protocol_packets[PACKET_vCont].support == PACKET_DISABLE)
2862 /* If we could generate a wider range of packets, we'd have to worry
2863 about overflowing BUF. Should there be a generic
2864 "multi-part-packet" packet? */
2866 if (PIDGET (inferior_ptid) == MAGIC_NULL_PID)
2868 /* MAGIC_NULL_PTID means that we don't have any active threads, so we
2869 don't have any PID numbers the inferior will understand. Make sure
2870 to only send forms that do not specify a PID. */
2871 if (step && siggnal != TARGET_SIGNAL_0)
2872 outbuf = xstrprintf ("vCont;S%02x", siggnal);
2874 outbuf = xstrprintf ("vCont;s");
2875 else if (siggnal != TARGET_SIGNAL_0)
2876 outbuf = xstrprintf ("vCont;C%02x", siggnal);
2878 outbuf = xstrprintf ("vCont;c");
2882 /* Resume all threads, with preference for INFERIOR_PTID. */
2883 if (step && siggnal != TARGET_SIGNAL_0)
2884 outbuf = xstrprintf ("vCont;S%02x:%x;c", siggnal,
2885 PIDGET (inferior_ptid));
2887 outbuf = xstrprintf ("vCont;s:%x;c", PIDGET (inferior_ptid));
2888 else if (siggnal != TARGET_SIGNAL_0)
2889 outbuf = xstrprintf ("vCont;C%02x:%x;c", siggnal,
2890 PIDGET (inferior_ptid));
2892 outbuf = xstrprintf ("vCont;c");
2896 /* Scheduler locking; resume only PTID. */
2897 if (step && siggnal != TARGET_SIGNAL_0)
2898 outbuf = xstrprintf ("vCont;S%02x:%x", siggnal, pid);
2900 outbuf = xstrprintf ("vCont;s:%x", pid);
2901 else if (siggnal != TARGET_SIGNAL_0)
2902 outbuf = xstrprintf ("vCont;C%02x:%x", siggnal, pid);
2904 outbuf = xstrprintf ("vCont;c:%x", pid);
2907 gdb_assert (outbuf && strlen (outbuf) < get_remote_packet_size ());
2908 old_cleanup = make_cleanup (xfree, outbuf);
2912 do_cleanups (old_cleanup);
2917 /* Tell the remote machine to resume. */
2919 static enum target_signal last_sent_signal = TARGET_SIGNAL_0;
2921 static int last_sent_step;
2924 remote_resume (ptid_t ptid, int step, enum target_signal siggnal)
2926 struct remote_state *rs = get_remote_state ();
2928 int pid = PIDGET (ptid);
2930 last_sent_signal = siggnal;
2931 last_sent_step = step;
2933 /* A hook for when we need to do something at the last moment before
2935 if (deprecated_target_resume_hook)
2936 (*deprecated_target_resume_hook) ();
2938 /* Update the inferior on signals to silently pass, if they've changed. */
2939 remote_pass_signals ();
2941 /* The vCont packet doesn't need to specify threads via Hc. */
2942 if (remote_vcont_resume (ptid, step, siggnal))
2945 /* All other supported resume packets do use Hc, so call set_thread. */
2947 set_thread (0, 0); /* Run any thread. */
2949 set_thread (pid, 0); /* Run this thread. */
2952 if (siggnal != TARGET_SIGNAL_0)
2954 buf[0] = step ? 'S' : 'C';
2955 buf[1] = tohex (((int) siggnal >> 4) & 0xf);
2956 buf[2] = tohex (((int) siggnal) & 0xf);
2960 strcpy (buf, step ? "s" : "c");
2965 /* Same as remote_resume, but with async support. */
2967 remote_async_resume (ptid_t ptid, int step, enum target_signal siggnal)
2969 remote_resume (ptid, step, siggnal);
2971 /* We are about to start executing the inferior, let's register it
2972 with the event loop. NOTE: this is the one place where all the
2973 execution commands end up. We could alternatively do this in each
2974 of the execution commands in infcmd.c. */
2975 /* FIXME: ezannoni 1999-09-28: We may need to move this out of here
2976 into infcmd.c in order to allow inferior function calls to work
2977 NOT asynchronously. */
2978 if (target_can_async_p ())
2979 target_async (inferior_event_handler, 0);
2980 /* Tell the world that the target is now executing. */
2981 /* FIXME: cagney/1999-09-23: Is it the targets responsibility to set
2982 this? Instead, should the client of target just assume (for
2983 async targets) that the target is going to start executing? Is
2984 this information already found in the continuation block? */
2985 if (target_is_async_p ())
2986 target_executing = 1;
2990 /* Set up the signal handler for SIGINT, while the target is
2991 executing, ovewriting the 'regular' SIGINT signal handler. */
2993 initialize_sigint_signal_handler (void)
2995 sigint_remote_token =
2996 create_async_signal_handler (async_remote_interrupt, NULL);
2997 signal (SIGINT, handle_remote_sigint);
3000 /* Signal handler for SIGINT, while the target is executing. */
3002 handle_remote_sigint (int sig)
3004 signal (sig, handle_remote_sigint_twice);
3005 sigint_remote_twice_token =
3006 create_async_signal_handler (async_remote_interrupt_twice, NULL);
3007 mark_async_signal_handler_wrapper (sigint_remote_token);
3010 /* Signal handler for SIGINT, installed after SIGINT has already been
3011 sent once. It will take effect the second time that the user sends
3014 handle_remote_sigint_twice (int sig)
3016 signal (sig, handle_sigint);
3017 sigint_remote_twice_token =
3018 create_async_signal_handler (inferior_event_handler_wrapper, NULL);
3019 mark_async_signal_handler_wrapper (sigint_remote_twice_token);
3022 /* Perform the real interruption of the target execution, in response
3025 async_remote_interrupt (gdb_client_data arg)
3028 fprintf_unfiltered (gdb_stdlog, "remote_interrupt called\n");
3033 /* Perform interrupt, if the first attempt did not succeed. Just give
3034 up on the target alltogether. */
3036 async_remote_interrupt_twice (gdb_client_data arg)
3039 fprintf_unfiltered (gdb_stdlog, "remote_interrupt_twice called\n");
3040 /* Do something only if the target was not killed by the previous
3042 if (target_executing)
3045 signal (SIGINT, handle_remote_sigint);
3049 /* Reinstall the usual SIGINT handlers, after the target has
3052 cleanup_sigint_signal_handler (void *dummy)
3054 signal (SIGINT, handle_sigint);
3055 if (sigint_remote_twice_token)
3056 delete_async_signal_handler (&sigint_remote_twice_token);
3057 if (sigint_remote_token)
3058 delete_async_signal_handler (&sigint_remote_token);
3061 /* Send ^C to target to halt it. Target will respond, and send us a
3063 static void (*ofunc) (int);
3065 /* The command line interface's stop routine. This function is installed
3066 as a signal handler for SIGINT. The first time a user requests a
3067 stop, we call remote_stop to send a break or ^C. If there is no
3068 response from the target (it didn't stop when the user requested it),
3069 we ask the user if he'd like to detach from the target. */
3071 remote_interrupt (int signo)
3073 /* If this doesn't work, try more severe steps. */
3074 signal (signo, remote_interrupt_twice);
3077 fprintf_unfiltered (gdb_stdlog, "remote_interrupt called\n");
3082 /* The user typed ^C twice. */
3085 remote_interrupt_twice (int signo)
3087 signal (signo, ofunc);
3089 signal (signo, remote_interrupt);
3092 /* This is the generic stop called via the target vector. When a target
3093 interrupt is requested, either by the command line or the GUI, we
3094 will eventually end up here. */
3098 /* Send a break or a ^C, depending on user preference. */
3100 fprintf_unfiltered (gdb_stdlog, "remote_stop called\n");
3103 serial_send_break (remote_desc);
3105 serial_write (remote_desc, "\003", 1);
3108 /* Ask the user what to do when an interrupt is received. */
3111 interrupt_query (void)
3113 target_terminal_ours ();
3115 if (query ("Interrupted while waiting for the program.\n\
3116 Give up (and stop debugging it)? "))
3118 target_mourn_inferior ();
3119 deprecated_throw_reason (RETURN_QUIT);
3122 target_terminal_inferior ();
3125 /* Enable/disable target terminal ownership. Most targets can use
3126 terminal groups to control terminal ownership. Remote targets are
3127 different in that explicit transfer of ownership to/from GDB/target
3131 remote_async_terminal_inferior (void)
3133 /* FIXME: cagney/1999-09-27: Shouldn't need to test for
3134 sync_execution here. This function should only be called when
3135 GDB is resuming the inferior in the forground. A background
3136 resume (``run&'') should leave GDB in control of the terminal and
3137 consequently should not call this code. */
3138 if (!sync_execution)
3140 /* FIXME: cagney/1999-09-27: Closely related to the above. Make
3141 calls target_terminal_*() idenpotent. The event-loop GDB talking
3142 to an asynchronous target with a synchronous command calls this
3143 function from both event-top.c and infrun.c/infcmd.c. Once GDB
3144 stops trying to transfer the terminal to the target when it
3145 shouldn't this guard can go away. */
3146 if (!remote_async_terminal_ours_p)
3148 delete_file_handler (input_fd);
3149 remote_async_terminal_ours_p = 0;
3150 initialize_sigint_signal_handler ();
3151 /* NOTE: At this point we could also register our selves as the
3152 recipient of all input. Any characters typed could then be
3153 passed on down to the target. */
3157 remote_async_terminal_ours (void)
3159 /* See FIXME in remote_async_terminal_inferior. */
3160 if (!sync_execution)
3162 /* See FIXME in remote_async_terminal_inferior. */
3163 if (remote_async_terminal_ours_p)
3165 cleanup_sigint_signal_handler (NULL);
3166 add_file_handler (input_fd, stdin_event_handler, 0);
3167 remote_async_terminal_ours_p = 1;
3170 /* If nonzero, ignore the next kill. */
3175 remote_console_output (char *msg)
3179 for (p = msg; p[0] && p[1]; p += 2)
3182 char c = fromhex (p[0]) * 16 + fromhex (p[1]);
3185 fputs_unfiltered (tb, gdb_stdtarg);
3187 gdb_flush (gdb_stdtarg);
3190 /* Wait until the remote machine stops, then return,
3191 storing status in STATUS just as `wait' would.
3192 Returns "pid", which in the case of a multi-threaded
3193 remote OS, is the thread-id. */
3196 remote_wait (ptid_t ptid, struct target_waitstatus *status)
3198 struct remote_state *rs = get_remote_state ();
3199 struct remote_arch_state *rsa = get_remote_arch_state ();
3200 ULONGEST thread_num = -1;
3202 int solibs_changed = 0;
3204 status->kind = TARGET_WAITKIND_EXITED;
3205 status->value.integer = 0;
3211 ofunc = signal (SIGINT, remote_interrupt);
3212 getpkt (&rs->buf, &rs->buf_size, 1);
3213 signal (SIGINT, ofunc);
3217 /* This is a hook for when we need to do something (perhaps the
3218 collection of trace data) every time the target stops. */
3219 if (deprecated_target_wait_loop_hook)
3220 (*deprecated_target_wait_loop_hook) ();
3222 remote_stopped_by_watchpoint_p = 0;
3226 case 'E': /* Error of some sort. */
3227 warning (_("Remote failure reply: %s"), buf);
3229 case 'F': /* File-I/O request. */
3230 remote_fileio_request (buf);
3232 case 'T': /* Status with PC, SP, FP, ... */
3234 gdb_byte regs[MAX_REGISTER_SIZE];
3236 /* Expedited reply, containing Signal, {regno, reg} repeat. */
3237 /* format is: 'Tssn...:r...;n...:r...;n...:r...;#cc', where
3239 n... = register number
3240 r... = register contents
3242 p = &buf[3]; /* after Txx */
3251 /* If the packet contains a register number save it in
3252 pnum and set p1 to point to the character following
3253 it. Otherwise p1 points to p. */
3255 /* If this packet is an awatch packet, don't parse the
3256 'a' as a register number. */
3258 if (strncmp (p, "awatch", strlen("awatch")) != 0)
3260 /* Read the ``P'' register number. */
3261 pnum = strtol (p, &p_temp, 16);
3267 if (p1 == p) /* No register number present here. */
3269 p1 = strchr (p, ':');
3271 error (_("Malformed packet(a) (missing colon): %s\n\
3274 if (strncmp (p, "thread", p1 - p) == 0)
3276 p_temp = unpack_varlen_hex (++p1, &thread_num);
3277 record_currthread (thread_num);
3280 else if ((strncmp (p, "watch", p1 - p) == 0)
3281 || (strncmp (p, "rwatch", p1 - p) == 0)
3282 || (strncmp (p, "awatch", p1 - p) == 0))
3284 remote_stopped_by_watchpoint_p = 1;
3285 p = unpack_varlen_hex (++p1, &addr);
3286 remote_watch_data_address = (CORE_ADDR)addr;
3288 else if (strncmp (p, "library", p1 - p) == 0)
3292 while (*p_temp && *p_temp != ';')
3300 /* Silently skip unknown optional info. */
3301 p_temp = strchr (p1 + 1, ';');
3308 struct packet_reg *reg = packet_reg_from_pnum (rsa, pnum);
3312 error (_("Malformed packet(b) (missing colon): %s\n\
3317 error (_("Remote sent bad register number %s: %s\n\
3319 phex_nz (pnum, 0), p, buf);
3321 fieldsize = hex2bin (p, regs,
3322 register_size (current_gdbarch,
3325 if (fieldsize < register_size (current_gdbarch,
3327 warning (_("Remote reply is too short: %s"), buf);
3328 regcache_raw_supply (get_current_regcache (),
3333 error (_("Remote register badly formatted: %s\nhere: %s"),
3338 case 'S': /* Old style status, just signal only. */
3340 status->kind = TARGET_WAITKIND_LOADED;
3343 status->kind = TARGET_WAITKIND_STOPPED;
3344 status->value.sig = (enum target_signal)
3345 (((fromhex (buf[1])) << 4) + (fromhex (buf[2])));
3350 thread_num = strtol ((const char *) &buf[4], NULL, 16);
3351 record_currthread (thread_num);
3354 case 'W': /* Target exited. */
3356 /* The remote process exited. */
3357 status->kind = TARGET_WAITKIND_EXITED;
3358 status->value.integer = (fromhex (buf[1]) << 4) + fromhex (buf[2]);
3362 status->kind = TARGET_WAITKIND_SIGNALLED;
3363 status->value.sig = (enum target_signal)
3364 (((fromhex (buf[1])) << 4) + (fromhex (buf[2])));
3368 case 'O': /* Console output. */
3369 remote_console_output (buf + 1);
3372 if (last_sent_signal != TARGET_SIGNAL_0)
3374 /* Zero length reply means that we tried 'S' or 'C' and
3375 the remote system doesn't support it. */
3376 target_terminal_ours_for_output ();
3378 ("Can't send signals to this remote system. %s not sent.\n",
3379 target_signal_to_name (last_sent_signal));
3380 last_sent_signal = TARGET_SIGNAL_0;
3381 target_terminal_inferior ();
3383 strcpy ((char *) buf, last_sent_step ? "s" : "c");
3384 putpkt ((char *) buf);
3387 /* else fallthrough */
3389 warning (_("Invalid remote reply: %s"), buf);
3394 if (thread_num != -1)
3396 return pid_to_ptid (thread_num);
3398 return inferior_ptid;
3401 /* Async version of remote_wait. */
3403 remote_async_wait (ptid_t ptid, struct target_waitstatus *status)
3405 struct remote_state *rs = get_remote_state ();
3406 struct remote_arch_state *rsa = get_remote_arch_state ();
3407 ULONGEST thread_num = -1;
3409 int solibs_changed = 0;
3411 status->kind = TARGET_WAITKIND_EXITED;
3412 status->value.integer = 0;
3414 remote_stopped_by_watchpoint_p = 0;
3420 if (!target_is_async_p ())
3421 ofunc = signal (SIGINT, remote_interrupt);
3422 /* FIXME: cagney/1999-09-27: If we're in async mode we should
3423 _never_ wait for ever -> test on target_is_async_p().
3424 However, before we do that we need to ensure that the caller
3425 knows how to take the target into/out of async mode. */
3426 getpkt (&rs->buf, &rs->buf_size, wait_forever_enabled_p);
3427 if (!target_is_async_p ())
3428 signal (SIGINT, ofunc);
3432 /* This is a hook for when we need to do something (perhaps the
3433 collection of trace data) every time the target stops. */
3434 if (deprecated_target_wait_loop_hook)
3435 (*deprecated_target_wait_loop_hook) ();
3439 case 'E': /* Error of some sort. */
3440 warning (_("Remote failure reply: %s"), buf);
3442 case 'F': /* File-I/O request. */
3443 remote_fileio_request (buf);
3445 case 'T': /* Status with PC, SP, FP, ... */
3447 gdb_byte regs[MAX_REGISTER_SIZE];
3449 /* Expedited reply, containing Signal, {regno, reg} repeat. */
3450 /* format is: 'Tssn...:r...;n...:r...;n...:r...;#cc', where
3452 n... = register number
3453 r... = register contents
3455 p = &buf[3]; /* after Txx */
3464 /* If the packet contains a register number, save it
3465 in pnum and set p1 to point to the character
3466 following it. Otherwise p1 points to p. */
3468 /* If this packet is an awatch packet, don't parse the 'a'
3469 as a register number. */
3471 if (strncmp (p, "awatch", strlen("awatch")) != 0)
3473 /* Read the register number. */
3474 pnum = strtol (p, &p_temp, 16);
3480 if (p1 == p) /* No register number present here. */
3482 p1 = strchr (p, ':');
3484 error (_("Malformed packet(a) (missing colon): %s\n\
3487 if (strncmp (p, "thread", p1 - p) == 0)
3489 p_temp = unpack_varlen_hex (++p1, &thread_num);
3490 record_currthread (thread_num);
3493 else if ((strncmp (p, "watch", p1 - p) == 0)
3494 || (strncmp (p, "rwatch", p1 - p) == 0)
3495 || (strncmp (p, "awatch", p1 - p) == 0))
3497 remote_stopped_by_watchpoint_p = 1;
3498 p = unpack_varlen_hex (++p1, &addr);
3499 remote_watch_data_address = (CORE_ADDR)addr;
3501 else if (strncmp (p, "library", p1 - p) == 0)
3505 while (*p_temp && *p_temp != ';')
3513 /* Silently skip unknown optional info. */
3514 p_temp = strchr (p1 + 1, ';');
3522 struct packet_reg *reg = packet_reg_from_pnum (rsa, pnum);
3525 error (_("Malformed packet(b) (missing colon): %s\n\
3530 error (_("Remote sent bad register number %ld: %s\n\
3534 fieldsize = hex2bin (p, regs,
3535 register_size (current_gdbarch,
3538 if (fieldsize < register_size (current_gdbarch,
3540 warning (_("Remote reply is too short: %s"), buf);
3541 regcache_raw_supply (get_current_regcache (),
3546 error (_("Remote register badly formatted: %s\nhere: %s"),
3551 case 'S': /* Old style status, just signal only. */
3553 status->kind = TARGET_WAITKIND_LOADED;
3556 status->kind = TARGET_WAITKIND_STOPPED;
3557 status->value.sig = (enum target_signal)
3558 (((fromhex (buf[1])) << 4) + (fromhex (buf[2])));
3563 thread_num = strtol ((const char *) &buf[4], NULL, 16);
3564 record_currthread (thread_num);
3567 case 'W': /* Target exited. */
3569 /* The remote process exited. */
3570 status->kind = TARGET_WAITKIND_EXITED;
3571 status->value.integer = (fromhex (buf[1]) << 4) + fromhex (buf[2]);
3575 status->kind = TARGET_WAITKIND_SIGNALLED;
3576 status->value.sig = (enum target_signal)
3577 (((fromhex (buf[1])) << 4) + (fromhex (buf[2])));
3581 case 'O': /* Console output. */
3582 remote_console_output (buf + 1);
3583 /* Return immediately to the event loop. The event loop will
3584 still be waiting on the inferior afterwards. */
3585 status->kind = TARGET_WAITKIND_IGNORE;
3588 if (last_sent_signal != TARGET_SIGNAL_0)
3590 /* Zero length reply means that we tried 'S' or 'C' and
3591 the remote system doesn't support it. */
3592 target_terminal_ours_for_output ();
3594 ("Can't send signals to this remote system. %s not sent.\n",
3595 target_signal_to_name (last_sent_signal));
3596 last_sent_signal = TARGET_SIGNAL_0;
3597 target_terminal_inferior ();
3599 strcpy ((char *) buf, last_sent_step ? "s" : "c");
3600 putpkt ((char *) buf);
3603 /* else fallthrough */
3605 warning (_("Invalid remote reply: %s"), buf);
3610 if (thread_num != -1)
3612 return pid_to_ptid (thread_num);
3614 return inferior_ptid;
3617 /* Fetch a single register using a 'p' packet. */
3620 fetch_register_using_p (struct regcache *regcache, struct packet_reg *reg)
3622 struct remote_state *rs = get_remote_state ();
3624 char regp[MAX_REGISTER_SIZE];
3627 if (remote_protocol_packets[PACKET_p].support == PACKET_DISABLE)
3630 if (reg->pnum == -1)
3635 p += hexnumstr (p, reg->pnum);
3637 remote_send (&rs->buf, &rs->buf_size);
3641 switch (packet_ok (buf, &remote_protocol_packets[PACKET_p]))
3645 case PACKET_UNKNOWN:
3648 error (_("Could not fetch register \"%s\""),
3649 gdbarch_register_name (get_regcache_arch (regcache), reg->regnum));
3652 /* If this register is unfetchable, tell the regcache. */
3655 regcache_raw_supply (regcache, reg->regnum, NULL);
3659 /* Otherwise, parse and supply the value. */
3665 error (_("fetch_register_using_p: early buf termination"));
3667 regp[i++] = fromhex (p[0]) * 16 + fromhex (p[1]);
3670 regcache_raw_supply (regcache, reg->regnum, regp);
3674 /* Fetch the registers included in the target's 'g' packet. */
3677 send_g_packet (void)
3679 struct remote_state *rs = get_remote_state ();
3684 sprintf (rs->buf, "g");
3685 remote_send (&rs->buf, &rs->buf_size);
3687 /* We can get out of synch in various cases. If the first character
3688 in the buffer is not a hex character, assume that has happened
3689 and try to fetch another packet to read. */
3690 while ((rs->buf[0] < '0' || rs->buf[0] > '9')
3691 && (rs->buf[0] < 'A' || rs->buf[0] > 'F')
3692 && (rs->buf[0] < 'a' || rs->buf[0] > 'f')
3693 && rs->buf[0] != 'x') /* New: unavailable register value. */
3696 fprintf_unfiltered (gdb_stdlog,
3697 "Bad register packet; fetching a new packet\n");
3698 getpkt (&rs->buf, &rs->buf_size, 0);
3701 buf_len = strlen (rs->buf);
3703 /* Sanity check the received packet. */
3704 if (buf_len % 2 != 0)
3705 error (_("Remote 'g' packet reply is of odd length: %s"), rs->buf);
3711 process_g_packet (struct regcache *regcache)
3713 struct gdbarch *gdbarch = get_regcache_arch (regcache);
3714 struct remote_state *rs = get_remote_state ();
3715 struct remote_arch_state *rsa = get_remote_arch_state ();
3720 buf_len = strlen (rs->buf);
3722 /* Further sanity checks, with knowledge of the architecture. */
3723 if (buf_len > 2 * rsa->sizeof_g_packet)
3724 error (_("Remote 'g' packet reply is too long: %s"), rs->buf);
3726 /* Save the size of the packet sent to us by the target. It is used
3727 as a heuristic when determining the max size of packets that the
3728 target can safely receive. */
3729 if (rsa->actual_register_packet_size == 0)
3730 rsa->actual_register_packet_size = buf_len;
3732 /* If this is smaller than we guessed the 'g' packet would be,
3733 update our records. A 'g' reply that doesn't include a register's
3734 value implies either that the register is not available, or that
3735 the 'p' packet must be used. */
3736 if (buf_len < 2 * rsa->sizeof_g_packet)
3738 rsa->sizeof_g_packet = buf_len / 2;
3740 for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
3742 if (rsa->regs[i].pnum == -1)
3745 if (rsa->regs[i].offset >= rsa->sizeof_g_packet)
3746 rsa->regs[i].in_g_packet = 0;
3748 rsa->regs[i].in_g_packet = 1;
3752 regs = alloca (rsa->sizeof_g_packet);
3754 /* Unimplemented registers read as all bits zero. */
3755 memset (regs, 0, rsa->sizeof_g_packet);
3757 /* Reply describes registers byte by byte, each byte encoded as two
3758 hex characters. Suck them all up, then supply them to the
3759 register cacheing/storage mechanism. */
3762 for (i = 0; i < rsa->sizeof_g_packet; i++)
3764 if (p[0] == 0 || p[1] == 0)
3765 /* This shouldn't happen - we adjusted sizeof_g_packet above. */
3766 internal_error (__FILE__, __LINE__,
3767 "unexpected end of 'g' packet reply");
3769 if (p[0] == 'x' && p[1] == 'x')
3770 regs[i] = 0; /* 'x' */
3772 regs[i] = fromhex (p[0]) * 16 + fromhex (p[1]);
3778 for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
3780 struct packet_reg *r = &rsa->regs[i];
3783 if (r->offset * 2 >= strlen (rs->buf))
3784 /* This shouldn't happen - we adjusted in_g_packet above. */
3785 internal_error (__FILE__, __LINE__,
3786 "unexpected end of 'g' packet reply");
3787 else if (rs->buf[r->offset * 2] == 'x')
3789 gdb_assert (r->offset * 2 < strlen (rs->buf));
3790 /* The register isn't available, mark it as such (at
3791 the same time setting the value to zero). */
3792 regcache_raw_supply (regcache, r->regnum, NULL);
3795 regcache_raw_supply (regcache, r->regnum,
3803 fetch_registers_using_g (struct regcache *regcache)
3806 process_g_packet (regcache);
3810 remote_fetch_registers (struct regcache *regcache, int regnum)
3812 struct remote_state *rs = get_remote_state ();
3813 struct remote_arch_state *rsa = get_remote_arch_state ();
3816 set_thread (PIDGET (inferior_ptid), 1);
3820 struct packet_reg *reg = packet_reg_from_regnum (rsa, regnum);
3821 gdb_assert (reg != NULL);
3823 /* If this register might be in the 'g' packet, try that first -
3824 we are likely to read more than one register. If this is the
3825 first 'g' packet, we might be overly optimistic about its
3826 contents, so fall back to 'p'. */
3827 if (reg->in_g_packet)
3829 fetch_registers_using_g (regcache);
3830 if (reg->in_g_packet)
3834 if (fetch_register_using_p (regcache, reg))
3837 /* This register is not available. */
3838 regcache_raw_supply (regcache, reg->regnum, NULL);
3843 fetch_registers_using_g (regcache);
3845 for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++)
3846 if (!rsa->regs[i].in_g_packet)
3847 if (!fetch_register_using_p (regcache, &rsa->regs[i]))
3849 /* This register is not available. */
3850 regcache_raw_supply (regcache, i, NULL);
3854 /* Prepare to store registers. Since we may send them all (using a
3855 'G' request), we have to read out the ones we don't want to change
3859 remote_prepare_to_store (struct regcache *regcache)
3861 struct remote_arch_state *rsa = get_remote_arch_state ();
3863 gdb_byte buf[MAX_REGISTER_SIZE];
3865 /* Make sure the entire registers array is valid. */
3866 switch (remote_protocol_packets[PACKET_P].support)
3868 case PACKET_DISABLE:
3869 case PACKET_SUPPORT_UNKNOWN:
3870 /* Make sure all the necessary registers are cached. */
3871 for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++)
3872 if (rsa->regs[i].in_g_packet)
3873 regcache_raw_read (regcache, rsa->regs[i].regnum, buf);
3880 /* Helper: Attempt to store REGNUM using the P packet. Return fail IFF
3881 packet was not recognized. */
3884 store_register_using_P (const struct regcache *regcache, struct packet_reg *reg)
3886 struct gdbarch *gdbarch = get_regcache_arch (regcache);
3887 struct remote_state *rs = get_remote_state ();
3888 struct remote_arch_state *rsa = get_remote_arch_state ();
3889 /* Try storing a single register. */
3890 char *buf = rs->buf;
3891 gdb_byte regp[MAX_REGISTER_SIZE];
3894 if (remote_protocol_packets[PACKET_P].support == PACKET_DISABLE)
3897 if (reg->pnum == -1)
3900 xsnprintf (buf, get_remote_packet_size (), "P%s=", phex_nz (reg->pnum, 0));
3901 p = buf + strlen (buf);
3902 regcache_raw_collect (regcache, reg->regnum, regp);
3903 bin2hex (regp, p, register_size (gdbarch, reg->regnum));
3904 remote_send (&rs->buf, &rs->buf_size);
3906 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_P]))
3911 error (_("Could not write register \"%s\""),
3912 gdbarch_register_name (gdbarch, reg->regnum));
3913 case PACKET_UNKNOWN:
3916 internal_error (__FILE__, __LINE__, _("Bad result from packet_ok"));
3920 /* Store register REGNUM, or all registers if REGNUM == -1, from the
3921 contents of the register cache buffer. FIXME: ignores errors. */
3924 store_registers_using_G (const struct regcache *regcache)
3926 struct remote_state *rs = get_remote_state ();
3927 struct remote_arch_state *rsa = get_remote_arch_state ();
3931 /* Extract all the registers in the regcache copying them into a
3935 regs = alloca (rsa->sizeof_g_packet);
3936 memset (regs, 0, rsa->sizeof_g_packet);
3937 for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++)
3939 struct packet_reg *r = &rsa->regs[i];
3941 regcache_raw_collect (regcache, r->regnum, regs + r->offset);
3945 /* Command describes registers byte by byte,
3946 each byte encoded as two hex characters. */
3949 /* remote_prepare_to_store insures that rsa->sizeof_g_packet gets
3951 bin2hex (regs, p, rsa->sizeof_g_packet);
3952 remote_send (&rs->buf, &rs->buf_size);
3955 /* Store register REGNUM, or all registers if REGNUM == -1, from the contents
3956 of the register cache buffer. FIXME: ignores errors. */
3959 remote_store_registers (struct regcache *regcache, int regnum)
3961 struct remote_state *rs = get_remote_state ();
3962 struct remote_arch_state *rsa = get_remote_arch_state ();
3965 set_thread (PIDGET (inferior_ptid), 1);
3969 struct packet_reg *reg = packet_reg_from_regnum (rsa, regnum);
3970 gdb_assert (reg != NULL);
3972 /* Always prefer to store registers using the 'P' packet if
3973 possible; we often change only a small number of registers.
3974 Sometimes we change a larger number; we'd need help from a
3975 higher layer to know to use 'G'. */
3976 if (store_register_using_P (regcache, reg))
3979 /* For now, don't complain if we have no way to write the
3980 register. GDB loses track of unavailable registers too
3981 easily. Some day, this may be an error. We don't have
3982 any way to read the register, either... */
3983 if (!reg->in_g_packet)
3986 store_registers_using_G (regcache);
3990 store_registers_using_G (regcache);
3992 for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++)
3993 if (!rsa->regs[i].in_g_packet)
3994 if (!store_register_using_P (regcache, &rsa->regs[i]))
3995 /* See above for why we do not issue an error here. */
4000 /* Return the number of hex digits in num. */
4003 hexnumlen (ULONGEST num)
4007 for (i = 0; num != 0; i++)
4013 /* Set BUF to the minimum number of hex digits representing NUM. */
4016 hexnumstr (char *buf, ULONGEST num)
4018 int len = hexnumlen (num);
4019 return hexnumnstr (buf, num, len);
4023 /* Set BUF to the hex digits representing NUM, padded to WIDTH characters. */
4026 hexnumnstr (char *buf, ULONGEST num, int width)
4032 for (i = width - 1; i >= 0; i--)
4034 buf[i] = "0123456789abcdef"[(num & 0xf)];
4041 /* Mask all but the least significant REMOTE_ADDRESS_SIZE bits. */
4044 remote_address_masked (CORE_ADDR addr)
4046 int address_size = remote_address_size;
4047 /* If "remoteaddresssize" was not set, default to target address size. */
4049 address_size = gdbarch_addr_bit (current_gdbarch);
4051 if (address_size > 0
4052 && address_size < (sizeof (ULONGEST) * 8))
4054 /* Only create a mask when that mask can safely be constructed
4055 in a ULONGEST variable. */
4057 mask = (mask << address_size) - 1;
4063 /* Convert BUFFER, binary data at least LEN bytes long, into escaped
4064 binary data in OUT_BUF. Set *OUT_LEN to the length of the data
4065 encoded in OUT_BUF, and return the number of bytes in OUT_BUF
4066 (which may be more than *OUT_LEN due to escape characters). The
4067 total number of bytes in the output buffer will be at most
4071 remote_escape_output (const gdb_byte *buffer, int len,
4072 gdb_byte *out_buf, int *out_len,
4075 int input_index, output_index;
4078 for (input_index = 0; input_index < len; input_index++)
4080 gdb_byte b = buffer[input_index];
4082 if (b == '$' || b == '#' || b == '}')
4084 /* These must be escaped. */
4085 if (output_index + 2 > out_maxlen)
4087 out_buf[output_index++] = '}';
4088 out_buf[output_index++] = b ^ 0x20;
4092 if (output_index + 1 > out_maxlen)
4094 out_buf[output_index++] = b;
4098 *out_len = input_index;
4099 return output_index;
4102 /* Convert BUFFER, escaped data LEN bytes long, into binary data
4103 in OUT_BUF. Return the number of bytes written to OUT_BUF.
4104 Raise an error if the total number of bytes exceeds OUT_MAXLEN.
4106 This function reverses remote_escape_output. It allows more
4107 escaped characters than that function does, in particular because
4108 '*' must be escaped to avoid the run-length encoding processing
4109 in reading packets. */
4112 remote_unescape_input (const gdb_byte *buffer, int len,
4113 gdb_byte *out_buf, int out_maxlen)
4115 int input_index, output_index;
4120 for (input_index = 0; input_index < len; input_index++)
4122 gdb_byte b = buffer[input_index];
4124 if (output_index + 1 > out_maxlen)
4126 warning (_("Received too much data from remote target;"
4127 " ignoring overflow."));
4128 return output_index;
4133 out_buf[output_index++] = b ^ 0x20;
4139 out_buf[output_index++] = b;
4143 error (_("Unmatched escape character in target response."));
4145 return output_index;
4148 /* Determine whether the remote target supports binary downloading.
4149 This is accomplished by sending a no-op memory write of zero length
4150 to the target at the specified address. It does not suffice to send
4151 the whole packet, since many stubs strip the eighth bit and
4152 subsequently compute a wrong checksum, which causes real havoc with
4155 NOTE: This can still lose if the serial line is not eight-bit
4156 clean. In cases like this, the user should clear "remote
4160 check_binary_download (CORE_ADDR addr)
4162 struct remote_state *rs = get_remote_state ();
4164 switch (remote_protocol_packets[PACKET_X].support)
4166 case PACKET_DISABLE:
4170 case PACKET_SUPPORT_UNKNOWN:
4176 p += hexnumstr (p, (ULONGEST) addr);
4178 p += hexnumstr (p, (ULONGEST) 0);
4182 putpkt_binary (rs->buf, (int) (p - rs->buf));
4183 getpkt (&rs->buf, &rs->buf_size, 0);
4185 if (rs->buf[0] == '\0')
4188 fprintf_unfiltered (gdb_stdlog,
4189 "binary downloading NOT suppported by target\n");
4190 remote_protocol_packets[PACKET_X].support = PACKET_DISABLE;
4195 fprintf_unfiltered (gdb_stdlog,
4196 "binary downloading suppported by target\n");
4197 remote_protocol_packets[PACKET_X].support = PACKET_ENABLE;
4204 /* Write memory data directly to the remote machine.
4205 This does not inform the data cache; the data cache uses this.
4206 HEADER is the starting part of the packet.
4207 MEMADDR is the address in the remote memory space.
4208 MYADDR is the address of the buffer in our space.
4209 LEN is the number of bytes.
4210 PACKET_FORMAT should be either 'X' or 'M', and indicates if we
4211 should send data as binary ('X'), or hex-encoded ('M').
4213 The function creates packet of the form
4214 <HEADER><ADDRESS>,<LENGTH>:<DATA>
4216 where encoding of <DATA> is termined by PACKET_FORMAT.
4218 If USE_LENGTH is 0, then the <LENGTH> field and the preceding comma
4221 Returns the number of bytes transferred, or 0 (setting errno) for
4222 error. Only transfer a single packet. */
4225 remote_write_bytes_aux (const char *header, CORE_ADDR memaddr,
4226 const gdb_byte *myaddr, int len,
4227 char packet_format, int use_length)
4229 struct remote_state *rs = get_remote_state ();
4239 if (packet_format != 'X' && packet_format != 'M')
4240 internal_error (__FILE__, __LINE__,
4241 "remote_write_bytes_aux: bad packet format");
4246 payload_size = get_memory_write_packet_size ();
4248 /* The packet buffer will be large enough for the payload;
4249 get_memory_packet_size ensures this. */
4252 /* Compute the size of the actual payload by subtracting out the
4253 packet header and footer overhead: "$M<memaddr>,<len>:...#nn".
4255 payload_size -= strlen ("$,:#NN");
4257 /* The comma won't be used. */
4259 header_length = strlen (header);
4260 payload_size -= header_length;
4261 payload_size -= hexnumlen (memaddr);
4263 /* Construct the packet excluding the data: "<header><memaddr>,<len>:". */
4265 strcat (rs->buf, header);
4266 p = rs->buf + strlen (header);
4268 /* Compute a best guess of the number of bytes actually transfered. */
4269 if (packet_format == 'X')
4271 /* Best guess at number of bytes that will fit. */
4272 todo = min (len, payload_size);
4274 payload_size -= hexnumlen (todo);
4275 todo = min (todo, payload_size);
4279 /* Num bytes that will fit. */
4280 todo = min (len, payload_size / 2);
4282 payload_size -= hexnumlen (todo);
4283 todo = min (todo, payload_size / 2);
4287 internal_error (__FILE__, __LINE__,
4288 _("minumum packet size too small to write data"));
4290 /* If we already need another packet, then try to align the end
4291 of this packet to a useful boundary. */
4292 if (todo > 2 * REMOTE_ALIGN_WRITES && todo < len)
4293 todo = ((memaddr + todo) & ~(REMOTE_ALIGN_WRITES - 1)) - memaddr;
4295 /* Append "<memaddr>". */
4296 memaddr = remote_address_masked (memaddr);
4297 p += hexnumstr (p, (ULONGEST) memaddr);
4304 /* Append <len>. Retain the location/size of <len>. It may need to
4305 be adjusted once the packet body has been created. */
4307 plenlen = hexnumstr (p, (ULONGEST) todo);
4315 /* Append the packet body. */
4316 if (packet_format == 'X')
4318 /* Binary mode. Send target system values byte by byte, in
4319 increasing byte addresses. Only escape certain critical
4321 payload_length = remote_escape_output (myaddr, todo, p, &nr_bytes,
4324 /* If not all TODO bytes fit, then we'll need another packet. Make
4325 a second try to keep the end of the packet aligned. Don't do
4326 this if the packet is tiny. */
4327 if (nr_bytes < todo && nr_bytes > 2 * REMOTE_ALIGN_WRITES)
4331 new_nr_bytes = (((memaddr + nr_bytes) & ~(REMOTE_ALIGN_WRITES - 1))
4333 if (new_nr_bytes != nr_bytes)
4334 payload_length = remote_escape_output (myaddr, new_nr_bytes,
4339 p += payload_length;
4340 if (use_length && nr_bytes < todo)
4342 /* Escape chars have filled up the buffer prematurely,
4343 and we have actually sent fewer bytes than planned.
4344 Fix-up the length field of the packet. Use the same
4345 number of characters as before. */
4346 plen += hexnumnstr (plen, (ULONGEST) nr_bytes, plenlen);
4347 *plen = ':'; /* overwrite \0 from hexnumnstr() */
4352 /* Normal mode: Send target system values byte by byte, in
4353 increasing byte addresses. Each byte is encoded as a two hex
4355 nr_bytes = bin2hex (myaddr, p, todo);
4359 putpkt_binary (rs->buf, (int) (p - rs->buf));
4360 getpkt (&rs->buf, &rs->buf_size, 0);
4362 if (rs->buf[0] == 'E')
4364 /* There is no correspondance between what the remote protocol
4365 uses for errors and errno codes. We would like a cleaner way
4366 of representing errors (big enough to include errno codes,
4367 bfd_error codes, and others). But for now just return EIO. */
4372 /* Return NR_BYTES, not TODO, in case escape chars caused us to send
4373 fewer bytes than we'd planned. */
4377 /* Write memory data directly to the remote machine.
4378 This does not inform the data cache; the data cache uses this.
4379 MEMADDR is the address in the remote memory space.
4380 MYADDR is the address of the buffer in our space.
4381 LEN is the number of bytes.
4383 Returns number of bytes transferred, or 0 (setting errno) for
4384 error. Only transfer a single packet. */
4387 remote_write_bytes (CORE_ADDR memaddr, const gdb_byte *myaddr, int len)
4389 char *packet_format = 0;
4391 /* Check whether the target supports binary download. */
4392 check_binary_download (memaddr);
4394 switch (remote_protocol_packets[PACKET_X].support)
4397 packet_format = "X";
4399 case PACKET_DISABLE:
4400 packet_format = "M";
4402 case PACKET_SUPPORT_UNKNOWN:
4403 internal_error (__FILE__, __LINE__,
4404 _("remote_write_bytes: bad internal state"));
4406 internal_error (__FILE__, __LINE__, _("bad switch"));
4409 return remote_write_bytes_aux (packet_format,
4410 memaddr, myaddr, len, packet_format[0], 1);
4413 /* Read memory data directly from the remote machine.
4414 This does not use the data cache; the data cache uses this.
4415 MEMADDR is the address in the remote memory space.
4416 MYADDR is the address of the buffer in our space.
4417 LEN is the number of bytes.
4419 Returns number of bytes transferred, or 0 for error. */
4421 /* NOTE: cagney/1999-10-18: This function (and its siblings in other
4422 remote targets) shouldn't attempt to read the entire buffer.
4423 Instead it should read a single packet worth of data and then
4424 return the byte size of that packet to the caller. The caller (its
4425 caller and its callers caller ;-) already contains code for
4426 handling partial reads. */
4429 remote_read_bytes (CORE_ADDR memaddr, gdb_byte *myaddr, int len)
4431 struct remote_state *rs = get_remote_state ();
4432 int max_buf_size; /* Max size of packet output buffer. */
4438 max_buf_size = get_memory_read_packet_size ();
4439 /* The packet buffer will be large enough for the payload;
4440 get_memory_packet_size ensures this. */
4449 todo = min (len, max_buf_size / 2); /* num bytes that will fit */
4451 /* construct "m"<memaddr>","<len>" */
4452 /* sprintf (rs->buf, "m%lx,%x", (unsigned long) memaddr, todo); */
4453 memaddr = remote_address_masked (memaddr);
4456 p += hexnumstr (p, (ULONGEST) memaddr);
4458 p += hexnumstr (p, (ULONGEST) todo);
4462 getpkt (&rs->buf, &rs->buf_size, 0);
4464 if (rs->buf[0] == 'E'
4465 && isxdigit (rs->buf[1]) && isxdigit (rs->buf[2])
4466 && rs->buf[3] == '\0')
4468 /* There is no correspondance between what the remote
4469 protocol uses for errors and errno codes. We would like
4470 a cleaner way of representing errors (big enough to
4471 include errno codes, bfd_error codes, and others). But
4472 for now just return EIO. */
4477 /* Reply describes memory byte by byte,
4478 each byte encoded as two hex characters. */
4481 if ((i = hex2bin (p, myaddr, todo)) < todo)
4483 /* Reply is short. This means that we were able to read
4484 only part of what we wanted to. */
4485 return i + (origlen - len);
4494 /* Read or write LEN bytes from inferior memory at MEMADDR,
4495 transferring to or from debugger address BUFFER. Write to inferior
4496 if SHOULD_WRITE is nonzero. Returns length of data written or
4497 read; 0 for error. TARGET is unused. */
4500 remote_xfer_memory (CORE_ADDR mem_addr, gdb_byte *buffer, int mem_len,
4501 int should_write, struct mem_attrib *attrib,
4502 struct target_ops *target)
4507 res = remote_write_bytes (mem_addr, buffer, mem_len);
4509 res = remote_read_bytes (mem_addr, buffer, mem_len);
4514 /* Sends a packet with content determined by the printf format string
4515 FORMAT and the remaining arguments, then gets the reply. Returns
4516 whether the packet was a success, a failure, or unknown. */
4519 remote_send_printf (const char *format, ...)
4521 struct remote_state *rs = get_remote_state ();
4522 int max_size = get_remote_packet_size ();
4525 va_start (ap, format);
4528 if (vsnprintf (rs->buf, max_size, format, ap) >= max_size)
4529 internal_error (__FILE__, __LINE__, "Too long remote packet.");
4531 if (putpkt (rs->buf) < 0)
4532 error (_("Communication problem with target."));
4535 getpkt (&rs->buf, &rs->buf_size, 0);
4537 return packet_check_result (rs->buf);
4541 restore_remote_timeout (void *p)
4543 int value = *(int *)p;
4544 remote_timeout = value;
4547 /* Flash writing can take quite some time. We'll set
4548 effectively infinite timeout for flash operations.
4549 In future, we'll need to decide on a better approach. */
4550 static const int remote_flash_timeout = 1000;
4553 remote_flash_erase (struct target_ops *ops,
4554 ULONGEST address, LONGEST length)
4556 int saved_remote_timeout = remote_timeout;
4557 enum packet_result ret;
4559 struct cleanup *back_to = make_cleanup (restore_remote_timeout,
4560 &saved_remote_timeout);
4561 remote_timeout = remote_flash_timeout;
4563 ret = remote_send_printf ("vFlashErase:%s,%s",
4568 case PACKET_UNKNOWN:
4569 error (_("Remote target does not support flash erase"));
4571 error (_("Error erasing flash with vFlashErase packet"));
4576 do_cleanups (back_to);
4580 remote_flash_write (struct target_ops *ops,
4581 ULONGEST address, LONGEST length,
4582 const gdb_byte *data)
4584 int saved_remote_timeout = remote_timeout;
4586 struct cleanup *back_to = make_cleanup (restore_remote_timeout,
4587 &saved_remote_timeout);
4589 remote_timeout = remote_flash_timeout;
4590 ret = remote_write_bytes_aux ("vFlashWrite:", address, data, length, 'X', 0);
4591 do_cleanups (back_to);
4597 remote_flash_done (struct target_ops *ops)
4599 int saved_remote_timeout = remote_timeout;
4601 struct cleanup *back_to = make_cleanup (restore_remote_timeout,
4602 &saved_remote_timeout);
4604 remote_timeout = remote_flash_timeout;
4605 ret = remote_send_printf ("vFlashDone");
4606 do_cleanups (back_to);
4610 case PACKET_UNKNOWN:
4611 error (_("Remote target does not support vFlashDone"));
4613 error (_("Error finishing flash operation"));
4620 remote_files_info (struct target_ops *ignore)
4622 puts_filtered ("Debugging a target over a serial line.\n");
4625 /* Stuff for dealing with the packets which are part of this protocol.
4626 See comment at top of file for details. */
4628 /* Read a single character from the remote end. */
4631 readchar (int timeout)
4635 ch = serial_readchar (remote_desc, timeout);
4640 switch ((enum serial_rc) ch)
4643 target_mourn_inferior ();
4644 error (_("Remote connection closed"));
4647 perror_with_name (_("Remote communication error"));
4649 case SERIAL_TIMEOUT:
4655 /* Send the command in *BUF to the remote machine, and read the reply
4656 into *BUF. Report an error if we get an error reply. Resize
4657 *BUF using xrealloc if necessary to hold the result, and update
4661 remote_send (char **buf,
4665 getpkt (buf, sizeof_buf, 0);
4667 if ((*buf)[0] == 'E')
4668 error (_("Remote failure reply: %s"), *buf);
4671 /* Display a null-terminated packet on stdout, for debugging, using C
4675 print_packet (char *buf)
4677 puts_filtered ("\"");
4678 fputstr_filtered (buf, '"', gdb_stdout);
4679 puts_filtered ("\"");
4685 return putpkt_binary (buf, strlen (buf));
4688 /* Send a packet to the remote machine, with error checking. The data
4689 of the packet is in BUF. The string in BUF can be at most
4690 get_remote_packet_size () - 5 to account for the $, # and checksum,
4691 and for a possible /0 if we are debugging (remote_debug) and want
4692 to print the sent packet as a string. */
4695 putpkt_binary (char *buf, int cnt)
4698 unsigned char csum = 0;
4699 char *buf2 = alloca (cnt + 6);
4705 /* Copy the packet into buffer BUF2, encapsulating it
4706 and giving it a checksum. */
4711 for (i = 0; i < cnt; i++)
4717 *p++ = tohex ((csum >> 4) & 0xf);
4718 *p++ = tohex (csum & 0xf);
4720 /* Send it over and over until we get a positive ack. */
4724 int started_error_output = 0;
4729 fprintf_unfiltered (gdb_stdlog, "Sending packet: ");
4730 fputstrn_unfiltered (buf2, p - buf2, 0, gdb_stdlog);
4731 fprintf_unfiltered (gdb_stdlog, "...");
4732 gdb_flush (gdb_stdlog);
4734 if (serial_write (remote_desc, buf2, p - buf2))
4735 perror_with_name (_("putpkt: write failed"));
4737 /* Read until either a timeout occurs (-2) or '+' is read. */
4740 ch = readchar (remote_timeout);
4748 case SERIAL_TIMEOUT:
4750 if (started_error_output)
4752 putchar_unfiltered ('\n');
4753 started_error_output = 0;
4762 fprintf_unfiltered (gdb_stdlog, "Ack\n");
4766 fprintf_unfiltered (gdb_stdlog, "Nak\n");
4767 case SERIAL_TIMEOUT:
4771 break; /* Retransmit buffer. */
4775 fprintf_unfiltered (gdb_stdlog,
4776 "Packet instead of Ack, ignoring it\n");
4777 /* It's probably an old response sent because an ACK
4778 was lost. Gobble up the packet and ack it so it
4779 doesn't get retransmitted when we resend this
4782 serial_write (remote_desc, "+", 1);
4783 continue; /* Now, go look for +. */
4788 if (!started_error_output)
4790 started_error_output = 1;
4791 fprintf_unfiltered (gdb_stdlog, "putpkt: Junk: ");
4793 fputc_unfiltered (ch & 0177, gdb_stdlog);
4797 break; /* Here to retransmit. */
4801 /* This is wrong. If doing a long backtrace, the user should be
4802 able to get out next time we call QUIT, without anything as
4803 violent as interrupt_query. If we want to provide a way out of
4804 here without getting to the next QUIT, it should be based on
4805 hitting ^C twice as in remote_wait. */
4815 /* Come here after finding the start of a frame when we expected an
4816 ack. Do our best to discard the rest of this packet. */
4825 c = readchar (remote_timeout);
4828 case SERIAL_TIMEOUT:
4829 /* Nothing we can do. */
4832 /* Discard the two bytes of checksum and stop. */
4833 c = readchar (remote_timeout);
4835 c = readchar (remote_timeout);
4838 case '*': /* Run length encoding. */
4839 /* Discard the repeat count. */
4840 c = readchar (remote_timeout);
4845 /* A regular character. */
4851 /* Come here after finding the start of the frame. Collect the rest
4852 into *BUF, verifying the checksum, length, and handling run-length
4853 compression. NUL terminate the buffer. If there is not enough room,
4854 expand *BUF using xrealloc.
4856 Returns -1 on error, number of characters in buffer (ignoring the
4857 trailing NULL) on success. (could be extended to return one of the
4858 SERIAL status indications). */
4861 read_frame (char **buf_p,
4874 c = readchar (remote_timeout);
4877 case SERIAL_TIMEOUT:
4879 fputs_filtered ("Timeout in mid-packet, retrying\n", gdb_stdlog);
4883 fputs_filtered ("Saw new packet start in middle of old one\n",
4885 return -1; /* Start a new packet, count retries. */
4888 unsigned char pktcsum;
4894 check_0 = readchar (remote_timeout);
4896 check_1 = readchar (remote_timeout);
4898 if (check_0 == SERIAL_TIMEOUT || check_1 == SERIAL_TIMEOUT)
4901 fputs_filtered ("Timeout in checksum, retrying\n",
4905 else if (check_0 < 0 || check_1 < 0)
4908 fputs_filtered ("Communication error in checksum\n",
4913 pktcsum = (fromhex (check_0) << 4) | fromhex (check_1);
4914 if (csum == pktcsum)
4919 fprintf_filtered (gdb_stdlog,
4920 "Bad checksum, sentsum=0x%x, csum=0x%x, buf=",
4922 fputstrn_filtered (buf, bc, 0, gdb_stdlog);
4923 fputs_filtered ("\n", gdb_stdlog);
4925 /* Number of characters in buffer ignoring trailing
4929 case '*': /* Run length encoding. */
4934 c = readchar (remote_timeout);
4936 repeat = c - ' ' + 3; /* Compute repeat count. */
4938 /* The character before ``*'' is repeated. */
4940 if (repeat > 0 && repeat <= 255 && bc > 0)
4942 if (bc + repeat - 1 >= *sizeof_buf - 1)
4944 /* Make some more room in the buffer. */
4945 *sizeof_buf += repeat;
4946 *buf_p = xrealloc (*buf_p, *sizeof_buf);
4950 memset (&buf[bc], buf[bc - 1], repeat);
4956 printf_filtered (_("Invalid run length encoding: %s\n"), buf);
4960 if (bc >= *sizeof_buf - 1)
4962 /* Make some more room in the buffer. */
4964 *buf_p = xrealloc (*buf_p, *sizeof_buf);
4975 /* Read a packet from the remote machine, with error checking, and
4976 store it in *BUF. Resize *BUF using xrealloc if necessary to hold
4977 the result, and update *SIZEOF_BUF. If FOREVER, wait forever
4978 rather than timing out; this is used (in synchronous mode) to wait
4979 for a target that is is executing user code to stop. */
4980 /* FIXME: ezannoni 2000-02-01 this wrapper is necessary so that we
4981 don't have to change all the calls to getpkt to deal with the
4982 return value, because at the moment I don't know what the right
4983 thing to do it for those. */
4991 timed_out = getpkt_sane (buf, sizeof_buf, forever);
4995 /* Read a packet from the remote machine, with error checking, and
4996 store it in *BUF. Resize *BUF using xrealloc if necessary to hold
4997 the result, and update *SIZEOF_BUF. If FOREVER, wait forever
4998 rather than timing out; this is used (in synchronous mode) to wait
4999 for a target that is is executing user code to stop. If FOREVER ==
5000 0, this function is allowed to time out gracefully and return an
5001 indication of this to the caller. Otherwise return the number
5004 getpkt_sane (char **buf, long *sizeof_buf, int forever)
5011 strcpy (*buf, "timeout");
5015 timeout = watchdog > 0 ? watchdog : -1;
5019 timeout = remote_timeout;
5023 for (tries = 1; tries <= MAX_TRIES; tries++)
5025 /* This can loop forever if the remote side sends us characters
5026 continuously, but if it pauses, we'll get a zero from
5027 readchar because of timeout. Then we'll count that as a
5030 /* Note that we will only wait forever prior to the start of a
5031 packet. After that, we expect characters to arrive at a
5032 brisk pace. They should show up within remote_timeout
5037 c = readchar (timeout);
5039 if (c == SERIAL_TIMEOUT)
5041 if (forever) /* Watchdog went off? Kill the target. */
5044 target_mourn_inferior ();
5045 error (_("Watchdog timeout has expired. Target detached."));
5048 fputs_filtered ("Timed out.\n", gdb_stdlog);
5054 /* We've found the start of a packet, now collect the data. */
5056 val = read_frame (buf, sizeof_buf);
5062 fprintf_unfiltered (gdb_stdlog, "Packet received: ");
5063 fputstrn_unfiltered (*buf, val, 0, gdb_stdlog);
5064 fprintf_unfiltered (gdb_stdlog, "\n");
5066 serial_write (remote_desc, "+", 1);
5070 /* Try the whole thing again. */
5072 serial_write (remote_desc, "-", 1);
5075 /* We have tried hard enough, and just can't receive the packet.
5078 printf_unfiltered (_("Ignoring packet error, continuing...\n"));
5079 serial_write (remote_desc, "+", 1);
5086 /* For some mysterious reason, wait_for_inferior calls kill instead of
5087 mourn after it gets TARGET_WAITKIND_SIGNALLED. Work around it. */
5091 target_mourn_inferior ();
5095 /* Use catch_errors so the user can quit from gdb even when we aren't on
5096 speaking terms with the remote system. */
5097 catch_errors ((catch_errors_ftype *) putpkt, "k", "", RETURN_MASK_ERROR);
5099 /* Don't wait for it to die. I'm not really sure it matters whether
5100 we do or not. For the existing stubs, kill is a noop. */
5101 target_mourn_inferior ();
5104 /* Async version of remote_kill. */
5106 remote_async_kill (void)
5108 /* Unregister the file descriptor from the event loop. */
5109 if (target_is_async_p ())
5110 serial_async (remote_desc, NULL, 0);
5112 /* For some mysterious reason, wait_for_inferior calls kill instead of
5113 mourn after it gets TARGET_WAITKIND_SIGNALLED. Work around it. */
5117 target_mourn_inferior ();
5121 /* Use catch_errors so the user can quit from gdb even when we
5122 aren't on speaking terms with the remote system. */
5123 catch_errors ((catch_errors_ftype *) putpkt, "k", "", RETURN_MASK_ERROR);
5125 /* Don't wait for it to die. I'm not really sure it matters whether
5126 we do or not. For the existing stubs, kill is a noop. */
5127 target_mourn_inferior ();
5133 remote_mourn_1 (&remote_ops);
5137 remote_async_mourn (void)
5139 remote_mourn_1 (&remote_async_ops);
5143 extended_remote_mourn (void)
5145 /* We do _not_ want to mourn the target like this; this will
5146 remove the extended remote target from the target stack,
5147 and the next time the user says "run" it'll fail.
5149 FIXME: What is the right thing to do here? */
5151 remote_mourn_1 (&extended_remote_ops);
5155 /* Worker function for remote_mourn. */
5157 remote_mourn_1 (struct target_ops *target)
5159 unpush_target (target);
5160 generic_mourn_inferior ();
5163 /* In the extended protocol we want to be able to do things like
5164 "run" and have them basically work as expected. So we need
5165 a special create_inferior function.
5167 FIXME: One day add support for changing the exec file
5168 we're debugging, arguments and an environment. */
5171 extended_remote_create_inferior (char *exec_file, char *args,
5172 char **env, int from_tty)
5174 /* Rip out the breakpoints; we'll reinsert them after restarting
5175 the remote server. */
5176 remove_breakpoints ();
5178 /* Now restart the remote server. */
5179 extended_remote_restart ();
5181 /* NOTE: We don't need to recheck for a target description here; but
5182 if we gain the ability to switch the remote executable we may
5183 need to, if for instance we are running a process which requested
5184 different emulated hardware from the operating system. A
5185 concrete example of this is ARM GNU/Linux, where some binaries
5186 will have a legacy FPA coprocessor emulated and others may have
5187 access to a hardware VFP unit. */
5189 /* Now put the breakpoints back in. This way we're safe if the
5190 restart function works via a unix fork on the remote side. */
5191 insert_breakpoints ();
5193 /* Clean up from the last time we were running. */
5194 clear_proceed_status ();
5197 /* Async version of extended_remote_create_inferior. */
5199 extended_remote_async_create_inferior (char *exec_file, char *args,
5200 char **env, int from_tty)
5202 /* Rip out the breakpoints; we'll reinsert them after restarting
5203 the remote server. */
5204 remove_breakpoints ();
5206 /* If running asynchronously, register the target file descriptor
5207 with the event loop. */
5208 if (target_can_async_p ())
5209 target_async (inferior_event_handler, 0);
5211 /* Now restart the remote server. */
5212 extended_remote_restart ();
5214 /* NOTE: We don't need to recheck for a target description here; but
5215 if we gain the ability to switch the remote executable we may
5216 need to, if for instance we are running a process which requested
5217 different emulated hardware from the operating system. A
5218 concrete example of this is ARM GNU/Linux, where some binaries
5219 will have a legacy FPA coprocessor emulated and others may have
5220 access to a hardware VFP unit. */
5222 /* Now put the breakpoints back in. This way we're safe if the
5223 restart function works via a unix fork on the remote side. */
5224 insert_breakpoints ();
5226 /* Clean up from the last time we were running. */
5227 clear_proceed_status ();
5231 /* Insert a breakpoint. On targets that have software breakpoint
5232 support, we ask the remote target to do the work; on targets
5233 which don't, we insert a traditional memory breakpoint. */
5236 remote_insert_breakpoint (struct bp_target_info *bp_tgt)
5238 CORE_ADDR addr = bp_tgt->placed_address;
5239 struct remote_state *rs = get_remote_state ();
5241 /* Try the "Z" s/w breakpoint packet if it is not already disabled.
5242 If it succeeds, then set the support to PACKET_ENABLE. If it
5243 fails, and the user has explicitly requested the Z support then
5244 report an error, otherwise, mark it disabled and go on. */
5246 if (remote_protocol_packets[PACKET_Z0].support != PACKET_DISABLE)
5253 gdbarch_breakpoint_from_pc
5254 (current_gdbarch, &bp_tgt->placed_address, &bp_tgt->placed_size);
5255 addr = (ULONGEST) remote_address_masked (bp_tgt->placed_address);
5256 p += hexnumstr (p, addr);
5257 sprintf (p, ",%d", bp_tgt->placed_size);
5260 getpkt (&rs->buf, &rs->buf_size, 0);
5262 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0]))
5268 case PACKET_UNKNOWN:
5273 return memory_insert_breakpoint (bp_tgt);
5277 remote_remove_breakpoint (struct bp_target_info *bp_tgt)
5279 CORE_ADDR addr = bp_tgt->placed_address;
5280 struct remote_state *rs = get_remote_state ();
5283 if (remote_protocol_packets[PACKET_Z0].support != PACKET_DISABLE)
5291 addr = (ULONGEST) remote_address_masked (bp_tgt->placed_address);
5292 p += hexnumstr (p, addr);
5293 sprintf (p, ",%d", bp_tgt->placed_size);
5296 getpkt (&rs->buf, &rs->buf_size, 0);
5298 return (rs->buf[0] == 'E');
5301 return memory_remove_breakpoint (bp_tgt);
5305 watchpoint_to_Z_packet (int type)
5310 return Z_PACKET_WRITE_WP;
5313 return Z_PACKET_READ_WP;
5316 return Z_PACKET_ACCESS_WP;
5319 internal_error (__FILE__, __LINE__,
5320 _("hw_bp_to_z: bad watchpoint type %d"), type);
5325 remote_insert_watchpoint (CORE_ADDR addr, int len, int type)
5327 struct remote_state *rs = get_remote_state ();
5329 enum Z_packet_type packet = watchpoint_to_Z_packet (type);
5331 if (remote_protocol_packets[PACKET_Z0 + packet].support == PACKET_DISABLE)
5334 sprintf (rs->buf, "Z%x,", packet);
5335 p = strchr (rs->buf, '\0');
5336 addr = remote_address_masked (addr);
5337 p += hexnumstr (p, (ULONGEST) addr);
5338 sprintf (p, ",%x", len);
5341 getpkt (&rs->buf, &rs->buf_size, 0);
5343 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0 + packet]))
5346 case PACKET_UNKNOWN:
5351 internal_error (__FILE__, __LINE__,
5352 _("remote_insert_watchpoint: reached end of function"));
5357 remote_remove_watchpoint (CORE_ADDR addr, int len, int type)
5359 struct remote_state *rs = get_remote_state ();
5361 enum Z_packet_type packet = watchpoint_to_Z_packet (type);
5363 if (remote_protocol_packets[PACKET_Z0 + packet].support == PACKET_DISABLE)
5366 sprintf (rs->buf, "z%x,", packet);
5367 p = strchr (rs->buf, '\0');
5368 addr = remote_address_masked (addr);
5369 p += hexnumstr (p, (ULONGEST) addr);
5370 sprintf (p, ",%x", len);
5372 getpkt (&rs->buf, &rs->buf_size, 0);
5374 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0 + packet]))
5377 case PACKET_UNKNOWN:
5382 internal_error (__FILE__, __LINE__,
5383 _("remote_remove_watchpoint: reached end of function"));
5387 int remote_hw_watchpoint_limit = -1;
5388 int remote_hw_breakpoint_limit = -1;
5391 remote_check_watch_resources (int type, int cnt, int ot)
5393 if (type == bp_hardware_breakpoint)
5395 if (remote_hw_breakpoint_limit == 0)
5397 else if (remote_hw_breakpoint_limit < 0)
5399 else if (cnt <= remote_hw_breakpoint_limit)
5404 if (remote_hw_watchpoint_limit == 0)
5406 else if (remote_hw_watchpoint_limit < 0)
5410 else if (cnt <= remote_hw_watchpoint_limit)
5417 remote_stopped_by_watchpoint (void)
5419 return remote_stopped_by_watchpoint_p;
5423 remote_stopped_data_address (struct target_ops *target, CORE_ADDR *addr_p)
5426 if (remote_stopped_by_watchpoint ())
5428 *addr_p = remote_watch_data_address;
5437 remote_insert_hw_breakpoint (struct bp_target_info *bp_tgt)
5440 struct remote_state *rs = get_remote_state ();
5443 /* The length field should be set to the size of a breakpoint
5444 instruction, even though we aren't inserting one ourselves. */
5446 gdbarch_breakpoint_from_pc
5447 (current_gdbarch, &bp_tgt->placed_address, &bp_tgt->placed_size);
5449 if (remote_protocol_packets[PACKET_Z1].support == PACKET_DISABLE)
5456 addr = remote_address_masked (bp_tgt->placed_address);
5457 p += hexnumstr (p, (ULONGEST) addr);
5458 sprintf (p, ",%x", bp_tgt->placed_size);
5461 getpkt (&rs->buf, &rs->buf_size, 0);
5463 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z1]))
5466 case PACKET_UNKNOWN:
5471 internal_error (__FILE__, __LINE__,
5472 _("remote_insert_hw_breakpoint: reached end of function"));
5477 remote_remove_hw_breakpoint (struct bp_target_info *bp_tgt)
5480 struct remote_state *rs = get_remote_state ();
5483 if (remote_protocol_packets[PACKET_Z1].support == PACKET_DISABLE)
5490 addr = remote_address_masked (bp_tgt->placed_address);
5491 p += hexnumstr (p, (ULONGEST) addr);
5492 sprintf (p, ",%x", bp_tgt->placed_size);
5495 getpkt (&rs->buf, &rs->buf_size, 0);
5497 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z1]))
5500 case PACKET_UNKNOWN:
5505 internal_error (__FILE__, __LINE__,
5506 _("remote_remove_hw_breakpoint: reached end of function"));
5509 /* Some targets are only capable of doing downloads, and afterwards
5510 they switch to the remote serial protocol. This function provides
5511 a clean way to get from the download target to the remote target.
5512 It's basically just a wrapper so that we don't have to expose any
5513 of the internal workings of remote.c.
5515 Prior to calling this routine, you should shutdown the current
5516 target code, else you will get the "A program is being debugged
5517 already..." message. Usually a call to pop_target() suffices. */
5520 push_remote_target (char *name, int from_tty)
5522 printf_filtered (_("Switching to remote protocol\n"));
5523 remote_open (name, from_tty);
5526 /* Table used by the crc32 function to calcuate the checksum. */
5528 static unsigned long crc32_table[256] =
5531 static unsigned long
5532 crc32 (unsigned char *buf, int len, unsigned int crc)
5534 if (!crc32_table[1])
5536 /* Initialize the CRC table and the decoding table. */
5540 for (i = 0; i < 256; i++)
5542 for (c = i << 24, j = 8; j > 0; --j)
5543 c = c & 0x80000000 ? (c << 1) ^ 0x04c11db7 : (c << 1);
5550 crc = (crc << 8) ^ crc32_table[((crc >> 24) ^ *buf) & 255];
5556 /* compare-sections command
5558 With no arguments, compares each loadable section in the exec bfd
5559 with the same memory range on the target, and reports mismatches.
5560 Useful for verifying the image on the target against the exec file.
5561 Depends on the target understanding the new "qCRC:" request. */
5563 /* FIXME: cagney/1999-10-26: This command should be broken down into a
5564 target method (target verify memory) and generic version of the
5565 actual command. This will allow other high-level code (especially
5566 generic_load()) to make use of this target functionality. */
5569 compare_sections_command (char *args, int from_tty)
5571 struct remote_state *rs = get_remote_state ();
5573 unsigned long host_crc, target_crc;
5574 extern bfd *exec_bfd;
5575 struct cleanup *old_chain;
5578 const char *sectname;
5585 error (_("command cannot be used without an exec file"));
5586 if (!current_target.to_shortname ||
5587 strcmp (current_target.to_shortname, "remote") != 0)
5588 error (_("command can only be used with remote target"));
5590 for (s = exec_bfd->sections; s; s = s->next)
5592 if (!(s->flags & SEC_LOAD))
5593 continue; /* skip non-loadable section */
5595 size = bfd_get_section_size (s);
5597 continue; /* skip zero-length section */
5599 sectname = bfd_get_section_name (exec_bfd, s);
5600 if (args && strcmp (args, sectname) != 0)
5601 continue; /* not the section selected by user */
5603 matched = 1; /* do this section */
5605 /* FIXME: assumes lma can fit into long. */
5606 xsnprintf (rs->buf, get_remote_packet_size (), "qCRC:%lx,%lx",
5607 (long) lma, (long) size);
5610 /* Be clever; compute the host_crc before waiting for target
5612 sectdata = xmalloc (size);
5613 old_chain = make_cleanup (xfree, sectdata);
5614 bfd_get_section_contents (exec_bfd, s, sectdata, 0, size);
5615 host_crc = crc32 ((unsigned char *) sectdata, size, 0xffffffff);
5617 getpkt (&rs->buf, &rs->buf_size, 0);
5618 if (rs->buf[0] == 'E')
5619 error (_("target memory fault, section %s, range 0x%s -- 0x%s"),
5620 sectname, paddr (lma), paddr (lma + size));
5621 if (rs->buf[0] != 'C')
5622 error (_("remote target does not support this operation"));
5624 for (target_crc = 0, tmp = &rs->buf[1]; *tmp; tmp++)
5625 target_crc = target_crc * 16 + fromhex (*tmp);
5627 printf_filtered ("Section %s, range 0x%s -- 0x%s: ",
5628 sectname, paddr (lma), paddr (lma + size));
5629 if (host_crc == target_crc)
5630 printf_filtered ("matched.\n");
5633 printf_filtered ("MIS-MATCHED!\n");
5637 do_cleanups (old_chain);
5640 warning (_("One or more sections of the remote executable does not match\n\
5641 the loaded file\n"));
5642 if (args && !matched)
5643 printf_filtered (_("No loaded section named '%s'.\n"), args);
5646 /* Write LEN bytes from WRITEBUF into OBJECT_NAME/ANNEX at OFFSET
5647 into remote target. The number of bytes written to the remote
5648 target is returned, or -1 for error. */
5651 remote_write_qxfer (struct target_ops *ops, const char *object_name,
5652 const char *annex, const gdb_byte *writebuf,
5653 ULONGEST offset, LONGEST len,
5654 struct packet_config *packet)
5659 struct remote_state *rs = get_remote_state ();
5660 int max_size = get_memory_write_packet_size ();
5662 if (packet->support == PACKET_DISABLE)
5665 /* Insert header. */
5666 i = snprintf (rs->buf, max_size,
5667 "qXfer:%s:write:%s:%s:",
5668 object_name, annex ? annex : "",
5669 phex_nz (offset, sizeof offset));
5670 max_size -= (i + 1);
5672 /* Escape as much data as fits into rs->buf. */
5673 buf_len = remote_escape_output
5674 (writebuf, len, (rs->buf + i), &max_size, max_size);
5676 if (putpkt_binary (rs->buf, i + buf_len) < 0
5677 || getpkt_sane (&rs->buf, &rs->buf_size, 0) < 0
5678 || packet_ok (rs->buf, packet) != PACKET_OK)
5681 unpack_varlen_hex (rs->buf, &n);
5685 /* Read OBJECT_NAME/ANNEX from the remote target using a qXfer packet.
5686 Data at OFFSET, of up to LEN bytes, is read into READBUF; the
5687 number of bytes read is returned, or 0 for EOF, or -1 for error.
5688 The number of bytes read may be less than LEN without indicating an
5689 EOF. PACKET is checked and updated to indicate whether the remote
5690 target supports this object. */
5693 remote_read_qxfer (struct target_ops *ops, const char *object_name,
5695 gdb_byte *readbuf, ULONGEST offset, LONGEST len,
5696 struct packet_config *packet)
5698 static char *finished_object;
5699 static char *finished_annex;
5700 static ULONGEST finished_offset;
5702 struct remote_state *rs = get_remote_state ();
5703 unsigned int total = 0;
5704 LONGEST i, n, packet_len;
5706 if (packet->support == PACKET_DISABLE)
5709 /* Check whether we've cached an end-of-object packet that matches
5711 if (finished_object)
5713 if (strcmp (object_name, finished_object) == 0
5714 && strcmp (annex ? annex : "", finished_annex) == 0
5715 && offset == finished_offset)
5718 /* Otherwise, we're now reading something different. Discard
5720 xfree (finished_object);
5721 xfree (finished_annex);
5722 finished_object = NULL;
5723 finished_annex = NULL;
5726 /* Request only enough to fit in a single packet. The actual data
5727 may not, since we don't know how much of it will need to be escaped;
5728 the target is free to respond with slightly less data. We subtract
5729 five to account for the response type and the protocol frame. */
5730 n = min (get_remote_packet_size () - 5, len);
5731 snprintf (rs->buf, get_remote_packet_size () - 4, "qXfer:%s:read:%s:%s,%s",
5732 object_name, annex ? annex : "",
5733 phex_nz (offset, sizeof offset),
5734 phex_nz (n, sizeof n));
5735 i = putpkt (rs->buf);
5740 packet_len = getpkt_sane (&rs->buf, &rs->buf_size, 0);
5741 if (packet_len < 0 || packet_ok (rs->buf, packet) != PACKET_OK)
5744 if (rs->buf[0] != 'l' && rs->buf[0] != 'm')
5745 error (_("Unknown remote qXfer reply: %s"), rs->buf);
5747 /* 'm' means there is (or at least might be) more data after this
5748 batch. That does not make sense unless there's at least one byte
5749 of data in this reply. */
5750 if (rs->buf[0] == 'm' && packet_len == 1)
5751 error (_("Remote qXfer reply contained no data."));
5753 /* Got some data. */
5754 i = remote_unescape_input (rs->buf + 1, packet_len - 1, readbuf, n);
5756 /* 'l' is an EOF marker, possibly including a final block of data,
5757 or possibly empty. If we have the final block of a non-empty
5758 object, record this fact to bypass a subsequent partial read. */
5759 if (rs->buf[0] == 'l' && offset + i > 0)
5761 finished_object = xstrdup (object_name);
5762 finished_annex = xstrdup (annex ? annex : "");
5763 finished_offset = offset + i;
5770 remote_xfer_partial (struct target_ops *ops, enum target_object object,
5771 const char *annex, gdb_byte *readbuf,
5772 const gdb_byte *writebuf, ULONGEST offset, LONGEST len)
5774 struct remote_state *rs = get_remote_state ();
5779 /* Handle memory using the standard memory routines. */
5780 if (object == TARGET_OBJECT_MEMORY)
5785 if (writebuf != NULL)
5786 xfered = remote_write_bytes (offset, writebuf, len);
5788 xfered = remote_read_bytes (offset, readbuf, len);
5792 else if (xfered == 0 && errno == 0)
5798 /* Handle SPU memory using qxfer packets. */
5799 if (object == TARGET_OBJECT_SPU)
5802 return remote_read_qxfer (ops, "spu", annex, readbuf, offset, len,
5803 &remote_protocol_packets
5804 [PACKET_qXfer_spu_read]);
5806 return remote_write_qxfer (ops, "spu", annex, writebuf, offset, len,
5807 &remote_protocol_packets
5808 [PACKET_qXfer_spu_write]);
5811 /* Only handle flash writes. */
5812 if (writebuf != NULL)
5818 case TARGET_OBJECT_FLASH:
5819 xfered = remote_flash_write (ops, offset, len, writebuf);
5823 else if (xfered == 0 && errno == 0)
5833 /* Map pre-existing objects onto letters. DO NOT do this for new
5834 objects!!! Instead specify new query packets. */
5837 case TARGET_OBJECT_AVR:
5841 case TARGET_OBJECT_AUXV:
5842 gdb_assert (annex == NULL);
5843 return remote_read_qxfer (ops, "auxv", annex, readbuf, offset, len,
5844 &remote_protocol_packets[PACKET_qXfer_auxv]);
5846 case TARGET_OBJECT_AVAILABLE_FEATURES:
5847 return remote_read_qxfer
5848 (ops, "features", annex, readbuf, offset, len,
5849 &remote_protocol_packets[PACKET_qXfer_features]);
5851 case TARGET_OBJECT_LIBRARIES:
5852 return remote_read_qxfer
5853 (ops, "libraries", annex, readbuf, offset, len,
5854 &remote_protocol_packets[PACKET_qXfer_libraries]);
5856 case TARGET_OBJECT_MEMORY_MAP:
5857 gdb_assert (annex == NULL);
5858 return remote_read_qxfer (ops, "memory-map", annex, readbuf, offset, len,
5859 &remote_protocol_packets[PACKET_qXfer_memory_map]);
5865 /* Note: a zero OFFSET and LEN can be used to query the minimum
5867 if (offset == 0 && len == 0)
5868 return (get_remote_packet_size ());
5869 /* Minimum outbuf size is get_remote_packet_size (). If LEN is not
5870 large enough let the caller deal with it. */
5871 if (len < get_remote_packet_size ())
5873 len = get_remote_packet_size ();
5875 /* Except for querying the minimum buffer size, target must be open. */
5877 error (_("remote query is only available after target open"));
5879 gdb_assert (annex != NULL);
5880 gdb_assert (readbuf != NULL);
5886 /* We used one buffer char for the remote protocol q command and
5887 another for the query type. As the remote protocol encapsulation
5888 uses 4 chars plus one extra in case we are debugging
5889 (remote_debug), we have PBUFZIZ - 7 left to pack the query
5892 while (annex[i] && (i < (get_remote_packet_size () - 8)))
5894 /* Bad caller may have sent forbidden characters. */
5895 gdb_assert (isprint (annex[i]) && annex[i] != '$' && annex[i] != '#');
5900 gdb_assert (annex[i] == '\0');
5902 i = putpkt (rs->buf);
5906 getpkt (&rs->buf, &rs->buf_size, 0);
5907 strcpy ((char *) readbuf, rs->buf);
5909 return strlen ((char *) readbuf);
5913 remote_rcmd (char *command,
5914 struct ui_file *outbuf)
5916 struct remote_state *rs = get_remote_state ();
5920 error (_("remote rcmd is only available after target open"));
5922 /* Send a NULL command across as an empty command. */
5923 if (command == NULL)
5926 /* The query prefix. */
5927 strcpy (rs->buf, "qRcmd,");
5928 p = strchr (rs->buf, '\0');
5930 if ((strlen (rs->buf) + strlen (command) * 2 + 8/*misc*/) > get_remote_packet_size ())
5931 error (_("\"monitor\" command ``%s'' is too long."), command);
5933 /* Encode the actual command. */
5934 bin2hex ((gdb_byte *) command, p, 0);
5936 if (putpkt (rs->buf) < 0)
5937 error (_("Communication problem with target."));
5939 /* get/display the response */
5944 /* XXX - see also tracepoint.c:remote_get_noisy_reply(). */
5946 getpkt (&rs->buf, &rs->buf_size, 0);
5949 error (_("Target does not support this command."));
5950 if (buf[0] == 'O' && buf[1] != 'K')
5952 remote_console_output (buf + 1); /* 'O' message from stub. */
5955 if (strcmp (buf, "OK") == 0)
5957 if (strlen (buf) == 3 && buf[0] == 'E'
5958 && isdigit (buf[1]) && isdigit (buf[2]))
5960 error (_("Protocol error with Rcmd"));
5962 for (p = buf; p[0] != '\0' && p[1] != '\0'; p += 2)
5964 char c = (fromhex (p[0]) << 4) + fromhex (p[1]);
5965 fputc_unfiltered (c, outbuf);
5971 static VEC(mem_region_s) *
5972 remote_memory_map (struct target_ops *ops)
5974 VEC(mem_region_s) *result = NULL;
5975 char *text = target_read_stralloc (¤t_target,
5976 TARGET_OBJECT_MEMORY_MAP, NULL);
5980 struct cleanup *back_to = make_cleanup (xfree, text);
5981 result = parse_memory_map (text);
5982 do_cleanups (back_to);
5989 packet_command (char *args, int from_tty)
5991 struct remote_state *rs = get_remote_state ();
5994 error (_("command can only be used with remote target"));
5997 error (_("remote-packet command requires packet text as argument"));
5999 puts_filtered ("sending: ");
6000 print_packet (args);
6001 puts_filtered ("\n");
6004 getpkt (&rs->buf, &rs->buf_size, 0);
6005 puts_filtered ("received: ");
6006 print_packet (rs->buf);
6007 puts_filtered ("\n");
6011 /* --------- UNIT_TEST for THREAD oriented PACKETS ------------------- */
6013 static void display_thread_info (struct gdb_ext_thread_info *info);
6015 static void threadset_test_cmd (char *cmd, int tty);
6017 static void threadalive_test (char *cmd, int tty);
6019 static void threadlist_test_cmd (char *cmd, int tty);
6021 int get_and_display_threadinfo (threadref *ref);
6023 static void threadinfo_test_cmd (char *cmd, int tty);
6025 static int thread_display_step (threadref *ref, void *context);
6027 static void threadlist_update_test_cmd (char *cmd, int tty);
6029 static void init_remote_threadtests (void);
6031 #define SAMPLE_THREAD 0x05060708 /* Truncated 64 bit threadid. */
6034 threadset_test_cmd (char *cmd, int tty)
6036 int sample_thread = SAMPLE_THREAD;
6038 printf_filtered (_("Remote threadset test\n"));
6039 set_thread (sample_thread, 1);
6044 threadalive_test (char *cmd, int tty)
6046 int sample_thread = SAMPLE_THREAD;
6048 if (remote_thread_alive (pid_to_ptid (sample_thread)))
6049 printf_filtered ("PASS: Thread alive test\n");
6051 printf_filtered ("FAIL: Thread alive test\n");
6054 void output_threadid (char *title, threadref *ref);
6057 output_threadid (char *title, threadref *ref)
6061 pack_threadid (&hexid[0], ref); /* Convert threead id into hex. */
6063 printf_filtered ("%s %s\n", title, (&hexid[0]));
6067 threadlist_test_cmd (char *cmd, int tty)
6070 threadref nextthread;
6071 int done, result_count;
6072 threadref threadlist[3];
6074 printf_filtered ("Remote Threadlist test\n");
6075 if (!remote_get_threadlist (startflag, &nextthread, 3, &done,
6076 &result_count, &threadlist[0]))
6077 printf_filtered ("FAIL: threadlist test\n");
6080 threadref *scan = threadlist;
6081 threadref *limit = scan + result_count;
6083 while (scan < limit)
6084 output_threadid (" thread ", scan++);
6089 display_thread_info (struct gdb_ext_thread_info *info)
6091 output_threadid ("Threadid: ", &info->threadid);
6092 printf_filtered ("Name: %s\n ", info->shortname);
6093 printf_filtered ("State: %s\n", info->display);
6094 printf_filtered ("other: %s\n\n", info->more_display);
6098 get_and_display_threadinfo (threadref *ref)
6102 struct gdb_ext_thread_info threadinfo;
6104 set = TAG_THREADID | TAG_EXISTS | TAG_THREADNAME
6105 | TAG_MOREDISPLAY | TAG_DISPLAY;
6106 if (0 != (result = remote_get_threadinfo (ref, set, &threadinfo)))
6107 display_thread_info (&threadinfo);
6112 threadinfo_test_cmd (char *cmd, int tty)
6114 int athread = SAMPLE_THREAD;
6118 int_to_threadref (&thread, athread);
6119 printf_filtered ("Remote Threadinfo test\n");
6120 if (!get_and_display_threadinfo (&thread))
6121 printf_filtered ("FAIL cannot get thread info\n");
6125 thread_display_step (threadref *ref, void *context)
6127 /* output_threadid(" threadstep ",ref); *//* simple test */
6128 return get_and_display_threadinfo (ref);
6132 threadlist_update_test_cmd (char *cmd, int tty)
6134 printf_filtered ("Remote Threadlist update test\n");
6135 remote_threadlist_iterator (thread_display_step, 0, CRAZY_MAX_THREADS);
6139 init_remote_threadtests (void)
6141 add_com ("tlist", class_obscure, threadlist_test_cmd, _("\
6142 Fetch and print the remote list of thread identifiers, one pkt only"));
6143 add_com ("tinfo", class_obscure, threadinfo_test_cmd,
6144 _("Fetch and display info about one thread"));
6145 add_com ("tset", class_obscure, threadset_test_cmd,
6146 _("Test setting to a different thread"));
6147 add_com ("tupd", class_obscure, threadlist_update_test_cmd,
6148 _("Iterate through updating all remote thread info"));
6149 add_com ("talive", class_obscure, threadalive_test,
6150 _(" Remote thread alive test "));
6155 /* Convert a thread ID to a string. Returns the string in a static
6159 remote_pid_to_str (ptid_t ptid)
6161 static char buf[32];
6163 xsnprintf (buf, sizeof buf, "Thread %d", ptid_get_pid (ptid));
6167 /* Get the address of the thread local variable in OBJFILE which is
6168 stored at OFFSET within the thread local storage for thread PTID. */
6171 remote_get_thread_local_address (ptid_t ptid, CORE_ADDR lm, CORE_ADDR offset)
6173 if (remote_protocol_packets[PACKET_qGetTLSAddr].support != PACKET_DISABLE)
6175 struct remote_state *rs = get_remote_state ();
6177 enum packet_result result;
6179 strcpy (p, "qGetTLSAddr:");
6181 p += hexnumstr (p, PIDGET (ptid));
6183 p += hexnumstr (p, offset);
6185 p += hexnumstr (p, lm);
6189 getpkt (&rs->buf, &rs->buf_size, 0);
6190 result = packet_ok (rs->buf, &remote_protocol_packets[PACKET_qGetTLSAddr]);
6191 if (result == PACKET_OK)
6195 unpack_varlen_hex (rs->buf, &result);
6198 else if (result == PACKET_UNKNOWN)
6199 throw_error (TLS_GENERIC_ERROR,
6200 _("Remote target doesn't support qGetTLSAddr packet"));
6202 throw_error (TLS_GENERIC_ERROR,
6203 _("Remote target failed to process qGetTLSAddr request"));
6206 throw_error (TLS_GENERIC_ERROR,
6207 _("TLS not supported or disabled on this target"));
6212 /* Support for inferring a target description based on the current
6213 architecture and the size of a 'g' packet. While the 'g' packet
6214 can have any size (since optional registers can be left off the
6215 end), some sizes are easily recognizable given knowledge of the
6216 approximate architecture. */
6218 struct remote_g_packet_guess
6221 const struct target_desc *tdesc;
6223 typedef struct remote_g_packet_guess remote_g_packet_guess_s;
6224 DEF_VEC_O(remote_g_packet_guess_s);
6226 struct remote_g_packet_data
6228 VEC(remote_g_packet_guess_s) *guesses;
6231 static struct gdbarch_data *remote_g_packet_data_handle;
6234 remote_g_packet_data_init (struct obstack *obstack)
6236 return OBSTACK_ZALLOC (obstack, struct remote_g_packet_data);
6240 register_remote_g_packet_guess (struct gdbarch *gdbarch, int bytes,
6241 const struct target_desc *tdesc)
6243 struct remote_g_packet_data *data
6244 = gdbarch_data (gdbarch, remote_g_packet_data_handle);
6245 struct remote_g_packet_guess new_guess, *guess;
6248 gdb_assert (tdesc != NULL);
6251 VEC_iterate (remote_g_packet_guess_s, data->guesses, ix, guess);
6253 if (guess->bytes == bytes)
6254 internal_error (__FILE__, __LINE__,
6255 "Duplicate g packet description added for size %d",
6258 new_guess.bytes = bytes;
6259 new_guess.tdesc = tdesc;
6260 VEC_safe_push (remote_g_packet_guess_s, data->guesses, &new_guess);
6263 static const struct target_desc *
6264 remote_read_description (struct target_ops *target)
6266 struct remote_g_packet_data *data
6267 = gdbarch_data (current_gdbarch, remote_g_packet_data_handle);
6269 if (!VEC_empty (remote_g_packet_guess_s, data->guesses))
6271 struct remote_g_packet_guess *guess;
6273 int bytes = send_g_packet ();
6276 VEC_iterate (remote_g_packet_guess_s, data->guesses, ix, guess);
6278 if (guess->bytes == bytes)
6279 return guess->tdesc;
6281 /* We discard the g packet. A minor optimization would be to
6282 hold on to it, and fill the register cache once we have selected
6283 an architecture, but it's too tricky to do safely. */
6289 /* Remote file transfer support. This is host-initiated I/O, not
6290 target-initiated; for target-initiated, see remote-fileio.c. */
6292 /* If *LEFT is at least the length of STRING, copy STRING to
6293 *BUFFER, update *BUFFER to point to the new end of the buffer, and
6294 decrease *LEFT. Otherwise raise an error. */
6297 remote_buffer_add_string (char **buffer, int *left, char *string)
6299 int len = strlen (string);
6302 error (_("Packet too long for target."));
6304 memcpy (*buffer, string, len);
6308 /* NUL-terminate the buffer as a convenience, if there is
6314 /* If *LEFT is large enough, hex encode LEN bytes from BYTES into
6315 *BUFFER, update *BUFFER to point to the new end of the buffer, and
6316 decrease *LEFT. Otherwise raise an error. */
6319 remote_buffer_add_bytes (char **buffer, int *left, const gdb_byte *bytes,
6322 if (2 * len > *left)
6323 error (_("Packet too long for target."));
6325 bin2hex (bytes, *buffer, len);
6329 /* NUL-terminate the buffer as a convenience, if there is
6335 /* If *LEFT is large enough, convert VALUE to hex and add it to
6336 *BUFFER, update *BUFFER to point to the new end of the buffer, and
6337 decrease *LEFT. Otherwise raise an error. */
6340 remote_buffer_add_int (char **buffer, int *left, ULONGEST value)
6342 int len = hexnumlen (value);
6345 error (_("Packet too long for target."));
6347 hexnumstr (*buffer, value);
6351 /* NUL-terminate the buffer as a convenience, if there is
6357 /* Parse an I/O result packet from BUFFER. Set RETCODE to the return
6358 value, *REMOTE_ERRNO to the remote error number or zero if none
6359 was included, and *ATTACHMENT to point to the start of the annex
6360 if any. The length of the packet isn't needed here; there may
6361 be NUL bytes in BUFFER, but they will be after *ATTACHMENT.
6363 Return 0 if the packet could be parsed, -1 if it could not. If
6364 -1 is returned, the other variables may not be initialized. */
6367 remote_hostio_parse_result (char *buffer, int *retcode,
6368 int *remote_errno, char **attachment)
6375 if (buffer[0] != 'F')
6379 *retcode = strtol (&buffer[1], &p, 16);
6380 if (errno != 0 || p == &buffer[1])
6383 /* Check for ",errno". */
6387 *remote_errno = strtol (p + 1, &p2, 16);
6388 if (errno != 0 || p + 1 == p2)
6393 /* Check for ";attachment". If there is no attachment, the
6394 packet should end here. */
6397 *attachment = p + 1;
6400 else if (*p == '\0')
6406 /* Send a prepared I/O packet to the target and read its response.
6407 The prepared packet is in the global RS->BUF before this function
6408 is called, and the answer is there when we return.
6410 COMMAND_BYTES is the length of the request to send, which may include
6411 binary data. WHICH_PACKET is the packet configuration to check
6412 before attempting a packet. If an error occurs, *REMOTE_ERRNO
6413 is set to the error number and -1 is returned. Otherwise the value
6414 returned by the function is returned.
6416 ATTACHMENT and ATTACHMENT_LEN should be non-NULL if and only if an
6417 attachment is expected; an error will be reported if there's a
6418 mismatch. If one is found, *ATTACHMENT will be set to point into
6419 the packet buffer and *ATTACHMENT_LEN will be set to the
6420 attachment's length. */
6423 remote_hostio_send_command (int command_bytes, int which_packet,
6424 int *remote_errno, char **attachment,
6425 int *attachment_len)
6427 struct remote_state *rs = get_remote_state ();
6428 int ret, bytes_read;
6429 char *attachment_tmp;
6431 if (remote_protocol_packets[which_packet].support == PACKET_DISABLE)
6433 *remote_errno = FILEIO_ENOSYS;
6437 putpkt_binary (rs->buf, command_bytes);
6438 bytes_read = getpkt_sane (&rs->buf, &rs->buf_size, 0);
6440 /* If it timed out, something is wrong. Don't try to parse the
6444 *remote_errno = FILEIO_EINVAL;
6448 switch (packet_ok (rs->buf, &remote_protocol_packets[which_packet]))
6451 *remote_errno = FILEIO_EINVAL;
6453 case PACKET_UNKNOWN:
6454 *remote_errno = FILEIO_ENOSYS;
6460 if (remote_hostio_parse_result (rs->buf, &ret, remote_errno,
6463 *remote_errno = FILEIO_EINVAL;
6467 /* Make sure we saw an attachment if and only if we expected one. */
6468 if ((attachment_tmp == NULL && attachment != NULL)
6469 || (attachment_tmp != NULL && attachment == NULL))
6471 *remote_errno = FILEIO_EINVAL;
6475 /* If an attachment was found, it must point into the packet buffer;
6476 work out how many bytes there were. */
6477 if (attachment_tmp != NULL)
6479 *attachment = attachment_tmp;
6480 *attachment_len = bytes_read - (*attachment - rs->buf);
6486 /* Open FILENAME on the remote target, using FLAGS and MODE. Return a
6487 remote file descriptor, or -1 if an error occurs (and set
6491 remote_hostio_open (const char *filename, int flags, int mode,
6494 struct remote_state *rs = get_remote_state ();
6496 int left = get_remote_packet_size () - 1;
6498 remote_buffer_add_string (&p, &left, "vFile:open:");
6500 remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
6502 remote_buffer_add_string (&p, &left, ",");
6504 remote_buffer_add_int (&p, &left, flags);
6505 remote_buffer_add_string (&p, &left, ",");
6507 remote_buffer_add_int (&p, &left, mode);
6509 return remote_hostio_send_command (p - rs->buf, PACKET_vFile_open,
6510 remote_errno, NULL, NULL);
6513 /* Write up to LEN bytes from WRITE_BUF to FD on the remote target.
6514 Return the number of bytes written, or -1 if an error occurs (and
6515 set *REMOTE_ERRNO). */
6518 remote_hostio_pwrite (int fd, const gdb_byte *write_buf, int len,
6519 ULONGEST offset, int *remote_errno)
6521 struct remote_state *rs = get_remote_state ();
6523 int left = get_remote_packet_size ();
6526 remote_buffer_add_string (&p, &left, "vFile:pwrite:");
6528 remote_buffer_add_int (&p, &left, fd);
6529 remote_buffer_add_string (&p, &left, ",");
6531 remote_buffer_add_int (&p, &left, offset);
6532 remote_buffer_add_string (&p, &left, ",");
6534 p += remote_escape_output (write_buf, len, p, &out_len,
6535 get_remote_packet_size () - (p - rs->buf));
6537 return remote_hostio_send_command (p - rs->buf, PACKET_vFile_pwrite,
6538 remote_errno, NULL, NULL);
6541 /* Read up to LEN bytes FD on the remote target into READ_BUF
6542 Return the number of bytes read, or -1 if an error occurs (and
6543 set *REMOTE_ERRNO). */
6546 remote_hostio_pread (int fd, gdb_byte *read_buf, int len,
6547 ULONGEST offset, int *remote_errno)
6549 struct remote_state *rs = get_remote_state ();
6552 int left = get_remote_packet_size ();
6553 int ret, attachment_len;
6556 remote_buffer_add_string (&p, &left, "vFile:pread:");
6558 remote_buffer_add_int (&p, &left, fd);
6559 remote_buffer_add_string (&p, &left, ",");
6561 remote_buffer_add_int (&p, &left, len);
6562 remote_buffer_add_string (&p, &left, ",");
6564 remote_buffer_add_int (&p, &left, offset);
6566 ret = remote_hostio_send_command (p - rs->buf, PACKET_vFile_pread,
6567 remote_errno, &attachment,
6573 read_len = remote_unescape_input (attachment, attachment_len,
6575 if (read_len != ret)
6576 error (_("Read returned %d, but %d bytes."), ret, (int) read_len);
6581 /* Close FD on the remote target. Return 0, or -1 if an error occurs
6582 (and set *REMOTE_ERRNO). */
6585 remote_hostio_close (int fd, int *remote_errno)
6587 struct remote_state *rs = get_remote_state ();
6589 int left = get_remote_packet_size () - 1;
6591 remote_buffer_add_string (&p, &left, "vFile:close:");
6593 remote_buffer_add_int (&p, &left, fd);
6595 return remote_hostio_send_command (p - rs->buf, PACKET_vFile_close,
6596 remote_errno, NULL, NULL);
6599 /* Unlink FILENAME on the remote target. Return 0, or -1 if an error
6600 occurs (and set *REMOTE_ERRNO). */
6603 remote_hostio_unlink (const char *filename, int *remote_errno)
6605 struct remote_state *rs = get_remote_state ();
6607 int left = get_remote_packet_size () - 1;
6609 remote_buffer_add_string (&p, &left, "vFile:unlink:");
6611 remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
6614 return remote_hostio_send_command (p - rs->buf, PACKET_vFile_unlink,
6615 remote_errno, NULL, NULL);
6619 remote_fileio_errno_to_host (int errnum)
6643 case FILEIO_ENOTDIR:
6663 case FILEIO_ENAMETOOLONG:
6664 return ENAMETOOLONG;
6670 remote_hostio_error (int errnum)
6672 int host_error = remote_fileio_errno_to_host (errnum);
6674 if (host_error == -1)
6675 error (_("Unknown remote I/O error %d"), errnum);
6677 error (_("Remote I/O error: %s"), safe_strerror (host_error));
6681 fclose_cleanup (void *file)
6687 remote_hostio_close_cleanup (void *opaque)
6689 int fd = *(int *) opaque;
6692 remote_hostio_close (fd, &remote_errno);
6696 remote_file_put (const char *local_file, const char *remote_file, int from_tty)
6698 struct cleanup *back_to, *close_cleanup;
6699 int retcode, fd, remote_errno, bytes, io_size;
6702 int bytes_in_buffer;
6707 error (_("command can only be used with remote target"));
6709 file = fopen (local_file, "rb");
6711 perror_with_name (local_file);
6712 back_to = make_cleanup (fclose_cleanup, file);
6714 fd = remote_hostio_open (remote_file, (FILEIO_O_WRONLY | FILEIO_O_CREAT
6716 0700, &remote_errno);
6718 remote_hostio_error (remote_errno);
6720 /* Send up to this many bytes at once. They won't all fit in the
6721 remote packet limit, so we'll transfer slightly fewer. */
6722 io_size = get_remote_packet_size ();
6723 buffer = xmalloc (io_size);
6724 make_cleanup (xfree, buffer);
6726 close_cleanup = make_cleanup (remote_hostio_close_cleanup, &fd);
6728 bytes_in_buffer = 0;
6731 while (bytes_in_buffer || !saw_eof)
6735 bytes = fread (buffer + bytes_in_buffer, 1, io_size - bytes_in_buffer,
6740 error (_("Error reading %s."), local_file);
6743 /* EOF. Unless there is something still in the
6744 buffer from the last iteration, we are done. */
6746 if (bytes_in_buffer == 0)
6754 bytes += bytes_in_buffer;
6755 bytes_in_buffer = 0;
6757 retcode = remote_hostio_pwrite (fd, buffer, bytes, offset, &remote_errno);
6760 remote_hostio_error (remote_errno);
6761 else if (retcode == 0)
6762 error (_("Remote write of %d bytes returned 0!"), bytes);
6763 else if (retcode < bytes)
6765 /* Short write. Save the rest of the read data for the next
6767 bytes_in_buffer = bytes - retcode;
6768 memmove (buffer, buffer + retcode, bytes_in_buffer);
6774 discard_cleanups (close_cleanup);
6775 if (remote_hostio_close (fd, &remote_errno))
6776 remote_hostio_error (remote_errno);
6779 printf_filtered (_("Successfully sent file \"%s\".\n"), local_file);
6780 do_cleanups (back_to);
6784 remote_file_get (const char *remote_file, const char *local_file, int from_tty)
6786 struct cleanup *back_to, *close_cleanup;
6787 int retcode, fd, remote_errno, bytes, io_size;
6793 error (_("command can only be used with remote target"));
6795 fd = remote_hostio_open (remote_file, FILEIO_O_RDONLY, 0, &remote_errno);
6797 remote_hostio_error (remote_errno);
6799 file = fopen (local_file, "wb");
6801 perror_with_name (local_file);
6802 back_to = make_cleanup (fclose_cleanup, file);
6804 /* Send up to this many bytes at once. They won't all fit in the
6805 remote packet limit, so we'll transfer slightly fewer. */
6806 io_size = get_remote_packet_size ();
6807 buffer = xmalloc (io_size);
6808 make_cleanup (xfree, buffer);
6810 close_cleanup = make_cleanup (remote_hostio_close_cleanup, &fd);
6815 bytes = remote_hostio_pread (fd, buffer, io_size, offset, &remote_errno);
6817 /* Success, but no bytes, means end-of-file. */
6820 remote_hostio_error (remote_errno);
6824 bytes = fwrite (buffer, 1, bytes, file);
6826 perror_with_name (local_file);
6829 discard_cleanups (close_cleanup);
6830 if (remote_hostio_close (fd, &remote_errno))
6831 remote_hostio_error (remote_errno);
6834 printf_filtered (_("Successfully fetched file \"%s\".\n"), remote_file);
6835 do_cleanups (back_to);
6839 remote_file_delete (const char *remote_file, int from_tty)
6841 int retcode, remote_errno;
6844 error (_("command can only be used with remote target"));
6846 retcode = remote_hostio_unlink (remote_file, &remote_errno);
6848 remote_hostio_error (remote_errno);
6851 printf_filtered (_("Successfully deleted file \"%s\".\n"), remote_file);
6855 remote_put_command (char *args, int from_tty)
6857 struct cleanup *back_to;
6860 argv = buildargv (args);
6863 back_to = make_cleanup_freeargv (argv);
6864 if (argv[0] == NULL || argv[1] == NULL || argv[2] != NULL)
6865 error (_("Invalid parameters to remote put"));
6867 remote_file_put (argv[0], argv[1], from_tty);
6869 do_cleanups (back_to);
6873 remote_get_command (char *args, int from_tty)
6875 struct cleanup *back_to;
6878 argv = buildargv (args);
6881 back_to = make_cleanup_freeargv (argv);
6882 if (argv[0] == NULL || argv[1] == NULL || argv[2] != NULL)
6883 error (_("Invalid parameters to remote get"));
6885 remote_file_get (argv[0], argv[1], from_tty);
6887 do_cleanups (back_to);
6891 remote_delete_command (char *args, int from_tty)
6893 struct cleanup *back_to;
6896 argv = buildargv (args);
6899 back_to = make_cleanup_freeargv (argv);
6900 if (argv[0] == NULL || argv[1] != NULL)
6901 error (_("Invalid parameters to remote delete"));
6903 remote_file_delete (argv[0], from_tty);
6905 do_cleanups (back_to);
6909 remote_command (char *args, int from_tty)
6911 help_list (remote_cmdlist, "remote ", -1, gdb_stdout);
6915 init_remote_ops (void)
6917 remote_ops.to_shortname = "remote";
6918 remote_ops.to_longname = "Remote serial target in gdb-specific protocol";
6920 "Use a remote computer via a serial line, using a gdb-specific protocol.\n\
6921 Specify the serial device it is connected to\n\
6922 (e.g. /dev/ttyS0, /dev/ttya, COM1, etc.).";
6923 remote_ops.to_open = remote_open;
6924 remote_ops.to_close = remote_close;
6925 remote_ops.to_detach = remote_detach;
6926 remote_ops.to_disconnect = remote_disconnect;
6927 remote_ops.to_resume = remote_resume;
6928 remote_ops.to_wait = remote_wait;
6929 remote_ops.to_fetch_registers = remote_fetch_registers;
6930 remote_ops.to_store_registers = remote_store_registers;
6931 remote_ops.to_prepare_to_store = remote_prepare_to_store;
6932 remote_ops.deprecated_xfer_memory = remote_xfer_memory;
6933 remote_ops.to_files_info = remote_files_info;
6934 remote_ops.to_insert_breakpoint = remote_insert_breakpoint;
6935 remote_ops.to_remove_breakpoint = remote_remove_breakpoint;
6936 remote_ops.to_stopped_by_watchpoint = remote_stopped_by_watchpoint;
6937 remote_ops.to_stopped_data_address = remote_stopped_data_address;
6938 remote_ops.to_can_use_hw_breakpoint = remote_check_watch_resources;
6939 remote_ops.to_insert_hw_breakpoint = remote_insert_hw_breakpoint;
6940 remote_ops.to_remove_hw_breakpoint = remote_remove_hw_breakpoint;
6941 remote_ops.to_insert_watchpoint = remote_insert_watchpoint;
6942 remote_ops.to_remove_watchpoint = remote_remove_watchpoint;
6943 remote_ops.to_kill = remote_kill;
6944 remote_ops.to_load = generic_load;
6945 remote_ops.to_mourn_inferior = remote_mourn;
6946 remote_ops.to_thread_alive = remote_thread_alive;
6947 remote_ops.to_find_new_threads = remote_threads_info;
6948 remote_ops.to_pid_to_str = remote_pid_to_str;
6949 remote_ops.to_extra_thread_info = remote_threads_extra_info;
6950 remote_ops.to_stop = remote_stop;
6951 remote_ops.to_xfer_partial = remote_xfer_partial;
6952 remote_ops.to_rcmd = remote_rcmd;
6953 remote_ops.to_log_command = serial_log_command;
6954 remote_ops.to_get_thread_local_address = remote_get_thread_local_address;
6955 remote_ops.to_stratum = process_stratum;
6956 remote_ops.to_has_all_memory = 1;
6957 remote_ops.to_has_memory = 1;
6958 remote_ops.to_has_stack = 1;
6959 remote_ops.to_has_registers = 1;
6960 remote_ops.to_has_execution = 1;
6961 remote_ops.to_has_thread_control = tc_schedlock; /* can lock scheduler */
6962 remote_ops.to_magic = OPS_MAGIC;
6963 remote_ops.to_memory_map = remote_memory_map;
6964 remote_ops.to_flash_erase = remote_flash_erase;
6965 remote_ops.to_flash_done = remote_flash_done;
6966 remote_ops.to_read_description = remote_read_description;
6969 /* Set up the extended remote vector by making a copy of the standard
6970 remote vector and adding to it. */
6973 init_extended_remote_ops (void)
6975 extended_remote_ops = remote_ops;
6977 extended_remote_ops.to_shortname = "extended-remote";
6978 extended_remote_ops.to_longname =
6979 "Extended remote serial target in gdb-specific protocol";
6980 extended_remote_ops.to_doc =
6981 "Use a remote computer via a serial line, using a gdb-specific protocol.\n\
6982 Specify the serial device it is connected to (e.g. /dev/ttya).",
6983 extended_remote_ops.to_open = extended_remote_open;
6984 extended_remote_ops.to_create_inferior = extended_remote_create_inferior;
6985 extended_remote_ops.to_mourn_inferior = extended_remote_mourn;
6989 remote_can_async_p (void)
6991 /* We're async whenever the serial device is. */
6992 return (current_target.to_async_mask_value) && serial_can_async_p (remote_desc);
6996 remote_is_async_p (void)
6998 /* We're async whenever the serial device is. */
6999 return (current_target.to_async_mask_value) && serial_is_async_p (remote_desc);
7002 /* Pass the SERIAL event on and up to the client. One day this code
7003 will be able to delay notifying the client of an event until the
7004 point where an entire packet has been received. */
7006 static void (*async_client_callback) (enum inferior_event_type event_type,
7008 static void *async_client_context;
7009 static serial_event_ftype remote_async_serial_handler;
7012 remote_async_serial_handler (struct serial *scb, void *context)
7014 /* Don't propogate error information up to the client. Instead let
7015 the client find out about the error by querying the target. */
7016 async_client_callback (INF_REG_EVENT, async_client_context);
7020 remote_async (void (*callback) (enum inferior_event_type event_type,
7021 void *context), void *context)
7023 if (current_target.to_async_mask_value == 0)
7024 internal_error (__FILE__, __LINE__,
7025 _("Calling remote_async when async is masked"));
7027 if (callback != NULL)
7029 serial_async (remote_desc, remote_async_serial_handler, NULL);
7030 async_client_callback = callback;
7031 async_client_context = context;
7034 serial_async (remote_desc, NULL, NULL);
7037 /* Target async and target extended-async.
7039 This are temporary targets, until it is all tested. Eventually
7040 async support will be incorporated int the usual 'remote'
7044 init_remote_async_ops (void)
7046 remote_async_ops.to_shortname = "async";
7047 remote_async_ops.to_longname =
7048 "Remote serial target in async version of the gdb-specific protocol";
7049 remote_async_ops.to_doc =
7050 "Use a remote computer via a serial line, using a gdb-specific protocol.\n\
7051 Specify the serial device it is connected to (e.g. /dev/ttya).";
7052 remote_async_ops.to_open = remote_async_open;
7053 remote_async_ops.to_close = remote_close;
7054 remote_async_ops.to_detach = remote_detach;
7055 remote_async_ops.to_disconnect = remote_disconnect;
7056 remote_async_ops.to_resume = remote_async_resume;
7057 remote_async_ops.to_wait = remote_async_wait;
7058 remote_async_ops.to_fetch_registers = remote_fetch_registers;
7059 remote_async_ops.to_store_registers = remote_store_registers;
7060 remote_async_ops.to_prepare_to_store = remote_prepare_to_store;
7061 remote_async_ops.deprecated_xfer_memory = remote_xfer_memory;
7062 remote_async_ops.to_files_info = remote_files_info;
7063 remote_async_ops.to_insert_breakpoint = remote_insert_breakpoint;
7064 remote_async_ops.to_remove_breakpoint = remote_remove_breakpoint;
7065 remote_async_ops.to_can_use_hw_breakpoint = remote_check_watch_resources;
7066 remote_async_ops.to_insert_hw_breakpoint = remote_insert_hw_breakpoint;
7067 remote_async_ops.to_remove_hw_breakpoint = remote_remove_hw_breakpoint;
7068 remote_async_ops.to_insert_watchpoint = remote_insert_watchpoint;
7069 remote_async_ops.to_remove_watchpoint = remote_remove_watchpoint;
7070 remote_async_ops.to_stopped_by_watchpoint = remote_stopped_by_watchpoint;
7071 remote_async_ops.to_stopped_data_address = remote_stopped_data_address;
7072 remote_async_ops.to_terminal_inferior = remote_async_terminal_inferior;
7073 remote_async_ops.to_terminal_ours = remote_async_terminal_ours;
7074 remote_async_ops.to_kill = remote_async_kill;
7075 remote_async_ops.to_load = generic_load;
7076 remote_async_ops.to_mourn_inferior = remote_async_mourn;
7077 remote_async_ops.to_thread_alive = remote_thread_alive;
7078 remote_async_ops.to_find_new_threads = remote_threads_info;
7079 remote_async_ops.to_pid_to_str = remote_pid_to_str;
7080 remote_async_ops.to_extra_thread_info = remote_threads_extra_info;
7081 remote_async_ops.to_stop = remote_stop;
7082 remote_async_ops.to_xfer_partial = remote_xfer_partial;
7083 remote_async_ops.to_rcmd = remote_rcmd;
7084 remote_async_ops.to_stratum = process_stratum;
7085 remote_async_ops.to_has_all_memory = 1;
7086 remote_async_ops.to_has_memory = 1;
7087 remote_async_ops.to_has_stack = 1;
7088 remote_async_ops.to_has_registers = 1;
7089 remote_async_ops.to_has_execution = 1;
7090 remote_async_ops.to_has_thread_control = tc_schedlock; /* can lock scheduler */
7091 remote_async_ops.to_can_async_p = remote_can_async_p;
7092 remote_async_ops.to_is_async_p = remote_is_async_p;
7093 remote_async_ops.to_async = remote_async;
7094 remote_async_ops.to_async_mask_value = 1;
7095 remote_async_ops.to_magic = OPS_MAGIC;
7096 remote_async_ops.to_memory_map = remote_memory_map;
7097 remote_async_ops.to_flash_erase = remote_flash_erase;
7098 remote_async_ops.to_flash_done = remote_flash_done;
7099 remote_async_ops.to_read_description = remote_read_description;
7102 /* Set up the async extended remote vector by making a copy of the standard
7103 remote vector and adding to it. */
7106 init_extended_async_remote_ops (void)
7108 extended_async_remote_ops = remote_async_ops;
7110 extended_async_remote_ops.to_shortname = "extended-async";
7111 extended_async_remote_ops.to_longname =
7112 "Extended remote serial target in async gdb-specific protocol";
7113 extended_async_remote_ops.to_doc =
7114 "Use a remote computer via a serial line, using an async gdb-specific protocol.\n\
7115 Specify the serial device it is connected to (e.g. /dev/ttya).",
7116 extended_async_remote_ops.to_open = extended_remote_async_open;
7117 extended_async_remote_ops.to_create_inferior = extended_remote_async_create_inferior;
7118 extended_async_remote_ops.to_mourn_inferior = extended_remote_mourn;
7122 set_remote_cmd (char *args, int from_tty)
7124 help_list (remote_set_cmdlist, "set remote ", -1, gdb_stdout);
7128 show_remote_cmd (char *args, int from_tty)
7130 /* We can't just use cmd_show_list here, because we want to skip
7131 the redundant "show remote Z-packet" and the legacy aliases. */
7132 struct cleanup *showlist_chain;
7133 struct cmd_list_element *list = remote_show_cmdlist;
7135 showlist_chain = make_cleanup_ui_out_tuple_begin_end (uiout, "showlist");
7136 for (; list != NULL; list = list->next)
7137 if (strcmp (list->name, "Z-packet") == 0)
7139 else if (list->type == not_set_cmd)
7140 /* Alias commands are exactly like the original, except they
7141 don't have the normal type. */
7145 struct cleanup *option_chain
7146 = make_cleanup_ui_out_tuple_begin_end (uiout, "option");
7147 ui_out_field_string (uiout, "name", list->name);
7148 ui_out_text (uiout, ": ");
7149 if (list->type == show_cmd)
7150 do_setshow_command ((char *) NULL, from_tty, list);
7152 cmd_func (list, NULL, from_tty);
7153 /* Close the tuple. */
7154 do_cleanups (option_chain);
7157 /* Close the tuple. */
7158 do_cleanups (showlist_chain);
7162 /* Function to be called whenever a new objfile (shlib) is detected. */
7164 remote_new_objfile (struct objfile *objfile)
7166 if (remote_desc != 0) /* Have a remote connection. */
7167 remote_check_symbols (objfile);
7171 _initialize_remote (void)
7173 struct remote_state *rs;
7175 /* architecture specific data */
7176 remote_gdbarch_data_handle =
7177 gdbarch_data_register_post_init (init_remote_state);
7178 remote_g_packet_data_handle =
7179 gdbarch_data_register_pre_init (remote_g_packet_data_init);
7181 /* Initialize the per-target state. At the moment there is only one
7182 of these, not one per target. Only one target is active at a
7183 time. The default buffer size is unimportant; it will be expanded
7184 whenever a larger buffer is needed. */
7185 rs = get_remote_state_raw ();
7187 rs->buf = xmalloc (rs->buf_size);
7190 add_target (&remote_ops);
7192 init_extended_remote_ops ();
7193 add_target (&extended_remote_ops);
7195 init_remote_async_ops ();
7196 add_target (&remote_async_ops);
7198 init_extended_async_remote_ops ();
7199 add_target (&extended_async_remote_ops);
7201 /* Hook into new objfile notification. */
7202 observer_attach_new_objfile (remote_new_objfile);
7205 init_remote_threadtests ();
7208 /* set/show remote ... */
7210 add_prefix_cmd ("remote", class_maintenance, set_remote_cmd, _("\
7211 Remote protocol specific variables\n\
7212 Configure various remote-protocol specific variables such as\n\
7213 the packets being used"),
7214 &remote_set_cmdlist, "set remote ",
7215 0 /* allow-unknown */, &setlist);
7216 add_prefix_cmd ("remote", class_maintenance, show_remote_cmd, _("\
7217 Remote protocol specific variables\n\
7218 Configure various remote-protocol specific variables such as\n\
7219 the packets being used"),
7220 &remote_show_cmdlist, "show remote ",
7221 0 /* allow-unknown */, &showlist);
7223 add_cmd ("compare-sections", class_obscure, compare_sections_command, _("\
7224 Compare section data on target to the exec file.\n\
7225 Argument is a single section name (default: all loaded sections)."),
7228 add_cmd ("packet", class_maintenance, packet_command, _("\
7229 Send an arbitrary packet to a remote target.\n\
7230 maintenance packet TEXT\n\
7231 If GDB is talking to an inferior via the GDB serial protocol, then\n\
7232 this command sends the string TEXT to the inferior, and displays the\n\
7233 response packet. GDB supplies the initial `$' character, and the\n\
7234 terminating `#' character and checksum."),
7237 add_setshow_boolean_cmd ("remotebreak", no_class, &remote_break, _("\
7238 Set whether to send break if interrupted."), _("\
7239 Show whether to send break if interrupted."), _("\
7240 If set, a break, instead of a cntrl-c, is sent to the remote target."),
7241 NULL, NULL, /* FIXME: i18n: Whether to send break if interrupted is %s. */
7242 &setlist, &showlist);
7244 /* Install commands for configuring memory read/write packets. */
7246 add_cmd ("remotewritesize", no_class, set_memory_write_packet_size, _("\
7247 Set the maximum number of bytes per memory write packet (deprecated)."),
7249 add_cmd ("remotewritesize", no_class, show_memory_write_packet_size, _("\
7250 Show the maximum number of bytes per memory write packet (deprecated)."),
7252 add_cmd ("memory-write-packet-size", no_class,
7253 set_memory_write_packet_size, _("\
7254 Set the maximum number of bytes per memory-write packet.\n\
7255 Specify the number of bytes in a packet or 0 (zero) for the\n\
7256 default packet size. The actual limit is further reduced\n\
7257 dependent on the target. Specify ``fixed'' to disable the\n\
7258 further restriction and ``limit'' to enable that restriction."),
7259 &remote_set_cmdlist);
7260 add_cmd ("memory-read-packet-size", no_class,
7261 set_memory_read_packet_size, _("\
7262 Set the maximum number of bytes per memory-read packet.\n\
7263 Specify the number of bytes in a packet or 0 (zero) for the\n\
7264 default packet size. The actual limit is further reduced\n\
7265 dependent on the target. Specify ``fixed'' to disable the\n\
7266 further restriction and ``limit'' to enable that restriction."),
7267 &remote_set_cmdlist);
7268 add_cmd ("memory-write-packet-size", no_class,
7269 show_memory_write_packet_size,
7270 _("Show the maximum number of bytes per memory-write packet."),
7271 &remote_show_cmdlist);
7272 add_cmd ("memory-read-packet-size", no_class,
7273 show_memory_read_packet_size,
7274 _("Show the maximum number of bytes per memory-read packet."),
7275 &remote_show_cmdlist);
7277 add_setshow_zinteger_cmd ("hardware-watchpoint-limit", no_class,
7278 &remote_hw_watchpoint_limit, _("\
7279 Set the maximum number of target hardware watchpoints."), _("\
7280 Show the maximum number of target hardware watchpoints."), _("\
7281 Specify a negative limit for unlimited."),
7282 NULL, NULL, /* FIXME: i18n: The maximum number of target hardware watchpoints is %s. */
7283 &remote_set_cmdlist, &remote_show_cmdlist);
7284 add_setshow_zinteger_cmd ("hardware-breakpoint-limit", no_class,
7285 &remote_hw_breakpoint_limit, _("\
7286 Set the maximum number of target hardware breakpoints."), _("\
7287 Show the maximum number of target hardware breakpoints."), _("\
7288 Specify a negative limit for unlimited."),
7289 NULL, NULL, /* FIXME: i18n: The maximum number of target hardware breakpoints is %s. */
7290 &remote_set_cmdlist, &remote_show_cmdlist);
7292 add_setshow_integer_cmd ("remoteaddresssize", class_obscure,
7293 &remote_address_size, _("\
7294 Set the maximum size of the address (in bits) in a memory packet."), _("\
7295 Show the maximum size of the address (in bits) in a memory packet."), NULL,
7297 NULL, /* FIXME: i18n: */
7298 &setlist, &showlist);
7300 add_packet_config_cmd (&remote_protocol_packets[PACKET_X],
7301 "X", "binary-download", 1);
7303 add_packet_config_cmd (&remote_protocol_packets[PACKET_vCont],
7304 "vCont", "verbose-resume", 0);
7306 add_packet_config_cmd (&remote_protocol_packets[PACKET_QPassSignals],
7307 "QPassSignals", "pass-signals", 0);
7309 add_packet_config_cmd (&remote_protocol_packets[PACKET_qSymbol],
7310 "qSymbol", "symbol-lookup", 0);
7312 add_packet_config_cmd (&remote_protocol_packets[PACKET_P],
7313 "P", "set-register", 1);
7315 add_packet_config_cmd (&remote_protocol_packets[PACKET_p],
7316 "p", "fetch-register", 1);
7318 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z0],
7319 "Z0", "software-breakpoint", 0);
7321 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z1],
7322 "Z1", "hardware-breakpoint", 0);
7324 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z2],
7325 "Z2", "write-watchpoint", 0);
7327 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z3],
7328 "Z3", "read-watchpoint", 0);
7330 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z4],
7331 "Z4", "access-watchpoint", 0);
7333 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_auxv],
7334 "qXfer:auxv:read", "read-aux-vector", 0);
7336 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_features],
7337 "qXfer:features:read", "target-features", 0);
7339 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_libraries],
7340 "qXfer:libraries:read", "library-info", 0);
7342 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_memory_map],
7343 "qXfer:memory-map:read", "memory-map", 0);
7345 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_spu_read],
7346 "qXfer:spu:read", "read-spu-object", 0);
7348 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_spu_write],
7349 "qXfer:spu:write", "write-spu-object", 0);
7351 add_packet_config_cmd (&remote_protocol_packets[PACKET_qGetTLSAddr],
7352 "qGetTLSAddr", "get-thread-local-storage-address",
7355 add_packet_config_cmd (&remote_protocol_packets[PACKET_qSupported],
7356 "qSupported", "supported-packets", 0);
7358 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_open],
7359 "vFile:open", "hostio-open", 0);
7361 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_pread],
7362 "vFile:pread", "hostio-pread", 0);
7364 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_pwrite],
7365 "vFile:pwrite", "hostio-pwrite", 0);
7367 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_close],
7368 "vFile:close", "hostio-close", 0);
7370 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_unlink],
7371 "vFile:unlink", "hostio-unlink", 0);
7373 /* Keep the old ``set remote Z-packet ...'' working. Each individual
7374 Z sub-packet has its own set and show commands, but users may
7375 have sets to this variable in their .gdbinit files (or in their
7377 add_setshow_auto_boolean_cmd ("Z-packet", class_obscure,
7378 &remote_Z_packet_detect, _("\
7379 Set use of remote protocol `Z' packets"), _("\
7380 Show use of remote protocol `Z' packets "), _("\
7381 When set, GDB will attempt to use the remote breakpoint and watchpoint\n\
7383 set_remote_protocol_Z_packet_cmd,
7384 show_remote_protocol_Z_packet_cmd, /* FIXME: i18n: Use of remote protocol `Z' packets is %s. */
7385 &remote_set_cmdlist, &remote_show_cmdlist);
7387 add_prefix_cmd ("remote", class_files, remote_command, _("\
7388 Manipulate files on the remote system\n\
7389 Transfer files to and from the remote target system."),
7390 &remote_cmdlist, "remote ",
7391 0 /* allow-unknown */, &cmdlist);
7393 add_cmd ("put", class_files, remote_put_command,
7394 _("Copy a local file to the remote system."),
7397 add_cmd ("get", class_files, remote_get_command,
7398 _("Copy a remote file to the local system."),
7401 add_cmd ("delete", class_files, remote_delete_command,
7402 _("Delete a remote file."),
7405 /* Eventually initialize fileio. See fileio.c */
7406 initialize_remote_fileio (remote_set_cmdlist, remote_show_cmdlist);