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