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