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