2008-10-17 Michael Snyder <msnyder@vmware.com>
[binutils-gdb.git] / gdb / remote.c
1 /* Remote target communications for serial-line targets in custom GDB protocol
2
3 Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
4 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
5 Free Software Foundation, Inc.
6
7 This file is part of GDB.
8
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3 of the License, or
12 (at your option) any later version.
13
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
18
19 You should have received a copy of the GNU General Public License
20 along with this program. If not, see <http://www.gnu.org/licenses/>. */
21
22 /* See the GDB User Guide for details of the GDB remote protocol. */
23
24 #include "defs.h"
25 #include "gdb_string.h"
26 #include <ctype.h>
27 #include <fcntl.h>
28 #include "inferior.h"
29 #include "bfd.h"
30 #include "symfile.h"
31 #include "exceptions.h"
32 #include "target.h"
33 /*#include "terminal.h" */
34 #include "gdbcmd.h"
35 #include "objfiles.h"
36 #include "gdb-stabs.h"
37 #include "gdbthread.h"
38 #include "remote.h"
39 #include "regcache.h"
40 #include "value.h"
41 #include "gdb_assert.h"
42 #include "observer.h"
43 #include "solib.h"
44 #include "cli/cli-decode.h"
45 #include "cli/cli-setshow.h"
46 #include "target-descriptions.h"
47
48 #include <ctype.h>
49 #include <sys/time.h>
50
51 #include "event-loop.h"
52 #include "event-top.h"
53 #include "inf-loop.h"
54
55 #include <signal.h>
56 #include "serial.h"
57
58 #include "gdbcore.h" /* for exec_bfd */
59
60 #include "remote-fileio.h"
61 #include "gdb/fileio.h"
62 #include "gdb_stat.h"
63
64 #include "memory-map.h"
65
66 /* The size to align memory write packets, when practical. The protocol
67 does not guarantee any alignment, and gdb will generate short
68 writes and unaligned writes, but even as a best-effort attempt this
69 can improve bulk transfers. For instance, if a write is misaligned
70 relative to the target's data bus, the stub may need to make an extra
71 round trip fetching data from the target. This doesn't make a
72 huge difference, but it's easy to do, so we try to be helpful.
73
74 The alignment chosen is arbitrary; usually data bus width is
75 important here, not the possibly larger cache line size. */
76 enum { REMOTE_ALIGN_WRITES = 16 };
77
78 /* Prototypes for local functions. */
79 static void cleanup_sigint_signal_handler (void *dummy);
80 static void initialize_sigint_signal_handler (void);
81 static int getpkt_sane (char **buf, long *sizeof_buf, int forever);
82
83 static void handle_remote_sigint (int);
84 static void handle_remote_sigint_twice (int);
85 static void async_remote_interrupt (gdb_client_data);
86 void async_remote_interrupt_twice (gdb_client_data);
87
88 static void remote_files_info (struct target_ops *ignore);
89
90 static void remote_prepare_to_store (struct regcache *regcache);
91
92 static void remote_fetch_registers (struct regcache *regcache, int regno);
93
94 static void remote_resume (ptid_t ptid, int step,
95 enum target_signal siggnal);
96 static void remote_open (char *name, int from_tty);
97
98 static void extended_remote_open (char *name, int from_tty);
99
100 static void remote_open_1 (char *, int, struct target_ops *, int extended_p);
101
102 static void remote_close (int quitting);
103
104 static void remote_store_registers (struct regcache *regcache, int regno);
105
106 static void remote_mourn (void);
107
108 static void extended_remote_restart (void);
109
110 static void extended_remote_mourn (void);
111
112 static void remote_mourn_1 (struct target_ops *);
113
114 static void remote_send (char **buf, long *sizeof_buf_p);
115
116 static int readchar (int timeout);
117
118 static ptid_t remote_wait (ptid_t ptid,
119 struct target_waitstatus *status);
120
121 static void remote_kill (void);
122
123 static int tohex (int nib);
124
125 static int remote_can_async_p (void);
126
127 static int remote_is_async_p (void);
128
129 static void remote_async (void (*callback) (enum inferior_event_type event_type,
130 void *context), void *context);
131
132 static int remote_async_mask (int new_mask);
133
134 static void remote_detach (char *args, int from_tty);
135
136 static void remote_interrupt (int signo);
137
138 static void remote_interrupt_twice (int signo);
139
140 static void interrupt_query (void);
141
142 static void set_general_thread (struct ptid ptid);
143 static void set_continue_thread (struct ptid ptid);
144
145 static int remote_thread_alive (ptid_t);
146
147 static void get_offsets (void);
148
149 static void skip_frame (void);
150
151 static long read_frame (char **buf_p, long *sizeof_buf);
152
153 static int hexnumlen (ULONGEST num);
154
155 static void init_remote_ops (void);
156
157 static void init_extended_remote_ops (void);
158
159 static void remote_stop (ptid_t);
160
161 static int ishex (int ch, int *val);
162
163 static int stubhex (int ch);
164
165 static int hexnumstr (char *, ULONGEST);
166
167 static int hexnumnstr (char *, ULONGEST, int);
168
169 static CORE_ADDR remote_address_masked (CORE_ADDR);
170
171 static void print_packet (char *);
172
173 static unsigned long crc32 (unsigned char *, int, unsigned int);
174
175 static void compare_sections_command (char *, int);
176
177 static void packet_command (char *, int);
178
179 static int stub_unpack_int (char *buff, int fieldlength);
180
181 static ptid_t remote_current_thread (ptid_t oldptid);
182
183 static void remote_find_new_threads (void);
184
185 static void record_currthread (ptid_t currthread);
186
187 static int fromhex (int a);
188
189 static int hex2bin (const char *hex, gdb_byte *bin, int count);
190
191 static int bin2hex (const gdb_byte *bin, char *hex, int count);
192
193 static int putpkt_binary (char *buf, int cnt);
194
195 static void check_binary_download (CORE_ADDR addr);
196
197 struct packet_config;
198
199 static void show_packet_config_cmd (struct packet_config *config);
200
201 static void update_packet_config (struct packet_config *config);
202
203 static void set_remote_protocol_packet_cmd (char *args, int from_tty,
204 struct cmd_list_element *c);
205
206 static void show_remote_protocol_packet_cmd (struct ui_file *file,
207 int from_tty,
208 struct cmd_list_element *c,
209 const char *value);
210
211 static char *write_ptid (char *buf, const char *endbuf, ptid_t ptid);
212 static ptid_t read_ptid (char *buf, char **obuf);
213
214 static void remote_query_supported (void);
215
216 static void remote_check_symbols (struct objfile *objfile);
217
218 void _initialize_remote (void);
219
220 /* For "remote". */
221
222 static struct cmd_list_element *remote_cmdlist;
223
224 /* For "set remote" and "show remote". */
225
226 static struct cmd_list_element *remote_set_cmdlist;
227 static struct cmd_list_element *remote_show_cmdlist;
228
229 /* Description of the remote protocol state for the currently
230 connected target. This is per-target state, and independent of the
231 selected architecture. */
232
233 struct remote_state
234 {
235 /* A buffer to use for incoming packets, and its current size. The
236 buffer is grown dynamically for larger incoming packets.
237 Outgoing packets may also be constructed in this buffer.
238 BUF_SIZE is always at least REMOTE_PACKET_SIZE;
239 REMOTE_PACKET_SIZE should be used to limit the length of outgoing
240 packets. */
241 char *buf;
242 long buf_size;
243
244 /* If we negotiated packet size explicitly (and thus can bypass
245 heuristics for the largest packet size that will not overflow
246 a buffer in the stub), this will be set to that packet size.
247 Otherwise zero, meaning to use the guessed size. */
248 long explicit_packet_size;
249
250 /* remote_wait is normally called when the target is running and
251 waits for a stop reply packet. But sometimes we need to call it
252 when the target is already stopped. We can send a "?" packet
253 and have remote_wait read the response. Or, if we already have
254 the response, we can stash it in BUF and tell remote_wait to
255 skip calling getpkt. This flag is set when BUF contains a
256 stop reply packet and the target is not waiting. */
257 int cached_wait_status;
258
259 /* True, if in no ack mode. That is, neither GDB nor the stub will
260 expect acks from each other. The connection is assumed to be
261 reliable. */
262 int noack_mode;
263
264 /* True if we're connected in extended remote mode. */
265 int extended;
266
267 /* True if the stub reported support for multi-process
268 extensions. */
269 int multi_process_aware;
270
271 /* True if we resumed the target and we're waiting for the target to
272 stop. In the mean time, we can't start another command/query.
273 The remote server wouldn't be ready to process it, so we'd
274 timeout waiting for a reply that would never come and eventually
275 we'd close the connection. This can happen in asynchronous mode
276 because we allow GDB commands while the target is running. */
277 int waiting_for_stop_reply;
278 };
279
280 /* Returns true if the multi-process extensions are in effect. */
281 static int
282 remote_multi_process_p (struct remote_state *rs)
283 {
284 return rs->extended && rs->multi_process_aware;
285 }
286
287 /* This data could be associated with a target, but we do not always
288 have access to the current target when we need it, so for now it is
289 static. This will be fine for as long as only one target is in use
290 at a time. */
291 static struct remote_state remote_state;
292
293 static struct remote_state *
294 get_remote_state_raw (void)
295 {
296 return &remote_state;
297 }
298
299 /* Description of the remote protocol for a given architecture. */
300
301 struct packet_reg
302 {
303 long offset; /* Offset into G packet. */
304 long regnum; /* GDB's internal register number. */
305 LONGEST pnum; /* Remote protocol register number. */
306 int in_g_packet; /* Always part of G packet. */
307 /* long size in bytes; == register_size (target_gdbarch, regnum);
308 at present. */
309 /* char *name; == gdbarch_register_name (target_gdbarch, regnum);
310 at present. */
311 };
312
313 struct remote_arch_state
314 {
315 /* Description of the remote protocol registers. */
316 long sizeof_g_packet;
317
318 /* Description of the remote protocol registers indexed by REGNUM
319 (making an array gdbarch_num_regs in size). */
320 struct packet_reg *regs;
321
322 /* This is the size (in chars) of the first response to the ``g''
323 packet. It is used as a heuristic when determining the maximum
324 size of memory-read and memory-write packets. A target will
325 typically only reserve a buffer large enough to hold the ``g''
326 packet. The size does not include packet overhead (headers and
327 trailers). */
328 long actual_register_packet_size;
329
330 /* This is the maximum size (in chars) of a non read/write packet.
331 It is also used as a cap on the size of read/write packets. */
332 long remote_packet_size;
333 };
334
335
336 /* Handle for retreving the remote protocol data from gdbarch. */
337 static struct gdbarch_data *remote_gdbarch_data_handle;
338
339 static struct remote_arch_state *
340 get_remote_arch_state (void)
341 {
342 return gdbarch_data (target_gdbarch, remote_gdbarch_data_handle);
343 }
344
345 /* Fetch the global remote target state. */
346
347 static struct remote_state *
348 get_remote_state (void)
349 {
350 /* Make sure that the remote architecture state has been
351 initialized, because doing so might reallocate rs->buf. Any
352 function which calls getpkt also needs to be mindful of changes
353 to rs->buf, but this call limits the number of places which run
354 into trouble. */
355 get_remote_arch_state ();
356
357 return get_remote_state_raw ();
358 }
359
360 static int
361 compare_pnums (const void *lhs_, const void *rhs_)
362 {
363 const struct packet_reg * const *lhs = lhs_;
364 const struct packet_reg * const *rhs = rhs_;
365
366 if ((*lhs)->pnum < (*rhs)->pnum)
367 return -1;
368 else if ((*lhs)->pnum == (*rhs)->pnum)
369 return 0;
370 else
371 return 1;
372 }
373
374 static void *
375 init_remote_state (struct gdbarch *gdbarch)
376 {
377 int regnum, num_remote_regs, offset;
378 struct remote_state *rs = get_remote_state_raw ();
379 struct remote_arch_state *rsa;
380 struct packet_reg **remote_regs;
381
382 rsa = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct remote_arch_state);
383
384 /* Use the architecture to build a regnum<->pnum table, which will be
385 1:1 unless a feature set specifies otherwise. */
386 rsa->regs = GDBARCH_OBSTACK_CALLOC (gdbarch,
387 gdbarch_num_regs (gdbarch),
388 struct packet_reg);
389 for (regnum = 0; regnum < gdbarch_num_regs (gdbarch); regnum++)
390 {
391 struct packet_reg *r = &rsa->regs[regnum];
392
393 if (register_size (gdbarch, regnum) == 0)
394 /* Do not try to fetch zero-sized (placeholder) registers. */
395 r->pnum = -1;
396 else
397 r->pnum = gdbarch_remote_register_number (gdbarch, regnum);
398
399 r->regnum = regnum;
400 }
401
402 /* Define the g/G packet format as the contents of each register
403 with a remote protocol number, in order of ascending protocol
404 number. */
405
406 remote_regs = alloca (gdbarch_num_regs (gdbarch)
407 * sizeof (struct packet_reg *));
408 for (num_remote_regs = 0, regnum = 0;
409 regnum < gdbarch_num_regs (gdbarch);
410 regnum++)
411 if (rsa->regs[regnum].pnum != -1)
412 remote_regs[num_remote_regs++] = &rsa->regs[regnum];
413
414 qsort (remote_regs, num_remote_regs, sizeof (struct packet_reg *),
415 compare_pnums);
416
417 for (regnum = 0, offset = 0; regnum < num_remote_regs; regnum++)
418 {
419 remote_regs[regnum]->in_g_packet = 1;
420 remote_regs[regnum]->offset = offset;
421 offset += register_size (gdbarch, remote_regs[regnum]->regnum);
422 }
423
424 /* Record the maximum possible size of the g packet - it may turn out
425 to be smaller. */
426 rsa->sizeof_g_packet = offset;
427
428 /* Default maximum number of characters in a packet body. Many
429 remote stubs have a hardwired buffer size of 400 bytes
430 (c.f. BUFMAX in m68k-stub.c and i386-stub.c). BUFMAX-1 is used
431 as the maximum packet-size to ensure that the packet and an extra
432 NUL character can always fit in the buffer. This stops GDB
433 trashing stubs that try to squeeze an extra NUL into what is
434 already a full buffer (As of 1999-12-04 that was most stubs). */
435 rsa->remote_packet_size = 400 - 1;
436
437 /* This one is filled in when a ``g'' packet is received. */
438 rsa->actual_register_packet_size = 0;
439
440 /* Should rsa->sizeof_g_packet needs more space than the
441 default, adjust the size accordingly. Remember that each byte is
442 encoded as two characters. 32 is the overhead for the packet
443 header / footer. NOTE: cagney/1999-10-26: I suspect that 8
444 (``$NN:G...#NN'') is a better guess, the below has been padded a
445 little. */
446 if (rsa->sizeof_g_packet > ((rsa->remote_packet_size - 32) / 2))
447 rsa->remote_packet_size = (rsa->sizeof_g_packet * 2 + 32);
448
449 /* Make sure that the packet buffer is plenty big enough for
450 this architecture. */
451 if (rs->buf_size < rsa->remote_packet_size)
452 {
453 rs->buf_size = 2 * rsa->remote_packet_size;
454 rs->buf = xrealloc (rs->buf, rs->buf_size);
455 }
456
457 return rsa;
458 }
459
460 /* Return the current allowed size of a remote packet. This is
461 inferred from the current architecture, and should be used to
462 limit the length of outgoing packets. */
463 static long
464 get_remote_packet_size (void)
465 {
466 struct remote_state *rs = get_remote_state ();
467 struct remote_arch_state *rsa = get_remote_arch_state ();
468
469 if (rs->explicit_packet_size)
470 return rs->explicit_packet_size;
471
472 return rsa->remote_packet_size;
473 }
474
475 static struct packet_reg *
476 packet_reg_from_regnum (struct remote_arch_state *rsa, long regnum)
477 {
478 if (regnum < 0 && regnum >= gdbarch_num_regs (target_gdbarch))
479 return NULL;
480 else
481 {
482 struct packet_reg *r = &rsa->regs[regnum];
483 gdb_assert (r->regnum == regnum);
484 return r;
485 }
486 }
487
488 static struct packet_reg *
489 packet_reg_from_pnum (struct remote_arch_state *rsa, LONGEST pnum)
490 {
491 int i;
492 for (i = 0; i < gdbarch_num_regs (target_gdbarch); i++)
493 {
494 struct packet_reg *r = &rsa->regs[i];
495 if (r->pnum == pnum)
496 return r;
497 }
498 return NULL;
499 }
500
501 /* FIXME: graces/2002-08-08: These variables should eventually be
502 bound to an instance of the target object (as in gdbarch-tdep()),
503 when such a thing exists. */
504
505 /* This is set to the data address of the access causing the target
506 to stop for a watchpoint. */
507 static CORE_ADDR remote_watch_data_address;
508
509 /* This is non-zero if target stopped for a watchpoint. */
510 static int remote_stopped_by_watchpoint_p;
511
512 static struct target_ops remote_ops;
513
514 static struct target_ops extended_remote_ops;
515
516 static int remote_async_mask_value = 1;
517
518 /* FIXME: cagney/1999-09-23: Even though getpkt was called with
519 ``forever'' still use the normal timeout mechanism. This is
520 currently used by the ASYNC code to guarentee that target reads
521 during the initial connect always time-out. Once getpkt has been
522 modified to return a timeout indication and, in turn
523 remote_wait()/wait_for_inferior() have gained a timeout parameter
524 this can go away. */
525 static int wait_forever_enabled_p = 1;
526
527
528 /* This variable chooses whether to send a ^C or a break when the user
529 requests program interruption. Although ^C is usually what remote
530 systems expect, and that is the default here, sometimes a break is
531 preferable instead. */
532
533 static int remote_break;
534
535 /* Descriptor for I/O to remote machine. Initialize it to NULL so that
536 remote_open knows that we don't have a file open when the program
537 starts. */
538 static struct serial *remote_desc = NULL;
539
540 /* This variable sets the number of bits in an address that are to be
541 sent in a memory ("M" or "m") packet. Normally, after stripping
542 leading zeros, the entire address would be sent. This variable
543 restricts the address to REMOTE_ADDRESS_SIZE bits. HISTORY: The
544 initial implementation of remote.c restricted the address sent in
545 memory packets to ``host::sizeof long'' bytes - (typically 32
546 bits). Consequently, for 64 bit targets, the upper 32 bits of an
547 address was never sent. Since fixing this bug may cause a break in
548 some remote targets this variable is principly provided to
549 facilitate backward compatibility. */
550
551 static int remote_address_size;
552
553 /* Temporary to track who currently owns the terminal. See
554 remote_terminal_* for more details. */
555
556 static int remote_async_terminal_ours_p;
557
558 /* The executable file to use for "run" on the remote side. */
559
560 static char *remote_exec_file = "";
561
562 \f
563 /* User configurable variables for the number of characters in a
564 memory read/write packet. MIN (rsa->remote_packet_size,
565 rsa->sizeof_g_packet) is the default. Some targets need smaller
566 values (fifo overruns, et.al.) and some users need larger values
567 (speed up transfers). The variables ``preferred_*'' (the user
568 request), ``current_*'' (what was actually set) and ``forced_*''
569 (Positive - a soft limit, negative - a hard limit). */
570
571 struct memory_packet_config
572 {
573 char *name;
574 long size;
575 int fixed_p;
576 };
577
578 /* Compute the current size of a read/write packet. Since this makes
579 use of ``actual_register_packet_size'' the computation is dynamic. */
580
581 static long
582 get_memory_packet_size (struct memory_packet_config *config)
583 {
584 struct remote_state *rs = get_remote_state ();
585 struct remote_arch_state *rsa = get_remote_arch_state ();
586
587 /* NOTE: The somewhat arbitrary 16k comes from the knowledge (folk
588 law?) that some hosts don't cope very well with large alloca()
589 calls. Eventually the alloca() code will be replaced by calls to
590 xmalloc() and make_cleanups() allowing this restriction to either
591 be lifted or removed. */
592 #ifndef MAX_REMOTE_PACKET_SIZE
593 #define MAX_REMOTE_PACKET_SIZE 16384
594 #endif
595 /* NOTE: 20 ensures we can write at least one byte. */
596 #ifndef MIN_REMOTE_PACKET_SIZE
597 #define MIN_REMOTE_PACKET_SIZE 20
598 #endif
599 long what_they_get;
600 if (config->fixed_p)
601 {
602 if (config->size <= 0)
603 what_they_get = MAX_REMOTE_PACKET_SIZE;
604 else
605 what_they_get = config->size;
606 }
607 else
608 {
609 what_they_get = get_remote_packet_size ();
610 /* Limit the packet to the size specified by the user. */
611 if (config->size > 0
612 && what_they_get > config->size)
613 what_they_get = config->size;
614
615 /* Limit it to the size of the targets ``g'' response unless we have
616 permission from the stub to use a larger packet size. */
617 if (rs->explicit_packet_size == 0
618 && rsa->actual_register_packet_size > 0
619 && what_they_get > rsa->actual_register_packet_size)
620 what_they_get = rsa->actual_register_packet_size;
621 }
622 if (what_they_get > MAX_REMOTE_PACKET_SIZE)
623 what_they_get = MAX_REMOTE_PACKET_SIZE;
624 if (what_they_get < MIN_REMOTE_PACKET_SIZE)
625 what_they_get = MIN_REMOTE_PACKET_SIZE;
626
627 /* Make sure there is room in the global buffer for this packet
628 (including its trailing NUL byte). */
629 if (rs->buf_size < what_they_get + 1)
630 {
631 rs->buf_size = 2 * what_they_get;
632 rs->buf = xrealloc (rs->buf, 2 * what_they_get);
633 }
634
635 return what_they_get;
636 }
637
638 /* Update the size of a read/write packet. If they user wants
639 something really big then do a sanity check. */
640
641 static void
642 set_memory_packet_size (char *args, struct memory_packet_config *config)
643 {
644 int fixed_p = config->fixed_p;
645 long size = config->size;
646 if (args == NULL)
647 error (_("Argument required (integer, `fixed' or `limited')."));
648 else if (strcmp (args, "hard") == 0
649 || strcmp (args, "fixed") == 0)
650 fixed_p = 1;
651 else if (strcmp (args, "soft") == 0
652 || strcmp (args, "limit") == 0)
653 fixed_p = 0;
654 else
655 {
656 char *end;
657 size = strtoul (args, &end, 0);
658 if (args == end)
659 error (_("Invalid %s (bad syntax)."), config->name);
660 #if 0
661 /* Instead of explicitly capping the size of a packet to
662 MAX_REMOTE_PACKET_SIZE or dissallowing it, the user is
663 instead allowed to set the size to something arbitrarily
664 large. */
665 if (size > MAX_REMOTE_PACKET_SIZE)
666 error (_("Invalid %s (too large)."), config->name);
667 #endif
668 }
669 /* Extra checks? */
670 if (fixed_p && !config->fixed_p)
671 {
672 if (! query (_("The target may not be able to correctly handle a %s\n"
673 "of %ld bytes. Change the packet size? "),
674 config->name, size))
675 error (_("Packet size not changed."));
676 }
677 /* Update the config. */
678 config->fixed_p = fixed_p;
679 config->size = size;
680 }
681
682 static void
683 show_memory_packet_size (struct memory_packet_config *config)
684 {
685 printf_filtered (_("The %s is %ld. "), config->name, config->size);
686 if (config->fixed_p)
687 printf_filtered (_("Packets are fixed at %ld bytes.\n"),
688 get_memory_packet_size (config));
689 else
690 printf_filtered (_("Packets are limited to %ld bytes.\n"),
691 get_memory_packet_size (config));
692 }
693
694 static struct memory_packet_config memory_write_packet_config =
695 {
696 "memory-write-packet-size",
697 };
698
699 static void
700 set_memory_write_packet_size (char *args, int from_tty)
701 {
702 set_memory_packet_size (args, &memory_write_packet_config);
703 }
704
705 static void
706 show_memory_write_packet_size (char *args, int from_tty)
707 {
708 show_memory_packet_size (&memory_write_packet_config);
709 }
710
711 static long
712 get_memory_write_packet_size (void)
713 {
714 return get_memory_packet_size (&memory_write_packet_config);
715 }
716
717 static struct memory_packet_config memory_read_packet_config =
718 {
719 "memory-read-packet-size",
720 };
721
722 static void
723 set_memory_read_packet_size (char *args, int from_tty)
724 {
725 set_memory_packet_size (args, &memory_read_packet_config);
726 }
727
728 static void
729 show_memory_read_packet_size (char *args, int from_tty)
730 {
731 show_memory_packet_size (&memory_read_packet_config);
732 }
733
734 static long
735 get_memory_read_packet_size (void)
736 {
737 long size = get_memory_packet_size (&memory_read_packet_config);
738 /* FIXME: cagney/1999-11-07: Functions like getpkt() need to get an
739 extra buffer size argument before the memory read size can be
740 increased beyond this. */
741 if (size > get_remote_packet_size ())
742 size = get_remote_packet_size ();
743 return size;
744 }
745
746 \f
747 /* Generic configuration support for packets the stub optionally
748 supports. Allows the user to specify the use of the packet as well
749 as allowing GDB to auto-detect support in the remote stub. */
750
751 enum packet_support
752 {
753 PACKET_SUPPORT_UNKNOWN = 0,
754 PACKET_ENABLE,
755 PACKET_DISABLE
756 };
757
758 struct packet_config
759 {
760 const char *name;
761 const char *title;
762 enum auto_boolean detect;
763 enum packet_support support;
764 };
765
766 /* Analyze a packet's return value and update the packet config
767 accordingly. */
768
769 enum packet_result
770 {
771 PACKET_ERROR,
772 PACKET_OK,
773 PACKET_UNKNOWN
774 };
775
776 static void
777 update_packet_config (struct packet_config *config)
778 {
779 switch (config->detect)
780 {
781 case AUTO_BOOLEAN_TRUE:
782 config->support = PACKET_ENABLE;
783 break;
784 case AUTO_BOOLEAN_FALSE:
785 config->support = PACKET_DISABLE;
786 break;
787 case AUTO_BOOLEAN_AUTO:
788 config->support = PACKET_SUPPORT_UNKNOWN;
789 break;
790 }
791 }
792
793 static void
794 show_packet_config_cmd (struct packet_config *config)
795 {
796 char *support = "internal-error";
797 switch (config->support)
798 {
799 case PACKET_ENABLE:
800 support = "enabled";
801 break;
802 case PACKET_DISABLE:
803 support = "disabled";
804 break;
805 case PACKET_SUPPORT_UNKNOWN:
806 support = "unknown";
807 break;
808 }
809 switch (config->detect)
810 {
811 case AUTO_BOOLEAN_AUTO:
812 printf_filtered (_("Support for the `%s' packet is auto-detected, currently %s.\n"),
813 config->name, support);
814 break;
815 case AUTO_BOOLEAN_TRUE:
816 case AUTO_BOOLEAN_FALSE:
817 printf_filtered (_("Support for the `%s' packet is currently %s.\n"),
818 config->name, support);
819 break;
820 }
821 }
822
823 static void
824 add_packet_config_cmd (struct packet_config *config, const char *name,
825 const char *title, int legacy)
826 {
827 char *set_doc;
828 char *show_doc;
829 char *cmd_name;
830
831 config->name = name;
832 config->title = title;
833 config->detect = AUTO_BOOLEAN_AUTO;
834 config->support = PACKET_SUPPORT_UNKNOWN;
835 set_doc = xstrprintf ("Set use of remote protocol `%s' (%s) packet",
836 name, title);
837 show_doc = xstrprintf ("Show current use of remote protocol `%s' (%s) packet",
838 name, title);
839 /* set/show TITLE-packet {auto,on,off} */
840 cmd_name = xstrprintf ("%s-packet", title);
841 add_setshow_auto_boolean_cmd (cmd_name, class_obscure,
842 &config->detect, set_doc, show_doc, NULL, /* help_doc */
843 set_remote_protocol_packet_cmd,
844 show_remote_protocol_packet_cmd,
845 &remote_set_cmdlist, &remote_show_cmdlist);
846 /* set/show remote NAME-packet {auto,on,off} -- legacy. */
847 if (legacy)
848 {
849 char *legacy_name;
850 legacy_name = xstrprintf ("%s-packet", name);
851 add_alias_cmd (legacy_name, cmd_name, class_obscure, 0,
852 &remote_set_cmdlist);
853 add_alias_cmd (legacy_name, cmd_name, class_obscure, 0,
854 &remote_show_cmdlist);
855 }
856 }
857
858 static enum packet_result
859 packet_check_result (const char *buf)
860 {
861 if (buf[0] != '\0')
862 {
863 /* The stub recognized the packet request. Check that the
864 operation succeeded. */
865 if (buf[0] == 'E'
866 && isxdigit (buf[1]) && isxdigit (buf[2])
867 && buf[3] == '\0')
868 /* "Enn" - definitly an error. */
869 return PACKET_ERROR;
870
871 /* Always treat "E." as an error. This will be used for
872 more verbose error messages, such as E.memtypes. */
873 if (buf[0] == 'E' && buf[1] == '.')
874 return PACKET_ERROR;
875
876 /* The packet may or may not be OK. Just assume it is. */
877 return PACKET_OK;
878 }
879 else
880 /* The stub does not support the packet. */
881 return PACKET_UNKNOWN;
882 }
883
884 static enum packet_result
885 packet_ok (const char *buf, struct packet_config *config)
886 {
887 enum packet_result result;
888
889 result = packet_check_result (buf);
890 switch (result)
891 {
892 case PACKET_OK:
893 case PACKET_ERROR:
894 /* The stub recognized the packet request. */
895 switch (config->support)
896 {
897 case PACKET_SUPPORT_UNKNOWN:
898 if (remote_debug)
899 fprintf_unfiltered (gdb_stdlog,
900 "Packet %s (%s) is supported\n",
901 config->name, config->title);
902 config->support = PACKET_ENABLE;
903 break;
904 case PACKET_DISABLE:
905 internal_error (__FILE__, __LINE__,
906 _("packet_ok: attempt to use a disabled packet"));
907 break;
908 case PACKET_ENABLE:
909 break;
910 }
911 break;
912 case PACKET_UNKNOWN:
913 /* The stub does not support the packet. */
914 switch (config->support)
915 {
916 case PACKET_ENABLE:
917 if (config->detect == AUTO_BOOLEAN_AUTO)
918 /* If the stub previously indicated that the packet was
919 supported then there is a protocol error.. */
920 error (_("Protocol error: %s (%s) conflicting enabled responses."),
921 config->name, config->title);
922 else
923 /* The user set it wrong. */
924 error (_("Enabled packet %s (%s) not recognized by stub"),
925 config->name, config->title);
926 break;
927 case PACKET_SUPPORT_UNKNOWN:
928 if (remote_debug)
929 fprintf_unfiltered (gdb_stdlog,
930 "Packet %s (%s) is NOT supported\n",
931 config->name, config->title);
932 config->support = PACKET_DISABLE;
933 break;
934 case PACKET_DISABLE:
935 break;
936 }
937 break;
938 }
939
940 return result;
941 }
942
943 enum {
944 PACKET_vCont = 0,
945 PACKET_X,
946 PACKET_qSymbol,
947 PACKET_P,
948 PACKET_p,
949 PACKET_Z0,
950 PACKET_Z1,
951 PACKET_Z2,
952 PACKET_Z3,
953 PACKET_Z4,
954 PACKET_vFile_open,
955 PACKET_vFile_pread,
956 PACKET_vFile_pwrite,
957 PACKET_vFile_close,
958 PACKET_vFile_unlink,
959 PACKET_qXfer_auxv,
960 PACKET_qXfer_features,
961 PACKET_qXfer_libraries,
962 PACKET_qXfer_memory_map,
963 PACKET_qXfer_spu_read,
964 PACKET_qXfer_spu_write,
965 PACKET_qGetTLSAddr,
966 PACKET_qSupported,
967 PACKET_QPassSignals,
968 PACKET_qSearch_memory,
969 PACKET_vAttach,
970 PACKET_vRun,
971 PACKET_QStartNoAckMode,
972 PACKET_vKill,
973 PACKET_MAX
974 };
975
976 static struct packet_config remote_protocol_packets[PACKET_MAX];
977
978 static void
979 set_remote_protocol_packet_cmd (char *args, int from_tty,
980 struct cmd_list_element *c)
981 {
982 struct packet_config *packet;
983
984 for (packet = remote_protocol_packets;
985 packet < &remote_protocol_packets[PACKET_MAX];
986 packet++)
987 {
988 if (&packet->detect == c->var)
989 {
990 update_packet_config (packet);
991 return;
992 }
993 }
994 internal_error (__FILE__, __LINE__, "Could not find config for %s",
995 c->name);
996 }
997
998 static void
999 show_remote_protocol_packet_cmd (struct ui_file *file, int from_tty,
1000 struct cmd_list_element *c,
1001 const char *value)
1002 {
1003 struct packet_config *packet;
1004
1005 for (packet = remote_protocol_packets;
1006 packet < &remote_protocol_packets[PACKET_MAX];
1007 packet++)
1008 {
1009 if (&packet->detect == c->var)
1010 {
1011 show_packet_config_cmd (packet);
1012 return;
1013 }
1014 }
1015 internal_error (__FILE__, __LINE__, "Could not find config for %s",
1016 c->name);
1017 }
1018
1019 /* Should we try one of the 'Z' requests? */
1020
1021 enum Z_packet_type
1022 {
1023 Z_PACKET_SOFTWARE_BP,
1024 Z_PACKET_HARDWARE_BP,
1025 Z_PACKET_WRITE_WP,
1026 Z_PACKET_READ_WP,
1027 Z_PACKET_ACCESS_WP,
1028 NR_Z_PACKET_TYPES
1029 };
1030
1031 /* For compatibility with older distributions. Provide a ``set remote
1032 Z-packet ...'' command that updates all the Z packet types. */
1033
1034 static enum auto_boolean remote_Z_packet_detect;
1035
1036 static void
1037 set_remote_protocol_Z_packet_cmd (char *args, int from_tty,
1038 struct cmd_list_element *c)
1039 {
1040 int i;
1041 for (i = 0; i < NR_Z_PACKET_TYPES; i++)
1042 {
1043 remote_protocol_packets[PACKET_Z0 + i].detect = remote_Z_packet_detect;
1044 update_packet_config (&remote_protocol_packets[PACKET_Z0 + i]);
1045 }
1046 }
1047
1048 static void
1049 show_remote_protocol_Z_packet_cmd (struct ui_file *file, int from_tty,
1050 struct cmd_list_element *c,
1051 const char *value)
1052 {
1053 int i;
1054 for (i = 0; i < NR_Z_PACKET_TYPES; i++)
1055 {
1056 show_packet_config_cmd (&remote_protocol_packets[PACKET_Z0 + i]);
1057 }
1058 }
1059
1060 /* Should we try the 'ThreadInfo' query packet?
1061
1062 This variable (NOT available to the user: auto-detect only!)
1063 determines whether GDB will use the new, simpler "ThreadInfo"
1064 query or the older, more complex syntax for thread queries.
1065 This is an auto-detect variable (set to true at each connect,
1066 and set to false when the target fails to recognize it). */
1067
1068 static int use_threadinfo_query;
1069 static int use_threadextra_query;
1070
1071 /* Tokens for use by the asynchronous signal handlers for SIGINT. */
1072 static struct async_signal_handler *sigint_remote_twice_token;
1073 static struct async_signal_handler *sigint_remote_token;
1074
1075 \f
1076
1077 static ptid_t magic_null_ptid;
1078 static ptid_t not_sent_ptid;
1079 static ptid_t any_thread_ptid;
1080
1081 /* These are the threads which we last sent to the remote system. The
1082 TID member will be -1 for all or -2 for not sent yet. */
1083
1084 static ptid_t general_thread;
1085 static ptid_t continue_thread;
1086
1087
1088 /* Call this function as a result of
1089 1) A halt indication (T packet) containing a thread id
1090 2) A direct query of currthread
1091 3) Successful execution of set thread
1092 */
1093
1094 static void
1095 record_currthread (ptid_t currthread)
1096 {
1097 general_thread = currthread;
1098
1099 /* When connecting to a target remote, or to a target
1100 extended-remote which already was debugging an inferior, we may
1101 not know about it yet. Add it before adding its child thread, so
1102 notifications are emitted in a sensible order. */
1103 if (!in_inferior_list (ptid_get_pid (currthread)))
1104 add_inferior (ptid_get_pid (currthread));
1105
1106 /* If this is a new thread, add it to GDB's thread list.
1107 If we leave it up to WFI to do this, bad things will happen. */
1108
1109 if (in_thread_list (currthread) && is_exited (currthread))
1110 {
1111 /* We're seeing an event on a thread id we knew had exited.
1112 This has to be a new thread reusing the old id. Add it. */
1113 add_thread (currthread);
1114 return;
1115 }
1116
1117 if (!in_thread_list (currthread))
1118 {
1119 if (ptid_equal (pid_to_ptid (ptid_get_pid (currthread)), inferior_ptid))
1120 {
1121 /* inferior_ptid has no thread member yet. This can happen
1122 with the vAttach -> remote_wait,"TAAthread:" path if the
1123 stub doesn't support qC. This is the first stop reported
1124 after an attach, so this is the main thread. Update the
1125 ptid in the thread list. */
1126 thread_change_ptid (inferior_ptid, currthread);
1127 return;
1128 }
1129
1130 if (ptid_equal (magic_null_ptid, inferior_ptid))
1131 {
1132 /* inferior_ptid is not set yet. This can happen with the
1133 vRun -> remote_wait,"TAAthread:" path if the stub
1134 doesn't support qC. This is the first stop reported
1135 after an attach, so this is the main thread. Update the
1136 ptid in the thread list. */
1137 thread_change_ptid (inferior_ptid, currthread);
1138 return;
1139 }
1140
1141 /* This is really a new thread. Add it. */
1142 add_thread (currthread);
1143 }
1144 }
1145
1146 static char *last_pass_packet;
1147
1148 /* If 'QPassSignals' is supported, tell the remote stub what signals
1149 it can simply pass through to the inferior without reporting. */
1150
1151 static void
1152 remote_pass_signals (void)
1153 {
1154 if (remote_protocol_packets[PACKET_QPassSignals].support != PACKET_DISABLE)
1155 {
1156 char *pass_packet, *p;
1157 int numsigs = (int) TARGET_SIGNAL_LAST;
1158 int count = 0, i;
1159
1160 gdb_assert (numsigs < 256);
1161 for (i = 0; i < numsigs; i++)
1162 {
1163 if (signal_stop_state (i) == 0
1164 && signal_print_state (i) == 0
1165 && signal_pass_state (i) == 1)
1166 count++;
1167 }
1168 pass_packet = xmalloc (count * 3 + strlen ("QPassSignals:") + 1);
1169 strcpy (pass_packet, "QPassSignals:");
1170 p = pass_packet + strlen (pass_packet);
1171 for (i = 0; i < numsigs; i++)
1172 {
1173 if (signal_stop_state (i) == 0
1174 && signal_print_state (i) == 0
1175 && signal_pass_state (i) == 1)
1176 {
1177 if (i >= 16)
1178 *p++ = tohex (i >> 4);
1179 *p++ = tohex (i & 15);
1180 if (count)
1181 *p++ = ';';
1182 else
1183 break;
1184 count--;
1185 }
1186 }
1187 *p = 0;
1188 if (!last_pass_packet || strcmp (last_pass_packet, pass_packet))
1189 {
1190 struct remote_state *rs = get_remote_state ();
1191 char *buf = rs->buf;
1192
1193 putpkt (pass_packet);
1194 getpkt (&rs->buf, &rs->buf_size, 0);
1195 packet_ok (buf, &remote_protocol_packets[PACKET_QPassSignals]);
1196 if (last_pass_packet)
1197 xfree (last_pass_packet);
1198 last_pass_packet = pass_packet;
1199 }
1200 else
1201 xfree (pass_packet);
1202 }
1203 }
1204
1205 /* If PTID is MAGIC_NULL_PTID, don't set any thread. If PTID is
1206 MINUS_ONE_PTID, set the thread to -1, so the stub returns the
1207 thread. If GEN is set, set the general thread, if not, then set
1208 the step/continue thread. */
1209 static void
1210 set_thread (struct ptid ptid, int gen)
1211 {
1212 struct remote_state *rs = get_remote_state ();
1213 ptid_t state = gen ? general_thread : continue_thread;
1214 char *buf = rs->buf;
1215 char *endbuf = rs->buf + get_remote_packet_size ();
1216
1217 if (ptid_equal (state, ptid))
1218 return;
1219
1220 *buf++ = 'H';
1221 *buf++ = gen ? 'g' : 'c';
1222 if (ptid_equal (ptid, magic_null_ptid))
1223 xsnprintf (buf, endbuf - buf, "0");
1224 else if (ptid_equal (ptid, any_thread_ptid))
1225 xsnprintf (buf, endbuf - buf, "0");
1226 else if (ptid_equal (ptid, minus_one_ptid))
1227 xsnprintf (buf, endbuf - buf, "-1");
1228 else
1229 write_ptid (buf, endbuf, ptid);
1230 putpkt (rs->buf);
1231 getpkt (&rs->buf, &rs->buf_size, 0);
1232 if (gen)
1233 general_thread = ptid;
1234 else
1235 continue_thread = ptid;
1236 }
1237
1238 static void
1239 set_general_thread (struct ptid ptid)
1240 {
1241 set_thread (ptid, 1);
1242 }
1243
1244 static void
1245 set_continue_thread (struct ptid ptid)
1246 {
1247 set_thread (ptid, 0);
1248 }
1249
1250 /* Change the remote current process. Which thread within the process
1251 ends up selected isn't important, as long as it is the same process
1252 as what INFERIOR_PTID points to.
1253
1254 This comes from that fact that there is no explicit notion of
1255 "selected process" in the protocol. The selected process for
1256 general operations is the process the selected general thread
1257 belongs to. */
1258
1259 static void
1260 set_general_process (void)
1261 {
1262 struct remote_state *rs = get_remote_state ();
1263
1264 /* If the remote can't handle multiple processes, don't bother. */
1265 if (!remote_multi_process_p (rs))
1266 return;
1267
1268 /* We only need to change the remote current thread if it's pointing
1269 at some other process. */
1270 if (ptid_get_pid (general_thread) != ptid_get_pid (inferior_ptid))
1271 set_general_thread (inferior_ptid);
1272 }
1273
1274 \f
1275 /* Return nonzero if the thread PTID is still alive on the remote
1276 system. */
1277
1278 static int
1279 remote_thread_alive (ptid_t ptid)
1280 {
1281 struct remote_state *rs = get_remote_state ();
1282 int tid = ptid_get_tid (ptid);
1283 char *p, *endp;
1284
1285 if (ptid_equal (ptid, magic_null_ptid))
1286 /* The main thread is always alive. */
1287 return 1;
1288
1289 if (ptid_get_pid (ptid) != 0 && ptid_get_tid (ptid) == 0)
1290 /* The main thread is always alive. This can happen after a
1291 vAttach, if the remote side doesn't support
1292 multi-threading. */
1293 return 1;
1294
1295 p = rs->buf;
1296 endp = rs->buf + get_remote_packet_size ();
1297
1298 *p++ = 'T';
1299 write_ptid (p, endp, ptid);
1300
1301 putpkt (rs->buf);
1302 getpkt (&rs->buf, &rs->buf_size, 0);
1303 return (rs->buf[0] == 'O' && rs->buf[1] == 'K');
1304 }
1305
1306 /* About these extended threadlist and threadinfo packets. They are
1307 variable length packets but, the fields within them are often fixed
1308 length. They are redundent enough to send over UDP as is the
1309 remote protocol in general. There is a matching unit test module
1310 in libstub. */
1311
1312 #define OPAQUETHREADBYTES 8
1313
1314 /* a 64 bit opaque identifier */
1315 typedef unsigned char threadref[OPAQUETHREADBYTES];
1316
1317 /* WARNING: This threadref data structure comes from the remote O.S.,
1318 libstub protocol encoding, and remote.c. it is not particularly
1319 changable. */
1320
1321 /* Right now, the internal structure is int. We want it to be bigger.
1322 Plan to fix this.
1323 */
1324
1325 typedef int gdb_threadref; /* Internal GDB thread reference. */
1326
1327 /* gdb_ext_thread_info is an internal GDB data structure which is
1328 equivalent to the reply of the remote threadinfo packet. */
1329
1330 struct gdb_ext_thread_info
1331 {
1332 threadref threadid; /* External form of thread reference. */
1333 int active; /* Has state interesting to GDB?
1334 regs, stack. */
1335 char display[256]; /* Brief state display, name,
1336 blocked/suspended. */
1337 char shortname[32]; /* To be used to name threads. */
1338 char more_display[256]; /* Long info, statistics, queue depth,
1339 whatever. */
1340 };
1341
1342 /* The volume of remote transfers can be limited by submitting
1343 a mask containing bits specifying the desired information.
1344 Use a union of these values as the 'selection' parameter to
1345 get_thread_info. FIXME: Make these TAG names more thread specific.
1346 */
1347
1348 #define TAG_THREADID 1
1349 #define TAG_EXISTS 2
1350 #define TAG_DISPLAY 4
1351 #define TAG_THREADNAME 8
1352 #define TAG_MOREDISPLAY 16
1353
1354 #define BUF_THREAD_ID_SIZE (OPAQUETHREADBYTES * 2)
1355
1356 char *unpack_varlen_hex (char *buff, ULONGEST *result);
1357
1358 static char *unpack_nibble (char *buf, int *val);
1359
1360 static char *pack_nibble (char *buf, int nibble);
1361
1362 static char *pack_hex_byte (char *pkt, int /* unsigned char */ byte);
1363
1364 static char *unpack_byte (char *buf, int *value);
1365
1366 static char *pack_int (char *buf, int value);
1367
1368 static char *unpack_int (char *buf, int *value);
1369
1370 static char *unpack_string (char *src, char *dest, int length);
1371
1372 static char *pack_threadid (char *pkt, threadref *id);
1373
1374 static char *unpack_threadid (char *inbuf, threadref *id);
1375
1376 void int_to_threadref (threadref *id, int value);
1377
1378 static int threadref_to_int (threadref *ref);
1379
1380 static void copy_threadref (threadref *dest, threadref *src);
1381
1382 static int threadmatch (threadref *dest, threadref *src);
1383
1384 static char *pack_threadinfo_request (char *pkt, int mode,
1385 threadref *id);
1386
1387 static int remote_unpack_thread_info_response (char *pkt,
1388 threadref *expectedref,
1389 struct gdb_ext_thread_info
1390 *info);
1391
1392
1393 static int remote_get_threadinfo (threadref *threadid,
1394 int fieldset, /*TAG mask */
1395 struct gdb_ext_thread_info *info);
1396
1397 static char *pack_threadlist_request (char *pkt, int startflag,
1398 int threadcount,
1399 threadref *nextthread);
1400
1401 static int parse_threadlist_response (char *pkt,
1402 int result_limit,
1403 threadref *original_echo,
1404 threadref *resultlist,
1405 int *doneflag);
1406
1407 static int remote_get_threadlist (int startflag,
1408 threadref *nextthread,
1409 int result_limit,
1410 int *done,
1411 int *result_count,
1412 threadref *threadlist);
1413
1414 typedef int (*rmt_thread_action) (threadref *ref, void *context);
1415
1416 static int remote_threadlist_iterator (rmt_thread_action stepfunction,
1417 void *context, int looplimit);
1418
1419 static int remote_newthread_step (threadref *ref, void *context);
1420
1421
1422 /* Write a PTID to BUF. ENDBUF points to one-passed-the-end of the
1423 buffer we're allowed to write to. Returns
1424 BUF+CHARACTERS_WRITTEN. */
1425
1426 static char *
1427 write_ptid (char *buf, const char *endbuf, ptid_t ptid)
1428 {
1429 int pid, tid;
1430 struct remote_state *rs = get_remote_state ();
1431
1432 if (remote_multi_process_p (rs))
1433 {
1434 pid = ptid_get_pid (ptid);
1435 if (pid < 0)
1436 buf += xsnprintf (buf, endbuf - buf, "p-%x.", -pid);
1437 else
1438 buf += xsnprintf (buf, endbuf - buf, "p%x.", pid);
1439 }
1440 tid = ptid_get_tid (ptid);
1441 if (tid < 0)
1442 buf += xsnprintf (buf, endbuf - buf, "-%x", -tid);
1443 else
1444 buf += xsnprintf (buf, endbuf - buf, "%x", tid);
1445
1446 return buf;
1447 }
1448
1449 /* Extract a PTID from BUF. If non-null, OBUF is set to the to one
1450 passed the last parsed char. Returns null_ptid on error. */
1451
1452 static ptid_t
1453 read_ptid (char *buf, char **obuf)
1454 {
1455 char *p = buf;
1456 char *pp;
1457 ULONGEST pid = 0, tid = 0;
1458 ptid_t ptid;
1459
1460 if (*p == 'p')
1461 {
1462 /* Multi-process ptid. */
1463 pp = unpack_varlen_hex (p + 1, &pid);
1464 if (*pp != '.')
1465 error (_("invalid remote ptid: %s\n"), p);
1466
1467 p = pp;
1468 pp = unpack_varlen_hex (p + 1, &tid);
1469 if (obuf)
1470 *obuf = pp;
1471 return ptid_build (pid, 0, tid);
1472 }
1473
1474 /* No multi-process. Just a tid. */
1475 pp = unpack_varlen_hex (p, &tid);
1476
1477 /* Since the stub is not sending a process id, then default to
1478 what's in inferior_ptid. */
1479 pid = ptid_get_pid (inferior_ptid);
1480
1481 if (obuf)
1482 *obuf = pp;
1483 return ptid_build (pid, 0, tid);
1484 }
1485
1486 /* Encode 64 bits in 16 chars of hex. */
1487
1488 static const char hexchars[] = "0123456789abcdef";
1489
1490 static int
1491 ishex (int ch, int *val)
1492 {
1493 if ((ch >= 'a') && (ch <= 'f'))
1494 {
1495 *val = ch - 'a' + 10;
1496 return 1;
1497 }
1498 if ((ch >= 'A') && (ch <= 'F'))
1499 {
1500 *val = ch - 'A' + 10;
1501 return 1;
1502 }
1503 if ((ch >= '0') && (ch <= '9'))
1504 {
1505 *val = ch - '0';
1506 return 1;
1507 }
1508 return 0;
1509 }
1510
1511 static int
1512 stubhex (int ch)
1513 {
1514 if (ch >= 'a' && ch <= 'f')
1515 return ch - 'a' + 10;
1516 if (ch >= '0' && ch <= '9')
1517 return ch - '0';
1518 if (ch >= 'A' && ch <= 'F')
1519 return ch - 'A' + 10;
1520 return -1;
1521 }
1522
1523 static int
1524 stub_unpack_int (char *buff, int fieldlength)
1525 {
1526 int nibble;
1527 int retval = 0;
1528
1529 while (fieldlength)
1530 {
1531 nibble = stubhex (*buff++);
1532 retval |= nibble;
1533 fieldlength--;
1534 if (fieldlength)
1535 retval = retval << 4;
1536 }
1537 return retval;
1538 }
1539
1540 char *
1541 unpack_varlen_hex (char *buff, /* packet to parse */
1542 ULONGEST *result)
1543 {
1544 int nibble;
1545 ULONGEST retval = 0;
1546
1547 while (ishex (*buff, &nibble))
1548 {
1549 buff++;
1550 retval = retval << 4;
1551 retval |= nibble & 0x0f;
1552 }
1553 *result = retval;
1554 return buff;
1555 }
1556
1557 static char *
1558 unpack_nibble (char *buf, int *val)
1559 {
1560 *val = fromhex (*buf++);
1561 return buf;
1562 }
1563
1564 static char *
1565 pack_nibble (char *buf, int nibble)
1566 {
1567 *buf++ = hexchars[(nibble & 0x0f)];
1568 return buf;
1569 }
1570
1571 static char *
1572 pack_hex_byte (char *pkt, int byte)
1573 {
1574 *pkt++ = hexchars[(byte >> 4) & 0xf];
1575 *pkt++ = hexchars[(byte & 0xf)];
1576 return pkt;
1577 }
1578
1579 static char *
1580 unpack_byte (char *buf, int *value)
1581 {
1582 *value = stub_unpack_int (buf, 2);
1583 return buf + 2;
1584 }
1585
1586 static char *
1587 pack_int (char *buf, int value)
1588 {
1589 buf = pack_hex_byte (buf, (value >> 24) & 0xff);
1590 buf = pack_hex_byte (buf, (value >> 16) & 0xff);
1591 buf = pack_hex_byte (buf, (value >> 8) & 0x0ff);
1592 buf = pack_hex_byte (buf, (value & 0xff));
1593 return buf;
1594 }
1595
1596 static char *
1597 unpack_int (char *buf, int *value)
1598 {
1599 *value = stub_unpack_int (buf, 8);
1600 return buf + 8;
1601 }
1602
1603 #if 0 /* Currently unused, uncomment when needed. */
1604 static char *pack_string (char *pkt, char *string);
1605
1606 static char *
1607 pack_string (char *pkt, char *string)
1608 {
1609 char ch;
1610 int len;
1611
1612 len = strlen (string);
1613 if (len > 200)
1614 len = 200; /* Bigger than most GDB packets, junk??? */
1615 pkt = pack_hex_byte (pkt, len);
1616 while (len-- > 0)
1617 {
1618 ch = *string++;
1619 if ((ch == '\0') || (ch == '#'))
1620 ch = '*'; /* Protect encapsulation. */
1621 *pkt++ = ch;
1622 }
1623 return pkt;
1624 }
1625 #endif /* 0 (unused) */
1626
1627 static char *
1628 unpack_string (char *src, char *dest, int length)
1629 {
1630 while (length--)
1631 *dest++ = *src++;
1632 *dest = '\0';
1633 return src;
1634 }
1635
1636 static char *
1637 pack_threadid (char *pkt, threadref *id)
1638 {
1639 char *limit;
1640 unsigned char *altid;
1641
1642 altid = (unsigned char *) id;
1643 limit = pkt + BUF_THREAD_ID_SIZE;
1644 while (pkt < limit)
1645 pkt = pack_hex_byte (pkt, *altid++);
1646 return pkt;
1647 }
1648
1649
1650 static char *
1651 unpack_threadid (char *inbuf, threadref *id)
1652 {
1653 char *altref;
1654 char *limit = inbuf + BUF_THREAD_ID_SIZE;
1655 int x, y;
1656
1657 altref = (char *) id;
1658
1659 while (inbuf < limit)
1660 {
1661 x = stubhex (*inbuf++);
1662 y = stubhex (*inbuf++);
1663 *altref++ = (x << 4) | y;
1664 }
1665 return inbuf;
1666 }
1667
1668 /* Externally, threadrefs are 64 bits but internally, they are still
1669 ints. This is due to a mismatch of specifications. We would like
1670 to use 64bit thread references internally. This is an adapter
1671 function. */
1672
1673 void
1674 int_to_threadref (threadref *id, int value)
1675 {
1676 unsigned char *scan;
1677
1678 scan = (unsigned char *) id;
1679 {
1680 int i = 4;
1681 while (i--)
1682 *scan++ = 0;
1683 }
1684 *scan++ = (value >> 24) & 0xff;
1685 *scan++ = (value >> 16) & 0xff;
1686 *scan++ = (value >> 8) & 0xff;
1687 *scan++ = (value & 0xff);
1688 }
1689
1690 static int
1691 threadref_to_int (threadref *ref)
1692 {
1693 int i, value = 0;
1694 unsigned char *scan;
1695
1696 scan = *ref;
1697 scan += 4;
1698 i = 4;
1699 while (i-- > 0)
1700 value = (value << 8) | ((*scan++) & 0xff);
1701 return value;
1702 }
1703
1704 static void
1705 copy_threadref (threadref *dest, threadref *src)
1706 {
1707 int i;
1708 unsigned char *csrc, *cdest;
1709
1710 csrc = (unsigned char *) src;
1711 cdest = (unsigned char *) dest;
1712 i = 8;
1713 while (i--)
1714 *cdest++ = *csrc++;
1715 }
1716
1717 static int
1718 threadmatch (threadref *dest, threadref *src)
1719 {
1720 /* Things are broken right now, so just assume we got a match. */
1721 #if 0
1722 unsigned char *srcp, *destp;
1723 int i, result;
1724 srcp = (char *) src;
1725 destp = (char *) dest;
1726
1727 result = 1;
1728 while (i-- > 0)
1729 result &= (*srcp++ == *destp++) ? 1 : 0;
1730 return result;
1731 #endif
1732 return 1;
1733 }
1734
1735 /*
1736 threadid:1, # always request threadid
1737 context_exists:2,
1738 display:4,
1739 unique_name:8,
1740 more_display:16
1741 */
1742
1743 /* Encoding: 'Q':8,'P':8,mask:32,threadid:64 */
1744
1745 static char *
1746 pack_threadinfo_request (char *pkt, int mode, threadref *id)
1747 {
1748 *pkt++ = 'q'; /* Info Query */
1749 *pkt++ = 'P'; /* process or thread info */
1750 pkt = pack_int (pkt, mode); /* mode */
1751 pkt = pack_threadid (pkt, id); /* threadid */
1752 *pkt = '\0'; /* terminate */
1753 return pkt;
1754 }
1755
1756 /* These values tag the fields in a thread info response packet. */
1757 /* Tagging the fields allows us to request specific fields and to
1758 add more fields as time goes by. */
1759
1760 #define TAG_THREADID 1 /* Echo the thread identifier. */
1761 #define TAG_EXISTS 2 /* Is this process defined enough to
1762 fetch registers and its stack? */
1763 #define TAG_DISPLAY 4 /* A short thing maybe to put on a window */
1764 #define TAG_THREADNAME 8 /* string, maps 1-to-1 with a thread is. */
1765 #define TAG_MOREDISPLAY 16 /* Whatever the kernel wants to say about
1766 the process. */
1767
1768 static int
1769 remote_unpack_thread_info_response (char *pkt, threadref *expectedref,
1770 struct gdb_ext_thread_info *info)
1771 {
1772 struct remote_state *rs = get_remote_state ();
1773 int mask, length;
1774 int tag;
1775 threadref ref;
1776 char *limit = pkt + rs->buf_size; /* Plausible parsing limit. */
1777 int retval = 1;
1778
1779 /* info->threadid = 0; FIXME: implement zero_threadref. */
1780 info->active = 0;
1781 info->display[0] = '\0';
1782 info->shortname[0] = '\0';
1783 info->more_display[0] = '\0';
1784
1785 /* Assume the characters indicating the packet type have been
1786 stripped. */
1787 pkt = unpack_int (pkt, &mask); /* arg mask */
1788 pkt = unpack_threadid (pkt, &ref);
1789
1790 if (mask == 0)
1791 warning (_("Incomplete response to threadinfo request."));
1792 if (!threadmatch (&ref, expectedref))
1793 { /* This is an answer to a different request. */
1794 warning (_("ERROR RMT Thread info mismatch."));
1795 return 0;
1796 }
1797 copy_threadref (&info->threadid, &ref);
1798
1799 /* Loop on tagged fields , try to bail if somthing goes wrong. */
1800
1801 /* Packets are terminated with nulls. */
1802 while ((pkt < limit) && mask && *pkt)
1803 {
1804 pkt = unpack_int (pkt, &tag); /* tag */
1805 pkt = unpack_byte (pkt, &length); /* length */
1806 if (!(tag & mask)) /* Tags out of synch with mask. */
1807 {
1808 warning (_("ERROR RMT: threadinfo tag mismatch."));
1809 retval = 0;
1810 break;
1811 }
1812 if (tag == TAG_THREADID)
1813 {
1814 if (length != 16)
1815 {
1816 warning (_("ERROR RMT: length of threadid is not 16."));
1817 retval = 0;
1818 break;
1819 }
1820 pkt = unpack_threadid (pkt, &ref);
1821 mask = mask & ~TAG_THREADID;
1822 continue;
1823 }
1824 if (tag == TAG_EXISTS)
1825 {
1826 info->active = stub_unpack_int (pkt, length);
1827 pkt += length;
1828 mask = mask & ~(TAG_EXISTS);
1829 if (length > 8)
1830 {
1831 warning (_("ERROR RMT: 'exists' length too long."));
1832 retval = 0;
1833 break;
1834 }
1835 continue;
1836 }
1837 if (tag == TAG_THREADNAME)
1838 {
1839 pkt = unpack_string (pkt, &info->shortname[0], length);
1840 mask = mask & ~TAG_THREADNAME;
1841 continue;
1842 }
1843 if (tag == TAG_DISPLAY)
1844 {
1845 pkt = unpack_string (pkt, &info->display[0], length);
1846 mask = mask & ~TAG_DISPLAY;
1847 continue;
1848 }
1849 if (tag == TAG_MOREDISPLAY)
1850 {
1851 pkt = unpack_string (pkt, &info->more_display[0], length);
1852 mask = mask & ~TAG_MOREDISPLAY;
1853 continue;
1854 }
1855 warning (_("ERROR RMT: unknown thread info tag."));
1856 break; /* Not a tag we know about. */
1857 }
1858 return retval;
1859 }
1860
1861 static int
1862 remote_get_threadinfo (threadref *threadid, int fieldset, /* TAG mask */
1863 struct gdb_ext_thread_info *info)
1864 {
1865 struct remote_state *rs = get_remote_state ();
1866 int result;
1867
1868 pack_threadinfo_request (rs->buf, fieldset, threadid);
1869 putpkt (rs->buf);
1870 getpkt (&rs->buf, &rs->buf_size, 0);
1871
1872 if (rs->buf[0] == '\0')
1873 return 0;
1874
1875 result = remote_unpack_thread_info_response (rs->buf + 2,
1876 threadid, info);
1877 return result;
1878 }
1879
1880 /* Format: i'Q':8,i"L":8,initflag:8,batchsize:16,lastthreadid:32 */
1881
1882 static char *
1883 pack_threadlist_request (char *pkt, int startflag, int threadcount,
1884 threadref *nextthread)
1885 {
1886 *pkt++ = 'q'; /* info query packet */
1887 *pkt++ = 'L'; /* Process LIST or threadLIST request */
1888 pkt = pack_nibble (pkt, startflag); /* initflag 1 bytes */
1889 pkt = pack_hex_byte (pkt, threadcount); /* threadcount 2 bytes */
1890 pkt = pack_threadid (pkt, nextthread); /* 64 bit thread identifier */
1891 *pkt = '\0';
1892 return pkt;
1893 }
1894
1895 /* Encoding: 'q':8,'M':8,count:16,done:8,argthreadid:64,(threadid:64)* */
1896
1897 static int
1898 parse_threadlist_response (char *pkt, int result_limit,
1899 threadref *original_echo, threadref *resultlist,
1900 int *doneflag)
1901 {
1902 struct remote_state *rs = get_remote_state ();
1903 char *limit;
1904 int count, resultcount, done;
1905
1906 resultcount = 0;
1907 /* Assume the 'q' and 'M chars have been stripped. */
1908 limit = pkt + (rs->buf_size - BUF_THREAD_ID_SIZE);
1909 /* done parse past here */
1910 pkt = unpack_byte (pkt, &count); /* count field */
1911 pkt = unpack_nibble (pkt, &done);
1912 /* The first threadid is the argument threadid. */
1913 pkt = unpack_threadid (pkt, original_echo); /* should match query packet */
1914 while ((count-- > 0) && (pkt < limit))
1915 {
1916 pkt = unpack_threadid (pkt, resultlist++);
1917 if (resultcount++ >= result_limit)
1918 break;
1919 }
1920 if (doneflag)
1921 *doneflag = done;
1922 return resultcount;
1923 }
1924
1925 static int
1926 remote_get_threadlist (int startflag, threadref *nextthread, int result_limit,
1927 int *done, int *result_count, threadref *threadlist)
1928 {
1929 struct remote_state *rs = get_remote_state ();
1930 static threadref echo_nextthread;
1931 int result = 1;
1932
1933 /* Trancate result limit to be smaller than the packet size. */
1934 if ((((result_limit + 1) * BUF_THREAD_ID_SIZE) + 10) >= get_remote_packet_size ())
1935 result_limit = (get_remote_packet_size () / BUF_THREAD_ID_SIZE) - 2;
1936
1937 pack_threadlist_request (rs->buf, startflag, result_limit, nextthread);
1938 putpkt (rs->buf);
1939 getpkt (&rs->buf, &rs->buf_size, 0);
1940
1941 if (*rs->buf == '\0')
1942 *result_count = 0;
1943 else
1944 *result_count =
1945 parse_threadlist_response (rs->buf + 2, result_limit, &echo_nextthread,
1946 threadlist, done);
1947
1948 if (!threadmatch (&echo_nextthread, nextthread))
1949 {
1950 /* FIXME: This is a good reason to drop the packet. */
1951 /* Possably, there is a duplicate response. */
1952 /* Possabilities :
1953 retransmit immediatly - race conditions
1954 retransmit after timeout - yes
1955 exit
1956 wait for packet, then exit
1957 */
1958 warning (_("HMM: threadlist did not echo arg thread, dropping it."));
1959 return 0; /* I choose simply exiting. */
1960 }
1961 if (*result_count <= 0)
1962 {
1963 if (*done != 1)
1964 {
1965 warning (_("RMT ERROR : failed to get remote thread list."));
1966 result = 0;
1967 }
1968 return result; /* break; */
1969 }
1970 if (*result_count > result_limit)
1971 {
1972 *result_count = 0;
1973 warning (_("RMT ERROR: threadlist response longer than requested."));
1974 return 0;
1975 }
1976 return result;
1977 }
1978
1979 /* This is the interface between remote and threads, remotes upper
1980 interface. */
1981
1982 /* remote_find_new_threads retrieves the thread list and for each
1983 thread in the list, looks up the thread in GDB's internal list,
1984 adding the thread if it does not already exist. This involves
1985 getting partial thread lists from the remote target so, polling the
1986 quit_flag is required. */
1987
1988
1989 /* About this many threadisds fit in a packet. */
1990
1991 #define MAXTHREADLISTRESULTS 32
1992
1993 static int
1994 remote_threadlist_iterator (rmt_thread_action stepfunction, void *context,
1995 int looplimit)
1996 {
1997 int done, i, result_count;
1998 int startflag = 1;
1999 int result = 1;
2000 int loopcount = 0;
2001 static threadref nextthread;
2002 static threadref resultthreadlist[MAXTHREADLISTRESULTS];
2003
2004 done = 0;
2005 while (!done)
2006 {
2007 if (loopcount++ > looplimit)
2008 {
2009 result = 0;
2010 warning (_("Remote fetch threadlist -infinite loop-."));
2011 break;
2012 }
2013 if (!remote_get_threadlist (startflag, &nextthread, MAXTHREADLISTRESULTS,
2014 &done, &result_count, resultthreadlist))
2015 {
2016 result = 0;
2017 break;
2018 }
2019 /* Clear for later iterations. */
2020 startflag = 0;
2021 /* Setup to resume next batch of thread references, set nextthread. */
2022 if (result_count >= 1)
2023 copy_threadref (&nextthread, &resultthreadlist[result_count - 1]);
2024 i = 0;
2025 while (result_count--)
2026 if (!(result = (*stepfunction) (&resultthreadlist[i++], context)))
2027 break;
2028 }
2029 return result;
2030 }
2031
2032 static int
2033 remote_newthread_step (threadref *ref, void *context)
2034 {
2035 int pid = ptid_get_pid (inferior_ptid);
2036 ptid_t ptid = ptid_build (pid, 0, threadref_to_int (ref));
2037
2038 if (!in_thread_list (ptid))
2039 add_thread (ptid);
2040 return 1; /* continue iterator */
2041 }
2042
2043 #define CRAZY_MAX_THREADS 1000
2044
2045 static ptid_t
2046 remote_current_thread (ptid_t oldpid)
2047 {
2048 struct remote_state *rs = get_remote_state ();
2049 char *p = rs->buf;
2050 int tid;
2051 int pid;
2052
2053 putpkt ("qC");
2054 getpkt (&rs->buf, &rs->buf_size, 0);
2055 if (rs->buf[0] == 'Q' && rs->buf[1] == 'C')
2056 return read_ptid (&rs->buf[2], NULL);
2057 else
2058 return oldpid;
2059 }
2060
2061 /* Find new threads for info threads command.
2062 * Original version, using John Metzler's thread protocol.
2063 */
2064
2065 static void
2066 remote_find_new_threads (void)
2067 {
2068 remote_threadlist_iterator (remote_newthread_step, 0,
2069 CRAZY_MAX_THREADS);
2070 }
2071
2072 /*
2073 * Find all threads for info threads command.
2074 * Uses new thread protocol contributed by Cisco.
2075 * Falls back and attempts to use the older method (above)
2076 * if the target doesn't respond to the new method.
2077 */
2078
2079 static void
2080 remote_threads_info (void)
2081 {
2082 struct remote_state *rs = get_remote_state ();
2083 char *bufp;
2084 ptid_t new_thread;
2085
2086 if (remote_desc == 0) /* paranoia */
2087 error (_("Command can only be used when connected to the remote target."));
2088
2089 if (use_threadinfo_query)
2090 {
2091 putpkt ("qfThreadInfo");
2092 getpkt (&rs->buf, &rs->buf_size, 0);
2093 bufp = rs->buf;
2094 if (bufp[0] != '\0') /* q packet recognized */
2095 {
2096 while (*bufp++ == 'm') /* reply contains one or more TID */
2097 {
2098 do
2099 {
2100 new_thread = read_ptid (bufp, &bufp);
2101 if (!ptid_equal (new_thread, null_ptid)
2102 && (!in_thread_list (new_thread)
2103 || is_exited (new_thread)))
2104 {
2105 /* When connected to a multi-process aware stub,
2106 "info threads" may show up threads of
2107 inferiors we didn't know about yet. Add them
2108 now, and before adding any of its child
2109 threads, so notifications are emitted in a
2110 sensible order. */
2111 if (!in_inferior_list (ptid_get_pid (new_thread)))
2112 add_inferior (ptid_get_pid (new_thread));
2113
2114 add_thread (new_thread);
2115 }
2116 }
2117 while (*bufp++ == ','); /* comma-separated list */
2118 putpkt ("qsThreadInfo");
2119 getpkt (&rs->buf, &rs->buf_size, 0);
2120 bufp = rs->buf;
2121 }
2122 return; /* done */
2123 }
2124 }
2125
2126 /* Else fall back to old method based on jmetzler protocol. */
2127 use_threadinfo_query = 0;
2128 remote_find_new_threads ();
2129 return;
2130 }
2131
2132 /*
2133 * Collect a descriptive string about the given thread.
2134 * The target may say anything it wants to about the thread
2135 * (typically info about its blocked / runnable state, name, etc.).
2136 * This string will appear in the info threads display.
2137 *
2138 * Optional: targets are not required to implement this function.
2139 */
2140
2141 static char *
2142 remote_threads_extra_info (struct thread_info *tp)
2143 {
2144 struct remote_state *rs = get_remote_state ();
2145 int result;
2146 int set;
2147 threadref id;
2148 struct gdb_ext_thread_info threadinfo;
2149 static char display_buf[100]; /* arbitrary... */
2150 int n = 0; /* position in display_buf */
2151
2152 if (remote_desc == 0) /* paranoia */
2153 internal_error (__FILE__, __LINE__,
2154 _("remote_threads_extra_info"));
2155
2156 if (ptid_equal (tp->ptid, magic_null_ptid)
2157 || (ptid_get_pid (tp->ptid) != 0 && ptid_get_tid (tp->ptid) == 0))
2158 /* This is the main thread which was added by GDB. The remote
2159 server doesn't know about it. */
2160 return NULL;
2161
2162 if (use_threadextra_query)
2163 {
2164 char *b = rs->buf;
2165 char *endb = rs->buf + get_remote_packet_size ();
2166
2167 xsnprintf (b, endb - b, "qThreadExtraInfo,");
2168 b += strlen (b);
2169 write_ptid (b, endb, tp->ptid);
2170
2171 putpkt (rs->buf);
2172 getpkt (&rs->buf, &rs->buf_size, 0);
2173 if (rs->buf[0] != 0)
2174 {
2175 n = min (strlen (rs->buf) / 2, sizeof (display_buf));
2176 result = hex2bin (rs->buf, (gdb_byte *) display_buf, n);
2177 display_buf [result] = '\0';
2178 return display_buf;
2179 }
2180 }
2181
2182 /* If the above query fails, fall back to the old method. */
2183 use_threadextra_query = 0;
2184 set = TAG_THREADID | TAG_EXISTS | TAG_THREADNAME
2185 | TAG_MOREDISPLAY | TAG_DISPLAY;
2186 int_to_threadref (&id, ptid_get_tid (tp->ptid));
2187 if (remote_get_threadinfo (&id, set, &threadinfo))
2188 if (threadinfo.active)
2189 {
2190 if (*threadinfo.shortname)
2191 n += xsnprintf (&display_buf[0], sizeof (display_buf) - n,
2192 " Name: %s,", threadinfo.shortname);
2193 if (*threadinfo.display)
2194 n += xsnprintf (&display_buf[n], sizeof (display_buf) - n,
2195 " State: %s,", threadinfo.display);
2196 if (*threadinfo.more_display)
2197 n += xsnprintf (&display_buf[n], sizeof (display_buf) - n,
2198 " Priority: %s", threadinfo.more_display);
2199
2200 if (n > 0)
2201 {
2202 /* For purely cosmetic reasons, clear up trailing commas. */
2203 if (',' == display_buf[n-1])
2204 display_buf[n-1] = ' ';
2205 return display_buf;
2206 }
2207 }
2208 return NULL;
2209 }
2210 \f
2211
2212 /* Restart the remote side; this is an extended protocol operation. */
2213
2214 static void
2215 extended_remote_restart (void)
2216 {
2217 struct remote_state *rs = get_remote_state ();
2218
2219 /* Send the restart command; for reasons I don't understand the
2220 remote side really expects a number after the "R". */
2221 xsnprintf (rs->buf, get_remote_packet_size (), "R%x", 0);
2222 putpkt (rs->buf);
2223
2224 remote_fileio_reset ();
2225 }
2226 \f
2227 /* Clean up connection to a remote debugger. */
2228
2229 static void
2230 remote_close (int quitting)
2231 {
2232 if (remote_desc)
2233 {
2234 /* Unregister the file descriptor from the event loop. */
2235 if (target_is_async_p ())
2236 target_async (NULL, 0);
2237 serial_close (remote_desc);
2238 remote_desc = NULL;
2239 }
2240
2241 /* Make sure we don't leave the async SIGINT signal handler
2242 installed. */
2243 signal (SIGINT, handle_sigint);
2244
2245 /* We don't have a connection to the remote stub anymore. Get rid
2246 of all the inferiors and their threads we were controlling. */
2247 discard_all_inferiors ();
2248
2249 generic_mourn_inferior ();
2250 }
2251
2252 /* Query the remote side for the text, data and bss offsets. */
2253
2254 static void
2255 get_offsets (void)
2256 {
2257 struct remote_state *rs = get_remote_state ();
2258 char *buf;
2259 char *ptr;
2260 int lose, num_segments = 0, do_sections, do_segments;
2261 CORE_ADDR text_addr, data_addr, bss_addr, segments[2];
2262 struct section_offsets *offs;
2263 struct symfile_segment_data *data;
2264
2265 if (symfile_objfile == NULL)
2266 return;
2267
2268 putpkt ("qOffsets");
2269 getpkt (&rs->buf, &rs->buf_size, 0);
2270 buf = rs->buf;
2271
2272 if (buf[0] == '\000')
2273 return; /* Return silently. Stub doesn't support
2274 this command. */
2275 if (buf[0] == 'E')
2276 {
2277 warning (_("Remote failure reply: %s"), buf);
2278 return;
2279 }
2280
2281 /* Pick up each field in turn. This used to be done with scanf, but
2282 scanf will make trouble if CORE_ADDR size doesn't match
2283 conversion directives correctly. The following code will work
2284 with any size of CORE_ADDR. */
2285 text_addr = data_addr = bss_addr = 0;
2286 ptr = buf;
2287 lose = 0;
2288
2289 if (strncmp (ptr, "Text=", 5) == 0)
2290 {
2291 ptr += 5;
2292 /* Don't use strtol, could lose on big values. */
2293 while (*ptr && *ptr != ';')
2294 text_addr = (text_addr << 4) + fromhex (*ptr++);
2295
2296 if (strncmp (ptr, ";Data=", 6) == 0)
2297 {
2298 ptr += 6;
2299 while (*ptr && *ptr != ';')
2300 data_addr = (data_addr << 4) + fromhex (*ptr++);
2301 }
2302 else
2303 lose = 1;
2304
2305 if (!lose && strncmp (ptr, ";Bss=", 5) == 0)
2306 {
2307 ptr += 5;
2308 while (*ptr && *ptr != ';')
2309 bss_addr = (bss_addr << 4) + fromhex (*ptr++);
2310
2311 if (bss_addr != data_addr)
2312 warning (_("Target reported unsupported offsets: %s"), buf);
2313 }
2314 else
2315 lose = 1;
2316 }
2317 else if (strncmp (ptr, "TextSeg=", 8) == 0)
2318 {
2319 ptr += 8;
2320 /* Don't use strtol, could lose on big values. */
2321 while (*ptr && *ptr != ';')
2322 text_addr = (text_addr << 4) + fromhex (*ptr++);
2323 num_segments = 1;
2324
2325 if (strncmp (ptr, ";DataSeg=", 9) == 0)
2326 {
2327 ptr += 9;
2328 while (*ptr && *ptr != ';')
2329 data_addr = (data_addr << 4) + fromhex (*ptr++);
2330 num_segments++;
2331 }
2332 }
2333 else
2334 lose = 1;
2335
2336 if (lose)
2337 error (_("Malformed response to offset query, %s"), buf);
2338 else if (*ptr != '\0')
2339 warning (_("Target reported unsupported offsets: %s"), buf);
2340
2341 offs = ((struct section_offsets *)
2342 alloca (SIZEOF_N_SECTION_OFFSETS (symfile_objfile->num_sections)));
2343 memcpy (offs, symfile_objfile->section_offsets,
2344 SIZEOF_N_SECTION_OFFSETS (symfile_objfile->num_sections));
2345
2346 data = get_symfile_segment_data (symfile_objfile->obfd);
2347 do_segments = (data != NULL);
2348 do_sections = num_segments == 0;
2349
2350 if (num_segments > 0)
2351 {
2352 segments[0] = text_addr;
2353 segments[1] = data_addr;
2354 }
2355 /* If we have two segments, we can still try to relocate everything
2356 by assuming that the .text and .data offsets apply to the whole
2357 text and data segments. Convert the offsets given in the packet
2358 to base addresses for symfile_map_offsets_to_segments. */
2359 else if (data && data->num_segments == 2)
2360 {
2361 segments[0] = data->segment_bases[0] + text_addr;
2362 segments[1] = data->segment_bases[1] + data_addr;
2363 num_segments = 2;
2364 }
2365 /* If the object file has only one segment, assume that it is text
2366 rather than data; main programs with no writable data are rare,
2367 but programs with no code are useless. Of course the code might
2368 have ended up in the data segment... to detect that we would need
2369 the permissions here. */
2370 else if (data && data->num_segments == 1)
2371 {
2372 segments[0] = data->segment_bases[0] + text_addr;
2373 num_segments = 1;
2374 }
2375 /* There's no way to relocate by segment. */
2376 else
2377 do_segments = 0;
2378
2379 if (do_segments)
2380 {
2381 int ret = symfile_map_offsets_to_segments (symfile_objfile->obfd, data,
2382 offs, num_segments, segments);
2383
2384 if (ret == 0 && !do_sections)
2385 error (_("Can not handle qOffsets TextSeg response with this symbol file"));
2386
2387 if (ret > 0)
2388 do_sections = 0;
2389 }
2390
2391 if (data)
2392 free_symfile_segment_data (data);
2393
2394 if (do_sections)
2395 {
2396 offs->offsets[SECT_OFF_TEXT (symfile_objfile)] = text_addr;
2397
2398 /* This is a temporary kludge to force data and bss to use the same offsets
2399 because that's what nlmconv does now. The real solution requires changes
2400 to the stub and remote.c that I don't have time to do right now. */
2401
2402 offs->offsets[SECT_OFF_DATA (symfile_objfile)] = data_addr;
2403 offs->offsets[SECT_OFF_BSS (symfile_objfile)] = data_addr;
2404 }
2405
2406 objfile_relocate (symfile_objfile, offs);
2407 }
2408
2409 /* Stub for catch_exception. */
2410
2411 struct start_remote_args
2412 {
2413 int from_tty;
2414
2415 /* The current target. */
2416 struct target_ops *target;
2417
2418 /* Non-zero if this is an extended-remote target. */
2419 int extended_p;
2420 };
2421
2422 static void
2423 remote_start_remote (struct ui_out *uiout, void *opaque)
2424 {
2425 struct start_remote_args *args = opaque;
2426 struct remote_state *rs = get_remote_state ();
2427 struct packet_config *noack_config;
2428 char *wait_status = NULL;
2429
2430 immediate_quit++; /* Allow user to interrupt it. */
2431
2432 /* Ack any packet which the remote side has already sent. */
2433 serial_write (remote_desc, "+", 1);
2434
2435 /* The first packet we send to the target is the optional "supported
2436 packets" request. If the target can answer this, it will tell us
2437 which later probes to skip. */
2438 remote_query_supported ();
2439
2440 /* Next, we possibly activate noack mode.
2441
2442 If the QStartNoAckMode packet configuration is set to AUTO,
2443 enable noack mode if the stub reported a wish for it with
2444 qSupported.
2445
2446 If set to TRUE, then enable noack mode even if the stub didn't
2447 report it in qSupported. If the stub doesn't reply OK, the
2448 session ends with an error.
2449
2450 If FALSE, then don't activate noack mode, regardless of what the
2451 stub claimed should be the default with qSupported. */
2452
2453 noack_config = &remote_protocol_packets[PACKET_QStartNoAckMode];
2454
2455 if (noack_config->detect == AUTO_BOOLEAN_TRUE
2456 || (noack_config->detect == AUTO_BOOLEAN_AUTO
2457 && noack_config->support == PACKET_ENABLE))
2458 {
2459 putpkt ("QStartNoAckMode");
2460 getpkt (&rs->buf, &rs->buf_size, 0);
2461 if (packet_ok (rs->buf, noack_config) == PACKET_OK)
2462 rs->noack_mode = 1;
2463 }
2464
2465 if (args->extended_p)
2466 {
2467 /* Tell the remote that we are using the extended protocol. */
2468 putpkt ("!");
2469 getpkt (&rs->buf, &rs->buf_size, 0);
2470 }
2471
2472 /* Next, if the target can specify a description, read it. We do
2473 this before anything involving memory or registers. */
2474 target_find_description ();
2475
2476 /* Check whether the target is running now. */
2477 putpkt ("?");
2478 getpkt (&rs->buf, &rs->buf_size, 0);
2479
2480 if (rs->buf[0] == 'W' || rs->buf[0] == 'X')
2481 {
2482 if (args->extended_p)
2483 {
2484 /* We're connected, but not running. Drop out before we
2485 call start_remote. */
2486 target_mark_exited (args->target);
2487 return;
2488 }
2489 else
2490 error (_("The target is not running (try extended-remote?)"));
2491 }
2492 else
2493 {
2494 if (args->extended_p)
2495 target_mark_running (args->target);
2496
2497 /* Save the reply for later. */
2498 wait_status = alloca (strlen (rs->buf) + 1);
2499 strcpy (wait_status, rs->buf);
2500 }
2501
2502 /* Start afresh. */
2503 init_thread_list ();
2504
2505 /* Let the stub know that we want it to return the thread. */
2506 set_continue_thread (minus_one_ptid);
2507
2508 /* Without this, some commands which require an active target
2509 (such as kill) won't work. This variable serves (at least)
2510 double duty as both the pid of the target process (if it has
2511 such), and as a flag indicating that a target is active.
2512 These functions should be split out into seperate variables,
2513 especially since GDB will someday have a notion of debugging
2514 several processes. */
2515 inferior_ptid = magic_null_ptid;
2516
2517 /* Now, if we have thread information, update inferior_ptid. */
2518 inferior_ptid = remote_current_thread (inferior_ptid);
2519
2520 add_inferior (ptid_get_pid (inferior_ptid));
2521
2522 /* Always add the main thread. */
2523 add_thread_silent (inferior_ptid);
2524
2525 get_offsets (); /* Get text, data & bss offsets. */
2526
2527 /* Use the previously fetched status. */
2528 gdb_assert (wait_status != NULL);
2529 strcpy (rs->buf, wait_status);
2530 rs->cached_wait_status = 1;
2531
2532 immediate_quit--;
2533 start_remote (args->from_tty); /* Initialize gdb process mechanisms. */
2534
2535 /* If we connected to a live target, do some additional setup. */
2536 if (target_has_execution)
2537 {
2538 if (exec_bfd) /* No use without an exec file. */
2539 remote_check_symbols (symfile_objfile);
2540 }
2541 }
2542
2543 /* Open a connection to a remote debugger.
2544 NAME is the filename used for communication. */
2545
2546 static void
2547 remote_open (char *name, int from_tty)
2548 {
2549 remote_open_1 (name, from_tty, &remote_ops, 0);
2550 }
2551
2552 /* Open a connection to a remote debugger using the extended
2553 remote gdb protocol. NAME is the filename used for communication. */
2554
2555 static void
2556 extended_remote_open (char *name, int from_tty)
2557 {
2558 remote_open_1 (name, from_tty, &extended_remote_ops, 1 /*extended_p */);
2559 }
2560
2561 /* Generic code for opening a connection to a remote target. */
2562
2563 static void
2564 init_all_packet_configs (void)
2565 {
2566 int i;
2567 for (i = 0; i < PACKET_MAX; i++)
2568 update_packet_config (&remote_protocol_packets[i]);
2569 }
2570
2571 /* Symbol look-up. */
2572
2573 static void
2574 remote_check_symbols (struct objfile *objfile)
2575 {
2576 struct remote_state *rs = get_remote_state ();
2577 char *msg, *reply, *tmp;
2578 struct minimal_symbol *sym;
2579 int end;
2580
2581 if (remote_protocol_packets[PACKET_qSymbol].support == PACKET_DISABLE)
2582 return;
2583
2584 /* Make sure the remote is pointing at the right process. */
2585 set_general_process ();
2586
2587 /* Allocate a message buffer. We can't reuse the input buffer in RS,
2588 because we need both at the same time. */
2589 msg = alloca (get_remote_packet_size ());
2590
2591 /* Invite target to request symbol lookups. */
2592
2593 putpkt ("qSymbol::");
2594 getpkt (&rs->buf, &rs->buf_size, 0);
2595 packet_ok (rs->buf, &remote_protocol_packets[PACKET_qSymbol]);
2596 reply = rs->buf;
2597
2598 while (strncmp (reply, "qSymbol:", 8) == 0)
2599 {
2600 tmp = &reply[8];
2601 end = hex2bin (tmp, (gdb_byte *) msg, strlen (tmp) / 2);
2602 msg[end] = '\0';
2603 sym = lookup_minimal_symbol (msg, NULL, NULL);
2604 if (sym == NULL)
2605 xsnprintf (msg, get_remote_packet_size (), "qSymbol::%s", &reply[8]);
2606 else
2607 {
2608 CORE_ADDR sym_addr = SYMBOL_VALUE_ADDRESS (sym);
2609
2610 /* If this is a function address, return the start of code
2611 instead of any data function descriptor. */
2612 sym_addr = gdbarch_convert_from_func_ptr_addr (target_gdbarch,
2613 sym_addr,
2614 &current_target);
2615
2616 xsnprintf (msg, get_remote_packet_size (), "qSymbol:%s:%s",
2617 paddr_nz (sym_addr), &reply[8]);
2618 }
2619
2620 putpkt (msg);
2621 getpkt (&rs->buf, &rs->buf_size, 0);
2622 reply = rs->buf;
2623 }
2624 }
2625
2626 static struct serial *
2627 remote_serial_open (char *name)
2628 {
2629 static int udp_warning = 0;
2630
2631 /* FIXME: Parsing NAME here is a hack. But we want to warn here instead
2632 of in ser-tcp.c, because it is the remote protocol assuming that the
2633 serial connection is reliable and not the serial connection promising
2634 to be. */
2635 if (!udp_warning && strncmp (name, "udp:", 4) == 0)
2636 {
2637 warning (_("\
2638 The remote protocol may be unreliable over UDP.\n\
2639 Some events may be lost, rendering further debugging impossible."));
2640 udp_warning = 1;
2641 }
2642
2643 return serial_open (name);
2644 }
2645
2646 /* This type describes each known response to the qSupported
2647 packet. */
2648 struct protocol_feature
2649 {
2650 /* The name of this protocol feature. */
2651 const char *name;
2652
2653 /* The default for this protocol feature. */
2654 enum packet_support default_support;
2655
2656 /* The function to call when this feature is reported, or after
2657 qSupported processing if the feature is not supported.
2658 The first argument points to this structure. The second
2659 argument indicates whether the packet requested support be
2660 enabled, disabled, or probed (or the default, if this function
2661 is being called at the end of processing and this feature was
2662 not reported). The third argument may be NULL; if not NULL, it
2663 is a NUL-terminated string taken from the packet following
2664 this feature's name and an equals sign. */
2665 void (*func) (const struct protocol_feature *, enum packet_support,
2666 const char *);
2667
2668 /* The corresponding packet for this feature. Only used if
2669 FUNC is remote_supported_packet. */
2670 int packet;
2671 };
2672
2673 static void
2674 remote_supported_packet (const struct protocol_feature *feature,
2675 enum packet_support support,
2676 const char *argument)
2677 {
2678 if (argument)
2679 {
2680 warning (_("Remote qSupported response supplied an unexpected value for"
2681 " \"%s\"."), feature->name);
2682 return;
2683 }
2684
2685 if (remote_protocol_packets[feature->packet].support
2686 == PACKET_SUPPORT_UNKNOWN)
2687 remote_protocol_packets[feature->packet].support = support;
2688 }
2689
2690 static void
2691 remote_packet_size (const struct protocol_feature *feature,
2692 enum packet_support support, const char *value)
2693 {
2694 struct remote_state *rs = get_remote_state ();
2695
2696 int packet_size;
2697 char *value_end;
2698
2699 if (support != PACKET_ENABLE)
2700 return;
2701
2702 if (value == NULL || *value == '\0')
2703 {
2704 warning (_("Remote target reported \"%s\" without a size."),
2705 feature->name);
2706 return;
2707 }
2708
2709 errno = 0;
2710 packet_size = strtol (value, &value_end, 16);
2711 if (errno != 0 || *value_end != '\0' || packet_size < 0)
2712 {
2713 warning (_("Remote target reported \"%s\" with a bad size: \"%s\"."),
2714 feature->name, value);
2715 return;
2716 }
2717
2718 if (packet_size > MAX_REMOTE_PACKET_SIZE)
2719 {
2720 warning (_("limiting remote suggested packet size (%d bytes) to %d"),
2721 packet_size, MAX_REMOTE_PACKET_SIZE);
2722 packet_size = MAX_REMOTE_PACKET_SIZE;
2723 }
2724
2725 /* Record the new maximum packet size. */
2726 rs->explicit_packet_size = packet_size;
2727 }
2728
2729 static void
2730 remote_multi_process_feature (const struct protocol_feature *feature,
2731 enum packet_support support, const char *value)
2732 {
2733 struct remote_state *rs = get_remote_state ();
2734 rs->multi_process_aware = (support == PACKET_ENABLE);
2735 }
2736
2737 static struct protocol_feature remote_protocol_features[] = {
2738 { "PacketSize", PACKET_DISABLE, remote_packet_size, -1 },
2739 { "qXfer:auxv:read", PACKET_DISABLE, remote_supported_packet,
2740 PACKET_qXfer_auxv },
2741 { "qXfer:features:read", PACKET_DISABLE, remote_supported_packet,
2742 PACKET_qXfer_features },
2743 { "qXfer:libraries:read", PACKET_DISABLE, remote_supported_packet,
2744 PACKET_qXfer_libraries },
2745 { "qXfer:memory-map:read", PACKET_DISABLE, remote_supported_packet,
2746 PACKET_qXfer_memory_map },
2747 { "qXfer:spu:read", PACKET_DISABLE, remote_supported_packet,
2748 PACKET_qXfer_spu_read },
2749 { "qXfer:spu:write", PACKET_DISABLE, remote_supported_packet,
2750 PACKET_qXfer_spu_write },
2751 { "QPassSignals", PACKET_DISABLE, remote_supported_packet,
2752 PACKET_QPassSignals },
2753 { "QStartNoAckMode", PACKET_DISABLE, remote_supported_packet,
2754 PACKET_QStartNoAckMode },
2755 { "multiprocess", PACKET_DISABLE, remote_multi_process_feature, -1 },
2756 };
2757
2758 static void
2759 remote_query_supported (void)
2760 {
2761 struct remote_state *rs = get_remote_state ();
2762 char *next;
2763 int i;
2764 unsigned char seen [ARRAY_SIZE (remote_protocol_features)];
2765
2766 /* The packet support flags are handled differently for this packet
2767 than for most others. We treat an error, a disabled packet, and
2768 an empty response identically: any features which must be reported
2769 to be used will be automatically disabled. An empty buffer
2770 accomplishes this, since that is also the representation for a list
2771 containing no features. */
2772
2773 rs->buf[0] = 0;
2774 if (remote_protocol_packets[PACKET_qSupported].support != PACKET_DISABLE)
2775 {
2776 if (rs->extended)
2777 putpkt ("qSupported:multiprocess+");
2778 else
2779 putpkt ("qSupported");
2780
2781 getpkt (&rs->buf, &rs->buf_size, 0);
2782
2783 /* If an error occured, warn, but do not return - just reset the
2784 buffer to empty and go on to disable features. */
2785 if (packet_ok (rs->buf, &remote_protocol_packets[PACKET_qSupported])
2786 == PACKET_ERROR)
2787 {
2788 warning (_("Remote failure reply: %s"), rs->buf);
2789 rs->buf[0] = 0;
2790 }
2791 }
2792
2793 memset (seen, 0, sizeof (seen));
2794
2795 next = rs->buf;
2796 while (*next)
2797 {
2798 enum packet_support is_supported;
2799 char *p, *end, *name_end, *value;
2800
2801 /* First separate out this item from the rest of the packet. If
2802 there's another item after this, we overwrite the separator
2803 (terminated strings are much easier to work with). */
2804 p = next;
2805 end = strchr (p, ';');
2806 if (end == NULL)
2807 {
2808 end = p + strlen (p);
2809 next = end;
2810 }
2811 else
2812 {
2813 *end = '\0';
2814 next = end + 1;
2815
2816 if (end == p)
2817 {
2818 warning (_("empty item in \"qSupported\" response"));
2819 continue;
2820 }
2821 }
2822
2823 name_end = strchr (p, '=');
2824 if (name_end)
2825 {
2826 /* This is a name=value entry. */
2827 is_supported = PACKET_ENABLE;
2828 value = name_end + 1;
2829 *name_end = '\0';
2830 }
2831 else
2832 {
2833 value = NULL;
2834 switch (end[-1])
2835 {
2836 case '+':
2837 is_supported = PACKET_ENABLE;
2838 break;
2839
2840 case '-':
2841 is_supported = PACKET_DISABLE;
2842 break;
2843
2844 case '?':
2845 is_supported = PACKET_SUPPORT_UNKNOWN;
2846 break;
2847
2848 default:
2849 warning (_("unrecognized item \"%s\" in \"qSupported\" response"), p);
2850 continue;
2851 }
2852 end[-1] = '\0';
2853 }
2854
2855 for (i = 0; i < ARRAY_SIZE (remote_protocol_features); i++)
2856 if (strcmp (remote_protocol_features[i].name, p) == 0)
2857 {
2858 const struct protocol_feature *feature;
2859
2860 seen[i] = 1;
2861 feature = &remote_protocol_features[i];
2862 feature->func (feature, is_supported, value);
2863 break;
2864 }
2865 }
2866
2867 /* If we increased the packet size, make sure to increase the global
2868 buffer size also. We delay this until after parsing the entire
2869 qSupported packet, because this is the same buffer we were
2870 parsing. */
2871 if (rs->buf_size < rs->explicit_packet_size)
2872 {
2873 rs->buf_size = rs->explicit_packet_size;
2874 rs->buf = xrealloc (rs->buf, rs->buf_size);
2875 }
2876
2877 /* Handle the defaults for unmentioned features. */
2878 for (i = 0; i < ARRAY_SIZE (remote_protocol_features); i++)
2879 if (!seen[i])
2880 {
2881 const struct protocol_feature *feature;
2882
2883 feature = &remote_protocol_features[i];
2884 feature->func (feature, feature->default_support, NULL);
2885 }
2886 }
2887
2888
2889 static void
2890 remote_open_1 (char *name, int from_tty, struct target_ops *target, int extended_p)
2891 {
2892 struct remote_state *rs = get_remote_state ();
2893
2894 if (name == 0)
2895 error (_("To open a remote debug connection, you need to specify what\n"
2896 "serial device is attached to the remote system\n"
2897 "(e.g. /dev/ttyS0, /dev/ttya, COM1, etc.)."));
2898
2899 /* See FIXME above. */
2900 if (!target_async_permitted)
2901 wait_forever_enabled_p = 1;
2902
2903 /* If we're connected to a running target, target_preopen will kill it.
2904 But if we're connected to a target system with no running process,
2905 then we will still be connected when it returns. Ask this question
2906 first, before target_preopen has a chance to kill anything. */
2907 if (remote_desc != NULL && !target_has_execution)
2908 {
2909 if (!from_tty
2910 || query (_("Already connected to a remote target. Disconnect? ")))
2911 pop_target ();
2912 else
2913 error (_("Still connected."));
2914 }
2915
2916 target_preopen (from_tty);
2917
2918 unpush_target (target);
2919
2920 /* This time without a query. If we were connected to an
2921 extended-remote target and target_preopen killed the running
2922 process, we may still be connected. If we are starting "target
2923 remote" now, the extended-remote target will not have been
2924 removed by unpush_target. */
2925 if (remote_desc != NULL && !target_has_execution)
2926 pop_target ();
2927
2928 /* Make sure we send the passed signals list the next time we resume. */
2929 xfree (last_pass_packet);
2930 last_pass_packet = NULL;
2931
2932 remote_fileio_reset ();
2933 reopen_exec_file ();
2934 reread_symbols ();
2935
2936 remote_desc = remote_serial_open (name);
2937 if (!remote_desc)
2938 perror_with_name (name);
2939
2940 if (baud_rate != -1)
2941 {
2942 if (serial_setbaudrate (remote_desc, baud_rate))
2943 {
2944 /* The requested speed could not be set. Error out to
2945 top level after closing remote_desc. Take care to
2946 set remote_desc to NULL to avoid closing remote_desc
2947 more than once. */
2948 serial_close (remote_desc);
2949 remote_desc = NULL;
2950 perror_with_name (name);
2951 }
2952 }
2953
2954 serial_raw (remote_desc);
2955
2956 /* If there is something sitting in the buffer we might take it as a
2957 response to a command, which would be bad. */
2958 serial_flush_input (remote_desc);
2959
2960 if (from_tty)
2961 {
2962 puts_filtered ("Remote debugging using ");
2963 puts_filtered (name);
2964 puts_filtered ("\n");
2965 }
2966 push_target (target); /* Switch to using remote target now. */
2967
2968 /* Assume that the target is running, unless we learn otherwise. */
2969 target_mark_running (target);
2970
2971 /* Reset the target state; these things will be queried either by
2972 remote_query_supported or as they are needed. */
2973 init_all_packet_configs ();
2974 rs->explicit_packet_size = 0;
2975 rs->noack_mode = 0;
2976 rs->multi_process_aware = 0;
2977 rs->extended = extended_p;
2978 rs->waiting_for_stop_reply = 0;
2979
2980 general_thread = not_sent_ptid;
2981 continue_thread = not_sent_ptid;
2982
2983 /* Probe for ability to use "ThreadInfo" query, as required. */
2984 use_threadinfo_query = 1;
2985 use_threadextra_query = 1;
2986
2987 if (target_async_permitted)
2988 {
2989 /* With this target we start out by owning the terminal. */
2990 remote_async_terminal_ours_p = 1;
2991
2992 /* FIXME: cagney/1999-09-23: During the initial connection it is
2993 assumed that the target is already ready and able to respond to
2994 requests. Unfortunately remote_start_remote() eventually calls
2995 wait_for_inferior() with no timeout. wait_forever_enabled_p gets
2996 around this. Eventually a mechanism that allows
2997 wait_for_inferior() to expect/get timeouts will be
2998 implemented. */
2999 wait_forever_enabled_p = 0;
3000 }
3001
3002 /* First delete any symbols previously loaded from shared libraries. */
3003 no_shared_libraries (NULL, 0);
3004
3005 /* Start the remote connection. If error() or QUIT, discard this
3006 target (we'd otherwise be in an inconsistent state) and then
3007 propogate the error on up the exception chain. This ensures that
3008 the caller doesn't stumble along blindly assuming that the
3009 function succeeded. The CLI doesn't have this problem but other
3010 UI's, such as MI do.
3011
3012 FIXME: cagney/2002-05-19: Instead of re-throwing the exception,
3013 this function should return an error indication letting the
3014 caller restore the previous state. Unfortunately the command
3015 ``target remote'' is directly wired to this function making that
3016 impossible. On a positive note, the CLI side of this problem has
3017 been fixed - the function set_cmd_context() makes it possible for
3018 all the ``target ....'' commands to share a common callback
3019 function. See cli-dump.c. */
3020 {
3021 struct gdb_exception ex;
3022 struct start_remote_args args;
3023
3024 args.from_tty = from_tty;
3025 args.target = target;
3026 args.extended_p = extended_p;
3027
3028 ex = catch_exception (uiout, remote_start_remote, &args, RETURN_MASK_ALL);
3029 if (ex.reason < 0)
3030 {
3031 /* Pop the partially set up target - unless something else did
3032 already before throwing the exception. */
3033 if (remote_desc != NULL)
3034 pop_target ();
3035 if (target_async_permitted)
3036 wait_forever_enabled_p = 1;
3037 throw_exception (ex);
3038 }
3039 }
3040
3041 if (target_async_permitted)
3042 wait_forever_enabled_p = 1;
3043 }
3044
3045 /* This takes a program previously attached to and detaches it. After
3046 this is done, GDB can be used to debug some other program. We
3047 better not have left any breakpoints in the target program or it'll
3048 die when it hits one. */
3049
3050 static void
3051 remote_detach_1 (char *args, int from_tty, int extended)
3052 {
3053 int pid = ptid_get_pid (inferior_ptid);
3054 struct remote_state *rs = get_remote_state ();
3055
3056 if (args)
3057 error (_("Argument given to \"detach\" when remotely debugging."));
3058
3059 if (!target_has_execution)
3060 error (_("No process to detach from."));
3061
3062 /* Tell the remote target to detach. */
3063 if (remote_multi_process_p (rs))
3064 sprintf (rs->buf, "D;%x", pid);
3065 else
3066 strcpy (rs->buf, "D");
3067
3068 putpkt (rs->buf);
3069 getpkt (&rs->buf, &rs->buf_size, 0);
3070
3071 if (rs->buf[0] == 'O' && rs->buf[1] == 'K')
3072 ;
3073 else if (rs->buf[0] == '\0')
3074 error (_("Remote doesn't know how to detach"));
3075 else
3076 error (_("Can't detach process."));
3077
3078 if (from_tty)
3079 {
3080 if (remote_multi_process_p (rs))
3081 printf_filtered (_("Detached from remote %s.\n"),
3082 target_pid_to_str (pid_to_ptid (pid)));
3083 else
3084 {
3085 if (extended)
3086 puts_filtered (_("Detached from remote process.\n"));
3087 else
3088 puts_filtered (_("Ending remote debugging.\n"));
3089 }
3090 }
3091
3092 detach_inferior (pid);
3093 target_mourn_inferior ();
3094 }
3095
3096 static void
3097 remote_detach (char *args, int from_tty)
3098 {
3099 remote_detach_1 (args, from_tty, 0);
3100 }
3101
3102 static void
3103 extended_remote_detach (char *args, int from_tty)
3104 {
3105 remote_detach_1 (args, from_tty, 1);
3106 }
3107
3108 /* Same as remote_detach, but don't send the "D" packet; just disconnect. */
3109
3110 static void
3111 remote_disconnect (struct target_ops *target, char *args, int from_tty)
3112 {
3113 if (args)
3114 error (_("Argument given to \"disconnect\" when remotely debugging."));
3115
3116 /* Make sure we unpush even the extended remote targets; mourn
3117 won't do it. So call remote_mourn_1 directly instead of
3118 target_mourn_inferior. */
3119 remote_mourn_1 (target);
3120
3121 if (from_tty)
3122 puts_filtered ("Ending remote debugging.\n");
3123 }
3124
3125 /* Attach to the process specified by ARGS. If FROM_TTY is non-zero,
3126 be chatty about it. */
3127
3128 static void
3129 extended_remote_attach_1 (struct target_ops *target, char *args, int from_tty)
3130 {
3131 struct remote_state *rs = get_remote_state ();
3132 int pid;
3133 char *dummy;
3134 char *wait_status = NULL;
3135 struct inferior *inf;
3136
3137 if (!args)
3138 error_no_arg (_("process-id to attach"));
3139
3140 dummy = args;
3141 pid = strtol (args, &dummy, 0);
3142 /* Some targets don't set errno on errors, grrr! */
3143 if (pid == 0 && args == dummy)
3144 error (_("Illegal process-id: %s."), args);
3145
3146 if (remote_protocol_packets[PACKET_vAttach].support == PACKET_DISABLE)
3147 error (_("This target does not support attaching to a process"));
3148
3149 sprintf (rs->buf, "vAttach;%x", pid);
3150 putpkt (rs->buf);
3151 getpkt (&rs->buf, &rs->buf_size, 0);
3152
3153 if (packet_ok (rs->buf, &remote_protocol_packets[PACKET_vAttach]) == PACKET_OK)
3154 {
3155 if (from_tty)
3156 printf_unfiltered (_("Attached to %s\n"),
3157 target_pid_to_str (pid_to_ptid (pid)));
3158
3159 /* Save the reply for later. */
3160 wait_status = alloca (strlen (rs->buf) + 1);
3161 strcpy (wait_status, rs->buf);
3162 }
3163 else if (remote_protocol_packets[PACKET_vAttach].support == PACKET_DISABLE)
3164 error (_("This target does not support attaching to a process"));
3165 else
3166 error (_("Attaching to %s failed"),
3167 target_pid_to_str (pid_to_ptid (pid)));
3168
3169 target_mark_running (target);
3170 inferior_ptid = pid_to_ptid (pid);
3171
3172 /* Now, if we have thread information, update inferior_ptid. */
3173 inferior_ptid = remote_current_thread (inferior_ptid);
3174
3175 inf = add_inferior (pid);
3176 inf->attach_flag = 1;
3177
3178 /* Now, add the main thread to the thread list. */
3179 add_thread_silent (inferior_ptid);
3180
3181 /* Next, if the target can specify a description, read it. We do
3182 this before anything involving memory or registers. */
3183 target_find_description ();
3184
3185 /* Use the previously fetched status. */
3186 gdb_assert (wait_status != NULL);
3187 strcpy (rs->buf, wait_status);
3188 rs->cached_wait_status = 1;
3189 }
3190
3191 static void
3192 extended_remote_attach (char *args, int from_tty)
3193 {
3194 extended_remote_attach_1 (&extended_remote_ops, args, from_tty);
3195 }
3196
3197 /* Convert hex digit A to a number. */
3198
3199 static int
3200 fromhex (int a)
3201 {
3202 if (a >= '0' && a <= '9')
3203 return a - '0';
3204 else if (a >= 'a' && a <= 'f')
3205 return a - 'a' + 10;
3206 else if (a >= 'A' && a <= 'F')
3207 return a - 'A' + 10;
3208 else
3209 error (_("Reply contains invalid hex digit %d"), a);
3210 }
3211
3212 static int
3213 hex2bin (const char *hex, gdb_byte *bin, int count)
3214 {
3215 int i;
3216
3217 for (i = 0; i < count; i++)
3218 {
3219 if (hex[0] == 0 || hex[1] == 0)
3220 {
3221 /* Hex string is short, or of uneven length.
3222 Return the count that has been converted so far. */
3223 return i;
3224 }
3225 *bin++ = fromhex (hex[0]) * 16 + fromhex (hex[1]);
3226 hex += 2;
3227 }
3228 return i;
3229 }
3230
3231 /* Convert number NIB to a hex digit. */
3232
3233 static int
3234 tohex (int nib)
3235 {
3236 if (nib < 10)
3237 return '0' + nib;
3238 else
3239 return 'a' + nib - 10;
3240 }
3241
3242 static int
3243 bin2hex (const gdb_byte *bin, char *hex, int count)
3244 {
3245 int i;
3246 /* May use a length, or a nul-terminated string as input. */
3247 if (count == 0)
3248 count = strlen ((char *) bin);
3249
3250 for (i = 0; i < count; i++)
3251 {
3252 *hex++ = tohex ((*bin >> 4) & 0xf);
3253 *hex++ = tohex (*bin++ & 0xf);
3254 }
3255 *hex = 0;
3256 return i;
3257 }
3258 \f
3259 /* Check for the availability of vCont. This function should also check
3260 the response. */
3261
3262 static void
3263 remote_vcont_probe (struct remote_state *rs)
3264 {
3265 char *buf;
3266
3267 strcpy (rs->buf, "vCont?");
3268 putpkt (rs->buf);
3269 getpkt (&rs->buf, &rs->buf_size, 0);
3270 buf = rs->buf;
3271
3272 /* Make sure that the features we assume are supported. */
3273 if (strncmp (buf, "vCont", 5) == 0)
3274 {
3275 char *p = &buf[5];
3276 int support_s, support_S, support_c, support_C;
3277
3278 support_s = 0;
3279 support_S = 0;
3280 support_c = 0;
3281 support_C = 0;
3282 while (p && *p == ';')
3283 {
3284 p++;
3285 if (*p == 's' && (*(p + 1) == ';' || *(p + 1) == 0))
3286 support_s = 1;
3287 else if (*p == 'S' && (*(p + 1) == ';' || *(p + 1) == 0))
3288 support_S = 1;
3289 else if (*p == 'c' && (*(p + 1) == ';' || *(p + 1) == 0))
3290 support_c = 1;
3291 else if (*p == 'C' && (*(p + 1) == ';' || *(p + 1) == 0))
3292 support_C = 1;
3293
3294 p = strchr (p, ';');
3295 }
3296
3297 /* If s, S, c, and C are not all supported, we can't use vCont. Clearing
3298 BUF will make packet_ok disable the packet. */
3299 if (!support_s || !support_S || !support_c || !support_C)
3300 buf[0] = 0;
3301 }
3302
3303 packet_ok (buf, &remote_protocol_packets[PACKET_vCont]);
3304 }
3305
3306 /* Resume the remote inferior by using a "vCont" packet. The thread
3307 to be resumed is PTID; STEP and SIGGNAL indicate whether the
3308 resumed thread should be single-stepped and/or signalled. If PTID
3309 equals minus_one_ptid, then all threads are resumed; the thread to
3310 be stepped and/or signalled is given in the global INFERIOR_PTID.
3311 This function returns non-zero iff it resumes the inferior.
3312
3313 This function issues a strict subset of all possible vCont commands at the
3314 moment. */
3315
3316 static int
3317 remote_vcont_resume (ptid_t ptid, int step, enum target_signal siggnal)
3318 {
3319 struct remote_state *rs = get_remote_state ();
3320 char *p;
3321 char *endp;
3322
3323 if (remote_protocol_packets[PACKET_vCont].support == PACKET_SUPPORT_UNKNOWN)
3324 remote_vcont_probe (rs);
3325
3326 if (remote_protocol_packets[PACKET_vCont].support == PACKET_DISABLE)
3327 return 0;
3328
3329 p = rs->buf;
3330 endp = rs->buf + get_remote_packet_size ();
3331
3332 /* If we could generate a wider range of packets, we'd have to worry
3333 about overflowing BUF. Should there be a generic
3334 "multi-part-packet" packet? */
3335
3336 if (ptid_equal (ptid, magic_null_ptid))
3337 {
3338 /* MAGIC_NULL_PTID means that we don't have any active threads,
3339 so we don't have any TID numbers the inferior will
3340 understand. Make sure to only send forms that do not specify
3341 a TID. */
3342 if (step && siggnal != TARGET_SIGNAL_0)
3343 xsnprintf (p, endp - p, "vCont;S%02x", siggnal);
3344 else if (step)
3345 xsnprintf (p, endp - p, "vCont;s");
3346 else if (siggnal != TARGET_SIGNAL_0)
3347 xsnprintf (p, endp - p, "vCont;C%02x", siggnal);
3348 else
3349 xsnprintf (p, endp - p, "vCont;c");
3350 }
3351 else if (ptid_equal (ptid, minus_one_ptid))
3352 {
3353 /* Resume all threads, with preference for INFERIOR_PTID. */
3354 if (step && siggnal != TARGET_SIGNAL_0)
3355 {
3356 /* Step inferior_ptid with signal. */
3357 p += xsnprintf (p, endp - p, "vCont;S%02x:", siggnal);
3358 p = write_ptid (p, endp, inferior_ptid);
3359 /* And continue others. */
3360 p += xsnprintf (p, endp - p, ";c");
3361 }
3362 else if (step)
3363 {
3364 /* Step inferior_ptid. */
3365 p += xsnprintf (p, endp - p, "vCont;s:");
3366 p = write_ptid (p, endp, inferior_ptid);
3367 /* And continue others. */
3368 p += xsnprintf (p, endp - p, ";c");
3369 }
3370 else if (siggnal != TARGET_SIGNAL_0)
3371 {
3372 /* Continue inferior_ptid with signal. */
3373 p += xsnprintf (p, endp - p, "vCont;C%02x:", siggnal);
3374 p = write_ptid (p, endp, inferior_ptid);
3375 /* And continue others. */
3376 p += xsnprintf (p, endp - p, ";c");
3377 }
3378 else
3379 xsnprintf (p, endp - p, "vCont;c");
3380 }
3381 else
3382 {
3383 /* Scheduler locking; resume only PTID. */
3384 if (step && siggnal != TARGET_SIGNAL_0)
3385 {
3386 /* Step ptid with signal. */
3387 p += xsnprintf (p, endp - p, "vCont;S%02x:", siggnal);
3388 p = write_ptid (p, endp, ptid);
3389 }
3390 else if (step)
3391 {
3392 /* Step ptid. */
3393 p += xsnprintf (p, endp - p, "vCont;s:");
3394 p = write_ptid (p, endp, ptid);
3395 }
3396 else if (siggnal != TARGET_SIGNAL_0)
3397 {
3398 /* Continue ptid with signal. */
3399 p += xsnprintf (p, endp - p, "vCont;C%02x:", siggnal);
3400 p = write_ptid (p, endp, ptid);
3401 }
3402 else
3403 {
3404 /* Continue ptid. */
3405 p += xsnprintf (p, endp - p, "vCont;c:");
3406 p = write_ptid (p, endp, ptid);
3407 }
3408 }
3409
3410 gdb_assert (strlen (rs->buf) < get_remote_packet_size ());
3411 putpkt (rs->buf);
3412
3413 return 1;
3414 }
3415
3416 /* Tell the remote machine to resume. */
3417
3418 static enum target_signal last_sent_signal = TARGET_SIGNAL_0;
3419
3420 static int last_sent_step;
3421
3422 static void
3423 remote_resume (ptid_t ptid, int step, enum target_signal siggnal)
3424 {
3425 struct remote_state *rs = get_remote_state ();
3426 char *buf;
3427
3428 last_sent_signal = siggnal;
3429 last_sent_step = step;
3430
3431 /* Update the inferior on signals to silently pass, if they've changed. */
3432 remote_pass_signals ();
3433
3434 /* The vCont packet doesn't need to specify threads via Hc. */
3435 if (remote_vcont_resume (ptid, step, siggnal))
3436 goto done;
3437
3438 /* All other supported resume packets do use Hc, so set the continue
3439 thread. */
3440 if (ptid_equal (ptid, minus_one_ptid))
3441 set_continue_thread (any_thread_ptid);
3442 else
3443 set_continue_thread (ptid);
3444
3445 buf = rs->buf;
3446 if (execution_direction == EXEC_REVERSE)
3447 {
3448 /* We don't pass signals to the target in reverse exec mode. */
3449 if (info_verbose && siggnal != TARGET_SIGNAL_0)
3450 warning (" - Can't pass signal %d to target in reverse: ignored.\n",
3451 siggnal);
3452 strcpy (buf, step ? "bs" : "bc");
3453 }
3454 else if (siggnal != TARGET_SIGNAL_0)
3455 {
3456 buf[0] = step ? 'S' : 'C';
3457 buf[1] = tohex (((int) siggnal >> 4) & 0xf);
3458 buf[2] = tohex (((int) siggnal) & 0xf);
3459 buf[3] = '\0';
3460 }
3461 else
3462 strcpy (buf, step ? "s" : "c");
3463
3464 putpkt (buf);
3465
3466 done:
3467 /* We are about to start executing the inferior, let's register it
3468 with the event loop. NOTE: this is the one place where all the
3469 execution commands end up. We could alternatively do this in each
3470 of the execution commands in infcmd.c. */
3471 /* FIXME: ezannoni 1999-09-28: We may need to move this out of here
3472 into infcmd.c in order to allow inferior function calls to work
3473 NOT asynchronously. */
3474 if (target_can_async_p ())
3475 target_async (inferior_event_handler, 0);
3476
3477 /* We've just told the target to resume. The remote server will
3478 wait for the inferior to stop, and then send a stop reply. In
3479 the mean time, we can't start another command/query ourselves
3480 because the stub wouldn't be ready to process it. */
3481 rs->waiting_for_stop_reply = 1;
3482 }
3483 \f
3484
3485 /* Set up the signal handler for SIGINT, while the target is
3486 executing, ovewriting the 'regular' SIGINT signal handler. */
3487 static void
3488 initialize_sigint_signal_handler (void)
3489 {
3490 signal (SIGINT, handle_remote_sigint);
3491 }
3492
3493 /* Signal handler for SIGINT, while the target is executing. */
3494 static void
3495 handle_remote_sigint (int sig)
3496 {
3497 signal (sig, handle_remote_sigint_twice);
3498 mark_async_signal_handler_wrapper (sigint_remote_token);
3499 }
3500
3501 /* Signal handler for SIGINT, installed after SIGINT has already been
3502 sent once. It will take effect the second time that the user sends
3503 a ^C. */
3504 static void
3505 handle_remote_sigint_twice (int sig)
3506 {
3507 signal (sig, handle_remote_sigint);
3508 mark_async_signal_handler_wrapper (sigint_remote_twice_token);
3509 }
3510
3511 /* Perform the real interruption of the target execution, in response
3512 to a ^C. */
3513 static void
3514 async_remote_interrupt (gdb_client_data arg)
3515 {
3516 if (remote_debug)
3517 fprintf_unfiltered (gdb_stdlog, "remote_interrupt called\n");
3518
3519 target_stop (inferior_ptid);
3520 }
3521
3522 /* Perform interrupt, if the first attempt did not succeed. Just give
3523 up on the target alltogether. */
3524 void
3525 async_remote_interrupt_twice (gdb_client_data arg)
3526 {
3527 if (remote_debug)
3528 fprintf_unfiltered (gdb_stdlog, "remote_interrupt_twice called\n");
3529
3530 interrupt_query ();
3531 }
3532
3533 /* Reinstall the usual SIGINT handlers, after the target has
3534 stopped. */
3535 static void
3536 cleanup_sigint_signal_handler (void *dummy)
3537 {
3538 signal (SIGINT, handle_sigint);
3539 }
3540
3541 /* Send ^C to target to halt it. Target will respond, and send us a
3542 packet. */
3543 static void (*ofunc) (int);
3544
3545 /* The command line interface's stop routine. This function is installed
3546 as a signal handler for SIGINT. The first time a user requests a
3547 stop, we call remote_stop to send a break or ^C. If there is no
3548 response from the target (it didn't stop when the user requested it),
3549 we ask the user if he'd like to detach from the target. */
3550 static void
3551 remote_interrupt (int signo)
3552 {
3553 /* If this doesn't work, try more severe steps. */
3554 signal (signo, remote_interrupt_twice);
3555
3556 gdb_call_async_signal_handler (sigint_remote_token, 1);
3557 }
3558
3559 /* The user typed ^C twice. */
3560
3561 static void
3562 remote_interrupt_twice (int signo)
3563 {
3564 signal (signo, ofunc);
3565 gdb_call_async_signal_handler (sigint_remote_twice_token, 1);
3566 signal (signo, remote_interrupt);
3567 }
3568
3569 /* This is the generic stop called via the target vector. When a target
3570 interrupt is requested, either by the command line or the GUI, we
3571 will eventually end up here. */
3572 static void
3573 remote_stop (ptid_t ptid)
3574 {
3575 /* Send a break or a ^C, depending on user preference. */
3576 if (remote_debug)
3577 fprintf_unfiltered (gdb_stdlog, "remote_stop called\n");
3578
3579 if (remote_break)
3580 serial_send_break (remote_desc);
3581 else
3582 serial_write (remote_desc, "\003", 1);
3583 }
3584
3585 /* Ask the user what to do when an interrupt is received. */
3586
3587 static void
3588 interrupt_query (void)
3589 {
3590 target_terminal_ours ();
3591
3592 if (query ("Interrupted while waiting for the program.\n\
3593 Give up (and stop debugging it)? "))
3594 {
3595 pop_target ();
3596 deprecated_throw_reason (RETURN_QUIT);
3597 }
3598
3599 target_terminal_inferior ();
3600 }
3601
3602 /* Enable/disable target terminal ownership. Most targets can use
3603 terminal groups to control terminal ownership. Remote targets are
3604 different in that explicit transfer of ownership to/from GDB/target
3605 is required. */
3606
3607 static void
3608 remote_terminal_inferior (void)
3609 {
3610 if (!target_async_permitted)
3611 /* Nothing to do. */
3612 return;
3613
3614 /* FIXME: cagney/1999-09-27: Shouldn't need to test for
3615 sync_execution here. This function should only be called when
3616 GDB is resuming the inferior in the forground. A background
3617 resume (``run&'') should leave GDB in control of the terminal and
3618 consequently should not call this code. */
3619 if (!sync_execution)
3620 return;
3621 /* FIXME: cagney/1999-09-27: Closely related to the above. Make
3622 calls target_terminal_*() idenpotent. The event-loop GDB talking
3623 to an asynchronous target with a synchronous command calls this
3624 function from both event-top.c and infrun.c/infcmd.c. Once GDB
3625 stops trying to transfer the terminal to the target when it
3626 shouldn't this guard can go away. */
3627 if (!remote_async_terminal_ours_p)
3628 return;
3629 delete_file_handler (input_fd);
3630 remote_async_terminal_ours_p = 0;
3631 initialize_sigint_signal_handler ();
3632 /* NOTE: At this point we could also register our selves as the
3633 recipient of all input. Any characters typed could then be
3634 passed on down to the target. */
3635 }
3636
3637 static void
3638 remote_terminal_ours (void)
3639 {
3640 if (!target_async_permitted)
3641 /* Nothing to do. */
3642 return;
3643
3644 /* See FIXME in remote_terminal_inferior. */
3645 if (!sync_execution)
3646 return;
3647 /* See FIXME in remote_terminal_inferior. */
3648 if (remote_async_terminal_ours_p)
3649 return;
3650 cleanup_sigint_signal_handler (NULL);
3651 add_file_handler (input_fd, stdin_event_handler, 0);
3652 remote_async_terminal_ours_p = 1;
3653 }
3654
3655 void
3656 remote_console_output (char *msg)
3657 {
3658 char *p;
3659
3660 for (p = msg; p[0] && p[1]; p += 2)
3661 {
3662 char tb[2];
3663 char c = fromhex (p[0]) * 16 + fromhex (p[1]);
3664 tb[0] = c;
3665 tb[1] = 0;
3666 fputs_unfiltered (tb, gdb_stdtarg);
3667 }
3668 gdb_flush (gdb_stdtarg);
3669 }
3670
3671 /* Wait until the remote machine stops, then return,
3672 storing status in STATUS just as `wait' would. */
3673
3674 static ptid_t
3675 remote_wait_as (ptid_t ptid, struct target_waitstatus *status)
3676 {
3677 struct remote_state *rs = get_remote_state ();
3678 struct remote_arch_state *rsa = get_remote_arch_state ();
3679 ptid_t event_ptid = null_ptid;
3680 ULONGEST addr;
3681 int solibs_changed = 0;
3682 int replay_event = 0;
3683 char *buf, *p;
3684
3685 status->kind = TARGET_WAITKIND_IGNORE;
3686 status->value.integer = 0;
3687
3688 if (rs->cached_wait_status)
3689 /* Use the cached wait status, but only once. */
3690 rs->cached_wait_status = 0;
3691 else
3692 {
3693 if (!target_is_async_p ())
3694 {
3695 ofunc = signal (SIGINT, remote_interrupt);
3696 /* If the user hit C-c before this packet, or between
3697 packets, pretend that it was hit right here. */
3698 if (quit_flag)
3699 {
3700 quit_flag = 0;
3701 remote_interrupt (SIGINT);
3702 }
3703 }
3704 /* FIXME: cagney/1999-09-27: If we're in async mode we should
3705 _never_ wait for ever -> test on target_is_async_p().
3706 However, before we do that we need to ensure that the caller
3707 knows how to take the target into/out of async mode. */
3708 getpkt (&rs->buf, &rs->buf_size, wait_forever_enabled_p);
3709 if (!target_is_async_p ())
3710 signal (SIGINT, ofunc);
3711 }
3712
3713 buf = rs->buf;
3714
3715 remote_stopped_by_watchpoint_p = 0;
3716
3717 /* We got something. */
3718 rs->waiting_for_stop_reply = 0;
3719
3720 switch (buf[0])
3721 {
3722 case 'E': /* Error of some sort. */
3723 /* We're out of sync with the target now. Did it continue or
3724 not? Not is more likely, so report a stop. */
3725 warning (_("Remote failure reply: %s"), buf);
3726 status->kind = TARGET_WAITKIND_STOPPED;
3727 status->value.sig = TARGET_SIGNAL_0;
3728 break;
3729 case 'F': /* File-I/O request. */
3730 remote_fileio_request (buf);
3731
3732 /* This stop reply is special. We reply back to the stub,
3733 and keep waiting for the target to stop. */
3734 rs->waiting_for_stop_reply = 1;
3735 break;
3736 case 'T': /* Status with PC, SP, FP, ... */
3737 {
3738 gdb_byte regs[MAX_REGISTER_SIZE];
3739
3740 /* Expedited reply, containing Signal, {regno, reg} repeat. */
3741 /* format is: 'Tssn...:r...;n...:r...;n...:r...;#cc', where
3742 ss = signal number
3743 n... = register number
3744 r... = register contents
3745 */
3746 p = &buf[3]; /* after Txx */
3747
3748 while (*p)
3749 {
3750 char *p1;
3751 char *p_temp;
3752 int fieldsize;
3753 LONGEST pnum = 0;
3754
3755 /* If the packet contains a register number, save it in
3756 pnum and set p1 to point to the character following it.
3757 Otherwise p1 points to p. */
3758
3759 /* If this packet is an awatch packet, don't parse the
3760 'a' as a register number. */
3761
3762 if (strncmp (p, "awatch", strlen("awatch")) != 0)
3763 {
3764 /* Read the ``P'' register number. */
3765 pnum = strtol (p, &p_temp, 16);
3766 p1 = p_temp;
3767 }
3768 else
3769 p1 = p;
3770
3771 if (p1 == p) /* No register number present here. */
3772 {
3773 p1 = strchr (p, ':');
3774 if (p1 == NULL)
3775 error (_("Malformed packet(a) (missing colon): %s\n\
3776 Packet: '%s'\n"),
3777 p, buf);
3778 if (strncmp (p, "thread", p1 - p) == 0)
3779 event_ptid = read_ptid (++p1, &p);
3780 else if ((strncmp (p, "watch", p1 - p) == 0)
3781 || (strncmp (p, "rwatch", p1 - p) == 0)
3782 || (strncmp (p, "awatch", p1 - p) == 0))
3783 {
3784 remote_stopped_by_watchpoint_p = 1;
3785 p = unpack_varlen_hex (++p1, &addr);
3786 remote_watch_data_address = (CORE_ADDR)addr;
3787 }
3788 else if (strncmp (p, "library", p1 - p) == 0)
3789 {
3790 p1++;
3791 p_temp = p1;
3792 while (*p_temp && *p_temp != ';')
3793 p_temp++;
3794
3795 solibs_changed = 1;
3796 p = p_temp;
3797 }
3798 else if (strncmp (p, "replaylog", p1 - p) == 0)
3799 {
3800 /* NO_HISTORY event.
3801 p1 will indicate "begin" or "end", but
3802 it makes no difference for now, so ignore it. */
3803 replay_event = 1;
3804 p_temp = strchr (p1 + 1, ';');
3805 if (p_temp)
3806 p = p_temp;
3807 }
3808 else
3809 {
3810 /* Silently skip unknown optional info. */
3811 p_temp = strchr (p1 + 1, ';');
3812 if (p_temp)
3813 p = p_temp;
3814 }
3815 }
3816 else
3817 {
3818 struct packet_reg *reg = packet_reg_from_pnum (rsa, pnum);
3819 p = p1;
3820
3821 if (*p != ':')
3822 error (_("Malformed packet(b) (missing colon): %s\n\
3823 Packet: '%s'\n"),
3824 p, buf);
3825 ++p;
3826
3827 if (reg == NULL)
3828 error (_("Remote sent bad register number %s: %s\n\
3829 Packet: '%s'\n"),
3830 phex_nz (pnum, 0), p, buf);
3831
3832 fieldsize = hex2bin (p, regs,
3833 register_size (target_gdbarch,
3834 reg->regnum));
3835 p += 2 * fieldsize;
3836 if (fieldsize < register_size (target_gdbarch,
3837 reg->regnum))
3838 warning (_("Remote reply is too short: %s"), buf);
3839 regcache_raw_supply (get_current_regcache (),
3840 reg->regnum, regs);
3841 }
3842
3843 if (*p != ';')
3844 error (_("Remote register badly formatted: %s\nhere: %s"),
3845 buf, p);
3846 ++p;
3847 }
3848 }
3849 /* fall through */
3850 case 'S': /* Old style status, just signal only. */
3851 if (solibs_changed)
3852 status->kind = TARGET_WAITKIND_LOADED;
3853 else if (replay_event)
3854 status->kind = TARGET_WAITKIND_NO_HISTORY;
3855 else
3856 {
3857 status->kind = TARGET_WAITKIND_STOPPED;
3858 status->value.sig = (enum target_signal)
3859 (((fromhex (buf[1])) << 4) + (fromhex (buf[2])));
3860 }
3861 break;
3862 case 'W': /* Target exited. */
3863 case 'X':
3864 {
3865 char *p;
3866 int pid;
3867 ULONGEST value;
3868
3869 /* GDB used to accept only 2 hex chars here. Stubs should
3870 only send more if they detect GDB supports multi-process
3871 support. */
3872 p = unpack_varlen_hex (&buf[1], &value);
3873
3874 if (buf[0] == 'W')
3875 {
3876 /* The remote process exited. */
3877 status->kind = TARGET_WAITKIND_EXITED;
3878 status->value.integer = value;
3879 }
3880 else
3881 {
3882 /* The remote process exited with a signal. */
3883 status->kind = TARGET_WAITKIND_SIGNALLED;
3884 status->value.sig = (enum target_signal) value;
3885 }
3886
3887 /* If no process is specified, assume inferior_ptid. */
3888 pid = ptid_get_pid (inferior_ptid);
3889 if (*p == '\0')
3890 ;
3891 else if (*p == ';')
3892 {
3893 p++;
3894
3895 if (p == '\0')
3896 ;
3897 else if (strncmp (p,
3898 "process:", sizeof ("process:") - 1) == 0)
3899 {
3900 ULONGEST upid;
3901 p += sizeof ("process:") - 1;
3902 unpack_varlen_hex (p, &upid);
3903 pid = upid;
3904 }
3905 else
3906 error (_("unknown stop reply packet: %s"), buf);
3907 }
3908 else
3909 error (_("unknown stop reply packet: %s"), buf);
3910 event_ptid = pid_to_ptid (pid);
3911 break;
3912 }
3913 case 'O': /* Console output. */
3914 remote_console_output (buf + 1);
3915
3916 /* The target didn't really stop; keep waiting. */
3917 rs->waiting_for_stop_reply = 1;
3918
3919 break;
3920 case '\0':
3921 if (last_sent_signal != TARGET_SIGNAL_0)
3922 {
3923 /* Zero length reply means that we tried 'S' or 'C' and the
3924 remote system doesn't support it. */
3925 target_terminal_ours_for_output ();
3926 printf_filtered
3927 ("Can't send signals to this remote system. %s not sent.\n",
3928 target_signal_to_name (last_sent_signal));
3929 last_sent_signal = TARGET_SIGNAL_0;
3930 target_terminal_inferior ();
3931
3932 strcpy ((char *) buf, last_sent_step ? "s" : "c");
3933 putpkt ((char *) buf);
3934
3935 /* We just told the target to resume, so a stop reply is in
3936 order. */
3937 rs->waiting_for_stop_reply = 1;
3938 break;
3939 }
3940 /* else fallthrough */
3941 default:
3942 warning (_("Invalid remote reply: %s"), buf);
3943 /* Keep waiting. */
3944 rs->waiting_for_stop_reply = 1;
3945 break;
3946 }
3947
3948 /* Nothing interesting happened. */
3949 if (status->kind == TARGET_WAITKIND_IGNORE)
3950 return minus_one_ptid;
3951
3952 if (status->kind == TARGET_WAITKIND_EXITED
3953 || status->kind == TARGET_WAITKIND_SIGNALLED)
3954 {
3955 int pid = ptid_get_pid (event_ptid);
3956 delete_inferior (pid);
3957 }
3958 else
3959 {
3960 if (!ptid_equal (event_ptid, null_ptid))
3961 record_currthread (event_ptid);
3962 else
3963 event_ptid = inferior_ptid;
3964 }
3965
3966 return event_ptid;
3967 }
3968
3969 static ptid_t
3970 remote_wait (ptid_t ptid, struct target_waitstatus *status)
3971 {
3972 ptid_t event_ptid;
3973
3974 /* In synchronous mode, keep waiting until the target stops. In
3975 asynchronous mode, always return to the event loop. */
3976
3977 do
3978 {
3979 event_ptid = remote_wait_as (ptid, status);
3980 }
3981 while (status->kind == TARGET_WAITKIND_IGNORE
3982 && !target_can_async_p ());
3983
3984 return event_ptid;
3985 }
3986
3987 /* Fetch a single register using a 'p' packet. */
3988
3989 static int
3990 fetch_register_using_p (struct regcache *regcache, struct packet_reg *reg)
3991 {
3992 struct remote_state *rs = get_remote_state ();
3993 char *buf, *p;
3994 char regp[MAX_REGISTER_SIZE];
3995 int i;
3996
3997 if (remote_protocol_packets[PACKET_p].support == PACKET_DISABLE)
3998 return 0;
3999
4000 if (reg->pnum == -1)
4001 return 0;
4002
4003 p = rs->buf;
4004 *p++ = 'p';
4005 p += hexnumstr (p, reg->pnum);
4006 *p++ = '\0';
4007 remote_send (&rs->buf, &rs->buf_size);
4008
4009 buf = rs->buf;
4010
4011 switch (packet_ok (buf, &remote_protocol_packets[PACKET_p]))
4012 {
4013 case PACKET_OK:
4014 break;
4015 case PACKET_UNKNOWN:
4016 return 0;
4017 case PACKET_ERROR:
4018 error (_("Could not fetch register \"%s\""),
4019 gdbarch_register_name (get_regcache_arch (regcache), reg->regnum));
4020 }
4021
4022 /* If this register is unfetchable, tell the regcache. */
4023 if (buf[0] == 'x')
4024 {
4025 regcache_raw_supply (regcache, reg->regnum, NULL);
4026 return 1;
4027 }
4028
4029 /* Otherwise, parse and supply the value. */
4030 p = buf;
4031 i = 0;
4032 while (p[0] != 0)
4033 {
4034 if (p[1] == 0)
4035 error (_("fetch_register_using_p: early buf termination"));
4036
4037 regp[i++] = fromhex (p[0]) * 16 + fromhex (p[1]);
4038 p += 2;
4039 }
4040 regcache_raw_supply (regcache, reg->regnum, regp);
4041 return 1;
4042 }
4043
4044 /* Fetch the registers included in the target's 'g' packet. */
4045
4046 static int
4047 send_g_packet (void)
4048 {
4049 struct remote_state *rs = get_remote_state ();
4050 int i, buf_len;
4051 char *p;
4052 char *regs;
4053
4054 sprintf (rs->buf, "g");
4055 remote_send (&rs->buf, &rs->buf_size);
4056
4057 /* We can get out of synch in various cases. If the first character
4058 in the buffer is not a hex character, assume that has happened
4059 and try to fetch another packet to read. */
4060 while ((rs->buf[0] < '0' || rs->buf[0] > '9')
4061 && (rs->buf[0] < 'A' || rs->buf[0] > 'F')
4062 && (rs->buf[0] < 'a' || rs->buf[0] > 'f')
4063 && rs->buf[0] != 'x') /* New: unavailable register value. */
4064 {
4065 if (remote_debug)
4066 fprintf_unfiltered (gdb_stdlog,
4067 "Bad register packet; fetching a new packet\n");
4068 getpkt (&rs->buf, &rs->buf_size, 0);
4069 }
4070
4071 buf_len = strlen (rs->buf);
4072
4073 /* Sanity check the received packet. */
4074 if (buf_len % 2 != 0)
4075 error (_("Remote 'g' packet reply is of odd length: %s"), rs->buf);
4076
4077 return buf_len / 2;
4078 }
4079
4080 static void
4081 process_g_packet (struct regcache *regcache)
4082 {
4083 struct gdbarch *gdbarch = get_regcache_arch (regcache);
4084 struct remote_state *rs = get_remote_state ();
4085 struct remote_arch_state *rsa = get_remote_arch_state ();
4086 int i, buf_len;
4087 char *p;
4088 char *regs;
4089
4090 buf_len = strlen (rs->buf);
4091
4092 /* Further sanity checks, with knowledge of the architecture. */
4093 if (buf_len > 2 * rsa->sizeof_g_packet)
4094 error (_("Remote 'g' packet reply is too long: %s"), rs->buf);
4095
4096 /* Save the size of the packet sent to us by the target. It is used
4097 as a heuristic when determining the max size of packets that the
4098 target can safely receive. */
4099 if (rsa->actual_register_packet_size == 0)
4100 rsa->actual_register_packet_size = buf_len;
4101
4102 /* If this is smaller than we guessed the 'g' packet would be,
4103 update our records. A 'g' reply that doesn't include a register's
4104 value implies either that the register is not available, or that
4105 the 'p' packet must be used. */
4106 if (buf_len < 2 * rsa->sizeof_g_packet)
4107 {
4108 rsa->sizeof_g_packet = buf_len / 2;
4109
4110 for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
4111 {
4112 if (rsa->regs[i].pnum == -1)
4113 continue;
4114
4115 if (rsa->regs[i].offset >= rsa->sizeof_g_packet)
4116 rsa->regs[i].in_g_packet = 0;
4117 else
4118 rsa->regs[i].in_g_packet = 1;
4119 }
4120 }
4121
4122 regs = alloca (rsa->sizeof_g_packet);
4123
4124 /* Unimplemented registers read as all bits zero. */
4125 memset (regs, 0, rsa->sizeof_g_packet);
4126
4127 /* Reply describes registers byte by byte, each byte encoded as two
4128 hex characters. Suck them all up, then supply them to the
4129 register cacheing/storage mechanism. */
4130
4131 p = rs->buf;
4132 for (i = 0; i < rsa->sizeof_g_packet; i++)
4133 {
4134 if (p[0] == 0 || p[1] == 0)
4135 /* This shouldn't happen - we adjusted sizeof_g_packet above. */
4136 internal_error (__FILE__, __LINE__,
4137 "unexpected end of 'g' packet reply");
4138
4139 if (p[0] == 'x' && p[1] == 'x')
4140 regs[i] = 0; /* 'x' */
4141 else
4142 regs[i] = fromhex (p[0]) * 16 + fromhex (p[1]);
4143 p += 2;
4144 }
4145
4146 {
4147 int i;
4148 for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
4149 {
4150 struct packet_reg *r = &rsa->regs[i];
4151 if (r->in_g_packet)
4152 {
4153 if (r->offset * 2 >= strlen (rs->buf))
4154 /* This shouldn't happen - we adjusted in_g_packet above. */
4155 internal_error (__FILE__, __LINE__,
4156 "unexpected end of 'g' packet reply");
4157 else if (rs->buf[r->offset * 2] == 'x')
4158 {
4159 gdb_assert (r->offset * 2 < strlen (rs->buf));
4160 /* The register isn't available, mark it as such (at
4161 the same time setting the value to zero). */
4162 regcache_raw_supply (regcache, r->regnum, NULL);
4163 }
4164 else
4165 regcache_raw_supply (regcache, r->regnum,
4166 regs + r->offset);
4167 }
4168 }
4169 }
4170 }
4171
4172 static void
4173 fetch_registers_using_g (struct regcache *regcache)
4174 {
4175 send_g_packet ();
4176 process_g_packet (regcache);
4177 }
4178
4179 static void
4180 remote_fetch_registers (struct regcache *regcache, int regnum)
4181 {
4182 struct remote_state *rs = get_remote_state ();
4183 struct remote_arch_state *rsa = get_remote_arch_state ();
4184 int i;
4185
4186 set_general_thread (inferior_ptid);
4187
4188 if (regnum >= 0)
4189 {
4190 struct packet_reg *reg = packet_reg_from_regnum (rsa, regnum);
4191 gdb_assert (reg != NULL);
4192
4193 /* If this register might be in the 'g' packet, try that first -
4194 we are likely to read more than one register. If this is the
4195 first 'g' packet, we might be overly optimistic about its
4196 contents, so fall back to 'p'. */
4197 if (reg->in_g_packet)
4198 {
4199 fetch_registers_using_g (regcache);
4200 if (reg->in_g_packet)
4201 return;
4202 }
4203
4204 if (fetch_register_using_p (regcache, reg))
4205 return;
4206
4207 /* This register is not available. */
4208 regcache_raw_supply (regcache, reg->regnum, NULL);
4209
4210 return;
4211 }
4212
4213 fetch_registers_using_g (regcache);
4214
4215 for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++)
4216 if (!rsa->regs[i].in_g_packet)
4217 if (!fetch_register_using_p (regcache, &rsa->regs[i]))
4218 {
4219 /* This register is not available. */
4220 regcache_raw_supply (regcache, i, NULL);
4221 }
4222 }
4223
4224 /* Prepare to store registers. Since we may send them all (using a
4225 'G' request), we have to read out the ones we don't want to change
4226 first. */
4227
4228 static void
4229 remote_prepare_to_store (struct regcache *regcache)
4230 {
4231 struct remote_arch_state *rsa = get_remote_arch_state ();
4232 int i;
4233 gdb_byte buf[MAX_REGISTER_SIZE];
4234
4235 /* Make sure the entire registers array is valid. */
4236 switch (remote_protocol_packets[PACKET_P].support)
4237 {
4238 case PACKET_DISABLE:
4239 case PACKET_SUPPORT_UNKNOWN:
4240 /* Make sure all the necessary registers are cached. */
4241 for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++)
4242 if (rsa->regs[i].in_g_packet)
4243 regcache_raw_read (regcache, rsa->regs[i].regnum, buf);
4244 break;
4245 case PACKET_ENABLE:
4246 break;
4247 }
4248 }
4249
4250 /* Helper: Attempt to store REGNUM using the P packet. Return fail IFF
4251 packet was not recognized. */
4252
4253 static int
4254 store_register_using_P (const struct regcache *regcache, struct packet_reg *reg)
4255 {
4256 struct gdbarch *gdbarch = get_regcache_arch (regcache);
4257 struct remote_state *rs = get_remote_state ();
4258 struct remote_arch_state *rsa = get_remote_arch_state ();
4259 /* Try storing a single register. */
4260 char *buf = rs->buf;
4261 gdb_byte regp[MAX_REGISTER_SIZE];
4262 char *p;
4263
4264 if (remote_protocol_packets[PACKET_P].support == PACKET_DISABLE)
4265 return 0;
4266
4267 if (reg->pnum == -1)
4268 return 0;
4269
4270 xsnprintf (buf, get_remote_packet_size (), "P%s=", phex_nz (reg->pnum, 0));
4271 p = buf + strlen (buf);
4272 regcache_raw_collect (regcache, reg->regnum, regp);
4273 bin2hex (regp, p, register_size (gdbarch, reg->regnum));
4274 remote_send (&rs->buf, &rs->buf_size);
4275
4276 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_P]))
4277 {
4278 case PACKET_OK:
4279 return 1;
4280 case PACKET_ERROR:
4281 error (_("Could not write register \"%s\""),
4282 gdbarch_register_name (gdbarch, reg->regnum));
4283 case PACKET_UNKNOWN:
4284 return 0;
4285 default:
4286 internal_error (__FILE__, __LINE__, _("Bad result from packet_ok"));
4287 }
4288 }
4289
4290 /* Store register REGNUM, or all registers if REGNUM == -1, from the
4291 contents of the register cache buffer. FIXME: ignores errors. */
4292
4293 static void
4294 store_registers_using_G (const struct regcache *regcache)
4295 {
4296 struct remote_state *rs = get_remote_state ();
4297 struct remote_arch_state *rsa = get_remote_arch_state ();
4298 gdb_byte *regs;
4299 char *p;
4300
4301 /* Extract all the registers in the regcache copying them into a
4302 local buffer. */
4303 {
4304 int i;
4305 regs = alloca (rsa->sizeof_g_packet);
4306 memset (regs, 0, rsa->sizeof_g_packet);
4307 for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++)
4308 {
4309 struct packet_reg *r = &rsa->regs[i];
4310 if (r->in_g_packet)
4311 regcache_raw_collect (regcache, r->regnum, regs + r->offset);
4312 }
4313 }
4314
4315 /* Command describes registers byte by byte,
4316 each byte encoded as two hex characters. */
4317 p = rs->buf;
4318 *p++ = 'G';
4319 /* remote_prepare_to_store insures that rsa->sizeof_g_packet gets
4320 updated. */
4321 bin2hex (regs, p, rsa->sizeof_g_packet);
4322 remote_send (&rs->buf, &rs->buf_size);
4323 }
4324
4325 /* Store register REGNUM, or all registers if REGNUM == -1, from the contents
4326 of the register cache buffer. FIXME: ignores errors. */
4327
4328 static void
4329 remote_store_registers (struct regcache *regcache, int regnum)
4330 {
4331 struct remote_state *rs = get_remote_state ();
4332 struct remote_arch_state *rsa = get_remote_arch_state ();
4333 int i;
4334
4335 set_general_thread (inferior_ptid);
4336
4337 if (regnum >= 0)
4338 {
4339 struct packet_reg *reg = packet_reg_from_regnum (rsa, regnum);
4340 gdb_assert (reg != NULL);
4341
4342 /* Always prefer to store registers using the 'P' packet if
4343 possible; we often change only a small number of registers.
4344 Sometimes we change a larger number; we'd need help from a
4345 higher layer to know to use 'G'. */
4346 if (store_register_using_P (regcache, reg))
4347 return;
4348
4349 /* For now, don't complain if we have no way to write the
4350 register. GDB loses track of unavailable registers too
4351 easily. Some day, this may be an error. We don't have
4352 any way to read the register, either... */
4353 if (!reg->in_g_packet)
4354 return;
4355
4356 store_registers_using_G (regcache);
4357 return;
4358 }
4359
4360 store_registers_using_G (regcache);
4361
4362 for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++)
4363 if (!rsa->regs[i].in_g_packet)
4364 if (!store_register_using_P (regcache, &rsa->regs[i]))
4365 /* See above for why we do not issue an error here. */
4366 continue;
4367 }
4368 \f
4369
4370 /* Return the number of hex digits in num. */
4371
4372 static int
4373 hexnumlen (ULONGEST num)
4374 {
4375 int i;
4376
4377 for (i = 0; num != 0; i++)
4378 num >>= 4;
4379
4380 return max (i, 1);
4381 }
4382
4383 /* Set BUF to the minimum number of hex digits representing NUM. */
4384
4385 static int
4386 hexnumstr (char *buf, ULONGEST num)
4387 {
4388 int len = hexnumlen (num);
4389 return hexnumnstr (buf, num, len);
4390 }
4391
4392
4393 /* Set BUF to the hex digits representing NUM, padded to WIDTH characters. */
4394
4395 static int
4396 hexnumnstr (char *buf, ULONGEST num, int width)
4397 {
4398 int i;
4399
4400 buf[width] = '\0';
4401
4402 for (i = width - 1; i >= 0; i--)
4403 {
4404 buf[i] = "0123456789abcdef"[(num & 0xf)];
4405 num >>= 4;
4406 }
4407
4408 return width;
4409 }
4410
4411 /* Mask all but the least significant REMOTE_ADDRESS_SIZE bits. */
4412
4413 static CORE_ADDR
4414 remote_address_masked (CORE_ADDR addr)
4415 {
4416 int address_size = remote_address_size;
4417 /* If "remoteaddresssize" was not set, default to target address size. */
4418 if (!address_size)
4419 address_size = gdbarch_addr_bit (target_gdbarch);
4420
4421 if (address_size > 0
4422 && address_size < (sizeof (ULONGEST) * 8))
4423 {
4424 /* Only create a mask when that mask can safely be constructed
4425 in a ULONGEST variable. */
4426 ULONGEST mask = 1;
4427 mask = (mask << address_size) - 1;
4428 addr &= mask;
4429 }
4430 return addr;
4431 }
4432
4433 /* Convert BUFFER, binary data at least LEN bytes long, into escaped
4434 binary data in OUT_BUF. Set *OUT_LEN to the length of the data
4435 encoded in OUT_BUF, and return the number of bytes in OUT_BUF
4436 (which may be more than *OUT_LEN due to escape characters). The
4437 total number of bytes in the output buffer will be at most
4438 OUT_MAXLEN. */
4439
4440 static int
4441 remote_escape_output (const gdb_byte *buffer, int len,
4442 gdb_byte *out_buf, int *out_len,
4443 int out_maxlen)
4444 {
4445 int input_index, output_index;
4446
4447 output_index = 0;
4448 for (input_index = 0; input_index < len; input_index++)
4449 {
4450 gdb_byte b = buffer[input_index];
4451
4452 if (b == '$' || b == '#' || b == '}')
4453 {
4454 /* These must be escaped. */
4455 if (output_index + 2 > out_maxlen)
4456 break;
4457 out_buf[output_index++] = '}';
4458 out_buf[output_index++] = b ^ 0x20;
4459 }
4460 else
4461 {
4462 if (output_index + 1 > out_maxlen)
4463 break;
4464 out_buf[output_index++] = b;
4465 }
4466 }
4467
4468 *out_len = input_index;
4469 return output_index;
4470 }
4471
4472 /* Convert BUFFER, escaped data LEN bytes long, into binary data
4473 in OUT_BUF. Return the number of bytes written to OUT_BUF.
4474 Raise an error if the total number of bytes exceeds OUT_MAXLEN.
4475
4476 This function reverses remote_escape_output. It allows more
4477 escaped characters than that function does, in particular because
4478 '*' must be escaped to avoid the run-length encoding processing
4479 in reading packets. */
4480
4481 static int
4482 remote_unescape_input (const gdb_byte *buffer, int len,
4483 gdb_byte *out_buf, int out_maxlen)
4484 {
4485 int input_index, output_index;
4486 int escaped;
4487
4488 output_index = 0;
4489 escaped = 0;
4490 for (input_index = 0; input_index < len; input_index++)
4491 {
4492 gdb_byte b = buffer[input_index];
4493
4494 if (output_index + 1 > out_maxlen)
4495 {
4496 warning (_("Received too much data from remote target;"
4497 " ignoring overflow."));
4498 return output_index;
4499 }
4500
4501 if (escaped)
4502 {
4503 out_buf[output_index++] = b ^ 0x20;
4504 escaped = 0;
4505 }
4506 else if (b == '}')
4507 escaped = 1;
4508 else
4509 out_buf[output_index++] = b;
4510 }
4511
4512 if (escaped)
4513 error (_("Unmatched escape character in target response."));
4514
4515 return output_index;
4516 }
4517
4518 /* Determine whether the remote target supports binary downloading.
4519 This is accomplished by sending a no-op memory write of zero length
4520 to the target at the specified address. It does not suffice to send
4521 the whole packet, since many stubs strip the eighth bit and
4522 subsequently compute a wrong checksum, which causes real havoc with
4523 remote_write_bytes.
4524
4525 NOTE: This can still lose if the serial line is not eight-bit
4526 clean. In cases like this, the user should clear "remote
4527 X-packet". */
4528
4529 static void
4530 check_binary_download (CORE_ADDR addr)
4531 {
4532 struct remote_state *rs = get_remote_state ();
4533
4534 switch (remote_protocol_packets[PACKET_X].support)
4535 {
4536 case PACKET_DISABLE:
4537 break;
4538 case PACKET_ENABLE:
4539 break;
4540 case PACKET_SUPPORT_UNKNOWN:
4541 {
4542 char *p;
4543
4544 p = rs->buf;
4545 *p++ = 'X';
4546 p += hexnumstr (p, (ULONGEST) addr);
4547 *p++ = ',';
4548 p += hexnumstr (p, (ULONGEST) 0);
4549 *p++ = ':';
4550 *p = '\0';
4551
4552 putpkt_binary (rs->buf, (int) (p - rs->buf));
4553 getpkt (&rs->buf, &rs->buf_size, 0);
4554
4555 if (rs->buf[0] == '\0')
4556 {
4557 if (remote_debug)
4558 fprintf_unfiltered (gdb_stdlog,
4559 "binary downloading NOT suppported by target\n");
4560 remote_protocol_packets[PACKET_X].support = PACKET_DISABLE;
4561 }
4562 else
4563 {
4564 if (remote_debug)
4565 fprintf_unfiltered (gdb_stdlog,
4566 "binary downloading suppported by target\n");
4567 remote_protocol_packets[PACKET_X].support = PACKET_ENABLE;
4568 }
4569 break;
4570 }
4571 }
4572 }
4573
4574 /* Write memory data directly to the remote machine.
4575 This does not inform the data cache; the data cache uses this.
4576 HEADER is the starting part of the packet.
4577 MEMADDR is the address in the remote memory space.
4578 MYADDR is the address of the buffer in our space.
4579 LEN is the number of bytes.
4580 PACKET_FORMAT should be either 'X' or 'M', and indicates if we
4581 should send data as binary ('X'), or hex-encoded ('M').
4582
4583 The function creates packet of the form
4584 <HEADER><ADDRESS>,<LENGTH>:<DATA>
4585
4586 where encoding of <DATA> is termined by PACKET_FORMAT.
4587
4588 If USE_LENGTH is 0, then the <LENGTH> field and the preceding comma
4589 are omitted.
4590
4591 Returns the number of bytes transferred, or 0 (setting errno) for
4592 error. Only transfer a single packet. */
4593
4594 static int
4595 remote_write_bytes_aux (const char *header, CORE_ADDR memaddr,
4596 const gdb_byte *myaddr, int len,
4597 char packet_format, int use_length)
4598 {
4599 struct remote_state *rs = get_remote_state ();
4600 char *p;
4601 char *plen = NULL;
4602 int plenlen = 0;
4603 int todo;
4604 int nr_bytes;
4605 int payload_size;
4606 int payload_length;
4607 int header_length;
4608
4609 if (packet_format != 'X' && packet_format != 'M')
4610 internal_error (__FILE__, __LINE__,
4611 "remote_write_bytes_aux: bad packet format");
4612
4613 if (len <= 0)
4614 return 0;
4615
4616 payload_size = get_memory_write_packet_size ();
4617
4618 /* The packet buffer will be large enough for the payload;
4619 get_memory_packet_size ensures this. */
4620 rs->buf[0] = '\0';
4621
4622 /* Compute the size of the actual payload by subtracting out the
4623 packet header and footer overhead: "$M<memaddr>,<len>:...#nn".
4624 */
4625 payload_size -= strlen ("$,:#NN");
4626 if (!use_length)
4627 /* The comma won't be used. */
4628 payload_size += 1;
4629 header_length = strlen (header);
4630 payload_size -= header_length;
4631 payload_size -= hexnumlen (memaddr);
4632
4633 /* Construct the packet excluding the data: "<header><memaddr>,<len>:". */
4634
4635 strcat (rs->buf, header);
4636 p = rs->buf + strlen (header);
4637
4638 /* Compute a best guess of the number of bytes actually transfered. */
4639 if (packet_format == 'X')
4640 {
4641 /* Best guess at number of bytes that will fit. */
4642 todo = min (len, payload_size);
4643 if (use_length)
4644 payload_size -= hexnumlen (todo);
4645 todo = min (todo, payload_size);
4646 }
4647 else
4648 {
4649 /* Num bytes that will fit. */
4650 todo = min (len, payload_size / 2);
4651 if (use_length)
4652 payload_size -= hexnumlen (todo);
4653 todo = min (todo, payload_size / 2);
4654 }
4655
4656 if (todo <= 0)
4657 internal_error (__FILE__, __LINE__,
4658 _("minumum packet size too small to write data"));
4659
4660 /* If we already need another packet, then try to align the end
4661 of this packet to a useful boundary. */
4662 if (todo > 2 * REMOTE_ALIGN_WRITES && todo < len)
4663 todo = ((memaddr + todo) & ~(REMOTE_ALIGN_WRITES - 1)) - memaddr;
4664
4665 /* Append "<memaddr>". */
4666 memaddr = remote_address_masked (memaddr);
4667 p += hexnumstr (p, (ULONGEST) memaddr);
4668
4669 if (use_length)
4670 {
4671 /* Append ",". */
4672 *p++ = ',';
4673
4674 /* Append <len>. Retain the location/size of <len>. It may need to
4675 be adjusted once the packet body has been created. */
4676 plen = p;
4677 plenlen = hexnumstr (p, (ULONGEST) todo);
4678 p += plenlen;
4679 }
4680
4681 /* Append ":". */
4682 *p++ = ':';
4683 *p = '\0';
4684
4685 /* Append the packet body. */
4686 if (packet_format == 'X')
4687 {
4688 /* Binary mode. Send target system values byte by byte, in
4689 increasing byte addresses. Only escape certain critical
4690 characters. */
4691 payload_length = remote_escape_output (myaddr, todo, p, &nr_bytes,
4692 payload_size);
4693
4694 /* If not all TODO bytes fit, then we'll need another packet. Make
4695 a second try to keep the end of the packet aligned. Don't do
4696 this if the packet is tiny. */
4697 if (nr_bytes < todo && nr_bytes > 2 * REMOTE_ALIGN_WRITES)
4698 {
4699 int new_nr_bytes;
4700
4701 new_nr_bytes = (((memaddr + nr_bytes) & ~(REMOTE_ALIGN_WRITES - 1))
4702 - memaddr);
4703 if (new_nr_bytes != nr_bytes)
4704 payload_length = remote_escape_output (myaddr, new_nr_bytes,
4705 p, &nr_bytes,
4706 payload_size);
4707 }
4708
4709 p += payload_length;
4710 if (use_length && nr_bytes < todo)
4711 {
4712 /* Escape chars have filled up the buffer prematurely,
4713 and we have actually sent fewer bytes than planned.
4714 Fix-up the length field of the packet. Use the same
4715 number of characters as before. */
4716 plen += hexnumnstr (plen, (ULONGEST) nr_bytes, plenlen);
4717 *plen = ':'; /* overwrite \0 from hexnumnstr() */
4718 }
4719 }
4720 else
4721 {
4722 /* Normal mode: Send target system values byte by byte, in
4723 increasing byte addresses. Each byte is encoded as a two hex
4724 value. */
4725 nr_bytes = bin2hex (myaddr, p, todo);
4726 p += 2 * nr_bytes;
4727 }
4728
4729 putpkt_binary (rs->buf, (int) (p - rs->buf));
4730 getpkt (&rs->buf, &rs->buf_size, 0);
4731
4732 if (rs->buf[0] == 'E')
4733 {
4734 /* There is no correspondance between what the remote protocol
4735 uses for errors and errno codes. We would like a cleaner way
4736 of representing errors (big enough to include errno codes,
4737 bfd_error codes, and others). But for now just return EIO. */
4738 errno = EIO;
4739 return 0;
4740 }
4741
4742 /* Return NR_BYTES, not TODO, in case escape chars caused us to send
4743 fewer bytes than we'd planned. */
4744 return nr_bytes;
4745 }
4746
4747 /* Write memory data directly to the remote machine.
4748 This does not inform the data cache; the data cache uses this.
4749 MEMADDR is the address in the remote memory space.
4750 MYADDR is the address of the buffer in our space.
4751 LEN is the number of bytes.
4752
4753 Returns number of bytes transferred, or 0 (setting errno) for
4754 error. Only transfer a single packet. */
4755
4756 int
4757 remote_write_bytes (CORE_ADDR memaddr, const gdb_byte *myaddr, int len)
4758 {
4759 char *packet_format = 0;
4760
4761 /* Check whether the target supports binary download. */
4762 check_binary_download (memaddr);
4763
4764 switch (remote_protocol_packets[PACKET_X].support)
4765 {
4766 case PACKET_ENABLE:
4767 packet_format = "X";
4768 break;
4769 case PACKET_DISABLE:
4770 packet_format = "M";
4771 break;
4772 case PACKET_SUPPORT_UNKNOWN:
4773 internal_error (__FILE__, __LINE__,
4774 _("remote_write_bytes: bad internal state"));
4775 default:
4776 internal_error (__FILE__, __LINE__, _("bad switch"));
4777 }
4778
4779 return remote_write_bytes_aux (packet_format,
4780 memaddr, myaddr, len, packet_format[0], 1);
4781 }
4782
4783 /* Read memory data directly from the remote machine.
4784 This does not use the data cache; the data cache uses this.
4785 MEMADDR is the address in the remote memory space.
4786 MYADDR is the address of the buffer in our space.
4787 LEN is the number of bytes.
4788
4789 Returns number of bytes transferred, or 0 for error. */
4790
4791 /* NOTE: cagney/1999-10-18: This function (and its siblings in other
4792 remote targets) shouldn't attempt to read the entire buffer.
4793 Instead it should read a single packet worth of data and then
4794 return the byte size of that packet to the caller. The caller (its
4795 caller and its callers caller ;-) already contains code for
4796 handling partial reads. */
4797
4798 int
4799 remote_read_bytes (CORE_ADDR memaddr, gdb_byte *myaddr, int len)
4800 {
4801 struct remote_state *rs = get_remote_state ();
4802 int max_buf_size; /* Max size of packet output buffer. */
4803 int origlen;
4804
4805 if (len <= 0)
4806 return 0;
4807
4808 max_buf_size = get_memory_read_packet_size ();
4809 /* The packet buffer will be large enough for the payload;
4810 get_memory_packet_size ensures this. */
4811
4812 origlen = len;
4813 while (len > 0)
4814 {
4815 char *p;
4816 int todo;
4817 int i;
4818
4819 todo = min (len, max_buf_size / 2); /* num bytes that will fit */
4820
4821 /* construct "m"<memaddr>","<len>" */
4822 /* sprintf (rs->buf, "m%lx,%x", (unsigned long) memaddr, todo); */
4823 memaddr = remote_address_masked (memaddr);
4824 p = rs->buf;
4825 *p++ = 'm';
4826 p += hexnumstr (p, (ULONGEST) memaddr);
4827 *p++ = ',';
4828 p += hexnumstr (p, (ULONGEST) todo);
4829 *p = '\0';
4830
4831 putpkt (rs->buf);
4832 getpkt (&rs->buf, &rs->buf_size, 0);
4833
4834 if (rs->buf[0] == 'E'
4835 && isxdigit (rs->buf[1]) && isxdigit (rs->buf[2])
4836 && rs->buf[3] == '\0')
4837 {
4838 /* There is no correspondance between what the remote
4839 protocol uses for errors and errno codes. We would like
4840 a cleaner way of representing errors (big enough to
4841 include errno codes, bfd_error codes, and others). But
4842 for now just return EIO. */
4843 errno = EIO;
4844 return 0;
4845 }
4846
4847 /* Reply describes memory byte by byte,
4848 each byte encoded as two hex characters. */
4849
4850 p = rs->buf;
4851 if ((i = hex2bin (p, myaddr, todo)) < todo)
4852 {
4853 /* Reply is short. This means that we were able to read
4854 only part of what we wanted to. */
4855 return i + (origlen - len);
4856 }
4857 myaddr += todo;
4858 memaddr += todo;
4859 len -= todo;
4860 }
4861 return origlen;
4862 }
4863 \f
4864 /* Read or write LEN bytes from inferior memory at MEMADDR,
4865 transferring to or from debugger address BUFFER. Write to inferior
4866 if SHOULD_WRITE is nonzero. Returns length of data written or
4867 read; 0 for error. TARGET is unused. */
4868
4869 static int
4870 remote_xfer_memory (CORE_ADDR mem_addr, gdb_byte *buffer, int mem_len,
4871 int should_write, struct mem_attrib *attrib,
4872 struct target_ops *target)
4873 {
4874 int res;
4875
4876 set_general_thread (inferior_ptid);
4877
4878 if (should_write)
4879 res = remote_write_bytes (mem_addr, buffer, mem_len);
4880 else
4881 res = remote_read_bytes (mem_addr, buffer, mem_len);
4882
4883 return res;
4884 }
4885
4886 /* Sends a packet with content determined by the printf format string
4887 FORMAT and the remaining arguments, then gets the reply. Returns
4888 whether the packet was a success, a failure, or unknown. */
4889
4890 enum packet_result
4891 remote_send_printf (const char *format, ...)
4892 {
4893 struct remote_state *rs = get_remote_state ();
4894 int max_size = get_remote_packet_size ();
4895
4896 va_list ap;
4897 va_start (ap, format);
4898
4899 rs->buf[0] = '\0';
4900 if (vsnprintf (rs->buf, max_size, format, ap) >= max_size)
4901 internal_error (__FILE__, __LINE__, "Too long remote packet.");
4902
4903 if (putpkt (rs->buf) < 0)
4904 error (_("Communication problem with target."));
4905
4906 rs->buf[0] = '\0';
4907 getpkt (&rs->buf, &rs->buf_size, 0);
4908
4909 return packet_check_result (rs->buf);
4910 }
4911
4912 static void
4913 restore_remote_timeout (void *p)
4914 {
4915 int value = *(int *)p;
4916 remote_timeout = value;
4917 }
4918
4919 /* Flash writing can take quite some time. We'll set
4920 effectively infinite timeout for flash operations.
4921 In future, we'll need to decide on a better approach. */
4922 static const int remote_flash_timeout = 1000;
4923
4924 static void
4925 remote_flash_erase (struct target_ops *ops,
4926 ULONGEST address, LONGEST length)
4927 {
4928 int saved_remote_timeout = remote_timeout;
4929 enum packet_result ret;
4930
4931 struct cleanup *back_to = make_cleanup (restore_remote_timeout,
4932 &saved_remote_timeout);
4933 remote_timeout = remote_flash_timeout;
4934
4935 ret = remote_send_printf ("vFlashErase:%s,%s",
4936 paddr (address),
4937 phex (length, 4));
4938 switch (ret)
4939 {
4940 case PACKET_UNKNOWN:
4941 error (_("Remote target does not support flash erase"));
4942 case PACKET_ERROR:
4943 error (_("Error erasing flash with vFlashErase packet"));
4944 default:
4945 break;
4946 }
4947
4948 do_cleanups (back_to);
4949 }
4950
4951 static LONGEST
4952 remote_flash_write (struct target_ops *ops,
4953 ULONGEST address, LONGEST length,
4954 const gdb_byte *data)
4955 {
4956 int saved_remote_timeout = remote_timeout;
4957 int ret;
4958 struct cleanup *back_to = make_cleanup (restore_remote_timeout,
4959 &saved_remote_timeout);
4960
4961 remote_timeout = remote_flash_timeout;
4962 ret = remote_write_bytes_aux ("vFlashWrite:", address, data, length, 'X', 0);
4963 do_cleanups (back_to);
4964
4965 return ret;
4966 }
4967
4968 static void
4969 remote_flash_done (struct target_ops *ops)
4970 {
4971 int saved_remote_timeout = remote_timeout;
4972 int ret;
4973 struct cleanup *back_to = make_cleanup (restore_remote_timeout,
4974 &saved_remote_timeout);
4975
4976 remote_timeout = remote_flash_timeout;
4977 ret = remote_send_printf ("vFlashDone");
4978 do_cleanups (back_to);
4979
4980 switch (ret)
4981 {
4982 case PACKET_UNKNOWN:
4983 error (_("Remote target does not support vFlashDone"));
4984 case PACKET_ERROR:
4985 error (_("Error finishing flash operation"));
4986 default:
4987 break;
4988 }
4989 }
4990
4991 static void
4992 remote_files_info (struct target_ops *ignore)
4993 {
4994 puts_filtered ("Debugging a target over a serial line.\n");
4995 }
4996 \f
4997 /* Stuff for dealing with the packets which are part of this protocol.
4998 See comment at top of file for details. */
4999
5000 /* Read a single character from the remote end. */
5001
5002 static int
5003 readchar (int timeout)
5004 {
5005 int ch;
5006
5007 ch = serial_readchar (remote_desc, timeout);
5008
5009 if (ch >= 0)
5010 return ch;
5011
5012 switch ((enum serial_rc) ch)
5013 {
5014 case SERIAL_EOF:
5015 pop_target ();
5016 error (_("Remote connection closed"));
5017 /* no return */
5018 case SERIAL_ERROR:
5019 perror_with_name (_("Remote communication error"));
5020 /* no return */
5021 case SERIAL_TIMEOUT:
5022 break;
5023 }
5024 return ch;
5025 }
5026
5027 /* Send the command in *BUF to the remote machine, and read the reply
5028 into *BUF. Report an error if we get an error reply. Resize
5029 *BUF using xrealloc if necessary to hold the result, and update
5030 *SIZEOF_BUF. */
5031
5032 static void
5033 remote_send (char **buf,
5034 long *sizeof_buf)
5035 {
5036 putpkt (*buf);
5037 getpkt (buf, sizeof_buf, 0);
5038
5039 if ((*buf)[0] == 'E')
5040 error (_("Remote failure reply: %s"), *buf);
5041 }
5042
5043 /* Display a null-terminated packet on stdout, for debugging, using C
5044 string notation. */
5045
5046 static void
5047 print_packet (char *buf)
5048 {
5049 puts_filtered ("\"");
5050 fputstr_filtered (buf, '"', gdb_stdout);
5051 puts_filtered ("\"");
5052 }
5053
5054 int
5055 putpkt (char *buf)
5056 {
5057 return putpkt_binary (buf, strlen (buf));
5058 }
5059
5060 /* Send a packet to the remote machine, with error checking. The data
5061 of the packet is in BUF. The string in BUF can be at most
5062 get_remote_packet_size () - 5 to account for the $, # and checksum,
5063 and for a possible /0 if we are debugging (remote_debug) and want
5064 to print the sent packet as a string. */
5065
5066 static int
5067 putpkt_binary (char *buf, int cnt)
5068 {
5069 struct remote_state *rs = get_remote_state ();
5070 int i;
5071 unsigned char csum = 0;
5072 char *buf2 = alloca (cnt + 6);
5073
5074 int ch;
5075 int tcount = 0;
5076 char *p;
5077
5078 /* Catch cases like trying to read memory or listing threads while
5079 we're waiting for a stop reply. The remote server wouldn't be
5080 ready to handle this request, so we'd hang and timeout. We don't
5081 have to worry about this in synchronous mode, because in that
5082 case it's not possible to issue a command while the target is
5083 running. */
5084 if (target_can_async_p () && rs->waiting_for_stop_reply)
5085 error (_("Cannot execute this command while the target is running."));
5086
5087 /* We're sending out a new packet. Make sure we don't look at a
5088 stale cached response. */
5089 rs->cached_wait_status = 0;
5090
5091 /* Copy the packet into buffer BUF2, encapsulating it
5092 and giving it a checksum. */
5093
5094 p = buf2;
5095 *p++ = '$';
5096
5097 for (i = 0; i < cnt; i++)
5098 {
5099 csum += buf[i];
5100 *p++ = buf[i];
5101 }
5102 *p++ = '#';
5103 *p++ = tohex ((csum >> 4) & 0xf);
5104 *p++ = tohex (csum & 0xf);
5105
5106 /* Send it over and over until we get a positive ack. */
5107
5108 while (1)
5109 {
5110 int started_error_output = 0;
5111
5112 if (remote_debug)
5113 {
5114 *p = '\0';
5115 fprintf_unfiltered (gdb_stdlog, "Sending packet: ");
5116 fputstrn_unfiltered (buf2, p - buf2, 0, gdb_stdlog);
5117 fprintf_unfiltered (gdb_stdlog, "...");
5118 gdb_flush (gdb_stdlog);
5119 }
5120 if (serial_write (remote_desc, buf2, p - buf2))
5121 perror_with_name (_("putpkt: write failed"));
5122
5123 /* If this is a no acks version of the remote protocol, send the
5124 packet and move on. */
5125 if (rs->noack_mode)
5126 break;
5127
5128 /* Read until either a timeout occurs (-2) or '+' is read. */
5129 while (1)
5130 {
5131 ch = readchar (remote_timeout);
5132
5133 if (remote_debug)
5134 {
5135 switch (ch)
5136 {
5137 case '+':
5138 case '-':
5139 case SERIAL_TIMEOUT:
5140 case '$':
5141 if (started_error_output)
5142 {
5143 putchar_unfiltered ('\n');
5144 started_error_output = 0;
5145 }
5146 }
5147 }
5148
5149 switch (ch)
5150 {
5151 case '+':
5152 if (remote_debug)
5153 fprintf_unfiltered (gdb_stdlog, "Ack\n");
5154 return 1;
5155 case '-':
5156 if (remote_debug)
5157 fprintf_unfiltered (gdb_stdlog, "Nak\n");
5158 case SERIAL_TIMEOUT:
5159 tcount++;
5160 if (tcount > 3)
5161 return 0;
5162 break; /* Retransmit buffer. */
5163 case '$':
5164 {
5165 if (remote_debug)
5166 fprintf_unfiltered (gdb_stdlog,
5167 "Packet instead of Ack, ignoring it\n");
5168 /* It's probably an old response sent because an ACK
5169 was lost. Gobble up the packet and ack it so it
5170 doesn't get retransmitted when we resend this
5171 packet. */
5172 skip_frame ();
5173 serial_write (remote_desc, "+", 1);
5174 continue; /* Now, go look for +. */
5175 }
5176 default:
5177 if (remote_debug)
5178 {
5179 if (!started_error_output)
5180 {
5181 started_error_output = 1;
5182 fprintf_unfiltered (gdb_stdlog, "putpkt: Junk: ");
5183 }
5184 fputc_unfiltered (ch & 0177, gdb_stdlog);
5185 }
5186 continue;
5187 }
5188 break; /* Here to retransmit. */
5189 }
5190
5191 #if 0
5192 /* This is wrong. If doing a long backtrace, the user should be
5193 able to get out next time we call QUIT, without anything as
5194 violent as interrupt_query. If we want to provide a way out of
5195 here without getting to the next QUIT, it should be based on
5196 hitting ^C twice as in remote_wait. */
5197 if (quit_flag)
5198 {
5199 quit_flag = 0;
5200 interrupt_query ();
5201 }
5202 #endif
5203 }
5204 return 0;
5205 }
5206
5207 /* Come here after finding the start of a frame when we expected an
5208 ack. Do our best to discard the rest of this packet. */
5209
5210 static void
5211 skip_frame (void)
5212 {
5213 int c;
5214
5215 while (1)
5216 {
5217 c = readchar (remote_timeout);
5218 switch (c)
5219 {
5220 case SERIAL_TIMEOUT:
5221 /* Nothing we can do. */
5222 return;
5223 case '#':
5224 /* Discard the two bytes of checksum and stop. */
5225 c = readchar (remote_timeout);
5226 if (c >= 0)
5227 c = readchar (remote_timeout);
5228
5229 return;
5230 case '*': /* Run length encoding. */
5231 /* Discard the repeat count. */
5232 c = readchar (remote_timeout);
5233 if (c < 0)
5234 return;
5235 break;
5236 default:
5237 /* A regular character. */
5238 break;
5239 }
5240 }
5241 }
5242
5243 /* Come here after finding the start of the frame. Collect the rest
5244 into *BUF, verifying the checksum, length, and handling run-length
5245 compression. NUL terminate the buffer. If there is not enough room,
5246 expand *BUF using xrealloc.
5247
5248 Returns -1 on error, number of characters in buffer (ignoring the
5249 trailing NULL) on success. (could be extended to return one of the
5250 SERIAL status indications). */
5251
5252 static long
5253 read_frame (char **buf_p,
5254 long *sizeof_buf)
5255 {
5256 unsigned char csum;
5257 long bc;
5258 int c;
5259 char *buf = *buf_p;
5260 struct remote_state *rs = get_remote_state ();
5261
5262 csum = 0;
5263 bc = 0;
5264
5265 while (1)
5266 {
5267 c = readchar (remote_timeout);
5268 switch (c)
5269 {
5270 case SERIAL_TIMEOUT:
5271 if (remote_debug)
5272 fputs_filtered ("Timeout in mid-packet, retrying\n", gdb_stdlog);
5273 return -1;
5274 case '$':
5275 if (remote_debug)
5276 fputs_filtered ("Saw new packet start in middle of old one\n",
5277 gdb_stdlog);
5278 return -1; /* Start a new packet, count retries. */
5279 case '#':
5280 {
5281 unsigned char pktcsum;
5282 int check_0 = 0;
5283 int check_1 = 0;
5284
5285 buf[bc] = '\0';
5286
5287 check_0 = readchar (remote_timeout);
5288 if (check_0 >= 0)
5289 check_1 = readchar (remote_timeout);
5290
5291 if (check_0 == SERIAL_TIMEOUT || check_1 == SERIAL_TIMEOUT)
5292 {
5293 if (remote_debug)
5294 fputs_filtered ("Timeout in checksum, retrying\n",
5295 gdb_stdlog);
5296 return -1;
5297 }
5298 else if (check_0 < 0 || check_1 < 0)
5299 {
5300 if (remote_debug)
5301 fputs_filtered ("Communication error in checksum\n",
5302 gdb_stdlog);
5303 return -1;
5304 }
5305
5306 /* Don't recompute the checksum; with no ack packets we
5307 don't have any way to indicate a packet retransmission
5308 is necessary. */
5309 if (rs->noack_mode)
5310 return bc;
5311
5312 pktcsum = (fromhex (check_0) << 4) | fromhex (check_1);
5313 if (csum == pktcsum)
5314 return bc;
5315
5316 if (remote_debug)
5317 {
5318 fprintf_filtered (gdb_stdlog,
5319 "Bad checksum, sentsum=0x%x, csum=0x%x, buf=",
5320 pktcsum, csum);
5321 fputstrn_filtered (buf, bc, 0, gdb_stdlog);
5322 fputs_filtered ("\n", gdb_stdlog);
5323 }
5324 /* Number of characters in buffer ignoring trailing
5325 NULL. */
5326 return -1;
5327 }
5328 case '*': /* Run length encoding. */
5329 {
5330 int repeat;
5331 csum += c;
5332
5333 c = readchar (remote_timeout);
5334 csum += c;
5335 repeat = c - ' ' + 3; /* Compute repeat count. */
5336
5337 /* The character before ``*'' is repeated. */
5338
5339 if (repeat > 0 && repeat <= 255 && bc > 0)
5340 {
5341 if (bc + repeat - 1 >= *sizeof_buf - 1)
5342 {
5343 /* Make some more room in the buffer. */
5344 *sizeof_buf += repeat;
5345 *buf_p = xrealloc (*buf_p, *sizeof_buf);
5346 buf = *buf_p;
5347 }
5348
5349 memset (&buf[bc], buf[bc - 1], repeat);
5350 bc += repeat;
5351 continue;
5352 }
5353
5354 buf[bc] = '\0';
5355 printf_filtered (_("Invalid run length encoding: %s\n"), buf);
5356 return -1;
5357 }
5358 default:
5359 if (bc >= *sizeof_buf - 1)
5360 {
5361 /* Make some more room in the buffer. */
5362 *sizeof_buf *= 2;
5363 *buf_p = xrealloc (*buf_p, *sizeof_buf);
5364 buf = *buf_p;
5365 }
5366
5367 buf[bc++] = c;
5368 csum += c;
5369 continue;
5370 }
5371 }
5372 }
5373
5374 /* Read a packet from the remote machine, with error checking, and
5375 store it in *BUF. Resize *BUF using xrealloc if necessary to hold
5376 the result, and update *SIZEOF_BUF. If FOREVER, wait forever
5377 rather than timing out; this is used (in synchronous mode) to wait
5378 for a target that is is executing user code to stop. */
5379 /* FIXME: ezannoni 2000-02-01 this wrapper is necessary so that we
5380 don't have to change all the calls to getpkt to deal with the
5381 return value, because at the moment I don't know what the right
5382 thing to do it for those. */
5383 void
5384 getpkt (char **buf,
5385 long *sizeof_buf,
5386 int forever)
5387 {
5388 int timed_out;
5389
5390 timed_out = getpkt_sane (buf, sizeof_buf, forever);
5391 }
5392
5393
5394 /* Read a packet from the remote machine, with error checking, and
5395 store it in *BUF. Resize *BUF using xrealloc if necessary to hold
5396 the result, and update *SIZEOF_BUF. If FOREVER, wait forever
5397 rather than timing out; this is used (in synchronous mode) to wait
5398 for a target that is is executing user code to stop. If FOREVER ==
5399 0, this function is allowed to time out gracefully and return an
5400 indication of this to the caller. Otherwise return the number
5401 of bytes read. */
5402 static int
5403 getpkt_sane (char **buf, long *sizeof_buf, int forever)
5404 {
5405 struct remote_state *rs = get_remote_state ();
5406 int c;
5407 int tries;
5408 int timeout;
5409 int val;
5410
5411 /* We're reading a new response. Make sure we don't look at a
5412 previously cached response. */
5413 rs->cached_wait_status = 0;
5414
5415 strcpy (*buf, "timeout");
5416
5417 if (forever)
5418 {
5419 timeout = watchdog > 0 ? watchdog : -1;
5420 }
5421
5422 else
5423 timeout = remote_timeout;
5424
5425 #define MAX_TRIES 3
5426
5427 for (tries = 1; tries <= MAX_TRIES; tries++)
5428 {
5429 /* This can loop forever if the remote side sends us characters
5430 continuously, but if it pauses, we'll get a zero from
5431 readchar because of timeout. Then we'll count that as a
5432 retry. */
5433
5434 /* Note that we will only wait forever prior to the start of a
5435 packet. After that, we expect characters to arrive at a
5436 brisk pace. They should show up within remote_timeout
5437 intervals. */
5438
5439 do
5440 {
5441 c = readchar (timeout);
5442
5443 if (c == SERIAL_TIMEOUT)
5444 {
5445 if (forever) /* Watchdog went off? Kill the target. */
5446 {
5447 QUIT;
5448 pop_target ();
5449 error (_("Watchdog timeout has expired. Target detached."));
5450 }
5451 if (remote_debug)
5452 fputs_filtered ("Timed out.\n", gdb_stdlog);
5453 goto retry;
5454 }
5455 }
5456 while (c != '$');
5457
5458 /* We've found the start of a packet, now collect the data. */
5459
5460 val = read_frame (buf, sizeof_buf);
5461
5462 if (val >= 0)
5463 {
5464 if (remote_debug)
5465 {
5466 fprintf_unfiltered (gdb_stdlog, "Packet received: ");
5467 fputstrn_unfiltered (*buf, val, 0, gdb_stdlog);
5468 fprintf_unfiltered (gdb_stdlog, "\n");
5469 }
5470
5471 /* Skip the ack char if we're in no-ack mode. */
5472 if (!rs->noack_mode)
5473 serial_write (remote_desc, "+", 1);
5474 return val;
5475 }
5476
5477 /* Try the whole thing again. */
5478 retry:
5479 /* Skip the nack char if we're in no-ack mode. */
5480 if (!rs->noack_mode)
5481 serial_write (remote_desc, "-", 1);
5482 }
5483
5484 /* We have tried hard enough, and just can't receive the packet.
5485 Give up. */
5486
5487 printf_unfiltered (_("Ignoring packet error, continuing...\n"));
5488
5489 /* Skip the ack char if we're in no-ack mode. */
5490 if (!rs->noack_mode)
5491 serial_write (remote_desc, "+", 1);
5492 return -1;
5493 }
5494 \f
5495 static void
5496 remote_kill (void)
5497 {
5498 /* Use catch_errors so the user can quit from gdb even when we
5499 aren't on speaking terms with the remote system. */
5500 catch_errors ((catch_errors_ftype *) putpkt, "k", "", RETURN_MASK_ERROR);
5501
5502 /* Don't wait for it to die. I'm not really sure it matters whether
5503 we do or not. For the existing stubs, kill is a noop. */
5504 target_mourn_inferior ();
5505 }
5506
5507 static int
5508 remote_vkill (int pid, struct remote_state *rs)
5509 {
5510 if (remote_protocol_packets[PACKET_vKill].support == PACKET_DISABLE)
5511 return -1;
5512
5513 /* Tell the remote target to detach. */
5514 sprintf (rs->buf, "vKill;%x", pid);
5515 putpkt (rs->buf);
5516 getpkt (&rs->buf, &rs->buf_size, 0);
5517
5518 if (packet_ok (rs->buf,
5519 &remote_protocol_packets[PACKET_vKill]) == PACKET_OK)
5520 return 0;
5521 else if (remote_protocol_packets[PACKET_vKill].support == PACKET_DISABLE)
5522 return -1;
5523 else
5524 return 1;
5525 }
5526
5527 static void
5528 extended_remote_kill (void)
5529 {
5530 int res;
5531 int pid = ptid_get_pid (inferior_ptid);
5532 struct remote_state *rs = get_remote_state ();
5533
5534 res = remote_vkill (pid, rs);
5535 if (res == -1 && !remote_multi_process_p (rs))
5536 {
5537 /* Don't try 'k' on a multi-process aware stub -- it has no way
5538 to specify the pid. */
5539
5540 putpkt ("k");
5541 #if 0
5542 getpkt (&rs->buf, &rs->buf_size, 0);
5543 if (rs->buf[0] != 'O' || rs->buf[0] != 'K')
5544 res = 1;
5545 #else
5546 /* Don't wait for it to die. I'm not really sure it matters whether
5547 we do or not. For the existing stubs, kill is a noop. */
5548 res = 0;
5549 #endif
5550 }
5551
5552 if (res != 0)
5553 error (_("Can't kill process"));
5554
5555 delete_inferior (pid);
5556 target_mourn_inferior ();
5557 }
5558
5559 static void
5560 remote_mourn (void)
5561 {
5562 remote_mourn_1 (&remote_ops);
5563 }
5564
5565 /* Worker function for remote_mourn. */
5566 static void
5567 remote_mourn_1 (struct target_ops *target)
5568 {
5569 unpush_target (target);
5570
5571 /* remote_close takes care of cleaning up. */
5572 }
5573
5574 static int
5575 select_new_thread_callback (struct thread_info *th, void* data)
5576 {
5577 if (!ptid_equal (th->ptid, minus_one_ptid))
5578 {
5579 switch_to_thread (th->ptid);
5580 printf_filtered (_("[Switching to %s]\n"),
5581 target_pid_to_str (inferior_ptid));
5582 return 1;
5583 }
5584 return 0;
5585 }
5586
5587 static void
5588 extended_remote_mourn_1 (struct target_ops *target)
5589 {
5590 struct remote_state *rs = get_remote_state ();
5591
5592 /* In case we got here due to an error, but we're going to stay
5593 connected. */
5594 rs->waiting_for_stop_reply = 0;
5595
5596 /* Unlike "target remote", we do not want to unpush the target; then
5597 the next time the user says "run", we won't be connected. */
5598
5599 if (have_inferiors ())
5600 {
5601 extern void nullify_last_target_wait_ptid ();
5602 /* Multi-process case. The current process has exited, but
5603 there are other processes to debug. Switch to the first
5604 available. */
5605 iterate_over_threads (select_new_thread_callback, NULL);
5606 nullify_last_target_wait_ptid ();
5607 }
5608 else
5609 {
5610 struct remote_state *rs = get_remote_state ();
5611
5612 /* Call common code to mark the inferior as not running. */
5613 generic_mourn_inferior ();
5614 if (!remote_multi_process_p (rs))
5615 {
5616 /* Check whether the target is running now - some remote stubs
5617 automatically restart after kill. */
5618 putpkt ("?");
5619 getpkt (&rs->buf, &rs->buf_size, 0);
5620
5621 if (rs->buf[0] == 'S' || rs->buf[0] == 'T')
5622 {
5623 /* Assume that the target has been restarted. Set inferior_ptid
5624 so that bits of core GDB realizes there's something here, e.g.,
5625 so that the user can say "kill" again. */
5626 inferior_ptid = magic_null_ptid;
5627 }
5628 else
5629 {
5630 /* Mark this (still pushed) target as not executable until we
5631 restart it. */
5632 target_mark_exited (target);
5633 }
5634 }
5635 else
5636 /* Always remove execution if this was the last process. */
5637 target_mark_exited (target);
5638 }
5639 }
5640
5641 static void
5642 extended_remote_mourn (void)
5643 {
5644 extended_remote_mourn_1 (&extended_remote_ops);
5645 }
5646
5647 static int
5648 extended_remote_run (char *args)
5649 {
5650 struct remote_state *rs = get_remote_state ();
5651 char *p;
5652 int len;
5653
5654 /* If the user has disabled vRun support, or we have detected that
5655 support is not available, do not try it. */
5656 if (remote_protocol_packets[PACKET_vRun].support == PACKET_DISABLE)
5657 return -1;
5658
5659 strcpy (rs->buf, "vRun;");
5660 len = strlen (rs->buf);
5661
5662 if (strlen (remote_exec_file) * 2 + len >= get_remote_packet_size ())
5663 error (_("Remote file name too long for run packet"));
5664 len += 2 * bin2hex ((gdb_byte *) remote_exec_file, rs->buf + len, 0);
5665
5666 gdb_assert (args != NULL);
5667 if (*args)
5668 {
5669 struct cleanup *back_to;
5670 int i;
5671 char **argv;
5672
5673 argv = gdb_buildargv (args);
5674 back_to = make_cleanup ((void (*) (void *)) freeargv, argv);
5675 for (i = 0; argv[i] != NULL; i++)
5676 {
5677 if (strlen (argv[i]) * 2 + 1 + len >= get_remote_packet_size ())
5678 error (_("Argument list too long for run packet"));
5679 rs->buf[len++] = ';';
5680 len += 2 * bin2hex ((gdb_byte *) argv[i], rs->buf + len, 0);
5681 }
5682 do_cleanups (back_to);
5683 }
5684
5685 rs->buf[len++] = '\0';
5686
5687 putpkt (rs->buf);
5688 getpkt (&rs->buf, &rs->buf_size, 0);
5689
5690 if (packet_ok (rs->buf, &remote_protocol_packets[PACKET_vRun]) == PACKET_OK)
5691 {
5692 /* We have a wait response; we don't need it, though. All is well. */
5693 return 0;
5694 }
5695 else if (remote_protocol_packets[PACKET_vRun].support == PACKET_DISABLE)
5696 /* It wasn't disabled before, but it is now. */
5697 return -1;
5698 else
5699 {
5700 if (remote_exec_file[0] == '\0')
5701 error (_("Running the default executable on the remote target failed; "
5702 "try \"set remote exec-file\"?"));
5703 else
5704 error (_("Running \"%s\" on the remote target failed"),
5705 remote_exec_file);
5706 }
5707 }
5708
5709 /* In the extended protocol we want to be able to do things like
5710 "run" and have them basically work as expected. So we need
5711 a special create_inferior function. We support changing the
5712 executable file and the command line arguments, but not the
5713 environment. */
5714
5715 static void
5716 extended_remote_create_inferior_1 (char *exec_file, char *args,
5717 char **env, int from_tty)
5718 {
5719 /* If running asynchronously, register the target file descriptor
5720 with the event loop. */
5721 if (target_can_async_p ())
5722 target_async (inferior_event_handler, 0);
5723
5724 /* Now restart the remote server. */
5725 if (extended_remote_run (args) == -1)
5726 {
5727 /* vRun was not supported. Fail if we need it to do what the
5728 user requested. */
5729 if (remote_exec_file[0])
5730 error (_("Remote target does not support \"set remote exec-file\""));
5731 if (args[0])
5732 error (_("Remote target does not support \"set args\" or run <ARGS>"));
5733
5734 /* Fall back to "R". */
5735 extended_remote_restart ();
5736 }
5737
5738 /* Clean up from the last time we ran, before we mark the target
5739 running again. This will mark breakpoints uninserted, and
5740 get_offsets may insert breakpoints. */
5741 init_thread_list ();
5742 init_wait_for_inferior ();
5743
5744 /* Now mark the inferior as running before we do anything else. */
5745 inferior_ptid = magic_null_ptid;
5746
5747 add_inferior (ptid_get_pid (inferior_ptid));
5748 add_thread_silent (inferior_ptid);
5749
5750 target_mark_running (&extended_remote_ops);
5751
5752 /* Get updated offsets, if the stub uses qOffsets. */
5753 get_offsets ();
5754 }
5755
5756 static void
5757 extended_remote_create_inferior (char *exec_file, char *args,
5758 char **env, int from_tty)
5759 {
5760 extended_remote_create_inferior_1 (exec_file, args, env, from_tty);
5761 }
5762 \f
5763
5764 /* Insert a breakpoint. On targets that have software breakpoint
5765 support, we ask the remote target to do the work; on targets
5766 which don't, we insert a traditional memory breakpoint. */
5767
5768 static int
5769 remote_insert_breakpoint (struct bp_target_info *bp_tgt)
5770 {
5771 /* Try the "Z" s/w breakpoint packet if it is not already disabled.
5772 If it succeeds, then set the support to PACKET_ENABLE. If it
5773 fails, and the user has explicitly requested the Z support then
5774 report an error, otherwise, mark it disabled and go on. */
5775
5776 if (remote_protocol_packets[PACKET_Z0].support != PACKET_DISABLE)
5777 {
5778 CORE_ADDR addr = bp_tgt->placed_address;
5779 struct remote_state *rs;
5780 char *p;
5781 int bpsize;
5782
5783 gdbarch_breakpoint_from_pc (target_gdbarch, &addr, &bpsize);
5784
5785 rs = get_remote_state ();
5786 p = rs->buf;
5787
5788 *(p++) = 'Z';
5789 *(p++) = '0';
5790 *(p++) = ',';
5791 addr = (ULONGEST) remote_address_masked (addr);
5792 p += hexnumstr (p, addr);
5793 sprintf (p, ",%d", bpsize);
5794
5795 putpkt (rs->buf);
5796 getpkt (&rs->buf, &rs->buf_size, 0);
5797
5798 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0]))
5799 {
5800 case PACKET_ERROR:
5801 return -1;
5802 case PACKET_OK:
5803 bp_tgt->placed_address = addr;
5804 bp_tgt->placed_size = bpsize;
5805 return 0;
5806 case PACKET_UNKNOWN:
5807 break;
5808 }
5809 }
5810
5811 return memory_insert_breakpoint (bp_tgt);
5812 }
5813
5814 static int
5815 remote_remove_breakpoint (struct bp_target_info *bp_tgt)
5816 {
5817 CORE_ADDR addr = bp_tgt->placed_address;
5818 struct remote_state *rs = get_remote_state ();
5819 int bp_size;
5820
5821 if (remote_protocol_packets[PACKET_Z0].support != PACKET_DISABLE)
5822 {
5823 char *p = rs->buf;
5824
5825 *(p++) = 'z';
5826 *(p++) = '0';
5827 *(p++) = ',';
5828
5829 addr = (ULONGEST) remote_address_masked (bp_tgt->placed_address);
5830 p += hexnumstr (p, addr);
5831 sprintf (p, ",%d", bp_tgt->placed_size);
5832
5833 putpkt (rs->buf);
5834 getpkt (&rs->buf, &rs->buf_size, 0);
5835
5836 return (rs->buf[0] == 'E');
5837 }
5838
5839 return memory_remove_breakpoint (bp_tgt);
5840 }
5841
5842 static int
5843 watchpoint_to_Z_packet (int type)
5844 {
5845 switch (type)
5846 {
5847 case hw_write:
5848 return Z_PACKET_WRITE_WP;
5849 break;
5850 case hw_read:
5851 return Z_PACKET_READ_WP;
5852 break;
5853 case hw_access:
5854 return Z_PACKET_ACCESS_WP;
5855 break;
5856 default:
5857 internal_error (__FILE__, __LINE__,
5858 _("hw_bp_to_z: bad watchpoint type %d"), type);
5859 }
5860 }
5861
5862 static int
5863 remote_insert_watchpoint (CORE_ADDR addr, int len, int type)
5864 {
5865 struct remote_state *rs = get_remote_state ();
5866 char *p;
5867 enum Z_packet_type packet = watchpoint_to_Z_packet (type);
5868
5869 if (remote_protocol_packets[PACKET_Z0 + packet].support == PACKET_DISABLE)
5870 return -1;
5871
5872 sprintf (rs->buf, "Z%x,", packet);
5873 p = strchr (rs->buf, '\0');
5874 addr = remote_address_masked (addr);
5875 p += hexnumstr (p, (ULONGEST) addr);
5876 sprintf (p, ",%x", len);
5877
5878 putpkt (rs->buf);
5879 getpkt (&rs->buf, &rs->buf_size, 0);
5880
5881 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0 + packet]))
5882 {
5883 case PACKET_ERROR:
5884 case PACKET_UNKNOWN:
5885 return -1;
5886 case PACKET_OK:
5887 return 0;
5888 }
5889 internal_error (__FILE__, __LINE__,
5890 _("remote_insert_watchpoint: reached end of function"));
5891 }
5892
5893
5894 static int
5895 remote_remove_watchpoint (CORE_ADDR addr, int len, int type)
5896 {
5897 struct remote_state *rs = get_remote_state ();
5898 char *p;
5899 enum Z_packet_type packet = watchpoint_to_Z_packet (type);
5900
5901 if (remote_protocol_packets[PACKET_Z0 + packet].support == PACKET_DISABLE)
5902 return -1;
5903
5904 sprintf (rs->buf, "z%x,", packet);
5905 p = strchr (rs->buf, '\0');
5906 addr = remote_address_masked (addr);
5907 p += hexnumstr (p, (ULONGEST) addr);
5908 sprintf (p, ",%x", len);
5909 putpkt (rs->buf);
5910 getpkt (&rs->buf, &rs->buf_size, 0);
5911
5912 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0 + packet]))
5913 {
5914 case PACKET_ERROR:
5915 case PACKET_UNKNOWN:
5916 return -1;
5917 case PACKET_OK:
5918 return 0;
5919 }
5920 internal_error (__FILE__, __LINE__,
5921 _("remote_remove_watchpoint: reached end of function"));
5922 }
5923
5924
5925 int remote_hw_watchpoint_limit = -1;
5926 int remote_hw_breakpoint_limit = -1;
5927
5928 static int
5929 remote_check_watch_resources (int type, int cnt, int ot)
5930 {
5931 if (type == bp_hardware_breakpoint)
5932 {
5933 if (remote_hw_breakpoint_limit == 0)
5934 return 0;
5935 else if (remote_hw_breakpoint_limit < 0)
5936 return 1;
5937 else if (cnt <= remote_hw_breakpoint_limit)
5938 return 1;
5939 }
5940 else
5941 {
5942 if (remote_hw_watchpoint_limit == 0)
5943 return 0;
5944 else if (remote_hw_watchpoint_limit < 0)
5945 return 1;
5946 else if (ot)
5947 return -1;
5948 else if (cnt <= remote_hw_watchpoint_limit)
5949 return 1;
5950 }
5951 return -1;
5952 }
5953
5954 static int
5955 remote_stopped_by_watchpoint (void)
5956 {
5957 return remote_stopped_by_watchpoint_p;
5958 }
5959
5960 static int
5961 remote_stopped_data_address (struct target_ops *target, CORE_ADDR *addr_p)
5962 {
5963 int rc = 0;
5964 if (remote_stopped_by_watchpoint ())
5965 {
5966 *addr_p = remote_watch_data_address;
5967 rc = 1;
5968 }
5969
5970 return rc;
5971 }
5972
5973
5974 static int
5975 remote_insert_hw_breakpoint (struct bp_target_info *bp_tgt)
5976 {
5977 CORE_ADDR addr;
5978 struct remote_state *rs;
5979 char *p;
5980
5981 /* The length field should be set to the size of a breakpoint
5982 instruction, even though we aren't inserting one ourselves. */
5983
5984 gdbarch_breakpoint_from_pc
5985 (target_gdbarch, &bp_tgt->placed_address, &bp_tgt->placed_size);
5986
5987 if (remote_protocol_packets[PACKET_Z1].support == PACKET_DISABLE)
5988 return -1;
5989
5990 rs = get_remote_state ();
5991 p = rs->buf;
5992
5993 *(p++) = 'Z';
5994 *(p++) = '1';
5995 *(p++) = ',';
5996
5997 addr = remote_address_masked (bp_tgt->placed_address);
5998 p += hexnumstr (p, (ULONGEST) addr);
5999 sprintf (p, ",%x", bp_tgt->placed_size);
6000
6001 putpkt (rs->buf);
6002 getpkt (&rs->buf, &rs->buf_size, 0);
6003
6004 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z1]))
6005 {
6006 case PACKET_ERROR:
6007 case PACKET_UNKNOWN:
6008 return -1;
6009 case PACKET_OK:
6010 return 0;
6011 }
6012 internal_error (__FILE__, __LINE__,
6013 _("remote_insert_hw_breakpoint: reached end of function"));
6014 }
6015
6016
6017 static int
6018 remote_remove_hw_breakpoint (struct bp_target_info *bp_tgt)
6019 {
6020 CORE_ADDR addr;
6021 struct remote_state *rs = get_remote_state ();
6022 char *p = rs->buf;
6023
6024 if (remote_protocol_packets[PACKET_Z1].support == PACKET_DISABLE)
6025 return -1;
6026
6027 *(p++) = 'z';
6028 *(p++) = '1';
6029 *(p++) = ',';
6030
6031 addr = remote_address_masked (bp_tgt->placed_address);
6032 p += hexnumstr (p, (ULONGEST) addr);
6033 sprintf (p, ",%x", bp_tgt->placed_size);
6034
6035 putpkt (rs->buf);
6036 getpkt (&rs->buf, &rs->buf_size, 0);
6037
6038 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z1]))
6039 {
6040 case PACKET_ERROR:
6041 case PACKET_UNKNOWN:
6042 return -1;
6043 case PACKET_OK:
6044 return 0;
6045 }
6046 internal_error (__FILE__, __LINE__,
6047 _("remote_remove_hw_breakpoint: reached end of function"));
6048 }
6049
6050 /* Table used by the crc32 function to calcuate the checksum. */
6051
6052 static unsigned long crc32_table[256] =
6053 {0, 0};
6054
6055 static unsigned long
6056 crc32 (unsigned char *buf, int len, unsigned int crc)
6057 {
6058 if (!crc32_table[1])
6059 {
6060 /* Initialize the CRC table and the decoding table. */
6061 int i, j;
6062 unsigned int c;
6063
6064 for (i = 0; i < 256; i++)
6065 {
6066 for (c = i << 24, j = 8; j > 0; --j)
6067 c = c & 0x80000000 ? (c << 1) ^ 0x04c11db7 : (c << 1);
6068 crc32_table[i] = c;
6069 }
6070 }
6071
6072 while (len--)
6073 {
6074 crc = (crc << 8) ^ crc32_table[((crc >> 24) ^ *buf) & 255];
6075 buf++;
6076 }
6077 return crc;
6078 }
6079
6080 /* compare-sections command
6081
6082 With no arguments, compares each loadable section in the exec bfd
6083 with the same memory range on the target, and reports mismatches.
6084 Useful for verifying the image on the target against the exec file.
6085 Depends on the target understanding the new "qCRC:" request. */
6086
6087 /* FIXME: cagney/1999-10-26: This command should be broken down into a
6088 target method (target verify memory) and generic version of the
6089 actual command. This will allow other high-level code (especially
6090 generic_load()) to make use of this target functionality. */
6091
6092 static void
6093 compare_sections_command (char *args, int from_tty)
6094 {
6095 struct remote_state *rs = get_remote_state ();
6096 asection *s;
6097 unsigned long host_crc, target_crc;
6098 extern bfd *exec_bfd;
6099 struct cleanup *old_chain;
6100 char *tmp;
6101 char *sectdata;
6102 const char *sectname;
6103 bfd_size_type size;
6104 bfd_vma lma;
6105 int matched = 0;
6106 int mismatched = 0;
6107
6108 if (!exec_bfd)
6109 error (_("command cannot be used without an exec file"));
6110 if (!current_target.to_shortname ||
6111 strcmp (current_target.to_shortname, "remote") != 0)
6112 error (_("command can only be used with remote target"));
6113
6114 for (s = exec_bfd->sections; s; s = s->next)
6115 {
6116 if (!(s->flags & SEC_LOAD))
6117 continue; /* skip non-loadable section */
6118
6119 size = bfd_get_section_size (s);
6120 if (size == 0)
6121 continue; /* skip zero-length section */
6122
6123 sectname = bfd_get_section_name (exec_bfd, s);
6124 if (args && strcmp (args, sectname) != 0)
6125 continue; /* not the section selected by user */
6126
6127 matched = 1; /* do this section */
6128 lma = s->lma;
6129 /* FIXME: assumes lma can fit into long. */
6130 xsnprintf (rs->buf, get_remote_packet_size (), "qCRC:%lx,%lx",
6131 (long) lma, (long) size);
6132 putpkt (rs->buf);
6133
6134 /* Be clever; compute the host_crc before waiting for target
6135 reply. */
6136 sectdata = xmalloc (size);
6137 old_chain = make_cleanup (xfree, sectdata);
6138 bfd_get_section_contents (exec_bfd, s, sectdata, 0, size);
6139 host_crc = crc32 ((unsigned char *) sectdata, size, 0xffffffff);
6140
6141 getpkt (&rs->buf, &rs->buf_size, 0);
6142 if (rs->buf[0] == 'E')
6143 error (_("target memory fault, section %s, range 0x%s -- 0x%s"),
6144 sectname, paddr (lma), paddr (lma + size));
6145 if (rs->buf[0] != 'C')
6146 error (_("remote target does not support this operation"));
6147
6148 for (target_crc = 0, tmp = &rs->buf[1]; *tmp; tmp++)
6149 target_crc = target_crc * 16 + fromhex (*tmp);
6150
6151 printf_filtered ("Section %s, range 0x%s -- 0x%s: ",
6152 sectname, paddr (lma), paddr (lma + size));
6153 if (host_crc == target_crc)
6154 printf_filtered ("matched.\n");
6155 else
6156 {
6157 printf_filtered ("MIS-MATCHED!\n");
6158 mismatched++;
6159 }
6160
6161 do_cleanups (old_chain);
6162 }
6163 if (mismatched > 0)
6164 warning (_("One or more sections of the remote executable does not match\n\
6165 the loaded file\n"));
6166 if (args && !matched)
6167 printf_filtered (_("No loaded section named '%s'.\n"), args);
6168 }
6169
6170 /* Write LEN bytes from WRITEBUF into OBJECT_NAME/ANNEX at OFFSET
6171 into remote target. The number of bytes written to the remote
6172 target is returned, or -1 for error. */
6173
6174 static LONGEST
6175 remote_write_qxfer (struct target_ops *ops, const char *object_name,
6176 const char *annex, const gdb_byte *writebuf,
6177 ULONGEST offset, LONGEST len,
6178 struct packet_config *packet)
6179 {
6180 int i, buf_len;
6181 ULONGEST n;
6182 gdb_byte *wbuf;
6183 struct remote_state *rs = get_remote_state ();
6184 int max_size = get_memory_write_packet_size ();
6185
6186 if (packet->support == PACKET_DISABLE)
6187 return -1;
6188
6189 /* Insert header. */
6190 i = snprintf (rs->buf, max_size,
6191 "qXfer:%s:write:%s:%s:",
6192 object_name, annex ? annex : "",
6193 phex_nz (offset, sizeof offset));
6194 max_size -= (i + 1);
6195
6196 /* Escape as much data as fits into rs->buf. */
6197 buf_len = remote_escape_output
6198 (writebuf, len, (rs->buf + i), &max_size, max_size);
6199
6200 if (putpkt_binary (rs->buf, i + buf_len) < 0
6201 || getpkt_sane (&rs->buf, &rs->buf_size, 0) < 0
6202 || packet_ok (rs->buf, packet) != PACKET_OK)
6203 return -1;
6204
6205 unpack_varlen_hex (rs->buf, &n);
6206 return n;
6207 }
6208
6209 /* Read OBJECT_NAME/ANNEX from the remote target using a qXfer packet.
6210 Data at OFFSET, of up to LEN bytes, is read into READBUF; the
6211 number of bytes read is returned, or 0 for EOF, or -1 for error.
6212 The number of bytes read may be less than LEN without indicating an
6213 EOF. PACKET is checked and updated to indicate whether the remote
6214 target supports this object. */
6215
6216 static LONGEST
6217 remote_read_qxfer (struct target_ops *ops, const char *object_name,
6218 const char *annex,
6219 gdb_byte *readbuf, ULONGEST offset, LONGEST len,
6220 struct packet_config *packet)
6221 {
6222 static char *finished_object;
6223 static char *finished_annex;
6224 static ULONGEST finished_offset;
6225
6226 struct remote_state *rs = get_remote_state ();
6227 unsigned int total = 0;
6228 LONGEST i, n, packet_len;
6229
6230 if (packet->support == PACKET_DISABLE)
6231 return -1;
6232
6233 /* Check whether we've cached an end-of-object packet that matches
6234 this request. */
6235 if (finished_object)
6236 {
6237 if (strcmp (object_name, finished_object) == 0
6238 && strcmp (annex ? annex : "", finished_annex) == 0
6239 && offset == finished_offset)
6240 return 0;
6241
6242 /* Otherwise, we're now reading something different. Discard
6243 the cache. */
6244 xfree (finished_object);
6245 xfree (finished_annex);
6246 finished_object = NULL;
6247 finished_annex = NULL;
6248 }
6249
6250 /* Request only enough to fit in a single packet. The actual data
6251 may not, since we don't know how much of it will need to be escaped;
6252 the target is free to respond with slightly less data. We subtract
6253 five to account for the response type and the protocol frame. */
6254 n = min (get_remote_packet_size () - 5, len);
6255 snprintf (rs->buf, get_remote_packet_size () - 4, "qXfer:%s:read:%s:%s,%s",
6256 object_name, annex ? annex : "",
6257 phex_nz (offset, sizeof offset),
6258 phex_nz (n, sizeof n));
6259 i = putpkt (rs->buf);
6260 if (i < 0)
6261 return -1;
6262
6263 rs->buf[0] = '\0';
6264 packet_len = getpkt_sane (&rs->buf, &rs->buf_size, 0);
6265 if (packet_len < 0 || packet_ok (rs->buf, packet) != PACKET_OK)
6266 return -1;
6267
6268 if (rs->buf[0] != 'l' && rs->buf[0] != 'm')
6269 error (_("Unknown remote qXfer reply: %s"), rs->buf);
6270
6271 /* 'm' means there is (or at least might be) more data after this
6272 batch. That does not make sense unless there's at least one byte
6273 of data in this reply. */
6274 if (rs->buf[0] == 'm' && packet_len == 1)
6275 error (_("Remote qXfer reply contained no data."));
6276
6277 /* Got some data. */
6278 i = remote_unescape_input (rs->buf + 1, packet_len - 1, readbuf, n);
6279
6280 /* 'l' is an EOF marker, possibly including a final block of data,
6281 or possibly empty. If we have the final block of a non-empty
6282 object, record this fact to bypass a subsequent partial read. */
6283 if (rs->buf[0] == 'l' && offset + i > 0)
6284 {
6285 finished_object = xstrdup (object_name);
6286 finished_annex = xstrdup (annex ? annex : "");
6287 finished_offset = offset + i;
6288 }
6289
6290 return i;
6291 }
6292
6293 static LONGEST
6294 remote_xfer_partial (struct target_ops *ops, enum target_object object,
6295 const char *annex, gdb_byte *readbuf,
6296 const gdb_byte *writebuf, ULONGEST offset, LONGEST len)
6297 {
6298 struct remote_state *rs;
6299 int i;
6300 char *p2;
6301 char query_type;
6302
6303 set_general_thread (inferior_ptid);
6304
6305 rs = get_remote_state ();
6306
6307 /* Handle memory using the standard memory routines. */
6308 if (object == TARGET_OBJECT_MEMORY)
6309 {
6310 int xfered;
6311 errno = 0;
6312
6313 /* If the remote target is connected but not running, we should
6314 pass this request down to a lower stratum (e.g. the executable
6315 file). */
6316 if (!target_has_execution)
6317 return 0;
6318
6319 if (writebuf != NULL)
6320 xfered = remote_write_bytes (offset, writebuf, len);
6321 else
6322 xfered = remote_read_bytes (offset, readbuf, len);
6323
6324 if (xfered > 0)
6325 return xfered;
6326 else if (xfered == 0 && errno == 0)
6327 return 0;
6328 else
6329 return -1;
6330 }
6331
6332 /* Handle SPU memory using qxfer packets. */
6333 if (object == TARGET_OBJECT_SPU)
6334 {
6335 if (readbuf)
6336 return remote_read_qxfer (ops, "spu", annex, readbuf, offset, len,
6337 &remote_protocol_packets
6338 [PACKET_qXfer_spu_read]);
6339 else
6340 return remote_write_qxfer (ops, "spu", annex, writebuf, offset, len,
6341 &remote_protocol_packets
6342 [PACKET_qXfer_spu_write]);
6343 }
6344
6345 /* Only handle flash writes. */
6346 if (writebuf != NULL)
6347 {
6348 LONGEST xfered;
6349
6350 switch (object)
6351 {
6352 case TARGET_OBJECT_FLASH:
6353 xfered = remote_flash_write (ops, offset, len, writebuf);
6354
6355 if (xfered > 0)
6356 return xfered;
6357 else if (xfered == 0 && errno == 0)
6358 return 0;
6359 else
6360 return -1;
6361
6362 default:
6363 return -1;
6364 }
6365 }
6366
6367 /* Map pre-existing objects onto letters. DO NOT do this for new
6368 objects!!! Instead specify new query packets. */
6369 switch (object)
6370 {
6371 case TARGET_OBJECT_AVR:
6372 query_type = 'R';
6373 break;
6374
6375 case TARGET_OBJECT_AUXV:
6376 gdb_assert (annex == NULL);
6377 return remote_read_qxfer (ops, "auxv", annex, readbuf, offset, len,
6378 &remote_protocol_packets[PACKET_qXfer_auxv]);
6379
6380 case TARGET_OBJECT_AVAILABLE_FEATURES:
6381 return remote_read_qxfer
6382 (ops, "features", annex, readbuf, offset, len,
6383 &remote_protocol_packets[PACKET_qXfer_features]);
6384
6385 case TARGET_OBJECT_LIBRARIES:
6386 return remote_read_qxfer
6387 (ops, "libraries", annex, readbuf, offset, len,
6388 &remote_protocol_packets[PACKET_qXfer_libraries]);
6389
6390 case TARGET_OBJECT_MEMORY_MAP:
6391 gdb_assert (annex == NULL);
6392 return remote_read_qxfer (ops, "memory-map", annex, readbuf, offset, len,
6393 &remote_protocol_packets[PACKET_qXfer_memory_map]);
6394
6395 default:
6396 return -1;
6397 }
6398
6399 /* Note: a zero OFFSET and LEN can be used to query the minimum
6400 buffer size. */
6401 if (offset == 0 && len == 0)
6402 return (get_remote_packet_size ());
6403 /* Minimum outbuf size is get_remote_packet_size (). If LEN is not
6404 large enough let the caller deal with it. */
6405 if (len < get_remote_packet_size ())
6406 return -1;
6407 len = get_remote_packet_size ();
6408
6409 /* Except for querying the minimum buffer size, target must be open. */
6410 if (!remote_desc)
6411 error (_("remote query is only available after target open"));
6412
6413 gdb_assert (annex != NULL);
6414 gdb_assert (readbuf != NULL);
6415
6416 p2 = rs->buf;
6417 *p2++ = 'q';
6418 *p2++ = query_type;
6419
6420 /* We used one buffer char for the remote protocol q command and
6421 another for the query type. As the remote protocol encapsulation
6422 uses 4 chars plus one extra in case we are debugging
6423 (remote_debug), we have PBUFZIZ - 7 left to pack the query
6424 string. */
6425 i = 0;
6426 while (annex[i] && (i < (get_remote_packet_size () - 8)))
6427 {
6428 /* Bad caller may have sent forbidden characters. */
6429 gdb_assert (isprint (annex[i]) && annex[i] != '$' && annex[i] != '#');
6430 *p2++ = annex[i];
6431 i++;
6432 }
6433 *p2 = '\0';
6434 gdb_assert (annex[i] == '\0');
6435
6436 i = putpkt (rs->buf);
6437 if (i < 0)
6438 return i;
6439
6440 getpkt (&rs->buf, &rs->buf_size, 0);
6441 strcpy ((char *) readbuf, rs->buf);
6442
6443 return strlen ((char *) readbuf);
6444 }
6445
6446 static int
6447 remote_search_memory (struct target_ops* ops,
6448 CORE_ADDR start_addr, ULONGEST search_space_len,
6449 const gdb_byte *pattern, ULONGEST pattern_len,
6450 CORE_ADDR *found_addrp)
6451 {
6452 struct remote_state *rs = get_remote_state ();
6453 int max_size = get_memory_write_packet_size ();
6454 struct packet_config *packet =
6455 &remote_protocol_packets[PACKET_qSearch_memory];
6456 /* number of packet bytes used to encode the pattern,
6457 this could be more than PATTERN_LEN due to escape characters */
6458 int escaped_pattern_len;
6459 /* amount of pattern that was encodable in the packet */
6460 int used_pattern_len;
6461 int i;
6462 int found;
6463 ULONGEST found_addr;
6464
6465 /* Don't go to the target if we don't have to.
6466 This is done before checking packet->support to avoid the possibility that
6467 a success for this edge case means the facility works in general. */
6468 if (pattern_len > search_space_len)
6469 return 0;
6470 if (pattern_len == 0)
6471 {
6472 *found_addrp = start_addr;
6473 return 1;
6474 }
6475
6476 /* If we already know the packet isn't supported, fall back to the simple
6477 way of searching memory. */
6478
6479 if (packet->support == PACKET_DISABLE)
6480 {
6481 /* Target doesn't provided special support, fall back and use the
6482 standard support (copy memory and do the search here). */
6483 return simple_search_memory (ops, start_addr, search_space_len,
6484 pattern, pattern_len, found_addrp);
6485 }
6486
6487 /* Insert header. */
6488 i = snprintf (rs->buf, max_size,
6489 "qSearch:memory:%s;%s;",
6490 paddr_nz (start_addr),
6491 phex_nz (search_space_len, sizeof (search_space_len)));
6492 max_size -= (i + 1);
6493
6494 /* Escape as much data as fits into rs->buf. */
6495 escaped_pattern_len =
6496 remote_escape_output (pattern, pattern_len, (rs->buf + i),
6497 &used_pattern_len, max_size);
6498
6499 /* Bail if the pattern is too large. */
6500 if (used_pattern_len != pattern_len)
6501 error ("Pattern is too large to transmit to remote target.");
6502
6503 if (putpkt_binary (rs->buf, i + escaped_pattern_len) < 0
6504 || getpkt_sane (&rs->buf, &rs->buf_size, 0) < 0
6505 || packet_ok (rs->buf, packet) != PACKET_OK)
6506 {
6507 /* The request may not have worked because the command is not
6508 supported. If so, fall back to the simple way. */
6509 if (packet->support == PACKET_DISABLE)
6510 {
6511 return simple_search_memory (ops, start_addr, search_space_len,
6512 pattern, pattern_len, found_addrp);
6513 }
6514 return -1;
6515 }
6516
6517 if (rs->buf[0] == '0')
6518 found = 0;
6519 else if (rs->buf[0] == '1')
6520 {
6521 found = 1;
6522 if (rs->buf[1] != ',')
6523 error (_("Unknown qSearch:memory reply: %s"), rs->buf);
6524 unpack_varlen_hex (rs->buf + 2, &found_addr);
6525 *found_addrp = found_addr;
6526 }
6527 else
6528 error (_("Unknown qSearch:memory reply: %s"), rs->buf);
6529
6530 return found;
6531 }
6532
6533 static void
6534 remote_rcmd (char *command,
6535 struct ui_file *outbuf)
6536 {
6537 struct remote_state *rs = get_remote_state ();
6538 char *p = rs->buf;
6539
6540 if (!remote_desc)
6541 error (_("remote rcmd is only available after target open"));
6542
6543 /* Send a NULL command across as an empty command. */
6544 if (command == NULL)
6545 command = "";
6546
6547 /* The query prefix. */
6548 strcpy (rs->buf, "qRcmd,");
6549 p = strchr (rs->buf, '\0');
6550
6551 if ((strlen (rs->buf) + strlen (command) * 2 + 8/*misc*/) > get_remote_packet_size ())
6552 error (_("\"monitor\" command ``%s'' is too long."), command);
6553
6554 /* Encode the actual command. */
6555 bin2hex ((gdb_byte *) command, p, 0);
6556
6557 if (putpkt (rs->buf) < 0)
6558 error (_("Communication problem with target."));
6559
6560 /* get/display the response */
6561 while (1)
6562 {
6563 char *buf;
6564
6565 /* XXX - see also tracepoint.c:remote_get_noisy_reply(). */
6566 rs->buf[0] = '\0';
6567 getpkt (&rs->buf, &rs->buf_size, 0);
6568 buf = rs->buf;
6569 if (buf[0] == '\0')
6570 error (_("Target does not support this command."));
6571 if (buf[0] == 'O' && buf[1] != 'K')
6572 {
6573 remote_console_output (buf + 1); /* 'O' message from stub. */
6574 continue;
6575 }
6576 if (strcmp (buf, "OK") == 0)
6577 break;
6578 if (strlen (buf) == 3 && buf[0] == 'E'
6579 && isdigit (buf[1]) && isdigit (buf[2]))
6580 {
6581 error (_("Protocol error with Rcmd"));
6582 }
6583 for (p = buf; p[0] != '\0' && p[1] != '\0'; p += 2)
6584 {
6585 char c = (fromhex (p[0]) << 4) + fromhex (p[1]);
6586 fputc_unfiltered (c, outbuf);
6587 }
6588 break;
6589 }
6590 }
6591
6592 static VEC(mem_region_s) *
6593 remote_memory_map (struct target_ops *ops)
6594 {
6595 VEC(mem_region_s) *result = NULL;
6596 char *text = target_read_stralloc (&current_target,
6597 TARGET_OBJECT_MEMORY_MAP, NULL);
6598
6599 if (text)
6600 {
6601 struct cleanup *back_to = make_cleanup (xfree, text);
6602 result = parse_memory_map (text);
6603 do_cleanups (back_to);
6604 }
6605
6606 return result;
6607 }
6608
6609 static void
6610 packet_command (char *args, int from_tty)
6611 {
6612 struct remote_state *rs = get_remote_state ();
6613
6614 if (!remote_desc)
6615 error (_("command can only be used with remote target"));
6616
6617 if (!args)
6618 error (_("remote-packet command requires packet text as argument"));
6619
6620 puts_filtered ("sending: ");
6621 print_packet (args);
6622 puts_filtered ("\n");
6623 putpkt (args);
6624
6625 getpkt (&rs->buf, &rs->buf_size, 0);
6626 puts_filtered ("received: ");
6627 print_packet (rs->buf);
6628 puts_filtered ("\n");
6629 }
6630
6631 #if 0
6632 /* --------- UNIT_TEST for THREAD oriented PACKETS ------------------- */
6633
6634 static void display_thread_info (struct gdb_ext_thread_info *info);
6635
6636 static void threadset_test_cmd (char *cmd, int tty);
6637
6638 static void threadalive_test (char *cmd, int tty);
6639
6640 static void threadlist_test_cmd (char *cmd, int tty);
6641
6642 int get_and_display_threadinfo (threadref *ref);
6643
6644 static void threadinfo_test_cmd (char *cmd, int tty);
6645
6646 static int thread_display_step (threadref *ref, void *context);
6647
6648 static void threadlist_update_test_cmd (char *cmd, int tty);
6649
6650 static void init_remote_threadtests (void);
6651
6652 #define SAMPLE_THREAD 0x05060708 /* Truncated 64 bit threadid. */
6653
6654 static void
6655 threadset_test_cmd (char *cmd, int tty)
6656 {
6657 int sample_thread = SAMPLE_THREAD;
6658
6659 printf_filtered (_("Remote threadset test\n"));
6660 set_general_thread (sample_thread);
6661 }
6662
6663
6664 static void
6665 threadalive_test (char *cmd, int tty)
6666 {
6667 int sample_thread = SAMPLE_THREAD;
6668 int pid = ptid_get_pid (inferior_ptid);
6669 ptid_t ptid = ptid_build (pid, 0, sample_thread);
6670
6671 if (remote_thread_alive (ptid))
6672 printf_filtered ("PASS: Thread alive test\n");
6673 else
6674 printf_filtered ("FAIL: Thread alive test\n");
6675 }
6676
6677 void output_threadid (char *title, threadref *ref);
6678
6679 void
6680 output_threadid (char *title, threadref *ref)
6681 {
6682 char hexid[20];
6683
6684 pack_threadid (&hexid[0], ref); /* Convert threead id into hex. */
6685 hexid[16] = 0;
6686 printf_filtered ("%s %s\n", title, (&hexid[0]));
6687 }
6688
6689 static void
6690 threadlist_test_cmd (char *cmd, int tty)
6691 {
6692 int startflag = 1;
6693 threadref nextthread;
6694 int done, result_count;
6695 threadref threadlist[3];
6696
6697 printf_filtered ("Remote Threadlist test\n");
6698 if (!remote_get_threadlist (startflag, &nextthread, 3, &done,
6699 &result_count, &threadlist[0]))
6700 printf_filtered ("FAIL: threadlist test\n");
6701 else
6702 {
6703 threadref *scan = threadlist;
6704 threadref *limit = scan + result_count;
6705
6706 while (scan < limit)
6707 output_threadid (" thread ", scan++);
6708 }
6709 }
6710
6711 void
6712 display_thread_info (struct gdb_ext_thread_info *info)
6713 {
6714 output_threadid ("Threadid: ", &info->threadid);
6715 printf_filtered ("Name: %s\n ", info->shortname);
6716 printf_filtered ("State: %s\n", info->display);
6717 printf_filtered ("other: %s\n\n", info->more_display);
6718 }
6719
6720 int
6721 get_and_display_threadinfo (threadref *ref)
6722 {
6723 int result;
6724 int set;
6725 struct gdb_ext_thread_info threadinfo;
6726
6727 set = TAG_THREADID | TAG_EXISTS | TAG_THREADNAME
6728 | TAG_MOREDISPLAY | TAG_DISPLAY;
6729 if (0 != (result = remote_get_threadinfo (ref, set, &threadinfo)))
6730 display_thread_info (&threadinfo);
6731 return result;
6732 }
6733
6734 static void
6735 threadinfo_test_cmd (char *cmd, int tty)
6736 {
6737 int athread = SAMPLE_THREAD;
6738 threadref thread;
6739 int set;
6740
6741 int_to_threadref (&thread, athread);
6742 printf_filtered ("Remote Threadinfo test\n");
6743 if (!get_and_display_threadinfo (&thread))
6744 printf_filtered ("FAIL cannot get thread info\n");
6745 }
6746
6747 static int
6748 thread_display_step (threadref *ref, void *context)
6749 {
6750 /* output_threadid(" threadstep ",ref); *//* simple test */
6751 return get_and_display_threadinfo (ref);
6752 }
6753
6754 static void
6755 threadlist_update_test_cmd (char *cmd, int tty)
6756 {
6757 printf_filtered ("Remote Threadlist update test\n");
6758 remote_threadlist_iterator (thread_display_step, 0, CRAZY_MAX_THREADS);
6759 }
6760
6761 static void
6762 init_remote_threadtests (void)
6763 {
6764 add_com ("tlist", class_obscure, threadlist_test_cmd, _("\
6765 Fetch and print the remote list of thread identifiers, one pkt only"));
6766 add_com ("tinfo", class_obscure, threadinfo_test_cmd,
6767 _("Fetch and display info about one thread"));
6768 add_com ("tset", class_obscure, threadset_test_cmd,
6769 _("Test setting to a different thread"));
6770 add_com ("tupd", class_obscure, threadlist_update_test_cmd,
6771 _("Iterate through updating all remote thread info"));
6772 add_com ("talive", class_obscure, threadalive_test,
6773 _(" Remote thread alive test "));
6774 }
6775
6776 #endif /* 0 */
6777
6778 /* Convert a thread ID to a string. Returns the string in a static
6779 buffer. */
6780
6781 static char *
6782 remote_pid_to_str (ptid_t ptid)
6783 {
6784 static char buf[64];
6785 struct remote_state *rs = get_remote_state ();
6786
6787 if (ptid_equal (magic_null_ptid, ptid))
6788 {
6789 xsnprintf (buf, sizeof buf, "Thread <main>");
6790 return buf;
6791 }
6792 else if (remote_multi_process_p (rs)
6793 && ptid_get_tid (ptid) != 0 && ptid_get_pid (ptid) != 0)
6794 {
6795 xsnprintf (buf, sizeof buf, "Thread %d.%ld",
6796 ptid_get_pid (ptid), ptid_get_tid (ptid));
6797 return buf;
6798 }
6799 else if (ptid_get_tid (ptid) != 0)
6800 {
6801 xsnprintf (buf, sizeof buf, "Thread %ld",
6802 ptid_get_tid (ptid));
6803 return buf;
6804 }
6805
6806 return normal_pid_to_str (ptid);
6807 }
6808
6809 /* Get the address of the thread local variable in OBJFILE which is
6810 stored at OFFSET within the thread local storage for thread PTID. */
6811
6812 static CORE_ADDR
6813 remote_get_thread_local_address (ptid_t ptid, CORE_ADDR lm, CORE_ADDR offset)
6814 {
6815 if (remote_protocol_packets[PACKET_qGetTLSAddr].support != PACKET_DISABLE)
6816 {
6817 struct remote_state *rs = get_remote_state ();
6818 char *p = rs->buf;
6819 char *endp = rs->buf + get_remote_packet_size ();
6820 enum packet_result result;
6821
6822 strcpy (p, "qGetTLSAddr:");
6823 p += strlen (p);
6824 p = write_ptid (p, endp, ptid);
6825 *p++ = ',';
6826 p += hexnumstr (p, offset);
6827 *p++ = ',';
6828 p += hexnumstr (p, lm);
6829 *p++ = '\0';
6830
6831 putpkt (rs->buf);
6832 getpkt (&rs->buf, &rs->buf_size, 0);
6833 result = packet_ok (rs->buf, &remote_protocol_packets[PACKET_qGetTLSAddr]);
6834 if (result == PACKET_OK)
6835 {
6836 ULONGEST result;
6837
6838 unpack_varlen_hex (rs->buf, &result);
6839 return result;
6840 }
6841 else if (result == PACKET_UNKNOWN)
6842 throw_error (TLS_GENERIC_ERROR,
6843 _("Remote target doesn't support qGetTLSAddr packet"));
6844 else
6845 throw_error (TLS_GENERIC_ERROR,
6846 _("Remote target failed to process qGetTLSAddr request"));
6847 }
6848 else
6849 throw_error (TLS_GENERIC_ERROR,
6850 _("TLS not supported or disabled on this target"));
6851 /* Not reached. */
6852 return 0;
6853 }
6854
6855 /* Support for inferring a target description based on the current
6856 architecture and the size of a 'g' packet. While the 'g' packet
6857 can have any size (since optional registers can be left off the
6858 end), some sizes are easily recognizable given knowledge of the
6859 approximate architecture. */
6860
6861 struct remote_g_packet_guess
6862 {
6863 int bytes;
6864 const struct target_desc *tdesc;
6865 };
6866 typedef struct remote_g_packet_guess remote_g_packet_guess_s;
6867 DEF_VEC_O(remote_g_packet_guess_s);
6868
6869 struct remote_g_packet_data
6870 {
6871 VEC(remote_g_packet_guess_s) *guesses;
6872 };
6873
6874 static struct gdbarch_data *remote_g_packet_data_handle;
6875
6876 static void *
6877 remote_g_packet_data_init (struct obstack *obstack)
6878 {
6879 return OBSTACK_ZALLOC (obstack, struct remote_g_packet_data);
6880 }
6881
6882 void
6883 register_remote_g_packet_guess (struct gdbarch *gdbarch, int bytes,
6884 const struct target_desc *tdesc)
6885 {
6886 struct remote_g_packet_data *data
6887 = gdbarch_data (gdbarch, remote_g_packet_data_handle);
6888 struct remote_g_packet_guess new_guess, *guess;
6889 int ix;
6890
6891 gdb_assert (tdesc != NULL);
6892
6893 for (ix = 0;
6894 VEC_iterate (remote_g_packet_guess_s, data->guesses, ix, guess);
6895 ix++)
6896 if (guess->bytes == bytes)
6897 internal_error (__FILE__, __LINE__,
6898 "Duplicate g packet description added for size %d",
6899 bytes);
6900
6901 new_guess.bytes = bytes;
6902 new_guess.tdesc = tdesc;
6903 VEC_safe_push (remote_g_packet_guess_s, data->guesses, &new_guess);
6904 }
6905
6906 static const struct target_desc *
6907 remote_read_description (struct target_ops *target)
6908 {
6909 struct remote_g_packet_data *data
6910 = gdbarch_data (target_gdbarch, remote_g_packet_data_handle);
6911
6912 if (!VEC_empty (remote_g_packet_guess_s, data->guesses))
6913 {
6914 struct remote_g_packet_guess *guess;
6915 int ix;
6916 int bytes = send_g_packet ();
6917
6918 for (ix = 0;
6919 VEC_iterate (remote_g_packet_guess_s, data->guesses, ix, guess);
6920 ix++)
6921 if (guess->bytes == bytes)
6922 return guess->tdesc;
6923
6924 /* We discard the g packet. A minor optimization would be to
6925 hold on to it, and fill the register cache once we have selected
6926 an architecture, but it's too tricky to do safely. */
6927 }
6928
6929 return NULL;
6930 }
6931
6932 /* Remote file transfer support. This is host-initiated I/O, not
6933 target-initiated; for target-initiated, see remote-fileio.c. */
6934
6935 /* If *LEFT is at least the length of STRING, copy STRING to
6936 *BUFFER, update *BUFFER to point to the new end of the buffer, and
6937 decrease *LEFT. Otherwise raise an error. */
6938
6939 static void
6940 remote_buffer_add_string (char **buffer, int *left, char *string)
6941 {
6942 int len = strlen (string);
6943
6944 if (len > *left)
6945 error (_("Packet too long for target."));
6946
6947 memcpy (*buffer, string, len);
6948 *buffer += len;
6949 *left -= len;
6950
6951 /* NUL-terminate the buffer as a convenience, if there is
6952 room. */
6953 if (*left)
6954 **buffer = '\0';
6955 }
6956
6957 /* If *LEFT is large enough, hex encode LEN bytes from BYTES into
6958 *BUFFER, update *BUFFER to point to the new end of the buffer, and
6959 decrease *LEFT. Otherwise raise an error. */
6960
6961 static void
6962 remote_buffer_add_bytes (char **buffer, int *left, const gdb_byte *bytes,
6963 int len)
6964 {
6965 if (2 * len > *left)
6966 error (_("Packet too long for target."));
6967
6968 bin2hex (bytes, *buffer, len);
6969 *buffer += 2 * len;
6970 *left -= 2 * len;
6971
6972 /* NUL-terminate the buffer as a convenience, if there is
6973 room. */
6974 if (*left)
6975 **buffer = '\0';
6976 }
6977
6978 /* If *LEFT is large enough, convert VALUE to hex and add it to
6979 *BUFFER, update *BUFFER to point to the new end of the buffer, and
6980 decrease *LEFT. Otherwise raise an error. */
6981
6982 static void
6983 remote_buffer_add_int (char **buffer, int *left, ULONGEST value)
6984 {
6985 int len = hexnumlen (value);
6986
6987 if (len > *left)
6988 error (_("Packet too long for target."));
6989
6990 hexnumstr (*buffer, value);
6991 *buffer += len;
6992 *left -= len;
6993
6994 /* NUL-terminate the buffer as a convenience, if there is
6995 room. */
6996 if (*left)
6997 **buffer = '\0';
6998 }
6999
7000 /* Parse an I/O result packet from BUFFER. Set RETCODE to the return
7001 value, *REMOTE_ERRNO to the remote error number or zero if none
7002 was included, and *ATTACHMENT to point to the start of the annex
7003 if any. The length of the packet isn't needed here; there may
7004 be NUL bytes in BUFFER, but they will be after *ATTACHMENT.
7005
7006 Return 0 if the packet could be parsed, -1 if it could not. If
7007 -1 is returned, the other variables may not be initialized. */
7008
7009 static int
7010 remote_hostio_parse_result (char *buffer, int *retcode,
7011 int *remote_errno, char **attachment)
7012 {
7013 char *p, *p2;
7014
7015 *remote_errno = 0;
7016 *attachment = NULL;
7017
7018 if (buffer[0] != 'F')
7019 return -1;
7020
7021 errno = 0;
7022 *retcode = strtol (&buffer[1], &p, 16);
7023 if (errno != 0 || p == &buffer[1])
7024 return -1;
7025
7026 /* Check for ",errno". */
7027 if (*p == ',')
7028 {
7029 errno = 0;
7030 *remote_errno = strtol (p + 1, &p2, 16);
7031 if (errno != 0 || p + 1 == p2)
7032 return -1;
7033 p = p2;
7034 }
7035
7036 /* Check for ";attachment". If there is no attachment, the
7037 packet should end here. */
7038 if (*p == ';')
7039 {
7040 *attachment = p + 1;
7041 return 0;
7042 }
7043 else if (*p == '\0')
7044 return 0;
7045 else
7046 return -1;
7047 }
7048
7049 /* Send a prepared I/O packet to the target and read its response.
7050 The prepared packet is in the global RS->BUF before this function
7051 is called, and the answer is there when we return.
7052
7053 COMMAND_BYTES is the length of the request to send, which may include
7054 binary data. WHICH_PACKET is the packet configuration to check
7055 before attempting a packet. If an error occurs, *REMOTE_ERRNO
7056 is set to the error number and -1 is returned. Otherwise the value
7057 returned by the function is returned.
7058
7059 ATTACHMENT and ATTACHMENT_LEN should be non-NULL if and only if an
7060 attachment is expected; an error will be reported if there's a
7061 mismatch. If one is found, *ATTACHMENT will be set to point into
7062 the packet buffer and *ATTACHMENT_LEN will be set to the
7063 attachment's length. */
7064
7065 static int
7066 remote_hostio_send_command (int command_bytes, int which_packet,
7067 int *remote_errno, char **attachment,
7068 int *attachment_len)
7069 {
7070 struct remote_state *rs = get_remote_state ();
7071 int ret, bytes_read;
7072 char *attachment_tmp;
7073
7074 if (!remote_desc
7075 || remote_protocol_packets[which_packet].support == PACKET_DISABLE)
7076 {
7077 *remote_errno = FILEIO_ENOSYS;
7078 return -1;
7079 }
7080
7081 putpkt_binary (rs->buf, command_bytes);
7082 bytes_read = getpkt_sane (&rs->buf, &rs->buf_size, 0);
7083
7084 /* If it timed out, something is wrong. Don't try to parse the
7085 buffer. */
7086 if (bytes_read < 0)
7087 {
7088 *remote_errno = FILEIO_EINVAL;
7089 return -1;
7090 }
7091
7092 switch (packet_ok (rs->buf, &remote_protocol_packets[which_packet]))
7093 {
7094 case PACKET_ERROR:
7095 *remote_errno = FILEIO_EINVAL;
7096 return -1;
7097 case PACKET_UNKNOWN:
7098 *remote_errno = FILEIO_ENOSYS;
7099 return -1;
7100 case PACKET_OK:
7101 break;
7102 }
7103
7104 if (remote_hostio_parse_result (rs->buf, &ret, remote_errno,
7105 &attachment_tmp))
7106 {
7107 *remote_errno = FILEIO_EINVAL;
7108 return -1;
7109 }
7110
7111 /* Make sure we saw an attachment if and only if we expected one. */
7112 if ((attachment_tmp == NULL && attachment != NULL)
7113 || (attachment_tmp != NULL && attachment == NULL))
7114 {
7115 *remote_errno = FILEIO_EINVAL;
7116 return -1;
7117 }
7118
7119 /* If an attachment was found, it must point into the packet buffer;
7120 work out how many bytes there were. */
7121 if (attachment_tmp != NULL)
7122 {
7123 *attachment = attachment_tmp;
7124 *attachment_len = bytes_read - (*attachment - rs->buf);
7125 }
7126
7127 return ret;
7128 }
7129
7130 /* Open FILENAME on the remote target, using FLAGS and MODE. Return a
7131 remote file descriptor, or -1 if an error occurs (and set
7132 *REMOTE_ERRNO). */
7133
7134 static int
7135 remote_hostio_open (const char *filename, int flags, int mode,
7136 int *remote_errno)
7137 {
7138 struct remote_state *rs = get_remote_state ();
7139 char *p = rs->buf;
7140 int left = get_remote_packet_size () - 1;
7141
7142 remote_buffer_add_string (&p, &left, "vFile:open:");
7143
7144 remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
7145 strlen (filename));
7146 remote_buffer_add_string (&p, &left, ",");
7147
7148 remote_buffer_add_int (&p, &left, flags);
7149 remote_buffer_add_string (&p, &left, ",");
7150
7151 remote_buffer_add_int (&p, &left, mode);
7152
7153 return remote_hostio_send_command (p - rs->buf, PACKET_vFile_open,
7154 remote_errno, NULL, NULL);
7155 }
7156
7157 /* Write up to LEN bytes from WRITE_BUF to FD on the remote target.
7158 Return the number of bytes written, or -1 if an error occurs (and
7159 set *REMOTE_ERRNO). */
7160
7161 static int
7162 remote_hostio_pwrite (int fd, const gdb_byte *write_buf, int len,
7163 ULONGEST offset, int *remote_errno)
7164 {
7165 struct remote_state *rs = get_remote_state ();
7166 char *p = rs->buf;
7167 int left = get_remote_packet_size ();
7168 int out_len;
7169
7170 remote_buffer_add_string (&p, &left, "vFile:pwrite:");
7171
7172 remote_buffer_add_int (&p, &left, fd);
7173 remote_buffer_add_string (&p, &left, ",");
7174
7175 remote_buffer_add_int (&p, &left, offset);
7176 remote_buffer_add_string (&p, &left, ",");
7177
7178 p += remote_escape_output (write_buf, len, p, &out_len,
7179 get_remote_packet_size () - (p - rs->buf));
7180
7181 return remote_hostio_send_command (p - rs->buf, PACKET_vFile_pwrite,
7182 remote_errno, NULL, NULL);
7183 }
7184
7185 /* Read up to LEN bytes FD on the remote target into READ_BUF
7186 Return the number of bytes read, or -1 if an error occurs (and
7187 set *REMOTE_ERRNO). */
7188
7189 static int
7190 remote_hostio_pread (int fd, gdb_byte *read_buf, int len,
7191 ULONGEST offset, int *remote_errno)
7192 {
7193 struct remote_state *rs = get_remote_state ();
7194 char *p = rs->buf;
7195 char *attachment;
7196 int left = get_remote_packet_size ();
7197 int ret, attachment_len;
7198 int read_len;
7199
7200 remote_buffer_add_string (&p, &left, "vFile:pread:");
7201
7202 remote_buffer_add_int (&p, &left, fd);
7203 remote_buffer_add_string (&p, &left, ",");
7204
7205 remote_buffer_add_int (&p, &left, len);
7206 remote_buffer_add_string (&p, &left, ",");
7207
7208 remote_buffer_add_int (&p, &left, offset);
7209
7210 ret = remote_hostio_send_command (p - rs->buf, PACKET_vFile_pread,
7211 remote_errno, &attachment,
7212 &attachment_len);
7213
7214 if (ret < 0)
7215 return ret;
7216
7217 read_len = remote_unescape_input (attachment, attachment_len,
7218 read_buf, len);
7219 if (read_len != ret)
7220 error (_("Read returned %d, but %d bytes."), ret, (int) read_len);
7221
7222 return ret;
7223 }
7224
7225 /* Close FD on the remote target. Return 0, or -1 if an error occurs
7226 (and set *REMOTE_ERRNO). */
7227
7228 static int
7229 remote_hostio_close (int fd, int *remote_errno)
7230 {
7231 struct remote_state *rs = get_remote_state ();
7232 char *p = rs->buf;
7233 int left = get_remote_packet_size () - 1;
7234
7235 remote_buffer_add_string (&p, &left, "vFile:close:");
7236
7237 remote_buffer_add_int (&p, &left, fd);
7238
7239 return remote_hostio_send_command (p - rs->buf, PACKET_vFile_close,
7240 remote_errno, NULL, NULL);
7241 }
7242
7243 /* Unlink FILENAME on the remote target. Return 0, or -1 if an error
7244 occurs (and set *REMOTE_ERRNO). */
7245
7246 static int
7247 remote_hostio_unlink (const char *filename, int *remote_errno)
7248 {
7249 struct remote_state *rs = get_remote_state ();
7250 char *p = rs->buf;
7251 int left = get_remote_packet_size () - 1;
7252
7253 remote_buffer_add_string (&p, &left, "vFile:unlink:");
7254
7255 remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
7256 strlen (filename));
7257
7258 return remote_hostio_send_command (p - rs->buf, PACKET_vFile_unlink,
7259 remote_errno, NULL, NULL);
7260 }
7261
7262 static int
7263 remote_fileio_errno_to_host (int errnum)
7264 {
7265 switch (errnum)
7266 {
7267 case FILEIO_EPERM:
7268 return EPERM;
7269 case FILEIO_ENOENT:
7270 return ENOENT;
7271 case FILEIO_EINTR:
7272 return EINTR;
7273 case FILEIO_EIO:
7274 return EIO;
7275 case FILEIO_EBADF:
7276 return EBADF;
7277 case FILEIO_EACCES:
7278 return EACCES;
7279 case FILEIO_EFAULT:
7280 return EFAULT;
7281 case FILEIO_EBUSY:
7282 return EBUSY;
7283 case FILEIO_EEXIST:
7284 return EEXIST;
7285 case FILEIO_ENODEV:
7286 return ENODEV;
7287 case FILEIO_ENOTDIR:
7288 return ENOTDIR;
7289 case FILEIO_EISDIR:
7290 return EISDIR;
7291 case FILEIO_EINVAL:
7292 return EINVAL;
7293 case FILEIO_ENFILE:
7294 return ENFILE;
7295 case FILEIO_EMFILE:
7296 return EMFILE;
7297 case FILEIO_EFBIG:
7298 return EFBIG;
7299 case FILEIO_ENOSPC:
7300 return ENOSPC;
7301 case FILEIO_ESPIPE:
7302 return ESPIPE;
7303 case FILEIO_EROFS:
7304 return EROFS;
7305 case FILEIO_ENOSYS:
7306 return ENOSYS;
7307 case FILEIO_ENAMETOOLONG:
7308 return ENAMETOOLONG;
7309 }
7310 return -1;
7311 }
7312
7313 static char *
7314 remote_hostio_error (int errnum)
7315 {
7316 int host_error = remote_fileio_errno_to_host (errnum);
7317
7318 if (host_error == -1)
7319 error (_("Unknown remote I/O error %d"), errnum);
7320 else
7321 error (_("Remote I/O error: %s"), safe_strerror (host_error));
7322 }
7323
7324 static void
7325 fclose_cleanup (void *file)
7326 {
7327 fclose (file);
7328 }
7329
7330 static void
7331 remote_hostio_close_cleanup (void *opaque)
7332 {
7333 int fd = *(int *) opaque;
7334 int remote_errno;
7335
7336 remote_hostio_close (fd, &remote_errno);
7337 }
7338
7339
7340 static void *
7341 remote_bfd_iovec_open (struct bfd *abfd, void *open_closure)
7342 {
7343 const char *filename = bfd_get_filename (abfd);
7344 int fd, remote_errno;
7345 int *stream;
7346
7347 gdb_assert (remote_filename_p (filename));
7348
7349 fd = remote_hostio_open (filename + 7, FILEIO_O_RDONLY, 0, &remote_errno);
7350 if (fd == -1)
7351 {
7352 errno = remote_fileio_errno_to_host (remote_errno);
7353 bfd_set_error (bfd_error_system_call);
7354 return NULL;
7355 }
7356
7357 stream = xmalloc (sizeof (int));
7358 *stream = fd;
7359 return stream;
7360 }
7361
7362 static int
7363 remote_bfd_iovec_close (struct bfd *abfd, void *stream)
7364 {
7365 int fd = *(int *)stream;
7366 int remote_errno;
7367
7368 xfree (stream);
7369
7370 /* Ignore errors on close; these may happen if the remote
7371 connection was already torn down. */
7372 remote_hostio_close (fd, &remote_errno);
7373
7374 return 1;
7375 }
7376
7377 static file_ptr
7378 remote_bfd_iovec_pread (struct bfd *abfd, void *stream, void *buf,
7379 file_ptr nbytes, file_ptr offset)
7380 {
7381 int fd = *(int *)stream;
7382 int remote_errno;
7383 file_ptr pos, bytes;
7384
7385 pos = 0;
7386 while (nbytes > pos)
7387 {
7388 bytes = remote_hostio_pread (fd, (char *)buf + pos, nbytes - pos,
7389 offset + pos, &remote_errno);
7390 if (bytes == 0)
7391 /* Success, but no bytes, means end-of-file. */
7392 break;
7393 if (bytes == -1)
7394 {
7395 errno = remote_fileio_errno_to_host (remote_errno);
7396 bfd_set_error (bfd_error_system_call);
7397 return -1;
7398 }
7399
7400 pos += bytes;
7401 }
7402
7403 return pos;
7404 }
7405
7406 static int
7407 remote_bfd_iovec_stat (struct bfd *abfd, void *stream, struct stat *sb)
7408 {
7409 /* FIXME: We should probably implement remote_hostio_stat. */
7410 sb->st_size = INT_MAX;
7411 return 0;
7412 }
7413
7414 int
7415 remote_filename_p (const char *filename)
7416 {
7417 return strncmp (filename, "remote:", 7) == 0;
7418 }
7419
7420 bfd *
7421 remote_bfd_open (const char *remote_file, const char *target)
7422 {
7423 return bfd_openr_iovec (remote_file, target,
7424 remote_bfd_iovec_open, NULL,
7425 remote_bfd_iovec_pread,
7426 remote_bfd_iovec_close,
7427 remote_bfd_iovec_stat);
7428 }
7429
7430 void
7431 remote_file_put (const char *local_file, const char *remote_file, int from_tty)
7432 {
7433 struct cleanup *back_to, *close_cleanup;
7434 int retcode, fd, remote_errno, bytes, io_size;
7435 FILE *file;
7436 gdb_byte *buffer;
7437 int bytes_in_buffer;
7438 int saw_eof;
7439 ULONGEST offset;
7440
7441 if (!remote_desc)
7442 error (_("command can only be used with remote target"));
7443
7444 file = fopen (local_file, "rb");
7445 if (file == NULL)
7446 perror_with_name (local_file);
7447 back_to = make_cleanup (fclose_cleanup, file);
7448
7449 fd = remote_hostio_open (remote_file, (FILEIO_O_WRONLY | FILEIO_O_CREAT
7450 | FILEIO_O_TRUNC),
7451 0700, &remote_errno);
7452 if (fd == -1)
7453 remote_hostio_error (remote_errno);
7454
7455 /* Send up to this many bytes at once. They won't all fit in the
7456 remote packet limit, so we'll transfer slightly fewer. */
7457 io_size = get_remote_packet_size ();
7458 buffer = xmalloc (io_size);
7459 make_cleanup (xfree, buffer);
7460
7461 close_cleanup = make_cleanup (remote_hostio_close_cleanup, &fd);
7462
7463 bytes_in_buffer = 0;
7464 saw_eof = 0;
7465 offset = 0;
7466 while (bytes_in_buffer || !saw_eof)
7467 {
7468 if (!saw_eof)
7469 {
7470 bytes = fread (buffer + bytes_in_buffer, 1, io_size - bytes_in_buffer,
7471 file);
7472 if (bytes == 0)
7473 {
7474 if (ferror (file))
7475 error (_("Error reading %s."), local_file);
7476 else
7477 {
7478 /* EOF. Unless there is something still in the
7479 buffer from the last iteration, we are done. */
7480 saw_eof = 1;
7481 if (bytes_in_buffer == 0)
7482 break;
7483 }
7484 }
7485 }
7486 else
7487 bytes = 0;
7488
7489 bytes += bytes_in_buffer;
7490 bytes_in_buffer = 0;
7491
7492 retcode = remote_hostio_pwrite (fd, buffer, bytes, offset, &remote_errno);
7493
7494 if (retcode < 0)
7495 remote_hostio_error (remote_errno);
7496 else if (retcode == 0)
7497 error (_("Remote write of %d bytes returned 0!"), bytes);
7498 else if (retcode < bytes)
7499 {
7500 /* Short write. Save the rest of the read data for the next
7501 write. */
7502 bytes_in_buffer = bytes - retcode;
7503 memmove (buffer, buffer + retcode, bytes_in_buffer);
7504 }
7505
7506 offset += retcode;
7507 }
7508
7509 discard_cleanups (close_cleanup);
7510 if (remote_hostio_close (fd, &remote_errno))
7511 remote_hostio_error (remote_errno);
7512
7513 if (from_tty)
7514 printf_filtered (_("Successfully sent file \"%s\".\n"), local_file);
7515 do_cleanups (back_to);
7516 }
7517
7518 void
7519 remote_file_get (const char *remote_file, const char *local_file, int from_tty)
7520 {
7521 struct cleanup *back_to, *close_cleanup;
7522 int retcode, fd, remote_errno, bytes, io_size;
7523 FILE *file;
7524 gdb_byte *buffer;
7525 ULONGEST offset;
7526
7527 if (!remote_desc)
7528 error (_("command can only be used with remote target"));
7529
7530 fd = remote_hostio_open (remote_file, FILEIO_O_RDONLY, 0, &remote_errno);
7531 if (fd == -1)
7532 remote_hostio_error (remote_errno);
7533
7534 file = fopen (local_file, "wb");
7535 if (file == NULL)
7536 perror_with_name (local_file);
7537 back_to = make_cleanup (fclose_cleanup, file);
7538
7539 /* Send up to this many bytes at once. They won't all fit in the
7540 remote packet limit, so we'll transfer slightly fewer. */
7541 io_size = get_remote_packet_size ();
7542 buffer = xmalloc (io_size);
7543 make_cleanup (xfree, buffer);
7544
7545 close_cleanup = make_cleanup (remote_hostio_close_cleanup, &fd);
7546
7547 offset = 0;
7548 while (1)
7549 {
7550 bytes = remote_hostio_pread (fd, buffer, io_size, offset, &remote_errno);
7551 if (bytes == 0)
7552 /* Success, but no bytes, means end-of-file. */
7553 break;
7554 if (bytes == -1)
7555 remote_hostio_error (remote_errno);
7556
7557 offset += bytes;
7558
7559 bytes = fwrite (buffer, 1, bytes, file);
7560 if (bytes == 0)
7561 perror_with_name (local_file);
7562 }
7563
7564 discard_cleanups (close_cleanup);
7565 if (remote_hostio_close (fd, &remote_errno))
7566 remote_hostio_error (remote_errno);
7567
7568 if (from_tty)
7569 printf_filtered (_("Successfully fetched file \"%s\".\n"), remote_file);
7570 do_cleanups (back_to);
7571 }
7572
7573 void
7574 remote_file_delete (const char *remote_file, int from_tty)
7575 {
7576 int retcode, remote_errno;
7577
7578 if (!remote_desc)
7579 error (_("command can only be used with remote target"));
7580
7581 retcode = remote_hostio_unlink (remote_file, &remote_errno);
7582 if (retcode == -1)
7583 remote_hostio_error (remote_errno);
7584
7585 if (from_tty)
7586 printf_filtered (_("Successfully deleted file \"%s\".\n"), remote_file);
7587 }
7588
7589 static void
7590 remote_put_command (char *args, int from_tty)
7591 {
7592 struct cleanup *back_to;
7593 char **argv;
7594
7595 if (args == NULL)
7596 error_no_arg (_("file to put"));
7597
7598 argv = gdb_buildargv (args);
7599 back_to = make_cleanup_freeargv (argv);
7600 if (argv[0] == NULL || argv[1] == NULL || argv[2] != NULL)
7601 error (_("Invalid parameters to remote put"));
7602
7603 remote_file_put (argv[0], argv[1], from_tty);
7604
7605 do_cleanups (back_to);
7606 }
7607
7608 static void
7609 remote_get_command (char *args, int from_tty)
7610 {
7611 struct cleanup *back_to;
7612 char **argv;
7613
7614 if (args == NULL)
7615 error_no_arg (_("file to get"));
7616
7617 argv = gdb_buildargv (args);
7618 back_to = make_cleanup_freeargv (argv);
7619 if (argv[0] == NULL || argv[1] == NULL || argv[2] != NULL)
7620 error (_("Invalid parameters to remote get"));
7621
7622 remote_file_get (argv[0], argv[1], from_tty);
7623
7624 do_cleanups (back_to);
7625 }
7626
7627 static void
7628 remote_delete_command (char *args, int from_tty)
7629 {
7630 struct cleanup *back_to;
7631 char **argv;
7632
7633 if (args == NULL)
7634 error_no_arg (_("file to delete"));
7635
7636 argv = gdb_buildargv (args);
7637 back_to = make_cleanup_freeargv (argv);
7638 if (argv[0] == NULL || argv[1] != NULL)
7639 error (_("Invalid parameters to remote delete"));
7640
7641 remote_file_delete (argv[0], from_tty);
7642
7643 do_cleanups (back_to);
7644 }
7645
7646 static void
7647 remote_command (char *args, int from_tty)
7648 {
7649 help_list (remote_cmdlist, "remote ", -1, gdb_stdout);
7650 }
7651
7652 static int remote_target_can_reverse = 1;
7653
7654 static int
7655 remote_can_execute_reverse (void)
7656 {
7657 return remote_target_can_reverse;
7658 }
7659
7660 static void
7661 init_remote_ops (void)
7662 {
7663 remote_ops.to_shortname = "remote";
7664 remote_ops.to_longname = "Remote serial target in gdb-specific protocol";
7665 remote_ops.to_doc =
7666 "Use a remote computer via a serial line, using a gdb-specific protocol.\n\
7667 Specify the serial device it is connected to\n\
7668 (e.g. /dev/ttyS0, /dev/ttya, COM1, etc.).";
7669 remote_ops.to_open = remote_open;
7670 remote_ops.to_close = remote_close;
7671 remote_ops.to_detach = remote_detach;
7672 remote_ops.to_disconnect = remote_disconnect;
7673 remote_ops.to_resume = remote_resume;
7674 remote_ops.to_wait = remote_wait;
7675 remote_ops.to_fetch_registers = remote_fetch_registers;
7676 remote_ops.to_store_registers = remote_store_registers;
7677 remote_ops.to_prepare_to_store = remote_prepare_to_store;
7678 remote_ops.deprecated_xfer_memory = remote_xfer_memory;
7679 remote_ops.to_files_info = remote_files_info;
7680 remote_ops.to_insert_breakpoint = remote_insert_breakpoint;
7681 remote_ops.to_remove_breakpoint = remote_remove_breakpoint;
7682 remote_ops.to_stopped_by_watchpoint = remote_stopped_by_watchpoint;
7683 remote_ops.to_stopped_data_address = remote_stopped_data_address;
7684 remote_ops.to_can_use_hw_breakpoint = remote_check_watch_resources;
7685 remote_ops.to_insert_hw_breakpoint = remote_insert_hw_breakpoint;
7686 remote_ops.to_remove_hw_breakpoint = remote_remove_hw_breakpoint;
7687 remote_ops.to_insert_watchpoint = remote_insert_watchpoint;
7688 remote_ops.to_remove_watchpoint = remote_remove_watchpoint;
7689 remote_ops.to_kill = remote_kill;
7690 remote_ops.to_load = generic_load;
7691 remote_ops.to_mourn_inferior = remote_mourn;
7692 remote_ops.to_thread_alive = remote_thread_alive;
7693 remote_ops.to_find_new_threads = remote_threads_info;
7694 remote_ops.to_pid_to_str = remote_pid_to_str;
7695 remote_ops.to_extra_thread_info = remote_threads_extra_info;
7696 remote_ops.to_stop = remote_stop;
7697 remote_ops.to_xfer_partial = remote_xfer_partial;
7698 remote_ops.to_rcmd = remote_rcmd;
7699 remote_ops.to_log_command = serial_log_command;
7700 remote_ops.to_get_thread_local_address = remote_get_thread_local_address;
7701 remote_ops.to_stratum = process_stratum;
7702 remote_ops.to_has_all_memory = 1;
7703 remote_ops.to_has_memory = 1;
7704 remote_ops.to_has_stack = 1;
7705 remote_ops.to_has_registers = 1;
7706 remote_ops.to_has_execution = 1;
7707 remote_ops.to_has_thread_control = tc_schedlock; /* can lock scheduler */
7708 remote_ops.to_can_execute_reverse = remote_can_execute_reverse;
7709 remote_ops.to_magic = OPS_MAGIC;
7710 remote_ops.to_memory_map = remote_memory_map;
7711 remote_ops.to_flash_erase = remote_flash_erase;
7712 remote_ops.to_flash_done = remote_flash_done;
7713 remote_ops.to_read_description = remote_read_description;
7714 remote_ops.to_search_memory = remote_search_memory;
7715 remote_ops.to_can_async_p = remote_can_async_p;
7716 remote_ops.to_is_async_p = remote_is_async_p;
7717 remote_ops.to_async = remote_async;
7718 remote_ops.to_async_mask = remote_async_mask;
7719 remote_ops.to_terminal_inferior = remote_terminal_inferior;
7720 remote_ops.to_terminal_ours = remote_terminal_ours;
7721 }
7722
7723 /* Set up the extended remote vector by making a copy of the standard
7724 remote vector and adding to it. */
7725
7726 static void
7727 init_extended_remote_ops (void)
7728 {
7729 extended_remote_ops = remote_ops;
7730
7731 extended_remote_ops.to_shortname = "extended-remote";
7732 extended_remote_ops.to_longname =
7733 "Extended remote serial target in gdb-specific protocol";
7734 extended_remote_ops.to_doc =
7735 "Use a remote computer via a serial line, using a gdb-specific protocol.\n\
7736 Specify the serial device it is connected to (e.g. /dev/ttya).";
7737 extended_remote_ops.to_open = extended_remote_open;
7738 extended_remote_ops.to_create_inferior = extended_remote_create_inferior;
7739 extended_remote_ops.to_mourn_inferior = extended_remote_mourn;
7740 extended_remote_ops.to_detach = extended_remote_detach;
7741 extended_remote_ops.to_attach = extended_remote_attach;
7742 extended_remote_ops.to_kill = extended_remote_kill;
7743 }
7744
7745 static int
7746 remote_can_async_p (void)
7747 {
7748 if (!target_async_permitted)
7749 /* We only enable async when the user specifically asks for it. */
7750 return 0;
7751
7752 /* We're async whenever the serial device is. */
7753 return remote_async_mask_value && serial_can_async_p (remote_desc);
7754 }
7755
7756 static int
7757 remote_is_async_p (void)
7758 {
7759 if (!target_async_permitted)
7760 /* We only enable async when the user specifically asks for it. */
7761 return 0;
7762
7763 /* We're async whenever the serial device is. */
7764 return remote_async_mask_value && serial_is_async_p (remote_desc);
7765 }
7766
7767 /* Pass the SERIAL event on and up to the client. One day this code
7768 will be able to delay notifying the client of an event until the
7769 point where an entire packet has been received. */
7770
7771 static void (*async_client_callback) (enum inferior_event_type event_type,
7772 void *context);
7773 static void *async_client_context;
7774 static serial_event_ftype remote_async_serial_handler;
7775
7776 static void
7777 remote_async_serial_handler (struct serial *scb, void *context)
7778 {
7779 /* Don't propogate error information up to the client. Instead let
7780 the client find out about the error by querying the target. */
7781 async_client_callback (INF_REG_EVENT, async_client_context);
7782 }
7783
7784 static void
7785 remote_async (void (*callback) (enum inferior_event_type event_type,
7786 void *context), void *context)
7787 {
7788 if (remote_async_mask_value == 0)
7789 internal_error (__FILE__, __LINE__,
7790 _("Calling remote_async when async is masked"));
7791
7792 if (callback != NULL)
7793 {
7794 serial_async (remote_desc, remote_async_serial_handler, NULL);
7795 async_client_callback = callback;
7796 async_client_context = context;
7797 }
7798 else
7799 serial_async (remote_desc, NULL, NULL);
7800 }
7801
7802 static int
7803 remote_async_mask (int new_mask)
7804 {
7805 int curr_mask = remote_async_mask_value;
7806 remote_async_mask_value = new_mask;
7807 return curr_mask;
7808 }
7809
7810 static void
7811 set_remote_cmd (char *args, int from_tty)
7812 {
7813 help_list (remote_set_cmdlist, "set remote ", -1, gdb_stdout);
7814 }
7815
7816 static void
7817 show_remote_cmd (char *args, int from_tty)
7818 {
7819 /* We can't just use cmd_show_list here, because we want to skip
7820 the redundant "show remote Z-packet" and the legacy aliases. */
7821 struct cleanup *showlist_chain;
7822 struct cmd_list_element *list = remote_show_cmdlist;
7823
7824 showlist_chain = make_cleanup_ui_out_tuple_begin_end (uiout, "showlist");
7825 for (; list != NULL; list = list->next)
7826 if (strcmp (list->name, "Z-packet") == 0)
7827 continue;
7828 else if (list->type == not_set_cmd)
7829 /* Alias commands are exactly like the original, except they
7830 don't have the normal type. */
7831 continue;
7832 else
7833 {
7834 struct cleanup *option_chain
7835 = make_cleanup_ui_out_tuple_begin_end (uiout, "option");
7836 ui_out_field_string (uiout, "name", list->name);
7837 ui_out_text (uiout, ": ");
7838 if (list->type == show_cmd)
7839 do_setshow_command ((char *) NULL, from_tty, list);
7840 else
7841 cmd_func (list, NULL, from_tty);
7842 /* Close the tuple. */
7843 do_cleanups (option_chain);
7844 }
7845
7846 /* Close the tuple. */
7847 do_cleanups (showlist_chain);
7848 }
7849
7850
7851 /* Function to be called whenever a new objfile (shlib) is detected. */
7852 static void
7853 remote_new_objfile (struct objfile *objfile)
7854 {
7855 if (remote_desc != 0) /* Have a remote connection. */
7856 remote_check_symbols (objfile);
7857 }
7858
7859 void
7860 _initialize_remote (void)
7861 {
7862 struct remote_state *rs;
7863
7864 /* architecture specific data */
7865 remote_gdbarch_data_handle =
7866 gdbarch_data_register_post_init (init_remote_state);
7867 remote_g_packet_data_handle =
7868 gdbarch_data_register_pre_init (remote_g_packet_data_init);
7869
7870 /* Initialize the per-target state. At the moment there is only one
7871 of these, not one per target. Only one target is active at a
7872 time. The default buffer size is unimportant; it will be expanded
7873 whenever a larger buffer is needed. */
7874 rs = get_remote_state_raw ();
7875 rs->buf_size = 400;
7876 rs->buf = xmalloc (rs->buf_size);
7877
7878 init_remote_ops ();
7879 add_target (&remote_ops);
7880
7881 init_extended_remote_ops ();
7882 add_target (&extended_remote_ops);
7883
7884 /* Hook into new objfile notification. */
7885 observer_attach_new_objfile (remote_new_objfile);
7886
7887 /* Set up signal handlers. */
7888 sigint_remote_token =
7889 create_async_signal_handler (async_remote_interrupt, NULL);
7890 sigint_remote_twice_token =
7891 create_async_signal_handler (inferior_event_handler_wrapper, NULL);
7892
7893 #if 0
7894 init_remote_threadtests ();
7895 #endif
7896
7897 /* set/show remote ... */
7898
7899 add_prefix_cmd ("remote", class_maintenance, set_remote_cmd, _("\
7900 Remote protocol specific variables\n\
7901 Configure various remote-protocol specific variables such as\n\
7902 the packets being used"),
7903 &remote_set_cmdlist, "set remote ",
7904 0 /* allow-unknown */, &setlist);
7905 add_prefix_cmd ("remote", class_maintenance, show_remote_cmd, _("\
7906 Remote protocol specific variables\n\
7907 Configure various remote-protocol specific variables such as\n\
7908 the packets being used"),
7909 &remote_show_cmdlist, "show remote ",
7910 0 /* allow-unknown */, &showlist);
7911
7912 add_cmd ("compare-sections", class_obscure, compare_sections_command, _("\
7913 Compare section data on target to the exec file.\n\
7914 Argument is a single section name (default: all loaded sections)."),
7915 &cmdlist);
7916
7917 add_cmd ("packet", class_maintenance, packet_command, _("\
7918 Send an arbitrary packet to a remote target.\n\
7919 maintenance packet TEXT\n\
7920 If GDB is talking to an inferior via the GDB serial protocol, then\n\
7921 this command sends the string TEXT to the inferior, and displays the\n\
7922 response packet. GDB supplies the initial `$' character, and the\n\
7923 terminating `#' character and checksum."),
7924 &maintenancelist);
7925
7926 add_setshow_boolean_cmd ("remotebreak", no_class, &remote_break, _("\
7927 Set whether to send break if interrupted."), _("\
7928 Show whether to send break if interrupted."), _("\
7929 If set, a break, instead of a cntrl-c, is sent to the remote target."),
7930 NULL, NULL, /* FIXME: i18n: Whether to send break if interrupted is %s. */
7931 &setlist, &showlist);
7932
7933 /* Install commands for configuring memory read/write packets. */
7934
7935 add_cmd ("remotewritesize", no_class, set_memory_write_packet_size, _("\
7936 Set the maximum number of bytes per memory write packet (deprecated)."),
7937 &setlist);
7938 add_cmd ("remotewritesize", no_class, show_memory_write_packet_size, _("\
7939 Show the maximum number of bytes per memory write packet (deprecated)."),
7940 &showlist);
7941 add_cmd ("memory-write-packet-size", no_class,
7942 set_memory_write_packet_size, _("\
7943 Set the maximum number of bytes per memory-write packet.\n\
7944 Specify the number of bytes in a packet or 0 (zero) for the\n\
7945 default packet size. The actual limit is further reduced\n\
7946 dependent on the target. Specify ``fixed'' to disable the\n\
7947 further restriction and ``limit'' to enable that restriction."),
7948 &remote_set_cmdlist);
7949 add_cmd ("memory-read-packet-size", no_class,
7950 set_memory_read_packet_size, _("\
7951 Set the maximum number of bytes per memory-read packet.\n\
7952 Specify the number of bytes in a packet or 0 (zero) for the\n\
7953 default packet size. The actual limit is further reduced\n\
7954 dependent on the target. Specify ``fixed'' to disable the\n\
7955 further restriction and ``limit'' to enable that restriction."),
7956 &remote_set_cmdlist);
7957 add_cmd ("memory-write-packet-size", no_class,
7958 show_memory_write_packet_size,
7959 _("Show the maximum number of bytes per memory-write packet."),
7960 &remote_show_cmdlist);
7961 add_cmd ("memory-read-packet-size", no_class,
7962 show_memory_read_packet_size,
7963 _("Show the maximum number of bytes per memory-read packet."),
7964 &remote_show_cmdlist);
7965
7966 add_setshow_zinteger_cmd ("hardware-watchpoint-limit", no_class,
7967 &remote_hw_watchpoint_limit, _("\
7968 Set the maximum number of target hardware watchpoints."), _("\
7969 Show the maximum number of target hardware watchpoints."), _("\
7970 Specify a negative limit for unlimited."),
7971 NULL, NULL, /* FIXME: i18n: The maximum number of target hardware watchpoints is %s. */
7972 &remote_set_cmdlist, &remote_show_cmdlist);
7973 add_setshow_zinteger_cmd ("hardware-breakpoint-limit", no_class,
7974 &remote_hw_breakpoint_limit, _("\
7975 Set the maximum number of target hardware breakpoints."), _("\
7976 Show the maximum number of target hardware breakpoints."), _("\
7977 Specify a negative limit for unlimited."),
7978 NULL, NULL, /* FIXME: i18n: The maximum number of target hardware breakpoints is %s. */
7979 &remote_set_cmdlist, &remote_show_cmdlist);
7980
7981 add_setshow_integer_cmd ("remoteaddresssize", class_obscure,
7982 &remote_address_size, _("\
7983 Set the maximum size of the address (in bits) in a memory packet."), _("\
7984 Show the maximum size of the address (in bits) in a memory packet."), NULL,
7985 NULL,
7986 NULL, /* FIXME: i18n: */
7987 &setlist, &showlist);
7988
7989 add_packet_config_cmd (&remote_protocol_packets[PACKET_X],
7990 "X", "binary-download", 1);
7991
7992 add_packet_config_cmd (&remote_protocol_packets[PACKET_vCont],
7993 "vCont", "verbose-resume", 0);
7994
7995 add_packet_config_cmd (&remote_protocol_packets[PACKET_QPassSignals],
7996 "QPassSignals", "pass-signals", 0);
7997
7998 add_packet_config_cmd (&remote_protocol_packets[PACKET_qSymbol],
7999 "qSymbol", "symbol-lookup", 0);
8000
8001 add_packet_config_cmd (&remote_protocol_packets[PACKET_P],
8002 "P", "set-register", 1);
8003
8004 add_packet_config_cmd (&remote_protocol_packets[PACKET_p],
8005 "p", "fetch-register", 1);
8006
8007 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z0],
8008 "Z0", "software-breakpoint", 0);
8009
8010 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z1],
8011 "Z1", "hardware-breakpoint", 0);
8012
8013 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z2],
8014 "Z2", "write-watchpoint", 0);
8015
8016 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z3],
8017 "Z3", "read-watchpoint", 0);
8018
8019 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z4],
8020 "Z4", "access-watchpoint", 0);
8021
8022 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_auxv],
8023 "qXfer:auxv:read", "read-aux-vector", 0);
8024
8025 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_features],
8026 "qXfer:features:read", "target-features", 0);
8027
8028 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_libraries],
8029 "qXfer:libraries:read", "library-info", 0);
8030
8031 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_memory_map],
8032 "qXfer:memory-map:read", "memory-map", 0);
8033
8034 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_spu_read],
8035 "qXfer:spu:read", "read-spu-object", 0);
8036
8037 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_spu_write],
8038 "qXfer:spu:write", "write-spu-object", 0);
8039
8040 add_packet_config_cmd (&remote_protocol_packets[PACKET_qGetTLSAddr],
8041 "qGetTLSAddr", "get-thread-local-storage-address",
8042 0);
8043
8044 add_packet_config_cmd (&remote_protocol_packets[PACKET_qSupported],
8045 "qSupported", "supported-packets", 0);
8046
8047 add_packet_config_cmd (&remote_protocol_packets[PACKET_qSearch_memory],
8048 "qSearch:memory", "search-memory", 0);
8049
8050 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_open],
8051 "vFile:open", "hostio-open", 0);
8052
8053 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_pread],
8054 "vFile:pread", "hostio-pread", 0);
8055
8056 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_pwrite],
8057 "vFile:pwrite", "hostio-pwrite", 0);
8058
8059 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_close],
8060 "vFile:close", "hostio-close", 0);
8061
8062 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_unlink],
8063 "vFile:unlink", "hostio-unlink", 0);
8064
8065 add_packet_config_cmd (&remote_protocol_packets[PACKET_vAttach],
8066 "vAttach", "attach", 0);
8067
8068 add_packet_config_cmd (&remote_protocol_packets[PACKET_vRun],
8069 "vRun", "run", 0);
8070
8071 add_packet_config_cmd (&remote_protocol_packets[PACKET_QStartNoAckMode],
8072 "QStartNoAckMode", "noack", 0);
8073
8074 add_packet_config_cmd (&remote_protocol_packets[PACKET_vKill],
8075 "vKill", "kill", 0);
8076
8077 /* Keep the old ``set remote Z-packet ...'' working. Each individual
8078 Z sub-packet has its own set and show commands, but users may
8079 have sets to this variable in their .gdbinit files (or in their
8080 documentation). */
8081 add_setshow_auto_boolean_cmd ("Z-packet", class_obscure,
8082 &remote_Z_packet_detect, _("\
8083 Set use of remote protocol `Z' packets"), _("\
8084 Show use of remote protocol `Z' packets "), _("\
8085 When set, GDB will attempt to use the remote breakpoint and watchpoint\n\
8086 packets."),
8087 set_remote_protocol_Z_packet_cmd,
8088 show_remote_protocol_Z_packet_cmd, /* FIXME: i18n: Use of remote protocol `Z' packets is %s. */
8089 &remote_set_cmdlist, &remote_show_cmdlist);
8090
8091 add_prefix_cmd ("remote", class_files, remote_command, _("\
8092 Manipulate files on the remote system\n\
8093 Transfer files to and from the remote target system."),
8094 &remote_cmdlist, "remote ",
8095 0 /* allow-unknown */, &cmdlist);
8096
8097 add_cmd ("put", class_files, remote_put_command,
8098 _("Copy a local file to the remote system."),
8099 &remote_cmdlist);
8100
8101 add_cmd ("get", class_files, remote_get_command,
8102 _("Copy a remote file to the local system."),
8103 &remote_cmdlist);
8104
8105 add_cmd ("delete", class_files, remote_delete_command,
8106 _("Delete a remote file."),
8107 &remote_cmdlist);
8108
8109 remote_exec_file = xstrdup ("");
8110 add_setshow_string_noescape_cmd ("exec-file", class_files,
8111 &remote_exec_file, _("\
8112 Set the remote pathname for \"run\""), _("\
8113 Show the remote pathname for \"run\""), NULL, NULL, NULL,
8114 &remote_set_cmdlist, &remote_show_cmdlist);
8115
8116 /* Eventually initialize fileio. See fileio.c */
8117 initialize_remote_fileio (remote_set_cmdlist, remote_show_cmdlist);
8118
8119 /* Take advantage of the fact that the LWP field is not used, to tag
8120 special ptids with it set to != 0. */
8121 magic_null_ptid = ptid_build (42000, 1, -1);
8122 not_sent_ptid = ptid_build (42000, 1, -2);
8123 any_thread_ptid = ptid_build (42000, 1, 0);
8124 }