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