]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blob - gdb/remote.c
Remove the attach_flag global, and make it per-inferior.
[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 if (*args)
5550 {
5551 struct cleanup *back_to;
5552 int i;
5553 char **argv;
5554
5555 argv = buildargv (args);
5556 back_to = make_cleanup ((void (*) (void *)) freeargv, argv);
5557 for (i = 0; argv[i] != NULL; i++)
5558 {
5559 if (strlen (argv[i]) * 2 + 1 + len >= get_remote_packet_size ())
5560 error (_("Argument list too long for run packet"));
5561 rs->buf[len++] = ';';
5562 len += 2 * bin2hex ((gdb_byte *) argv[i], rs->buf + len, 0);
5563 }
5564 do_cleanups (back_to);
5565 }
5566
5567 rs->buf[len++] = '\0';
5568
5569 putpkt (rs->buf);
5570 getpkt (&rs->buf, &rs->buf_size, 0);
5571
5572 if (packet_ok (rs->buf, &remote_protocol_packets[PACKET_vRun]) == PACKET_OK)
5573 {
5574 /* We have a wait response; we don't need it, though. All is well. */
5575 return 0;
5576 }
5577 else if (remote_protocol_packets[PACKET_vRun].support == PACKET_DISABLE)
5578 /* It wasn't disabled before, but it is now. */
5579 return -1;
5580 else
5581 {
5582 if (remote_exec_file[0] == '\0')
5583 error (_("Running the default executable on the remote target failed; "
5584 "try \"set remote exec-file\"?"));
5585 else
5586 error (_("Running \"%s\" on the remote target failed"),
5587 remote_exec_file);
5588 }
5589 }
5590
5591 /* In the extended protocol we want to be able to do things like
5592 "run" and have them basically work as expected. So we need
5593 a special create_inferior function. We support changing the
5594 executable file and the command line arguments, but not the
5595 environment. */
5596
5597 static void
5598 extended_remote_create_inferior_1 (char *exec_file, char *args,
5599 char **env, int from_tty)
5600 {
5601 /* If running asynchronously, register the target file descriptor
5602 with the event loop. */
5603 if (target_can_async_p ())
5604 target_async (inferior_event_handler, 0);
5605
5606 /* Now restart the remote server. */
5607 if (extended_remote_run (args) == -1)
5608 {
5609 /* vRun was not supported. Fail if we need it to do what the
5610 user requested. */
5611 if (remote_exec_file[0])
5612 error (_("Remote target does not support \"set remote exec-file\""));
5613 if (args[0])
5614 error (_("Remote target does not support \"set args\" or run <ARGS>"));
5615
5616 /* Fall back to "R". */
5617 extended_remote_restart ();
5618 }
5619
5620 /* Clean up from the last time we ran, before we mark the target
5621 running again. This will mark breakpoints uninserted, and
5622 get_offsets may insert breakpoints. */
5623 init_thread_list ();
5624 init_wait_for_inferior ();
5625
5626 /* Now mark the inferior as running before we do anything else. */
5627 inferior_ptid = magic_null_ptid;
5628
5629 add_inferior (ptid_get_pid (inferior_ptid));
5630 add_thread_silent (inferior_ptid);
5631
5632 target_mark_running (&extended_remote_ops);
5633
5634 /* Get updated offsets, if the stub uses qOffsets. */
5635 get_offsets ();
5636 }
5637
5638 static void
5639 extended_remote_create_inferior (char *exec_file, char *args,
5640 char **env, int from_tty)
5641 {
5642 extended_remote_create_inferior_1 (exec_file, args, env, from_tty);
5643 }
5644 \f
5645
5646 /* Insert a breakpoint. On targets that have software breakpoint
5647 support, we ask the remote target to do the work; on targets
5648 which don't, we insert a traditional memory breakpoint. */
5649
5650 static int
5651 remote_insert_breakpoint (struct bp_target_info *bp_tgt)
5652 {
5653 /* Try the "Z" s/w breakpoint packet if it is not already disabled.
5654 If it succeeds, then set the support to PACKET_ENABLE. If it
5655 fails, and the user has explicitly requested the Z support then
5656 report an error, otherwise, mark it disabled and go on. */
5657
5658 if (remote_protocol_packets[PACKET_Z0].support != PACKET_DISABLE)
5659 {
5660 CORE_ADDR addr = bp_tgt->placed_address;
5661 struct remote_state *rs;
5662 char *p;
5663 int bpsize;
5664
5665 gdbarch_breakpoint_from_pc (target_gdbarch, &addr, &bpsize);
5666
5667 rs = get_remote_state ();
5668 p = rs->buf;
5669
5670 *(p++) = 'Z';
5671 *(p++) = '0';
5672 *(p++) = ',';
5673 addr = (ULONGEST) remote_address_masked (addr);
5674 p += hexnumstr (p, addr);
5675 sprintf (p, ",%d", bpsize);
5676
5677 putpkt (rs->buf);
5678 getpkt (&rs->buf, &rs->buf_size, 0);
5679
5680 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0]))
5681 {
5682 case PACKET_ERROR:
5683 return -1;
5684 case PACKET_OK:
5685 bp_tgt->placed_address = addr;
5686 bp_tgt->placed_size = bpsize;
5687 return 0;
5688 case PACKET_UNKNOWN:
5689 break;
5690 }
5691 }
5692
5693 return memory_insert_breakpoint (bp_tgt);
5694 }
5695
5696 static int
5697 remote_remove_breakpoint (struct bp_target_info *bp_tgt)
5698 {
5699 CORE_ADDR addr = bp_tgt->placed_address;
5700 struct remote_state *rs = get_remote_state ();
5701 int bp_size;
5702
5703 if (remote_protocol_packets[PACKET_Z0].support != PACKET_DISABLE)
5704 {
5705 char *p = rs->buf;
5706
5707 *(p++) = 'z';
5708 *(p++) = '0';
5709 *(p++) = ',';
5710
5711 addr = (ULONGEST) remote_address_masked (bp_tgt->placed_address);
5712 p += hexnumstr (p, addr);
5713 sprintf (p, ",%d", bp_tgt->placed_size);
5714
5715 putpkt (rs->buf);
5716 getpkt (&rs->buf, &rs->buf_size, 0);
5717
5718 return (rs->buf[0] == 'E');
5719 }
5720
5721 return memory_remove_breakpoint (bp_tgt);
5722 }
5723
5724 static int
5725 watchpoint_to_Z_packet (int type)
5726 {
5727 switch (type)
5728 {
5729 case hw_write:
5730 return Z_PACKET_WRITE_WP;
5731 break;
5732 case hw_read:
5733 return Z_PACKET_READ_WP;
5734 break;
5735 case hw_access:
5736 return Z_PACKET_ACCESS_WP;
5737 break;
5738 default:
5739 internal_error (__FILE__, __LINE__,
5740 _("hw_bp_to_z: bad watchpoint type %d"), type);
5741 }
5742 }
5743
5744 static int
5745 remote_insert_watchpoint (CORE_ADDR addr, int len, int type)
5746 {
5747 struct remote_state *rs = get_remote_state ();
5748 char *p;
5749 enum Z_packet_type packet = watchpoint_to_Z_packet (type);
5750
5751 if (remote_protocol_packets[PACKET_Z0 + packet].support == PACKET_DISABLE)
5752 return -1;
5753
5754 sprintf (rs->buf, "Z%x,", packet);
5755 p = strchr (rs->buf, '\0');
5756 addr = remote_address_masked (addr);
5757 p += hexnumstr (p, (ULONGEST) addr);
5758 sprintf (p, ",%x", len);
5759
5760 putpkt (rs->buf);
5761 getpkt (&rs->buf, &rs->buf_size, 0);
5762
5763 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0 + packet]))
5764 {
5765 case PACKET_ERROR:
5766 case PACKET_UNKNOWN:
5767 return -1;
5768 case PACKET_OK:
5769 return 0;
5770 }
5771 internal_error (__FILE__, __LINE__,
5772 _("remote_insert_watchpoint: reached end of function"));
5773 }
5774
5775
5776 static int
5777 remote_remove_watchpoint (CORE_ADDR addr, int len, int type)
5778 {
5779 struct remote_state *rs = get_remote_state ();
5780 char *p;
5781 enum Z_packet_type packet = watchpoint_to_Z_packet (type);
5782
5783 if (remote_protocol_packets[PACKET_Z0 + packet].support == PACKET_DISABLE)
5784 return -1;
5785
5786 sprintf (rs->buf, "z%x,", packet);
5787 p = strchr (rs->buf, '\0');
5788 addr = remote_address_masked (addr);
5789 p += hexnumstr (p, (ULONGEST) addr);
5790 sprintf (p, ",%x", len);
5791 putpkt (rs->buf);
5792 getpkt (&rs->buf, &rs->buf_size, 0);
5793
5794 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0 + packet]))
5795 {
5796 case PACKET_ERROR:
5797 case PACKET_UNKNOWN:
5798 return -1;
5799 case PACKET_OK:
5800 return 0;
5801 }
5802 internal_error (__FILE__, __LINE__,
5803 _("remote_remove_watchpoint: reached end of function"));
5804 }
5805
5806
5807 int remote_hw_watchpoint_limit = -1;
5808 int remote_hw_breakpoint_limit = -1;
5809
5810 static int
5811 remote_check_watch_resources (int type, int cnt, int ot)
5812 {
5813 if (type == bp_hardware_breakpoint)
5814 {
5815 if (remote_hw_breakpoint_limit == 0)
5816 return 0;
5817 else if (remote_hw_breakpoint_limit < 0)
5818 return 1;
5819 else if (cnt <= remote_hw_breakpoint_limit)
5820 return 1;
5821 }
5822 else
5823 {
5824 if (remote_hw_watchpoint_limit == 0)
5825 return 0;
5826 else if (remote_hw_watchpoint_limit < 0)
5827 return 1;
5828 else if (ot)
5829 return -1;
5830 else if (cnt <= remote_hw_watchpoint_limit)
5831 return 1;
5832 }
5833 return -1;
5834 }
5835
5836 static int
5837 remote_stopped_by_watchpoint (void)
5838 {
5839 return remote_stopped_by_watchpoint_p;
5840 }
5841
5842 static int
5843 remote_stopped_data_address (struct target_ops *target, CORE_ADDR *addr_p)
5844 {
5845 int rc = 0;
5846 if (remote_stopped_by_watchpoint ())
5847 {
5848 *addr_p = remote_watch_data_address;
5849 rc = 1;
5850 }
5851
5852 return rc;
5853 }
5854
5855
5856 static int
5857 remote_insert_hw_breakpoint (struct bp_target_info *bp_tgt)
5858 {
5859 CORE_ADDR addr;
5860 struct remote_state *rs;
5861 char *p;
5862
5863 /* The length field should be set to the size of a breakpoint
5864 instruction, even though we aren't inserting one ourselves. */
5865
5866 gdbarch_breakpoint_from_pc
5867 (target_gdbarch, &bp_tgt->placed_address, &bp_tgt->placed_size);
5868
5869 if (remote_protocol_packets[PACKET_Z1].support == PACKET_DISABLE)
5870 return -1;
5871
5872 rs = get_remote_state ();
5873 p = rs->buf;
5874
5875 *(p++) = 'Z';
5876 *(p++) = '1';
5877 *(p++) = ',';
5878
5879 addr = remote_address_masked (bp_tgt->placed_address);
5880 p += hexnumstr (p, (ULONGEST) addr);
5881 sprintf (p, ",%x", bp_tgt->placed_size);
5882
5883 putpkt (rs->buf);
5884 getpkt (&rs->buf, &rs->buf_size, 0);
5885
5886 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z1]))
5887 {
5888 case PACKET_ERROR:
5889 case PACKET_UNKNOWN:
5890 return -1;
5891 case PACKET_OK:
5892 return 0;
5893 }
5894 internal_error (__FILE__, __LINE__,
5895 _("remote_insert_hw_breakpoint: reached end of function"));
5896 }
5897
5898
5899 static int
5900 remote_remove_hw_breakpoint (struct bp_target_info *bp_tgt)
5901 {
5902 CORE_ADDR addr;
5903 struct remote_state *rs = get_remote_state ();
5904 char *p = rs->buf;
5905
5906 if (remote_protocol_packets[PACKET_Z1].support == PACKET_DISABLE)
5907 return -1;
5908
5909 *(p++) = 'z';
5910 *(p++) = '1';
5911 *(p++) = ',';
5912
5913 addr = remote_address_masked (bp_tgt->placed_address);
5914 p += hexnumstr (p, (ULONGEST) addr);
5915 sprintf (p, ",%x", bp_tgt->placed_size);
5916
5917 putpkt (rs->buf);
5918 getpkt (&rs->buf, &rs->buf_size, 0);
5919
5920 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z1]))
5921 {
5922 case PACKET_ERROR:
5923 case PACKET_UNKNOWN:
5924 return -1;
5925 case PACKET_OK:
5926 return 0;
5927 }
5928 internal_error (__FILE__, __LINE__,
5929 _("remote_remove_hw_breakpoint: reached end of function"));
5930 }
5931
5932 /* Some targets are only capable of doing downloads, and afterwards
5933 they switch to the remote serial protocol. This function provides
5934 a clean way to get from the download target to the remote target.
5935 It's basically just a wrapper so that we don't have to expose any
5936 of the internal workings of remote.c.
5937
5938 Prior to calling this routine, you should shutdown the current
5939 target code, else you will get the "A program is being debugged
5940 already..." message. Usually a call to pop_target() suffices. */
5941
5942 void
5943 push_remote_target (char *name, int from_tty)
5944 {
5945 printf_filtered (_("Switching to remote protocol\n"));
5946 remote_open (name, from_tty);
5947 }
5948
5949 /* Table used by the crc32 function to calcuate the checksum. */
5950
5951 static unsigned long crc32_table[256] =
5952 {0, 0};
5953
5954 static unsigned long
5955 crc32 (unsigned char *buf, int len, unsigned int crc)
5956 {
5957 if (!crc32_table[1])
5958 {
5959 /* Initialize the CRC table and the decoding table. */
5960 int i, j;
5961 unsigned int c;
5962
5963 for (i = 0; i < 256; i++)
5964 {
5965 for (c = i << 24, j = 8; j > 0; --j)
5966 c = c & 0x80000000 ? (c << 1) ^ 0x04c11db7 : (c << 1);
5967 crc32_table[i] = c;
5968 }
5969 }
5970
5971 while (len--)
5972 {
5973 crc = (crc << 8) ^ crc32_table[((crc >> 24) ^ *buf) & 255];
5974 buf++;
5975 }
5976 return crc;
5977 }
5978
5979 /* compare-sections command
5980
5981 With no arguments, compares each loadable section in the exec bfd
5982 with the same memory range on the target, and reports mismatches.
5983 Useful for verifying the image on the target against the exec file.
5984 Depends on the target understanding the new "qCRC:" request. */
5985
5986 /* FIXME: cagney/1999-10-26: This command should be broken down into a
5987 target method (target verify memory) and generic version of the
5988 actual command. This will allow other high-level code (especially
5989 generic_load()) to make use of this target functionality. */
5990
5991 static void
5992 compare_sections_command (char *args, int from_tty)
5993 {
5994 struct remote_state *rs = get_remote_state ();
5995 asection *s;
5996 unsigned long host_crc, target_crc;
5997 extern bfd *exec_bfd;
5998 struct cleanup *old_chain;
5999 char *tmp;
6000 char *sectdata;
6001 const char *sectname;
6002 bfd_size_type size;
6003 bfd_vma lma;
6004 int matched = 0;
6005 int mismatched = 0;
6006
6007 if (!exec_bfd)
6008 error (_("command cannot be used without an exec file"));
6009 if (!current_target.to_shortname ||
6010 strcmp (current_target.to_shortname, "remote") != 0)
6011 error (_("command can only be used with remote target"));
6012
6013 for (s = exec_bfd->sections; s; s = s->next)
6014 {
6015 if (!(s->flags & SEC_LOAD))
6016 continue; /* skip non-loadable section */
6017
6018 size = bfd_get_section_size (s);
6019 if (size == 0)
6020 continue; /* skip zero-length section */
6021
6022 sectname = bfd_get_section_name (exec_bfd, s);
6023 if (args && strcmp (args, sectname) != 0)
6024 continue; /* not the section selected by user */
6025
6026 matched = 1; /* do this section */
6027 lma = s->lma;
6028 /* FIXME: assumes lma can fit into long. */
6029 xsnprintf (rs->buf, get_remote_packet_size (), "qCRC:%lx,%lx",
6030 (long) lma, (long) size);
6031 putpkt (rs->buf);
6032
6033 /* Be clever; compute the host_crc before waiting for target
6034 reply. */
6035 sectdata = xmalloc (size);
6036 old_chain = make_cleanup (xfree, sectdata);
6037 bfd_get_section_contents (exec_bfd, s, sectdata, 0, size);
6038 host_crc = crc32 ((unsigned char *) sectdata, size, 0xffffffff);
6039
6040 getpkt (&rs->buf, &rs->buf_size, 0);
6041 if (rs->buf[0] == 'E')
6042 error (_("target memory fault, section %s, range 0x%s -- 0x%s"),
6043 sectname, paddr (lma), paddr (lma + size));
6044 if (rs->buf[0] != 'C')
6045 error (_("remote target does not support this operation"));
6046
6047 for (target_crc = 0, tmp = &rs->buf[1]; *tmp; tmp++)
6048 target_crc = target_crc * 16 + fromhex (*tmp);
6049
6050 printf_filtered ("Section %s, range 0x%s -- 0x%s: ",
6051 sectname, paddr (lma), paddr (lma + size));
6052 if (host_crc == target_crc)
6053 printf_filtered ("matched.\n");
6054 else
6055 {
6056 printf_filtered ("MIS-MATCHED!\n");
6057 mismatched++;
6058 }
6059
6060 do_cleanups (old_chain);
6061 }
6062 if (mismatched > 0)
6063 warning (_("One or more sections of the remote executable does not match\n\
6064 the loaded file\n"));
6065 if (args && !matched)
6066 printf_filtered (_("No loaded section named '%s'.\n"), args);
6067 }
6068
6069 /* Write LEN bytes from WRITEBUF into OBJECT_NAME/ANNEX at OFFSET
6070 into remote target. The number of bytes written to the remote
6071 target is returned, or -1 for error. */
6072
6073 static LONGEST
6074 remote_write_qxfer (struct target_ops *ops, const char *object_name,
6075 const char *annex, const gdb_byte *writebuf,
6076 ULONGEST offset, LONGEST len,
6077 struct packet_config *packet)
6078 {
6079 int i, buf_len;
6080 ULONGEST n;
6081 gdb_byte *wbuf;
6082 struct remote_state *rs = get_remote_state ();
6083 int max_size = get_memory_write_packet_size ();
6084
6085 if (packet->support == PACKET_DISABLE)
6086 return -1;
6087
6088 /* Insert header. */
6089 i = snprintf (rs->buf, max_size,
6090 "qXfer:%s:write:%s:%s:",
6091 object_name, annex ? annex : "",
6092 phex_nz (offset, sizeof offset));
6093 max_size -= (i + 1);
6094
6095 /* Escape as much data as fits into rs->buf. */
6096 buf_len = remote_escape_output
6097 (writebuf, len, (rs->buf + i), &max_size, max_size);
6098
6099 if (putpkt_binary (rs->buf, i + buf_len) < 0
6100 || getpkt_sane (&rs->buf, &rs->buf_size, 0) < 0
6101 || packet_ok (rs->buf, packet) != PACKET_OK)
6102 return -1;
6103
6104 unpack_varlen_hex (rs->buf, &n);
6105 return n;
6106 }
6107
6108 /* Read OBJECT_NAME/ANNEX from the remote target using a qXfer packet.
6109 Data at OFFSET, of up to LEN bytes, is read into READBUF; the
6110 number of bytes read is returned, or 0 for EOF, or -1 for error.
6111 The number of bytes read may be less than LEN without indicating an
6112 EOF. PACKET is checked and updated to indicate whether the remote
6113 target supports this object. */
6114
6115 static LONGEST
6116 remote_read_qxfer (struct target_ops *ops, const char *object_name,
6117 const char *annex,
6118 gdb_byte *readbuf, ULONGEST offset, LONGEST len,
6119 struct packet_config *packet)
6120 {
6121 static char *finished_object;
6122 static char *finished_annex;
6123 static ULONGEST finished_offset;
6124
6125 struct remote_state *rs = get_remote_state ();
6126 unsigned int total = 0;
6127 LONGEST i, n, packet_len;
6128
6129 if (packet->support == PACKET_DISABLE)
6130 return -1;
6131
6132 /* Check whether we've cached an end-of-object packet that matches
6133 this request. */
6134 if (finished_object)
6135 {
6136 if (strcmp (object_name, finished_object) == 0
6137 && strcmp (annex ? annex : "", finished_annex) == 0
6138 && offset == finished_offset)
6139 return 0;
6140
6141 /* Otherwise, we're now reading something different. Discard
6142 the cache. */
6143 xfree (finished_object);
6144 xfree (finished_annex);
6145 finished_object = NULL;
6146 finished_annex = NULL;
6147 }
6148
6149 /* Request only enough to fit in a single packet. The actual data
6150 may not, since we don't know how much of it will need to be escaped;
6151 the target is free to respond with slightly less data. We subtract
6152 five to account for the response type and the protocol frame. */
6153 n = min (get_remote_packet_size () - 5, len);
6154 snprintf (rs->buf, get_remote_packet_size () - 4, "qXfer:%s:read:%s:%s,%s",
6155 object_name, annex ? annex : "",
6156 phex_nz (offset, sizeof offset),
6157 phex_nz (n, sizeof n));
6158 i = putpkt (rs->buf);
6159 if (i < 0)
6160 return -1;
6161
6162 rs->buf[0] = '\0';
6163 packet_len = getpkt_sane (&rs->buf, &rs->buf_size, 0);
6164 if (packet_len < 0 || packet_ok (rs->buf, packet) != PACKET_OK)
6165 return -1;
6166
6167 if (rs->buf[0] != 'l' && rs->buf[0] != 'm')
6168 error (_("Unknown remote qXfer reply: %s"), rs->buf);
6169
6170 /* 'm' means there is (or at least might be) more data after this
6171 batch. That does not make sense unless there's at least one byte
6172 of data in this reply. */
6173 if (rs->buf[0] == 'm' && packet_len == 1)
6174 error (_("Remote qXfer reply contained no data."));
6175
6176 /* Got some data. */
6177 i = remote_unescape_input (rs->buf + 1, packet_len - 1, readbuf, n);
6178
6179 /* 'l' is an EOF marker, possibly including a final block of data,
6180 or possibly empty. If we have the final block of a non-empty
6181 object, record this fact to bypass a subsequent partial read. */
6182 if (rs->buf[0] == 'l' && offset + i > 0)
6183 {
6184 finished_object = xstrdup (object_name);
6185 finished_annex = xstrdup (annex ? annex : "");
6186 finished_offset = offset + i;
6187 }
6188
6189 return i;
6190 }
6191
6192 static LONGEST
6193 remote_xfer_partial (struct target_ops *ops, enum target_object object,
6194 const char *annex, gdb_byte *readbuf,
6195 const gdb_byte *writebuf, ULONGEST offset, LONGEST len)
6196 {
6197 struct remote_state *rs;
6198 int i;
6199 char *p2;
6200 char query_type;
6201
6202 set_general_thread (inferior_ptid);
6203
6204 rs = get_remote_state ();
6205
6206 /* Handle memory using the standard memory routines. */
6207 if (object == TARGET_OBJECT_MEMORY)
6208 {
6209 int xfered;
6210 errno = 0;
6211
6212 /* If the remote target is connected but not running, we should
6213 pass this request down to a lower stratum (e.g. the executable
6214 file). */
6215 if (!target_has_execution)
6216 return 0;
6217
6218 if (writebuf != NULL)
6219 xfered = remote_write_bytes (offset, writebuf, len);
6220 else
6221 xfered = remote_read_bytes (offset, readbuf, len);
6222
6223 if (xfered > 0)
6224 return xfered;
6225 else if (xfered == 0 && errno == 0)
6226 return 0;
6227 else
6228 return -1;
6229 }
6230
6231 /* Handle SPU memory using qxfer packets. */
6232 if (object == TARGET_OBJECT_SPU)
6233 {
6234 if (readbuf)
6235 return remote_read_qxfer (ops, "spu", annex, readbuf, offset, len,
6236 &remote_protocol_packets
6237 [PACKET_qXfer_spu_read]);
6238 else
6239 return remote_write_qxfer (ops, "spu", annex, writebuf, offset, len,
6240 &remote_protocol_packets
6241 [PACKET_qXfer_spu_write]);
6242 }
6243
6244 /* Only handle flash writes. */
6245 if (writebuf != NULL)
6246 {
6247 LONGEST xfered;
6248
6249 switch (object)
6250 {
6251 case TARGET_OBJECT_FLASH:
6252 xfered = remote_flash_write (ops, offset, len, writebuf);
6253
6254 if (xfered > 0)
6255 return xfered;
6256 else if (xfered == 0 && errno == 0)
6257 return 0;
6258 else
6259 return -1;
6260
6261 default:
6262 return -1;
6263 }
6264 }
6265
6266 /* Map pre-existing objects onto letters. DO NOT do this for new
6267 objects!!! Instead specify new query packets. */
6268 switch (object)
6269 {
6270 case TARGET_OBJECT_AVR:
6271 query_type = 'R';
6272 break;
6273
6274 case TARGET_OBJECT_AUXV:
6275 gdb_assert (annex == NULL);
6276 return remote_read_qxfer (ops, "auxv", annex, readbuf, offset, len,
6277 &remote_protocol_packets[PACKET_qXfer_auxv]);
6278
6279 case TARGET_OBJECT_AVAILABLE_FEATURES:
6280 return remote_read_qxfer
6281 (ops, "features", annex, readbuf, offset, len,
6282 &remote_protocol_packets[PACKET_qXfer_features]);
6283
6284 case TARGET_OBJECT_LIBRARIES:
6285 return remote_read_qxfer
6286 (ops, "libraries", annex, readbuf, offset, len,
6287 &remote_protocol_packets[PACKET_qXfer_libraries]);
6288
6289 case TARGET_OBJECT_MEMORY_MAP:
6290 gdb_assert (annex == NULL);
6291 return remote_read_qxfer (ops, "memory-map", annex, readbuf, offset, len,
6292 &remote_protocol_packets[PACKET_qXfer_memory_map]);
6293
6294 default:
6295 return -1;
6296 }
6297
6298 /* Note: a zero OFFSET and LEN can be used to query the minimum
6299 buffer size. */
6300 if (offset == 0 && len == 0)
6301 return (get_remote_packet_size ());
6302 /* Minimum outbuf size is get_remote_packet_size (). If LEN is not
6303 large enough let the caller deal with it. */
6304 if (len < get_remote_packet_size ())
6305 return -1;
6306 len = get_remote_packet_size ();
6307
6308 /* Except for querying the minimum buffer size, target must be open. */
6309 if (!remote_desc)
6310 error (_("remote query is only available after target open"));
6311
6312 gdb_assert (annex != NULL);
6313 gdb_assert (readbuf != NULL);
6314
6315 p2 = rs->buf;
6316 *p2++ = 'q';
6317 *p2++ = query_type;
6318
6319 /* We used one buffer char for the remote protocol q command and
6320 another for the query type. As the remote protocol encapsulation
6321 uses 4 chars plus one extra in case we are debugging
6322 (remote_debug), we have PBUFZIZ - 7 left to pack the query
6323 string. */
6324 i = 0;
6325 while (annex[i] && (i < (get_remote_packet_size () - 8)))
6326 {
6327 /* Bad caller may have sent forbidden characters. */
6328 gdb_assert (isprint (annex[i]) && annex[i] != '$' && annex[i] != '#');
6329 *p2++ = annex[i];
6330 i++;
6331 }
6332 *p2 = '\0';
6333 gdb_assert (annex[i] == '\0');
6334
6335 i = putpkt (rs->buf);
6336 if (i < 0)
6337 return i;
6338
6339 getpkt (&rs->buf, &rs->buf_size, 0);
6340 strcpy ((char *) readbuf, rs->buf);
6341
6342 return strlen ((char *) readbuf);
6343 }
6344
6345 static int
6346 remote_search_memory (struct target_ops* ops,
6347 CORE_ADDR start_addr, ULONGEST search_space_len,
6348 const gdb_byte *pattern, ULONGEST pattern_len,
6349 CORE_ADDR *found_addrp)
6350 {
6351 struct remote_state *rs = get_remote_state ();
6352 int max_size = get_memory_write_packet_size ();
6353 struct packet_config *packet =
6354 &remote_protocol_packets[PACKET_qSearch_memory];
6355 /* number of packet bytes used to encode the pattern,
6356 this could be more than PATTERN_LEN due to escape characters */
6357 int escaped_pattern_len;
6358 /* amount of pattern that was encodable in the packet */
6359 int used_pattern_len;
6360 int i;
6361 int found;
6362 ULONGEST found_addr;
6363
6364 /* Don't go to the target if we don't have to.
6365 This is done before checking packet->support to avoid the possibility that
6366 a success for this edge case means the facility works in general. */
6367 if (pattern_len > search_space_len)
6368 return 0;
6369 if (pattern_len == 0)
6370 {
6371 *found_addrp = start_addr;
6372 return 1;
6373 }
6374
6375 /* If we already know the packet isn't supported, fall back to the simple
6376 way of searching memory. */
6377
6378 if (packet->support == PACKET_DISABLE)
6379 {
6380 /* Target doesn't provided special support, fall back and use the
6381 standard support (copy memory and do the search here). */
6382 return simple_search_memory (ops, start_addr, search_space_len,
6383 pattern, pattern_len, found_addrp);
6384 }
6385
6386 /* Insert header. */
6387 i = snprintf (rs->buf, max_size,
6388 "qSearch:memory:%s;%s;",
6389 paddr_nz (start_addr),
6390 phex_nz (search_space_len, sizeof (search_space_len)));
6391 max_size -= (i + 1);
6392
6393 /* Escape as much data as fits into rs->buf. */
6394 escaped_pattern_len =
6395 remote_escape_output (pattern, pattern_len, (rs->buf + i),
6396 &used_pattern_len, max_size);
6397
6398 /* Bail if the pattern is too large. */
6399 if (used_pattern_len != pattern_len)
6400 error ("Pattern is too large to transmit to remote target.");
6401
6402 if (putpkt_binary (rs->buf, i + escaped_pattern_len) < 0
6403 || getpkt_sane (&rs->buf, &rs->buf_size, 0) < 0
6404 || packet_ok (rs->buf, packet) != PACKET_OK)
6405 {
6406 /* The request may not have worked because the command is not
6407 supported. If so, fall back to the simple way. */
6408 if (packet->support == PACKET_DISABLE)
6409 {
6410 return simple_search_memory (ops, start_addr, search_space_len,
6411 pattern, pattern_len, found_addrp);
6412 }
6413 return -1;
6414 }
6415
6416 if (rs->buf[0] == '0')
6417 found = 0;
6418 else if (rs->buf[0] == '1')
6419 {
6420 found = 1;
6421 if (rs->buf[1] != ',')
6422 error (_("Unknown qSearch:memory reply: %s"), rs->buf);
6423 unpack_varlen_hex (rs->buf + 2, &found_addr);
6424 *found_addrp = found_addr;
6425 }
6426 else
6427 error (_("Unknown qSearch:memory reply: %s"), rs->buf);
6428
6429 return found;
6430 }
6431
6432 static void
6433 remote_rcmd (char *command,
6434 struct ui_file *outbuf)
6435 {
6436 struct remote_state *rs = get_remote_state ();
6437 char *p = rs->buf;
6438
6439 if (!remote_desc)
6440 error (_("remote rcmd is only available after target open"));
6441
6442 /* Send a NULL command across as an empty command. */
6443 if (command == NULL)
6444 command = "";
6445
6446 /* The query prefix. */
6447 strcpy (rs->buf, "qRcmd,");
6448 p = strchr (rs->buf, '\0');
6449
6450 if ((strlen (rs->buf) + strlen (command) * 2 + 8/*misc*/) > get_remote_packet_size ())
6451 error (_("\"monitor\" command ``%s'' is too long."), command);
6452
6453 /* Encode the actual command. */
6454 bin2hex ((gdb_byte *) command, p, 0);
6455
6456 if (putpkt (rs->buf) < 0)
6457 error (_("Communication problem with target."));
6458
6459 /* get/display the response */
6460 while (1)
6461 {
6462 char *buf;
6463
6464 /* XXX - see also tracepoint.c:remote_get_noisy_reply(). */
6465 rs->buf[0] = '\0';
6466 getpkt (&rs->buf, &rs->buf_size, 0);
6467 buf = rs->buf;
6468 if (buf[0] == '\0')
6469 error (_("Target does not support this command."));
6470 if (buf[0] == 'O' && buf[1] != 'K')
6471 {
6472 remote_console_output (buf + 1); /* 'O' message from stub. */
6473 continue;
6474 }
6475 if (strcmp (buf, "OK") == 0)
6476 break;
6477 if (strlen (buf) == 3 && buf[0] == 'E'
6478 && isdigit (buf[1]) && isdigit (buf[2]))
6479 {
6480 error (_("Protocol error with Rcmd"));
6481 }
6482 for (p = buf; p[0] != '\0' && p[1] != '\0'; p += 2)
6483 {
6484 char c = (fromhex (p[0]) << 4) + fromhex (p[1]);
6485 fputc_unfiltered (c, outbuf);
6486 }
6487 break;
6488 }
6489 }
6490
6491 static VEC(mem_region_s) *
6492 remote_memory_map (struct target_ops *ops)
6493 {
6494 VEC(mem_region_s) *result = NULL;
6495 char *text = target_read_stralloc (&current_target,
6496 TARGET_OBJECT_MEMORY_MAP, NULL);
6497
6498 if (text)
6499 {
6500 struct cleanup *back_to = make_cleanup (xfree, text);
6501 result = parse_memory_map (text);
6502 do_cleanups (back_to);
6503 }
6504
6505 return result;
6506 }
6507
6508 static void
6509 packet_command (char *args, int from_tty)
6510 {
6511 struct remote_state *rs = get_remote_state ();
6512
6513 if (!remote_desc)
6514 error (_("command can only be used with remote target"));
6515
6516 if (!args)
6517 error (_("remote-packet command requires packet text as argument"));
6518
6519 puts_filtered ("sending: ");
6520 print_packet (args);
6521 puts_filtered ("\n");
6522 putpkt (args);
6523
6524 getpkt (&rs->buf, &rs->buf_size, 0);
6525 puts_filtered ("received: ");
6526 print_packet (rs->buf);
6527 puts_filtered ("\n");
6528 }
6529
6530 #if 0
6531 /* --------- UNIT_TEST for THREAD oriented PACKETS ------------------- */
6532
6533 static void display_thread_info (struct gdb_ext_thread_info *info);
6534
6535 static void threadset_test_cmd (char *cmd, int tty);
6536
6537 static void threadalive_test (char *cmd, int tty);
6538
6539 static void threadlist_test_cmd (char *cmd, int tty);
6540
6541 int get_and_display_threadinfo (threadref *ref);
6542
6543 static void threadinfo_test_cmd (char *cmd, int tty);
6544
6545 static int thread_display_step (threadref *ref, void *context);
6546
6547 static void threadlist_update_test_cmd (char *cmd, int tty);
6548
6549 static void init_remote_threadtests (void);
6550
6551 #define SAMPLE_THREAD 0x05060708 /* Truncated 64 bit threadid. */
6552
6553 static void
6554 threadset_test_cmd (char *cmd, int tty)
6555 {
6556 int sample_thread = SAMPLE_THREAD;
6557
6558 printf_filtered (_("Remote threadset test\n"));
6559 set_general_thread (sample_thread);
6560 }
6561
6562
6563 static void
6564 threadalive_test (char *cmd, int tty)
6565 {
6566 int sample_thread = SAMPLE_THREAD;
6567 int pid = ptid_get_pid (inferior_ptid);
6568 ptid_t ptid = ptid_build (pid, 0, sample_thread);
6569
6570 if (remote_thread_alive (ptid))
6571 printf_filtered ("PASS: Thread alive test\n");
6572 else
6573 printf_filtered ("FAIL: Thread alive test\n");
6574 }
6575
6576 void output_threadid (char *title, threadref *ref);
6577
6578 void
6579 output_threadid (char *title, threadref *ref)
6580 {
6581 char hexid[20];
6582
6583 pack_threadid (&hexid[0], ref); /* Convert threead id into hex. */
6584 hexid[16] = 0;
6585 printf_filtered ("%s %s\n", title, (&hexid[0]));
6586 }
6587
6588 static void
6589 threadlist_test_cmd (char *cmd, int tty)
6590 {
6591 int startflag = 1;
6592 threadref nextthread;
6593 int done, result_count;
6594 threadref threadlist[3];
6595
6596 printf_filtered ("Remote Threadlist test\n");
6597 if (!remote_get_threadlist (startflag, &nextthread, 3, &done,
6598 &result_count, &threadlist[0]))
6599 printf_filtered ("FAIL: threadlist test\n");
6600 else
6601 {
6602 threadref *scan = threadlist;
6603 threadref *limit = scan + result_count;
6604
6605 while (scan < limit)
6606 output_threadid (" thread ", scan++);
6607 }
6608 }
6609
6610 void
6611 display_thread_info (struct gdb_ext_thread_info *info)
6612 {
6613 output_threadid ("Threadid: ", &info->threadid);
6614 printf_filtered ("Name: %s\n ", info->shortname);
6615 printf_filtered ("State: %s\n", info->display);
6616 printf_filtered ("other: %s\n\n", info->more_display);
6617 }
6618
6619 int
6620 get_and_display_threadinfo (threadref *ref)
6621 {
6622 int result;
6623 int set;
6624 struct gdb_ext_thread_info threadinfo;
6625
6626 set = TAG_THREADID | TAG_EXISTS | TAG_THREADNAME
6627 | TAG_MOREDISPLAY | TAG_DISPLAY;
6628 if (0 != (result = remote_get_threadinfo (ref, set, &threadinfo)))
6629 display_thread_info (&threadinfo);
6630 return result;
6631 }
6632
6633 static void
6634 threadinfo_test_cmd (char *cmd, int tty)
6635 {
6636 int athread = SAMPLE_THREAD;
6637 threadref thread;
6638 int set;
6639
6640 int_to_threadref (&thread, athread);
6641 printf_filtered ("Remote Threadinfo test\n");
6642 if (!get_and_display_threadinfo (&thread))
6643 printf_filtered ("FAIL cannot get thread info\n");
6644 }
6645
6646 static int
6647 thread_display_step (threadref *ref, void *context)
6648 {
6649 /* output_threadid(" threadstep ",ref); *//* simple test */
6650 return get_and_display_threadinfo (ref);
6651 }
6652
6653 static void
6654 threadlist_update_test_cmd (char *cmd, int tty)
6655 {
6656 printf_filtered ("Remote Threadlist update test\n");
6657 remote_threadlist_iterator (thread_display_step, 0, CRAZY_MAX_THREADS);
6658 }
6659
6660 static void
6661 init_remote_threadtests (void)
6662 {
6663 add_com ("tlist", class_obscure, threadlist_test_cmd, _("\
6664 Fetch and print the remote list of thread identifiers, one pkt only"));
6665 add_com ("tinfo", class_obscure, threadinfo_test_cmd,
6666 _("Fetch and display info about one thread"));
6667 add_com ("tset", class_obscure, threadset_test_cmd,
6668 _("Test setting to a different thread"));
6669 add_com ("tupd", class_obscure, threadlist_update_test_cmd,
6670 _("Iterate through updating all remote thread info"));
6671 add_com ("talive", class_obscure, threadalive_test,
6672 _(" Remote thread alive test "));
6673 }
6674
6675 #endif /* 0 */
6676
6677 /* Convert a thread ID to a string. Returns the string in a static
6678 buffer. */
6679
6680 static char *
6681 remote_pid_to_str (ptid_t ptid)
6682 {
6683 static char buf[64];
6684 struct remote_state *rs = get_remote_state ();
6685
6686 if (ptid_equal (magic_null_ptid, ptid))
6687 {
6688 xsnprintf (buf, sizeof buf, "Thread <main>");
6689 return buf;
6690 }
6691 else if (remote_multi_process_p (rs)
6692 && ptid_get_tid (ptid) != 0 && ptid_get_pid (ptid) != 0)
6693 {
6694 xsnprintf (buf, sizeof buf, "Thread %d.%ld",
6695 ptid_get_pid (ptid), ptid_get_tid (ptid));
6696 return buf;
6697 }
6698 else if (ptid_get_tid (ptid) != 0)
6699 {
6700 xsnprintf (buf, sizeof buf, "Thread %ld",
6701 ptid_get_tid (ptid));
6702 return buf;
6703 }
6704
6705 return normal_pid_to_str (ptid);
6706 }
6707
6708 /* Get the address of the thread local variable in OBJFILE which is
6709 stored at OFFSET within the thread local storage for thread PTID. */
6710
6711 static CORE_ADDR
6712 remote_get_thread_local_address (ptid_t ptid, CORE_ADDR lm, CORE_ADDR offset)
6713 {
6714 if (remote_protocol_packets[PACKET_qGetTLSAddr].support != PACKET_DISABLE)
6715 {
6716 struct remote_state *rs = get_remote_state ();
6717 char *p = rs->buf;
6718 char *endp = rs->buf + get_remote_packet_size ();
6719 enum packet_result result;
6720
6721 strcpy (p, "qGetTLSAddr:");
6722 p += strlen (p);
6723 p = write_ptid (p, endp, ptid);
6724 *p++ = ',';
6725 p += hexnumstr (p, offset);
6726 *p++ = ',';
6727 p += hexnumstr (p, lm);
6728 *p++ = '\0';
6729
6730 putpkt (rs->buf);
6731 getpkt (&rs->buf, &rs->buf_size, 0);
6732 result = packet_ok (rs->buf, &remote_protocol_packets[PACKET_qGetTLSAddr]);
6733 if (result == PACKET_OK)
6734 {
6735 ULONGEST result;
6736
6737 unpack_varlen_hex (rs->buf, &result);
6738 return result;
6739 }
6740 else if (result == PACKET_UNKNOWN)
6741 throw_error (TLS_GENERIC_ERROR,
6742 _("Remote target doesn't support qGetTLSAddr packet"));
6743 else
6744 throw_error (TLS_GENERIC_ERROR,
6745 _("Remote target failed to process qGetTLSAddr request"));
6746 }
6747 else
6748 throw_error (TLS_GENERIC_ERROR,
6749 _("TLS not supported or disabled on this target"));
6750 /* Not reached. */
6751 return 0;
6752 }
6753
6754 /* Support for inferring a target description based on the current
6755 architecture and the size of a 'g' packet. While the 'g' packet
6756 can have any size (since optional registers can be left off the
6757 end), some sizes are easily recognizable given knowledge of the
6758 approximate architecture. */
6759
6760 struct remote_g_packet_guess
6761 {
6762 int bytes;
6763 const struct target_desc *tdesc;
6764 };
6765 typedef struct remote_g_packet_guess remote_g_packet_guess_s;
6766 DEF_VEC_O(remote_g_packet_guess_s);
6767
6768 struct remote_g_packet_data
6769 {
6770 VEC(remote_g_packet_guess_s) *guesses;
6771 };
6772
6773 static struct gdbarch_data *remote_g_packet_data_handle;
6774
6775 static void *
6776 remote_g_packet_data_init (struct obstack *obstack)
6777 {
6778 return OBSTACK_ZALLOC (obstack, struct remote_g_packet_data);
6779 }
6780
6781 void
6782 register_remote_g_packet_guess (struct gdbarch *gdbarch, int bytes,
6783 const struct target_desc *tdesc)
6784 {
6785 struct remote_g_packet_data *data
6786 = gdbarch_data (gdbarch, remote_g_packet_data_handle);
6787 struct remote_g_packet_guess new_guess, *guess;
6788 int ix;
6789
6790 gdb_assert (tdesc != NULL);
6791
6792 for (ix = 0;
6793 VEC_iterate (remote_g_packet_guess_s, data->guesses, ix, guess);
6794 ix++)
6795 if (guess->bytes == bytes)
6796 internal_error (__FILE__, __LINE__,
6797 "Duplicate g packet description added for size %d",
6798 bytes);
6799
6800 new_guess.bytes = bytes;
6801 new_guess.tdesc = tdesc;
6802 VEC_safe_push (remote_g_packet_guess_s, data->guesses, &new_guess);
6803 }
6804
6805 static const struct target_desc *
6806 remote_read_description (struct target_ops *target)
6807 {
6808 struct remote_g_packet_data *data
6809 = gdbarch_data (target_gdbarch, remote_g_packet_data_handle);
6810
6811 if (!VEC_empty (remote_g_packet_guess_s, data->guesses))
6812 {
6813 struct remote_g_packet_guess *guess;
6814 int ix;
6815 int bytes = send_g_packet ();
6816
6817 for (ix = 0;
6818 VEC_iterate (remote_g_packet_guess_s, data->guesses, ix, guess);
6819 ix++)
6820 if (guess->bytes == bytes)
6821 return guess->tdesc;
6822
6823 /* We discard the g packet. A minor optimization would be to
6824 hold on to it, and fill the register cache once we have selected
6825 an architecture, but it's too tricky to do safely. */
6826 }
6827
6828 return NULL;
6829 }
6830
6831 /* Remote file transfer support. This is host-initiated I/O, not
6832 target-initiated; for target-initiated, see remote-fileio.c. */
6833
6834 /* If *LEFT is at least the length of STRING, copy STRING to
6835 *BUFFER, update *BUFFER to point to the new end of the buffer, and
6836 decrease *LEFT. Otherwise raise an error. */
6837
6838 static void
6839 remote_buffer_add_string (char **buffer, int *left, char *string)
6840 {
6841 int len = strlen (string);
6842
6843 if (len > *left)
6844 error (_("Packet too long for target."));
6845
6846 memcpy (*buffer, string, len);
6847 *buffer += len;
6848 *left -= len;
6849
6850 /* NUL-terminate the buffer as a convenience, if there is
6851 room. */
6852 if (*left)
6853 **buffer = '\0';
6854 }
6855
6856 /* If *LEFT is large enough, hex encode LEN bytes from BYTES into
6857 *BUFFER, update *BUFFER to point to the new end of the buffer, and
6858 decrease *LEFT. Otherwise raise an error. */
6859
6860 static void
6861 remote_buffer_add_bytes (char **buffer, int *left, const gdb_byte *bytes,
6862 int len)
6863 {
6864 if (2 * len > *left)
6865 error (_("Packet too long for target."));
6866
6867 bin2hex (bytes, *buffer, len);
6868 *buffer += 2 * len;
6869 *left -= 2 * len;
6870
6871 /* NUL-terminate the buffer as a convenience, if there is
6872 room. */
6873 if (*left)
6874 **buffer = '\0';
6875 }
6876
6877 /* If *LEFT is large enough, convert VALUE to hex and add it to
6878 *BUFFER, update *BUFFER to point to the new end of the buffer, and
6879 decrease *LEFT. Otherwise raise an error. */
6880
6881 static void
6882 remote_buffer_add_int (char **buffer, int *left, ULONGEST value)
6883 {
6884 int len = hexnumlen (value);
6885
6886 if (len > *left)
6887 error (_("Packet too long for target."));
6888
6889 hexnumstr (*buffer, value);
6890 *buffer += len;
6891 *left -= len;
6892
6893 /* NUL-terminate the buffer as a convenience, if there is
6894 room. */
6895 if (*left)
6896 **buffer = '\0';
6897 }
6898
6899 /* Parse an I/O result packet from BUFFER. Set RETCODE to the return
6900 value, *REMOTE_ERRNO to the remote error number or zero if none
6901 was included, and *ATTACHMENT to point to the start of the annex
6902 if any. The length of the packet isn't needed here; there may
6903 be NUL bytes in BUFFER, but they will be after *ATTACHMENT.
6904
6905 Return 0 if the packet could be parsed, -1 if it could not. If
6906 -1 is returned, the other variables may not be initialized. */
6907
6908 static int
6909 remote_hostio_parse_result (char *buffer, int *retcode,
6910 int *remote_errno, char **attachment)
6911 {
6912 char *p, *p2;
6913
6914 *remote_errno = 0;
6915 *attachment = NULL;
6916
6917 if (buffer[0] != 'F')
6918 return -1;
6919
6920 errno = 0;
6921 *retcode = strtol (&buffer[1], &p, 16);
6922 if (errno != 0 || p == &buffer[1])
6923 return -1;
6924
6925 /* Check for ",errno". */
6926 if (*p == ',')
6927 {
6928 errno = 0;
6929 *remote_errno = strtol (p + 1, &p2, 16);
6930 if (errno != 0 || p + 1 == p2)
6931 return -1;
6932 p = p2;
6933 }
6934
6935 /* Check for ";attachment". If there is no attachment, the
6936 packet should end here. */
6937 if (*p == ';')
6938 {
6939 *attachment = p + 1;
6940 return 0;
6941 }
6942 else if (*p == '\0')
6943 return 0;
6944 else
6945 return -1;
6946 }
6947
6948 /* Send a prepared I/O packet to the target and read its response.
6949 The prepared packet is in the global RS->BUF before this function
6950 is called, and the answer is there when we return.
6951
6952 COMMAND_BYTES is the length of the request to send, which may include
6953 binary data. WHICH_PACKET is the packet configuration to check
6954 before attempting a packet. If an error occurs, *REMOTE_ERRNO
6955 is set to the error number and -1 is returned. Otherwise the value
6956 returned by the function is returned.
6957
6958 ATTACHMENT and ATTACHMENT_LEN should be non-NULL if and only if an
6959 attachment is expected; an error will be reported if there's a
6960 mismatch. If one is found, *ATTACHMENT will be set to point into
6961 the packet buffer and *ATTACHMENT_LEN will be set to the
6962 attachment's length. */
6963
6964 static int
6965 remote_hostio_send_command (int command_bytes, int which_packet,
6966 int *remote_errno, char **attachment,
6967 int *attachment_len)
6968 {
6969 struct remote_state *rs = get_remote_state ();
6970 int ret, bytes_read;
6971 char *attachment_tmp;
6972
6973 if (!remote_desc
6974 || remote_protocol_packets[which_packet].support == PACKET_DISABLE)
6975 {
6976 *remote_errno = FILEIO_ENOSYS;
6977 return -1;
6978 }
6979
6980 putpkt_binary (rs->buf, command_bytes);
6981 bytes_read = getpkt_sane (&rs->buf, &rs->buf_size, 0);
6982
6983 /* If it timed out, something is wrong. Don't try to parse the
6984 buffer. */
6985 if (bytes_read < 0)
6986 {
6987 *remote_errno = FILEIO_EINVAL;
6988 return -1;
6989 }
6990
6991 switch (packet_ok (rs->buf, &remote_protocol_packets[which_packet]))
6992 {
6993 case PACKET_ERROR:
6994 *remote_errno = FILEIO_EINVAL;
6995 return -1;
6996 case PACKET_UNKNOWN:
6997 *remote_errno = FILEIO_ENOSYS;
6998 return -1;
6999 case PACKET_OK:
7000 break;
7001 }
7002
7003 if (remote_hostio_parse_result (rs->buf, &ret, remote_errno,
7004 &attachment_tmp))
7005 {
7006 *remote_errno = FILEIO_EINVAL;
7007 return -1;
7008 }
7009
7010 /* Make sure we saw an attachment if and only if we expected one. */
7011 if ((attachment_tmp == NULL && attachment != NULL)
7012 || (attachment_tmp != NULL && attachment == NULL))
7013 {
7014 *remote_errno = FILEIO_EINVAL;
7015 return -1;
7016 }
7017
7018 /* If an attachment was found, it must point into the packet buffer;
7019 work out how many bytes there were. */
7020 if (attachment_tmp != NULL)
7021 {
7022 *attachment = attachment_tmp;
7023 *attachment_len = bytes_read - (*attachment - rs->buf);
7024 }
7025
7026 return ret;
7027 }
7028
7029 /* Open FILENAME on the remote target, using FLAGS and MODE. Return a
7030 remote file descriptor, or -1 if an error occurs (and set
7031 *REMOTE_ERRNO). */
7032
7033 static int
7034 remote_hostio_open (const char *filename, int flags, int mode,
7035 int *remote_errno)
7036 {
7037 struct remote_state *rs = get_remote_state ();
7038 char *p = rs->buf;
7039 int left = get_remote_packet_size () - 1;
7040
7041 remote_buffer_add_string (&p, &left, "vFile:open:");
7042
7043 remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
7044 strlen (filename));
7045 remote_buffer_add_string (&p, &left, ",");
7046
7047 remote_buffer_add_int (&p, &left, flags);
7048 remote_buffer_add_string (&p, &left, ",");
7049
7050 remote_buffer_add_int (&p, &left, mode);
7051
7052 return remote_hostio_send_command (p - rs->buf, PACKET_vFile_open,
7053 remote_errno, NULL, NULL);
7054 }
7055
7056 /* Write up to LEN bytes from WRITE_BUF to FD on the remote target.
7057 Return the number of bytes written, or -1 if an error occurs (and
7058 set *REMOTE_ERRNO). */
7059
7060 static int
7061 remote_hostio_pwrite (int fd, const gdb_byte *write_buf, int len,
7062 ULONGEST offset, int *remote_errno)
7063 {
7064 struct remote_state *rs = get_remote_state ();
7065 char *p = rs->buf;
7066 int left = get_remote_packet_size ();
7067 int out_len;
7068
7069 remote_buffer_add_string (&p, &left, "vFile:pwrite:");
7070
7071 remote_buffer_add_int (&p, &left, fd);
7072 remote_buffer_add_string (&p, &left, ",");
7073
7074 remote_buffer_add_int (&p, &left, offset);
7075 remote_buffer_add_string (&p, &left, ",");
7076
7077 p += remote_escape_output (write_buf, len, p, &out_len,
7078 get_remote_packet_size () - (p - rs->buf));
7079
7080 return remote_hostio_send_command (p - rs->buf, PACKET_vFile_pwrite,
7081 remote_errno, NULL, NULL);
7082 }
7083
7084 /* Read up to LEN bytes FD on the remote target into READ_BUF
7085 Return the number of bytes read, or -1 if an error occurs (and
7086 set *REMOTE_ERRNO). */
7087
7088 static int
7089 remote_hostio_pread (int fd, gdb_byte *read_buf, int len,
7090 ULONGEST offset, int *remote_errno)
7091 {
7092 struct remote_state *rs = get_remote_state ();
7093 char *p = rs->buf;
7094 char *attachment;
7095 int left = get_remote_packet_size ();
7096 int ret, attachment_len;
7097 int read_len;
7098
7099 remote_buffer_add_string (&p, &left, "vFile:pread:");
7100
7101 remote_buffer_add_int (&p, &left, fd);
7102 remote_buffer_add_string (&p, &left, ",");
7103
7104 remote_buffer_add_int (&p, &left, len);
7105 remote_buffer_add_string (&p, &left, ",");
7106
7107 remote_buffer_add_int (&p, &left, offset);
7108
7109 ret = remote_hostio_send_command (p - rs->buf, PACKET_vFile_pread,
7110 remote_errno, &attachment,
7111 &attachment_len);
7112
7113 if (ret < 0)
7114 return ret;
7115
7116 read_len = remote_unescape_input (attachment, attachment_len,
7117 read_buf, len);
7118 if (read_len != ret)
7119 error (_("Read returned %d, but %d bytes."), ret, (int) read_len);
7120
7121 return ret;
7122 }
7123
7124 /* Close FD on the remote target. Return 0, or -1 if an error occurs
7125 (and set *REMOTE_ERRNO). */
7126
7127 static int
7128 remote_hostio_close (int fd, int *remote_errno)
7129 {
7130 struct remote_state *rs = get_remote_state ();
7131 char *p = rs->buf;
7132 int left = get_remote_packet_size () - 1;
7133
7134 remote_buffer_add_string (&p, &left, "vFile:close:");
7135
7136 remote_buffer_add_int (&p, &left, fd);
7137
7138 return remote_hostio_send_command (p - rs->buf, PACKET_vFile_close,
7139 remote_errno, NULL, NULL);
7140 }
7141
7142 /* Unlink FILENAME on the remote target. Return 0, or -1 if an error
7143 occurs (and set *REMOTE_ERRNO). */
7144
7145 static int
7146 remote_hostio_unlink (const char *filename, int *remote_errno)
7147 {
7148 struct remote_state *rs = get_remote_state ();
7149 char *p = rs->buf;
7150 int left = get_remote_packet_size () - 1;
7151
7152 remote_buffer_add_string (&p, &left, "vFile:unlink:");
7153
7154 remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
7155 strlen (filename));
7156
7157 return remote_hostio_send_command (p - rs->buf, PACKET_vFile_unlink,
7158 remote_errno, NULL, NULL);
7159 }
7160
7161 static int
7162 remote_fileio_errno_to_host (int errnum)
7163 {
7164 switch (errnum)
7165 {
7166 case FILEIO_EPERM:
7167 return EPERM;
7168 case FILEIO_ENOENT:
7169 return ENOENT;
7170 case FILEIO_EINTR:
7171 return EINTR;
7172 case FILEIO_EIO:
7173 return EIO;
7174 case FILEIO_EBADF:
7175 return EBADF;
7176 case FILEIO_EACCES:
7177 return EACCES;
7178 case FILEIO_EFAULT:
7179 return EFAULT;
7180 case FILEIO_EBUSY:
7181 return EBUSY;
7182 case FILEIO_EEXIST:
7183 return EEXIST;
7184 case FILEIO_ENODEV:
7185 return ENODEV;
7186 case FILEIO_ENOTDIR:
7187 return ENOTDIR;
7188 case FILEIO_EISDIR:
7189 return EISDIR;
7190 case FILEIO_EINVAL:
7191 return EINVAL;
7192 case FILEIO_ENFILE:
7193 return ENFILE;
7194 case FILEIO_EMFILE:
7195 return EMFILE;
7196 case FILEIO_EFBIG:
7197 return EFBIG;
7198 case FILEIO_ENOSPC:
7199 return ENOSPC;
7200 case FILEIO_ESPIPE:
7201 return ESPIPE;
7202 case FILEIO_EROFS:
7203 return EROFS;
7204 case FILEIO_ENOSYS:
7205 return ENOSYS;
7206 case FILEIO_ENAMETOOLONG:
7207 return ENAMETOOLONG;
7208 }
7209 return -1;
7210 }
7211
7212 static char *
7213 remote_hostio_error (int errnum)
7214 {
7215 int host_error = remote_fileio_errno_to_host (errnum);
7216
7217 if (host_error == -1)
7218 error (_("Unknown remote I/O error %d"), errnum);
7219 else
7220 error (_("Remote I/O error: %s"), safe_strerror (host_error));
7221 }
7222
7223 static void
7224 fclose_cleanup (void *file)
7225 {
7226 fclose (file);
7227 }
7228
7229 static void
7230 remote_hostio_close_cleanup (void *opaque)
7231 {
7232 int fd = *(int *) opaque;
7233 int remote_errno;
7234
7235 remote_hostio_close (fd, &remote_errno);
7236 }
7237
7238
7239 static void *
7240 remote_bfd_iovec_open (struct bfd *abfd, void *open_closure)
7241 {
7242 const char *filename = bfd_get_filename (abfd);
7243 int fd, remote_errno;
7244 int *stream;
7245
7246 gdb_assert (remote_filename_p (filename));
7247
7248 fd = remote_hostio_open (filename + 7, FILEIO_O_RDONLY, 0, &remote_errno);
7249 if (fd == -1)
7250 {
7251 errno = remote_fileio_errno_to_host (remote_errno);
7252 bfd_set_error (bfd_error_system_call);
7253 return NULL;
7254 }
7255
7256 stream = xmalloc (sizeof (int));
7257 *stream = fd;
7258 return stream;
7259 }
7260
7261 static int
7262 remote_bfd_iovec_close (struct bfd *abfd, void *stream)
7263 {
7264 int fd = *(int *)stream;
7265 int remote_errno;
7266
7267 xfree (stream);
7268
7269 /* Ignore errors on close; these may happen if the remote
7270 connection was already torn down. */
7271 remote_hostio_close (fd, &remote_errno);
7272
7273 return 1;
7274 }
7275
7276 static file_ptr
7277 remote_bfd_iovec_pread (struct bfd *abfd, void *stream, void *buf,
7278 file_ptr nbytes, file_ptr offset)
7279 {
7280 int fd = *(int *)stream;
7281 int remote_errno;
7282 file_ptr pos, bytes;
7283
7284 pos = 0;
7285 while (nbytes > pos)
7286 {
7287 bytes = remote_hostio_pread (fd, (char *)buf + pos, nbytes - pos,
7288 offset + pos, &remote_errno);
7289 if (bytes == 0)
7290 /* Success, but no bytes, means end-of-file. */
7291 break;
7292 if (bytes == -1)
7293 {
7294 errno = remote_fileio_errno_to_host (remote_errno);
7295 bfd_set_error (bfd_error_system_call);
7296 return -1;
7297 }
7298
7299 pos += bytes;
7300 }
7301
7302 return pos;
7303 }
7304
7305 static int
7306 remote_bfd_iovec_stat (struct bfd *abfd, void *stream, struct stat *sb)
7307 {
7308 /* FIXME: We should probably implement remote_hostio_stat. */
7309 sb->st_size = INT_MAX;
7310 return 0;
7311 }
7312
7313 int
7314 remote_filename_p (const char *filename)
7315 {
7316 return strncmp (filename, "remote:", 7) == 0;
7317 }
7318
7319 bfd *
7320 remote_bfd_open (const char *remote_file, const char *target)
7321 {
7322 return bfd_openr_iovec (remote_file, target,
7323 remote_bfd_iovec_open, NULL,
7324 remote_bfd_iovec_pread,
7325 remote_bfd_iovec_close,
7326 remote_bfd_iovec_stat);
7327 }
7328
7329 void
7330 remote_file_put (const char *local_file, const char *remote_file, int from_tty)
7331 {
7332 struct cleanup *back_to, *close_cleanup;
7333 int retcode, fd, remote_errno, bytes, io_size;
7334 FILE *file;
7335 gdb_byte *buffer;
7336 int bytes_in_buffer;
7337 int saw_eof;
7338 ULONGEST offset;
7339
7340 if (!remote_desc)
7341 error (_("command can only be used with remote target"));
7342
7343 file = fopen (local_file, "rb");
7344 if (file == NULL)
7345 perror_with_name (local_file);
7346 back_to = make_cleanup (fclose_cleanup, file);
7347
7348 fd = remote_hostio_open (remote_file, (FILEIO_O_WRONLY | FILEIO_O_CREAT
7349 | FILEIO_O_TRUNC),
7350 0700, &remote_errno);
7351 if (fd == -1)
7352 remote_hostio_error (remote_errno);
7353
7354 /* Send up to this many bytes at once. They won't all fit in the
7355 remote packet limit, so we'll transfer slightly fewer. */
7356 io_size = get_remote_packet_size ();
7357 buffer = xmalloc (io_size);
7358 make_cleanup (xfree, buffer);
7359
7360 close_cleanup = make_cleanup (remote_hostio_close_cleanup, &fd);
7361
7362 bytes_in_buffer = 0;
7363 saw_eof = 0;
7364 offset = 0;
7365 while (bytes_in_buffer || !saw_eof)
7366 {
7367 if (!saw_eof)
7368 {
7369 bytes = fread (buffer + bytes_in_buffer, 1, io_size - bytes_in_buffer,
7370 file);
7371 if (bytes == 0)
7372 {
7373 if (ferror (file))
7374 error (_("Error reading %s."), local_file);
7375 else
7376 {
7377 /* EOF. Unless there is something still in the
7378 buffer from the last iteration, we are done. */
7379 saw_eof = 1;
7380 if (bytes_in_buffer == 0)
7381 break;
7382 }
7383 }
7384 }
7385 else
7386 bytes = 0;
7387
7388 bytes += bytes_in_buffer;
7389 bytes_in_buffer = 0;
7390
7391 retcode = remote_hostio_pwrite (fd, buffer, bytes, offset, &remote_errno);
7392
7393 if (retcode < 0)
7394 remote_hostio_error (remote_errno);
7395 else if (retcode == 0)
7396 error (_("Remote write of %d bytes returned 0!"), bytes);
7397 else if (retcode < bytes)
7398 {
7399 /* Short write. Save the rest of the read data for the next
7400 write. */
7401 bytes_in_buffer = bytes - retcode;
7402 memmove (buffer, buffer + retcode, bytes_in_buffer);
7403 }
7404
7405 offset += retcode;
7406 }
7407
7408 discard_cleanups (close_cleanup);
7409 if (remote_hostio_close (fd, &remote_errno))
7410 remote_hostio_error (remote_errno);
7411
7412 if (from_tty)
7413 printf_filtered (_("Successfully sent file \"%s\".\n"), local_file);
7414 do_cleanups (back_to);
7415 }
7416
7417 void
7418 remote_file_get (const char *remote_file, const char *local_file, int from_tty)
7419 {
7420 struct cleanup *back_to, *close_cleanup;
7421 int retcode, fd, remote_errno, bytes, io_size;
7422 FILE *file;
7423 gdb_byte *buffer;
7424 ULONGEST offset;
7425
7426 if (!remote_desc)
7427 error (_("command can only be used with remote target"));
7428
7429 fd = remote_hostio_open (remote_file, FILEIO_O_RDONLY, 0, &remote_errno);
7430 if (fd == -1)
7431 remote_hostio_error (remote_errno);
7432
7433 file = fopen (local_file, "wb");
7434 if (file == NULL)
7435 perror_with_name (local_file);
7436 back_to = make_cleanup (fclose_cleanup, file);
7437
7438 /* Send up to this many bytes at once. They won't all fit in the
7439 remote packet limit, so we'll transfer slightly fewer. */
7440 io_size = get_remote_packet_size ();
7441 buffer = xmalloc (io_size);
7442 make_cleanup (xfree, buffer);
7443
7444 close_cleanup = make_cleanup (remote_hostio_close_cleanup, &fd);
7445
7446 offset = 0;
7447 while (1)
7448 {
7449 bytes = remote_hostio_pread (fd, buffer, io_size, offset, &remote_errno);
7450 if (bytes == 0)
7451 /* Success, but no bytes, means end-of-file. */
7452 break;
7453 if (bytes == -1)
7454 remote_hostio_error (remote_errno);
7455
7456 offset += bytes;
7457
7458 bytes = fwrite (buffer, 1, bytes, file);
7459 if (bytes == 0)
7460 perror_with_name (local_file);
7461 }
7462
7463 discard_cleanups (close_cleanup);
7464 if (remote_hostio_close (fd, &remote_errno))
7465 remote_hostio_error (remote_errno);
7466
7467 if (from_tty)
7468 printf_filtered (_("Successfully fetched file \"%s\".\n"), remote_file);
7469 do_cleanups (back_to);
7470 }
7471
7472 void
7473 remote_file_delete (const char *remote_file, int from_tty)
7474 {
7475 int retcode, remote_errno;
7476
7477 if (!remote_desc)
7478 error (_("command can only be used with remote target"));
7479
7480 retcode = remote_hostio_unlink (remote_file, &remote_errno);
7481 if (retcode == -1)
7482 remote_hostio_error (remote_errno);
7483
7484 if (from_tty)
7485 printf_filtered (_("Successfully deleted file \"%s\".\n"), remote_file);
7486 }
7487
7488 static void
7489 remote_put_command (char *args, int from_tty)
7490 {
7491 struct cleanup *back_to;
7492 char **argv;
7493
7494 argv = buildargv (args);
7495 if (argv == NULL)
7496 nomem (0);
7497 back_to = make_cleanup_freeargv (argv);
7498 if (argv[0] == NULL || argv[1] == NULL || argv[2] != NULL)
7499 error (_("Invalid parameters to remote put"));
7500
7501 remote_file_put (argv[0], argv[1], from_tty);
7502
7503 do_cleanups (back_to);
7504 }
7505
7506 static void
7507 remote_get_command (char *args, int from_tty)
7508 {
7509 struct cleanup *back_to;
7510 char **argv;
7511
7512 argv = buildargv (args);
7513 if (argv == NULL)
7514 nomem (0);
7515 back_to = make_cleanup_freeargv (argv);
7516 if (argv[0] == NULL || argv[1] == NULL || argv[2] != NULL)
7517 error (_("Invalid parameters to remote get"));
7518
7519 remote_file_get (argv[0], argv[1], from_tty);
7520
7521 do_cleanups (back_to);
7522 }
7523
7524 static void
7525 remote_delete_command (char *args, int from_tty)
7526 {
7527 struct cleanup *back_to;
7528 char **argv;
7529
7530 argv = buildargv (args);
7531 if (argv == NULL)
7532 nomem (0);
7533 back_to = make_cleanup_freeargv (argv);
7534 if (argv[0] == NULL || argv[1] != NULL)
7535 error (_("Invalid parameters to remote delete"));
7536
7537 remote_file_delete (argv[0], from_tty);
7538
7539 do_cleanups (back_to);
7540 }
7541
7542 static void
7543 remote_command (char *args, int from_tty)
7544 {
7545 help_list (remote_cmdlist, "remote ", -1, gdb_stdout);
7546 }
7547
7548 static void
7549 init_remote_ops (void)
7550 {
7551 remote_ops.to_shortname = "remote";
7552 remote_ops.to_longname = "Remote serial target in gdb-specific protocol";
7553 remote_ops.to_doc =
7554 "Use a remote computer via a serial line, using a gdb-specific protocol.\n\
7555 Specify the serial device it is connected to\n\
7556 (e.g. /dev/ttyS0, /dev/ttya, COM1, etc.).";
7557 remote_ops.to_open = remote_open;
7558 remote_ops.to_close = remote_close;
7559 remote_ops.to_detach = remote_detach;
7560 remote_ops.to_disconnect = remote_disconnect;
7561 remote_ops.to_resume = remote_resume;
7562 remote_ops.to_wait = remote_wait;
7563 remote_ops.to_fetch_registers = remote_fetch_registers;
7564 remote_ops.to_store_registers = remote_store_registers;
7565 remote_ops.to_prepare_to_store = remote_prepare_to_store;
7566 remote_ops.deprecated_xfer_memory = remote_xfer_memory;
7567 remote_ops.to_files_info = remote_files_info;
7568 remote_ops.to_insert_breakpoint = remote_insert_breakpoint;
7569 remote_ops.to_remove_breakpoint = remote_remove_breakpoint;
7570 remote_ops.to_stopped_by_watchpoint = remote_stopped_by_watchpoint;
7571 remote_ops.to_stopped_data_address = remote_stopped_data_address;
7572 remote_ops.to_can_use_hw_breakpoint = remote_check_watch_resources;
7573 remote_ops.to_insert_hw_breakpoint = remote_insert_hw_breakpoint;
7574 remote_ops.to_remove_hw_breakpoint = remote_remove_hw_breakpoint;
7575 remote_ops.to_insert_watchpoint = remote_insert_watchpoint;
7576 remote_ops.to_remove_watchpoint = remote_remove_watchpoint;
7577 remote_ops.to_kill = remote_kill;
7578 remote_ops.to_load = generic_load;
7579 remote_ops.to_mourn_inferior = remote_mourn;
7580 remote_ops.to_thread_alive = remote_thread_alive;
7581 remote_ops.to_find_new_threads = remote_threads_info;
7582 remote_ops.to_pid_to_str = remote_pid_to_str;
7583 remote_ops.to_extra_thread_info = remote_threads_extra_info;
7584 remote_ops.to_stop = remote_stop;
7585 remote_ops.to_xfer_partial = remote_xfer_partial;
7586 remote_ops.to_rcmd = remote_rcmd;
7587 remote_ops.to_log_command = serial_log_command;
7588 remote_ops.to_get_thread_local_address = remote_get_thread_local_address;
7589 remote_ops.to_stratum = process_stratum;
7590 remote_ops.to_has_all_memory = 1;
7591 remote_ops.to_has_memory = 1;
7592 remote_ops.to_has_stack = 1;
7593 remote_ops.to_has_registers = 1;
7594 remote_ops.to_has_execution = 1;
7595 remote_ops.to_has_thread_control = tc_schedlock; /* can lock scheduler */
7596 remote_ops.to_magic = OPS_MAGIC;
7597 remote_ops.to_memory_map = remote_memory_map;
7598 remote_ops.to_flash_erase = remote_flash_erase;
7599 remote_ops.to_flash_done = remote_flash_done;
7600 remote_ops.to_read_description = remote_read_description;
7601 remote_ops.to_search_memory = remote_search_memory;
7602 remote_ops.to_can_async_p = remote_can_async_p;
7603 remote_ops.to_is_async_p = remote_is_async_p;
7604 remote_ops.to_async = remote_async;
7605 remote_ops.to_async_mask = remote_async_mask;
7606 remote_ops.to_terminal_inferior = remote_terminal_inferior;
7607 remote_ops.to_terminal_ours = remote_terminal_ours;
7608 }
7609
7610 /* Set up the extended remote vector by making a copy of the standard
7611 remote vector and adding to it. */
7612
7613 static void
7614 init_extended_remote_ops (void)
7615 {
7616 extended_remote_ops = remote_ops;
7617
7618 extended_remote_ops.to_shortname = "extended-remote";
7619 extended_remote_ops.to_longname =
7620 "Extended remote serial target in gdb-specific protocol";
7621 extended_remote_ops.to_doc =
7622 "Use a remote computer via a serial line, using a gdb-specific protocol.\n\
7623 Specify the serial device it is connected to (e.g. /dev/ttya).";
7624 extended_remote_ops.to_open = extended_remote_open;
7625 extended_remote_ops.to_create_inferior = extended_remote_create_inferior;
7626 extended_remote_ops.to_mourn_inferior = extended_remote_mourn;
7627 extended_remote_ops.to_detach = extended_remote_detach;
7628 extended_remote_ops.to_attach = extended_remote_attach;
7629 extended_remote_ops.to_kill = extended_remote_kill;
7630 }
7631
7632 static int
7633 remote_can_async_p (void)
7634 {
7635 if (!target_async_permitted)
7636 /* We only enable async when the user specifically asks for it. */
7637 return 0;
7638
7639 /* We're async whenever the serial device is. */
7640 return remote_async_mask_value && serial_can_async_p (remote_desc);
7641 }
7642
7643 static int
7644 remote_is_async_p (void)
7645 {
7646 if (!target_async_permitted)
7647 /* We only enable async when the user specifically asks for it. */
7648 return 0;
7649
7650 /* We're async whenever the serial device is. */
7651 return remote_async_mask_value && serial_is_async_p (remote_desc);
7652 }
7653
7654 /* Pass the SERIAL event on and up to the client. One day this code
7655 will be able to delay notifying the client of an event until the
7656 point where an entire packet has been received. */
7657
7658 static void (*async_client_callback) (enum inferior_event_type event_type,
7659 void *context);
7660 static void *async_client_context;
7661 static serial_event_ftype remote_async_serial_handler;
7662
7663 static void
7664 remote_async_serial_handler (struct serial *scb, void *context)
7665 {
7666 /* Don't propogate error information up to the client. Instead let
7667 the client find out about the error by querying the target. */
7668 async_client_callback (INF_REG_EVENT, async_client_context);
7669 }
7670
7671 static void
7672 remote_async (void (*callback) (enum inferior_event_type event_type,
7673 void *context), void *context)
7674 {
7675 if (remote_async_mask_value == 0)
7676 internal_error (__FILE__, __LINE__,
7677 _("Calling remote_async when async is masked"));
7678
7679 if (callback != NULL)
7680 {
7681 serial_async (remote_desc, remote_async_serial_handler, NULL);
7682 async_client_callback = callback;
7683 async_client_context = context;
7684 }
7685 else
7686 serial_async (remote_desc, NULL, NULL);
7687 }
7688
7689 static int
7690 remote_async_mask (int new_mask)
7691 {
7692 int curr_mask = remote_async_mask_value;
7693 remote_async_mask_value = new_mask;
7694 return curr_mask;
7695 }
7696
7697 static void
7698 set_remote_cmd (char *args, int from_tty)
7699 {
7700 help_list (remote_set_cmdlist, "set remote ", -1, gdb_stdout);
7701 }
7702
7703 static void
7704 show_remote_cmd (char *args, int from_tty)
7705 {
7706 /* We can't just use cmd_show_list here, because we want to skip
7707 the redundant "show remote Z-packet" and the legacy aliases. */
7708 struct cleanup *showlist_chain;
7709 struct cmd_list_element *list = remote_show_cmdlist;
7710
7711 showlist_chain = make_cleanup_ui_out_tuple_begin_end (uiout, "showlist");
7712 for (; list != NULL; list = list->next)
7713 if (strcmp (list->name, "Z-packet") == 0)
7714 continue;
7715 else if (list->type == not_set_cmd)
7716 /* Alias commands are exactly like the original, except they
7717 don't have the normal type. */
7718 continue;
7719 else
7720 {
7721 struct cleanup *option_chain
7722 = make_cleanup_ui_out_tuple_begin_end (uiout, "option");
7723 ui_out_field_string (uiout, "name", list->name);
7724 ui_out_text (uiout, ": ");
7725 if (list->type == show_cmd)
7726 do_setshow_command ((char *) NULL, from_tty, list);
7727 else
7728 cmd_func (list, NULL, from_tty);
7729 /* Close the tuple. */
7730 do_cleanups (option_chain);
7731 }
7732
7733 /* Close the tuple. */
7734 do_cleanups (showlist_chain);
7735 }
7736
7737
7738 /* Function to be called whenever a new objfile (shlib) is detected. */
7739 static void
7740 remote_new_objfile (struct objfile *objfile)
7741 {
7742 if (remote_desc != 0) /* Have a remote connection. */
7743 remote_check_symbols (objfile);
7744 }
7745
7746 void
7747 _initialize_remote (void)
7748 {
7749 struct remote_state *rs;
7750
7751 /* architecture specific data */
7752 remote_gdbarch_data_handle =
7753 gdbarch_data_register_post_init (init_remote_state);
7754 remote_g_packet_data_handle =
7755 gdbarch_data_register_pre_init (remote_g_packet_data_init);
7756
7757 /* Initialize the per-target state. At the moment there is only one
7758 of these, not one per target. Only one target is active at a
7759 time. The default buffer size is unimportant; it will be expanded
7760 whenever a larger buffer is needed. */
7761 rs = get_remote_state_raw ();
7762 rs->buf_size = 400;
7763 rs->buf = xmalloc (rs->buf_size);
7764
7765 init_remote_ops ();
7766 add_target (&remote_ops);
7767
7768 init_extended_remote_ops ();
7769 add_target (&extended_remote_ops);
7770
7771 /* Hook into new objfile notification. */
7772 observer_attach_new_objfile (remote_new_objfile);
7773
7774 /* Set up signal handlers. */
7775 sigint_remote_token =
7776 create_async_signal_handler (async_remote_interrupt, NULL);
7777 sigint_remote_twice_token =
7778 create_async_signal_handler (inferior_event_handler_wrapper, NULL);
7779
7780 #if 0
7781 init_remote_threadtests ();
7782 #endif
7783
7784 /* set/show remote ... */
7785
7786 add_prefix_cmd ("remote", class_maintenance, set_remote_cmd, _("\
7787 Remote protocol specific variables\n\
7788 Configure various remote-protocol specific variables such as\n\
7789 the packets being used"),
7790 &remote_set_cmdlist, "set remote ",
7791 0 /* allow-unknown */, &setlist);
7792 add_prefix_cmd ("remote", class_maintenance, show_remote_cmd, _("\
7793 Remote protocol specific variables\n\
7794 Configure various remote-protocol specific variables such as\n\
7795 the packets being used"),
7796 &remote_show_cmdlist, "show remote ",
7797 0 /* allow-unknown */, &showlist);
7798
7799 add_cmd ("compare-sections", class_obscure, compare_sections_command, _("\
7800 Compare section data on target to the exec file.\n\
7801 Argument is a single section name (default: all loaded sections)."),
7802 &cmdlist);
7803
7804 add_cmd ("packet", class_maintenance, packet_command, _("\
7805 Send an arbitrary packet to a remote target.\n\
7806 maintenance packet TEXT\n\
7807 If GDB is talking to an inferior via the GDB serial protocol, then\n\
7808 this command sends the string TEXT to the inferior, and displays the\n\
7809 response packet. GDB supplies the initial `$' character, and the\n\
7810 terminating `#' character and checksum."),
7811 &maintenancelist);
7812
7813 add_setshow_boolean_cmd ("remotebreak", no_class, &remote_break, _("\
7814 Set whether to send break if interrupted."), _("\
7815 Show whether to send break if interrupted."), _("\
7816 If set, a break, instead of a cntrl-c, is sent to the remote target."),
7817 NULL, NULL, /* FIXME: i18n: Whether to send break if interrupted is %s. */
7818 &setlist, &showlist);
7819
7820 /* Install commands for configuring memory read/write packets. */
7821
7822 add_cmd ("remotewritesize", no_class, set_memory_write_packet_size, _("\
7823 Set the maximum number of bytes per memory write packet (deprecated)."),
7824 &setlist);
7825 add_cmd ("remotewritesize", no_class, show_memory_write_packet_size, _("\
7826 Show the maximum number of bytes per memory write packet (deprecated)."),
7827 &showlist);
7828 add_cmd ("memory-write-packet-size", no_class,
7829 set_memory_write_packet_size, _("\
7830 Set the maximum number of bytes per memory-write packet.\n\
7831 Specify the number of bytes in a packet or 0 (zero) for the\n\
7832 default packet size. The actual limit is further reduced\n\
7833 dependent on the target. Specify ``fixed'' to disable the\n\
7834 further restriction and ``limit'' to enable that restriction."),
7835 &remote_set_cmdlist);
7836 add_cmd ("memory-read-packet-size", no_class,
7837 set_memory_read_packet_size, _("\
7838 Set the maximum number of bytes per memory-read packet.\n\
7839 Specify the number of bytes in a packet or 0 (zero) for the\n\
7840 default packet size. The actual limit is further reduced\n\
7841 dependent on the target. Specify ``fixed'' to disable the\n\
7842 further restriction and ``limit'' to enable that restriction."),
7843 &remote_set_cmdlist);
7844 add_cmd ("memory-write-packet-size", no_class,
7845 show_memory_write_packet_size,
7846 _("Show the maximum number of bytes per memory-write packet."),
7847 &remote_show_cmdlist);
7848 add_cmd ("memory-read-packet-size", no_class,
7849 show_memory_read_packet_size,
7850 _("Show the maximum number of bytes per memory-read packet."),
7851 &remote_show_cmdlist);
7852
7853 add_setshow_zinteger_cmd ("hardware-watchpoint-limit", no_class,
7854 &remote_hw_watchpoint_limit, _("\
7855 Set the maximum number of target hardware watchpoints."), _("\
7856 Show the maximum number of target hardware watchpoints."), _("\
7857 Specify a negative limit for unlimited."),
7858 NULL, NULL, /* FIXME: i18n: The maximum number of target hardware watchpoints is %s. */
7859 &remote_set_cmdlist, &remote_show_cmdlist);
7860 add_setshow_zinteger_cmd ("hardware-breakpoint-limit", no_class,
7861 &remote_hw_breakpoint_limit, _("\
7862 Set the maximum number of target hardware breakpoints."), _("\
7863 Show the maximum number of target hardware breakpoints."), _("\
7864 Specify a negative limit for unlimited."),
7865 NULL, NULL, /* FIXME: i18n: The maximum number of target hardware breakpoints is %s. */
7866 &remote_set_cmdlist, &remote_show_cmdlist);
7867
7868 add_setshow_integer_cmd ("remoteaddresssize", class_obscure,
7869 &remote_address_size, _("\
7870 Set the maximum size of the address (in bits) in a memory packet."), _("\
7871 Show the maximum size of the address (in bits) in a memory packet."), NULL,
7872 NULL,
7873 NULL, /* FIXME: i18n: */
7874 &setlist, &showlist);
7875
7876 add_packet_config_cmd (&remote_protocol_packets[PACKET_X],
7877 "X", "binary-download", 1);
7878
7879 add_packet_config_cmd (&remote_protocol_packets[PACKET_vCont],
7880 "vCont", "verbose-resume", 0);
7881
7882 add_packet_config_cmd (&remote_protocol_packets[PACKET_QPassSignals],
7883 "QPassSignals", "pass-signals", 0);
7884
7885 add_packet_config_cmd (&remote_protocol_packets[PACKET_qSymbol],
7886 "qSymbol", "symbol-lookup", 0);
7887
7888 add_packet_config_cmd (&remote_protocol_packets[PACKET_P],
7889 "P", "set-register", 1);
7890
7891 add_packet_config_cmd (&remote_protocol_packets[PACKET_p],
7892 "p", "fetch-register", 1);
7893
7894 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z0],
7895 "Z0", "software-breakpoint", 0);
7896
7897 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z1],
7898 "Z1", "hardware-breakpoint", 0);
7899
7900 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z2],
7901 "Z2", "write-watchpoint", 0);
7902
7903 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z3],
7904 "Z3", "read-watchpoint", 0);
7905
7906 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z4],
7907 "Z4", "access-watchpoint", 0);
7908
7909 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_auxv],
7910 "qXfer:auxv:read", "read-aux-vector", 0);
7911
7912 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_features],
7913 "qXfer:features:read", "target-features", 0);
7914
7915 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_libraries],
7916 "qXfer:libraries:read", "library-info", 0);
7917
7918 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_memory_map],
7919 "qXfer:memory-map:read", "memory-map", 0);
7920
7921 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_spu_read],
7922 "qXfer:spu:read", "read-spu-object", 0);
7923
7924 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_spu_write],
7925 "qXfer:spu:write", "write-spu-object", 0);
7926
7927 add_packet_config_cmd (&remote_protocol_packets[PACKET_qGetTLSAddr],
7928 "qGetTLSAddr", "get-thread-local-storage-address",
7929 0);
7930
7931 add_packet_config_cmd (&remote_protocol_packets[PACKET_qSupported],
7932 "qSupported", "supported-packets", 0);
7933
7934 add_packet_config_cmd (&remote_protocol_packets[PACKET_qSearch_memory],
7935 "qSearch:memory", "search-memory", 0);
7936
7937 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_open],
7938 "vFile:open", "hostio-open", 0);
7939
7940 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_pread],
7941 "vFile:pread", "hostio-pread", 0);
7942
7943 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_pwrite],
7944 "vFile:pwrite", "hostio-pwrite", 0);
7945
7946 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_close],
7947 "vFile:close", "hostio-close", 0);
7948
7949 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_unlink],
7950 "vFile:unlink", "hostio-unlink", 0);
7951
7952 add_packet_config_cmd (&remote_protocol_packets[PACKET_vAttach],
7953 "vAttach", "attach", 0);
7954
7955 add_packet_config_cmd (&remote_protocol_packets[PACKET_vRun],
7956 "vRun", "run", 0);
7957
7958 add_packet_config_cmd (&remote_protocol_packets[PACKET_QStartNoAckMode],
7959 "QStartNoAckMode", "noack", 0);
7960
7961 add_packet_config_cmd (&remote_protocol_packets[PACKET_vKill],
7962 "vKill", "kill", 0);
7963
7964 /* Keep the old ``set remote Z-packet ...'' working. Each individual
7965 Z sub-packet has its own set and show commands, but users may
7966 have sets to this variable in their .gdbinit files (or in their
7967 documentation). */
7968 add_setshow_auto_boolean_cmd ("Z-packet", class_obscure,
7969 &remote_Z_packet_detect, _("\
7970 Set use of remote protocol `Z' packets"), _("\
7971 Show use of remote protocol `Z' packets "), _("\
7972 When set, GDB will attempt to use the remote breakpoint and watchpoint\n\
7973 packets."),
7974 set_remote_protocol_Z_packet_cmd,
7975 show_remote_protocol_Z_packet_cmd, /* FIXME: i18n: Use of remote protocol `Z' packets is %s. */
7976 &remote_set_cmdlist, &remote_show_cmdlist);
7977
7978 add_prefix_cmd ("remote", class_files, remote_command, _("\
7979 Manipulate files on the remote system\n\
7980 Transfer files to and from the remote target system."),
7981 &remote_cmdlist, "remote ",
7982 0 /* allow-unknown */, &cmdlist);
7983
7984 add_cmd ("put", class_files, remote_put_command,
7985 _("Copy a local file to the remote system."),
7986 &remote_cmdlist);
7987
7988 add_cmd ("get", class_files, remote_get_command,
7989 _("Copy a remote file to the local system."),
7990 &remote_cmdlist);
7991
7992 add_cmd ("delete", class_files, remote_delete_command,
7993 _("Delete a remote file."),
7994 &remote_cmdlist);
7995
7996 remote_exec_file = xstrdup ("");
7997 add_setshow_string_noescape_cmd ("exec-file", class_files,
7998 &remote_exec_file, _("\
7999 Set the remote pathname for \"run\""), _("\
8000 Show the remote pathname for \"run\""), NULL, NULL, NULL,
8001 &remote_set_cmdlist, &remote_show_cmdlist);
8002
8003 /* Eventually initialize fileio. See fileio.c */
8004 initialize_remote_fileio (remote_set_cmdlist, remote_show_cmdlist);
8005
8006 /* Take advantage of the fact that the LWP field is not used, to tag
8007 special ptids with it set to != 0. */
8008 magic_null_ptid = ptid_build (42000, 1, -1);
8009 not_sent_ptid = ptid_build (42000, 1, -2);
8010 any_thread_ptid = ptid_build (42000, 1, 0);
8011 }