]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blob - gdb/remote.c
gdb: Use std::min and std::max throughout
[thirdparty/binutils-gdb.git] / gdb / remote.c
1 /* Remote target communications for serial-line targets in custom GDB protocol
2
3 Copyright (C) 1988-2016 Free Software Foundation, Inc.
4
5 This file is part of GDB.
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
19
20 /* See the GDB User Guide for details of the GDB remote protocol. */
21
22 #include "defs.h"
23 #include <ctype.h>
24 #include <fcntl.h>
25 #include "inferior.h"
26 #include "infrun.h"
27 #include "bfd.h"
28 #include "symfile.h"
29 #include "target.h"
30 /*#include "terminal.h" */
31 #include "gdbcmd.h"
32 #include "objfiles.h"
33 #include "gdb-stabs.h"
34 #include "gdbthread.h"
35 #include "remote.h"
36 #include "remote-notif.h"
37 #include "regcache.h"
38 #include "value.h"
39 #include "observer.h"
40 #include "solib.h"
41 #include "cli/cli-decode.h"
42 #include "cli/cli-setshow.h"
43 #include "target-descriptions.h"
44 #include "gdb_bfd.h"
45 #include "filestuff.h"
46 #include "rsp-low.h"
47 #include "disasm.h"
48 #include "location.h"
49
50 #include "gdb_sys_time.h"
51
52 #include "event-loop.h"
53 #include "event-top.h"
54 #include "inf-loop.h"
55
56 #include <signal.h>
57 #include "serial.h"
58
59 #include "gdbcore.h" /* for exec_bfd */
60
61 #include "remote-fileio.h"
62 #include "gdb/fileio.h"
63 #include <sys/stat.h>
64 #include "xml-support.h"
65
66 #include "memory-map.h"
67
68 #include "tracepoint.h"
69 #include "ax.h"
70 #include "ax-gdb.h"
71 #include "agent.h"
72 #include "btrace.h"
73 #include "record-btrace.h"
74 #include <algorithm>
75
76 /* Temp hacks for tracepoint encoding migration. */
77 static char *target_buf;
78 static long target_buf_size;
79
80 /* Per-program-space data key. */
81 static const struct program_space_data *remote_pspace_data;
82
83 /* The variable registered as the control variable used by the
84 remote exec-file commands. While the remote exec-file setting is
85 per-program-space, the set/show machinery uses this as the
86 location of the remote exec-file value. */
87 static char *remote_exec_file_var;
88
89 /* The size to align memory write packets, when practical. The protocol
90 does not guarantee any alignment, and gdb will generate short
91 writes and unaligned writes, but even as a best-effort attempt this
92 can improve bulk transfers. For instance, if a write is misaligned
93 relative to the target's data bus, the stub may need to make an extra
94 round trip fetching data from the target. This doesn't make a
95 huge difference, but it's easy to do, so we try to be helpful.
96
97 The alignment chosen is arbitrary; usually data bus width is
98 important here, not the possibly larger cache line size. */
99 enum { REMOTE_ALIGN_WRITES = 16 };
100
101 /* Prototypes for local functions. */
102 static int getpkt_sane (char **buf, long *sizeof_buf, int forever);
103 static int getpkt_or_notif_sane (char **buf, long *sizeof_buf,
104 int forever, int *is_notif);
105
106 static void remote_files_info (struct target_ops *ignore);
107
108 static void remote_prepare_to_store (struct target_ops *self,
109 struct regcache *regcache);
110
111 static void remote_open_1 (const char *, int, struct target_ops *,
112 int extended_p);
113
114 static void remote_close (struct target_ops *self);
115
116 struct remote_state;
117
118 static int remote_vkill (int pid, struct remote_state *rs);
119
120 static void remote_kill_k (void);
121
122 static void remote_mourn (struct target_ops *ops);
123
124 static void extended_remote_restart (void);
125
126 static void remote_send (char **buf, long *sizeof_buf_p);
127
128 static int readchar (int timeout);
129
130 static void remote_serial_write (const char *str, int len);
131
132 static void remote_kill (struct target_ops *ops);
133
134 static int remote_can_async_p (struct target_ops *);
135
136 static int remote_is_async_p (struct target_ops *);
137
138 static void remote_async (struct target_ops *ops, int enable);
139
140 static void remote_thread_events (struct target_ops *ops, int enable);
141
142 static void interrupt_query (void);
143
144 static void set_general_thread (struct ptid ptid);
145 static void set_continue_thread (struct ptid ptid);
146
147 static void get_offsets (void);
148
149 static void skip_frame (void);
150
151 static long read_frame (char **buf_p, long *sizeof_buf);
152
153 static int hexnumlen (ULONGEST num);
154
155 static void init_remote_ops (void);
156
157 static void init_extended_remote_ops (void);
158
159 static void remote_stop (struct target_ops *self, ptid_t);
160
161 static int stubhex (int ch);
162
163 static int hexnumstr (char *, ULONGEST);
164
165 static int hexnumnstr (char *, ULONGEST, int);
166
167 static CORE_ADDR remote_address_masked (CORE_ADDR);
168
169 static void print_packet (const char *);
170
171 static void compare_sections_command (char *, int);
172
173 static void packet_command (char *, int);
174
175 static int stub_unpack_int (char *buff, int fieldlength);
176
177 static ptid_t remote_current_thread (ptid_t oldptid);
178
179 static int putpkt_binary (const char *buf, int cnt);
180
181 static void check_binary_download (CORE_ADDR addr);
182
183 struct packet_config;
184
185 static void show_packet_config_cmd (struct packet_config *config);
186
187 static void show_remote_protocol_packet_cmd (struct ui_file *file,
188 int from_tty,
189 struct cmd_list_element *c,
190 const char *value);
191
192 static char *write_ptid (char *buf, const char *endbuf, ptid_t ptid);
193 static ptid_t read_ptid (char *buf, char **obuf);
194
195 static void remote_set_permissions (struct target_ops *self);
196
197 static int remote_get_trace_status (struct target_ops *self,
198 struct trace_status *ts);
199
200 static int remote_upload_tracepoints (struct target_ops *self,
201 struct uploaded_tp **utpp);
202
203 static int remote_upload_trace_state_variables (struct target_ops *self,
204 struct uploaded_tsv **utsvp);
205
206 static void remote_query_supported (void);
207
208 static void remote_check_symbols (void);
209
210 void _initialize_remote (void);
211
212 struct stop_reply;
213 static void stop_reply_xfree (struct stop_reply *);
214 static void remote_parse_stop_reply (char *, struct stop_reply *);
215 static void push_stop_reply (struct stop_reply *);
216 static void discard_pending_stop_replies_in_queue (struct remote_state *);
217 static int peek_stop_reply (ptid_t ptid);
218
219 struct threads_listing_context;
220 static void remove_new_fork_children (struct threads_listing_context *);
221
222 static void remote_async_inferior_event_handler (gdb_client_data);
223
224 static void remote_terminal_ours (struct target_ops *self);
225
226 static int remote_read_description_p (struct target_ops *target);
227
228 static void remote_console_output (char *msg);
229
230 static int remote_supports_cond_breakpoints (struct target_ops *self);
231
232 static int remote_can_run_breakpoint_commands (struct target_ops *self);
233
234 static void remote_btrace_reset (void);
235
236 static void remote_btrace_maybe_reopen (void);
237
238 static int stop_reply_queue_length (void);
239
240 static void readahead_cache_invalidate (void);
241
242 static void remote_unpush_and_throw (void);
243
244 /* For "remote". */
245
246 static struct cmd_list_element *remote_cmdlist;
247
248 /* For "set remote" and "show remote". */
249
250 static struct cmd_list_element *remote_set_cmdlist;
251 static struct cmd_list_element *remote_show_cmdlist;
252
253 /* Stub vCont actions support.
254
255 Each field is a boolean flag indicating whether the stub reports
256 support for the corresponding action. */
257
258 struct vCont_action_support
259 {
260 /* vCont;t */
261 int t;
262
263 /* vCont;r */
264 int r;
265
266 /* vCont;s */
267 int s;
268
269 /* vCont;S */
270 int S;
271 };
272
273 /* Controls whether GDB is willing to use range stepping. */
274
275 static int use_range_stepping = 1;
276
277 #define OPAQUETHREADBYTES 8
278
279 /* a 64 bit opaque identifier */
280 typedef unsigned char threadref[OPAQUETHREADBYTES];
281
282 /* About this many threadisds fit in a packet. */
283
284 #define MAXTHREADLISTRESULTS 32
285
286 /* Data for the vFile:pread readahead cache. */
287
288 struct readahead_cache
289 {
290 /* The file descriptor for the file that is being cached. -1 if the
291 cache is invalid. */
292 int fd;
293
294 /* The offset into the file that the cache buffer corresponds
295 to. */
296 ULONGEST offset;
297
298 /* The buffer holding the cache contents. */
299 gdb_byte *buf;
300 /* The buffer's size. We try to read as much as fits into a packet
301 at a time. */
302 size_t bufsize;
303
304 /* Cache hit and miss counters. */
305 ULONGEST hit_count;
306 ULONGEST miss_count;
307 };
308
309 /* Description of the remote protocol state for the currently
310 connected target. This is per-target state, and independent of the
311 selected architecture. */
312
313 struct remote_state
314 {
315 /* A buffer to use for incoming packets, and its current size. The
316 buffer is grown dynamically for larger incoming packets.
317 Outgoing packets may also be constructed in this buffer.
318 BUF_SIZE is always at least REMOTE_PACKET_SIZE;
319 REMOTE_PACKET_SIZE should be used to limit the length of outgoing
320 packets. */
321 char *buf;
322 long buf_size;
323
324 /* True if we're going through initial connection setup (finding out
325 about the remote side's threads, relocating symbols, etc.). */
326 int starting_up;
327
328 /* If we negotiated packet size explicitly (and thus can bypass
329 heuristics for the largest packet size that will not overflow
330 a buffer in the stub), this will be set to that packet size.
331 Otherwise zero, meaning to use the guessed size. */
332 long explicit_packet_size;
333
334 /* remote_wait is normally called when the target is running and
335 waits for a stop reply packet. But sometimes we need to call it
336 when the target is already stopped. We can send a "?" packet
337 and have remote_wait read the response. Or, if we already have
338 the response, we can stash it in BUF and tell remote_wait to
339 skip calling getpkt. This flag is set when BUF contains a
340 stop reply packet and the target is not waiting. */
341 int cached_wait_status;
342
343 /* True, if in no ack mode. That is, neither GDB nor the stub will
344 expect acks from each other. The connection is assumed to be
345 reliable. */
346 int noack_mode;
347
348 /* True if we're connected in extended remote mode. */
349 int extended;
350
351 /* True if we resumed the target and we're waiting for the target to
352 stop. In the mean time, we can't start another command/query.
353 The remote server wouldn't be ready to process it, so we'd
354 timeout waiting for a reply that would never come and eventually
355 we'd close the connection. This can happen in asynchronous mode
356 because we allow GDB commands while the target is running. */
357 int waiting_for_stop_reply;
358
359 /* The status of the stub support for the various vCont actions. */
360 struct vCont_action_support supports_vCont;
361
362 /* Nonzero if the user has pressed Ctrl-C, but the target hasn't
363 responded to that. */
364 int ctrlc_pending_p;
365
366 /* True if we saw a Ctrl-C while reading or writing from/to the
367 remote descriptor. At that point it is not safe to send a remote
368 interrupt packet, so we instead remember we saw the Ctrl-C and
369 process it once we're done with sending/receiving the current
370 packet, which should be shortly. If however that takes too long,
371 and the user presses Ctrl-C again, we offer to disconnect. */
372 int got_ctrlc_during_io;
373
374 /* Descriptor for I/O to remote machine. Initialize it to NULL so that
375 remote_open knows that we don't have a file open when the program
376 starts. */
377 struct serial *remote_desc;
378
379 /* These are the threads which we last sent to the remote system. The
380 TID member will be -1 for all or -2 for not sent yet. */
381 ptid_t general_thread;
382 ptid_t continue_thread;
383
384 /* This is the traceframe which we last selected on the remote system.
385 It will be -1 if no traceframe is selected. */
386 int remote_traceframe_number;
387
388 char *last_pass_packet;
389
390 /* The last QProgramSignals packet sent to the target. We bypass
391 sending a new program signals list down to the target if the new
392 packet is exactly the same as the last we sent. IOW, we only let
393 the target know about program signals list changes. */
394 char *last_program_signals_packet;
395
396 enum gdb_signal last_sent_signal;
397
398 int last_sent_step;
399
400 /* The execution direction of the last resume we got. */
401 enum exec_direction_kind last_resume_exec_dir;
402
403 char *finished_object;
404 char *finished_annex;
405 ULONGEST finished_offset;
406
407 /* Should we try the 'ThreadInfo' query packet?
408
409 This variable (NOT available to the user: auto-detect only!)
410 determines whether GDB will use the new, simpler "ThreadInfo"
411 query or the older, more complex syntax for thread queries.
412 This is an auto-detect variable (set to true at each connect,
413 and set to false when the target fails to recognize it). */
414 int use_threadinfo_query;
415 int use_threadextra_query;
416
417 threadref echo_nextthread;
418 threadref nextthread;
419 threadref resultthreadlist[MAXTHREADLISTRESULTS];
420
421 /* The state of remote notification. */
422 struct remote_notif_state *notif_state;
423
424 /* The branch trace configuration. */
425 struct btrace_config btrace_config;
426
427 /* The argument to the last "vFile:setfs:" packet we sent, used
428 to avoid sending repeated unnecessary "vFile:setfs:" packets.
429 Initialized to -1 to indicate that no "vFile:setfs:" packet
430 has yet been sent. */
431 int fs_pid;
432
433 /* A readahead cache for vFile:pread. Often, reading a binary
434 involves a sequence of small reads. E.g., when parsing an ELF
435 file. A readahead cache helps mostly the case of remote
436 debugging on a connection with higher latency, due to the
437 request/reply nature of the RSP. We only cache data for a single
438 file descriptor at a time. */
439 struct readahead_cache readahead_cache;
440 };
441
442 /* Private data that we'll store in (struct thread_info)->private. */
443 struct private_thread_info
444 {
445 char *extra;
446 char *name;
447 int core;
448
449 /* Whether the target stopped for a breakpoint/watchpoint. */
450 enum target_stop_reason stop_reason;
451
452 /* This is set to the data address of the access causing the target
453 to stop for a watchpoint. */
454 CORE_ADDR watch_data_address;
455 };
456
457 static void
458 free_private_thread_info (struct private_thread_info *info)
459 {
460 xfree (info->extra);
461 xfree (info->name);
462 xfree (info);
463 }
464
465 /* This data could be associated with a target, but we do not always
466 have access to the current target when we need it, so for now it is
467 static. This will be fine for as long as only one target is in use
468 at a time. */
469 static struct remote_state *remote_state;
470
471 static struct remote_state *
472 get_remote_state_raw (void)
473 {
474 return remote_state;
475 }
476
477 /* Allocate a new struct remote_state with xmalloc, initialize it, and
478 return it. */
479
480 static struct remote_state *
481 new_remote_state (void)
482 {
483 struct remote_state *result = XCNEW (struct remote_state);
484
485 /* The default buffer size is unimportant; it will be expanded
486 whenever a larger buffer is needed. */
487 result->buf_size = 400;
488 result->buf = (char *) xmalloc (result->buf_size);
489 result->remote_traceframe_number = -1;
490 result->last_sent_signal = GDB_SIGNAL_0;
491 result->last_resume_exec_dir = EXEC_FORWARD;
492 result->fs_pid = -1;
493
494 return result;
495 }
496
497 /* Description of the remote protocol for a given architecture. */
498
499 struct packet_reg
500 {
501 long offset; /* Offset into G packet. */
502 long regnum; /* GDB's internal register number. */
503 LONGEST pnum; /* Remote protocol register number. */
504 int in_g_packet; /* Always part of G packet. */
505 /* long size in bytes; == register_size (target_gdbarch (), regnum);
506 at present. */
507 /* char *name; == gdbarch_register_name (target_gdbarch (), regnum);
508 at present. */
509 };
510
511 struct remote_arch_state
512 {
513 /* Description of the remote protocol registers. */
514 long sizeof_g_packet;
515
516 /* Description of the remote protocol registers indexed by REGNUM
517 (making an array gdbarch_num_regs in size). */
518 struct packet_reg *regs;
519
520 /* This is the size (in chars) of the first response to the ``g''
521 packet. It is used as a heuristic when determining the maximum
522 size of memory-read and memory-write packets. A target will
523 typically only reserve a buffer large enough to hold the ``g''
524 packet. The size does not include packet overhead (headers and
525 trailers). */
526 long actual_register_packet_size;
527
528 /* This is the maximum size (in chars) of a non read/write packet.
529 It is also used as a cap on the size of read/write packets. */
530 long remote_packet_size;
531 };
532
533 /* Utility: generate error from an incoming stub packet. */
534 static void
535 trace_error (char *buf)
536 {
537 if (*buf++ != 'E')
538 return; /* not an error msg */
539 switch (*buf)
540 {
541 case '1': /* malformed packet error */
542 if (*++buf == '0') /* general case: */
543 error (_("remote.c: error in outgoing packet."));
544 else
545 error (_("remote.c: error in outgoing packet at field #%ld."),
546 strtol (buf, NULL, 16));
547 default:
548 error (_("Target returns error code '%s'."), buf);
549 }
550 }
551
552 /* Utility: wait for reply from stub, while accepting "O" packets. */
553 static char *
554 remote_get_noisy_reply (char **buf_p,
555 long *sizeof_buf)
556 {
557 do /* Loop on reply from remote stub. */
558 {
559 char *buf;
560
561 QUIT; /* Allow user to bail out with ^C. */
562 getpkt (buf_p, sizeof_buf, 0);
563 buf = *buf_p;
564 if (buf[0] == 'E')
565 trace_error (buf);
566 else if (startswith (buf, "qRelocInsn:"))
567 {
568 ULONGEST ul;
569 CORE_ADDR from, to, org_to;
570 char *p, *pp;
571 int adjusted_size = 0;
572 int relocated = 0;
573
574 p = buf + strlen ("qRelocInsn:");
575 pp = unpack_varlen_hex (p, &ul);
576 if (*pp != ';')
577 error (_("invalid qRelocInsn packet: %s"), buf);
578 from = ul;
579
580 p = pp + 1;
581 unpack_varlen_hex (p, &ul);
582 to = ul;
583
584 org_to = to;
585
586 TRY
587 {
588 gdbarch_relocate_instruction (target_gdbarch (), &to, from);
589 relocated = 1;
590 }
591 CATCH (ex, RETURN_MASK_ALL)
592 {
593 if (ex.error == MEMORY_ERROR)
594 {
595 /* Propagate memory errors silently back to the
596 target. The stub may have limited the range of
597 addresses we can write to, for example. */
598 }
599 else
600 {
601 /* Something unexpectedly bad happened. Be verbose
602 so we can tell what, and propagate the error back
603 to the stub, so it doesn't get stuck waiting for
604 a response. */
605 exception_fprintf (gdb_stderr, ex,
606 _("warning: relocating instruction: "));
607 }
608 putpkt ("E01");
609 }
610 END_CATCH
611
612 if (relocated)
613 {
614 adjusted_size = to - org_to;
615
616 xsnprintf (buf, *sizeof_buf, "qRelocInsn:%x", adjusted_size);
617 putpkt (buf);
618 }
619 }
620 else if (buf[0] == 'O' && buf[1] != 'K')
621 remote_console_output (buf + 1); /* 'O' message from stub */
622 else
623 return buf; /* Here's the actual reply. */
624 }
625 while (1);
626 }
627
628 /* Handle for retreving the remote protocol data from gdbarch. */
629 static struct gdbarch_data *remote_gdbarch_data_handle;
630
631 static struct remote_arch_state *
632 get_remote_arch_state (void)
633 {
634 gdb_assert (target_gdbarch () != NULL);
635 return ((struct remote_arch_state *)
636 gdbarch_data (target_gdbarch (), remote_gdbarch_data_handle));
637 }
638
639 /* Fetch the global remote target state. */
640
641 static struct remote_state *
642 get_remote_state (void)
643 {
644 /* Make sure that the remote architecture state has been
645 initialized, because doing so might reallocate rs->buf. Any
646 function which calls getpkt also needs to be mindful of changes
647 to rs->buf, but this call limits the number of places which run
648 into trouble. */
649 get_remote_arch_state ();
650
651 return get_remote_state_raw ();
652 }
653
654 /* Cleanup routine for the remote module's pspace data. */
655
656 static void
657 remote_pspace_data_cleanup (struct program_space *pspace, void *arg)
658 {
659 char *remote_exec_file = (char *) arg;
660
661 xfree (remote_exec_file);
662 }
663
664 /* Fetch the remote exec-file from the current program space. */
665
666 static const char *
667 get_remote_exec_file (void)
668 {
669 char *remote_exec_file;
670
671 remote_exec_file
672 = (char *) program_space_data (current_program_space,
673 remote_pspace_data);
674 if (remote_exec_file == NULL)
675 return "";
676
677 return remote_exec_file;
678 }
679
680 /* Set the remote exec file for PSPACE. */
681
682 static void
683 set_pspace_remote_exec_file (struct program_space *pspace,
684 char *remote_exec_file)
685 {
686 char *old_file = (char *) program_space_data (pspace, remote_pspace_data);
687
688 xfree (old_file);
689 set_program_space_data (pspace, remote_pspace_data,
690 xstrdup (remote_exec_file));
691 }
692
693 /* The "set/show remote exec-file" set command hook. */
694
695 static void
696 set_remote_exec_file (char *ignored, int from_tty,
697 struct cmd_list_element *c)
698 {
699 gdb_assert (remote_exec_file_var != NULL);
700 set_pspace_remote_exec_file (current_program_space, remote_exec_file_var);
701 }
702
703 /* The "set/show remote exec-file" show command hook. */
704
705 static void
706 show_remote_exec_file (struct ui_file *file, int from_tty,
707 struct cmd_list_element *cmd, const char *value)
708 {
709 fprintf_filtered (file, "%s\n", remote_exec_file_var);
710 }
711
712 static int
713 compare_pnums (const void *lhs_, const void *rhs_)
714 {
715 const struct packet_reg * const *lhs
716 = (const struct packet_reg * const *) lhs_;
717 const struct packet_reg * const *rhs
718 = (const struct packet_reg * const *) rhs_;
719
720 if ((*lhs)->pnum < (*rhs)->pnum)
721 return -1;
722 else if ((*lhs)->pnum == (*rhs)->pnum)
723 return 0;
724 else
725 return 1;
726 }
727
728 static int
729 map_regcache_remote_table (struct gdbarch *gdbarch, struct packet_reg *regs)
730 {
731 int regnum, num_remote_regs, offset;
732 struct packet_reg **remote_regs;
733
734 for (regnum = 0; regnum < gdbarch_num_regs (gdbarch); regnum++)
735 {
736 struct packet_reg *r = &regs[regnum];
737
738 if (register_size (gdbarch, regnum) == 0)
739 /* Do not try to fetch zero-sized (placeholder) registers. */
740 r->pnum = -1;
741 else
742 r->pnum = gdbarch_remote_register_number (gdbarch, regnum);
743
744 r->regnum = regnum;
745 }
746
747 /* Define the g/G packet format as the contents of each register
748 with a remote protocol number, in order of ascending protocol
749 number. */
750
751 remote_regs = XALLOCAVEC (struct packet_reg *, gdbarch_num_regs (gdbarch));
752 for (num_remote_regs = 0, regnum = 0;
753 regnum < gdbarch_num_regs (gdbarch);
754 regnum++)
755 if (regs[regnum].pnum != -1)
756 remote_regs[num_remote_regs++] = &regs[regnum];
757
758 qsort (remote_regs, num_remote_regs, sizeof (struct packet_reg *),
759 compare_pnums);
760
761 for (regnum = 0, offset = 0; regnum < num_remote_regs; regnum++)
762 {
763 remote_regs[regnum]->in_g_packet = 1;
764 remote_regs[regnum]->offset = offset;
765 offset += register_size (gdbarch, remote_regs[regnum]->regnum);
766 }
767
768 return offset;
769 }
770
771 /* Given the architecture described by GDBARCH, return the remote
772 protocol register's number and the register's offset in the g/G
773 packets of GDB register REGNUM, in PNUM and POFFSET respectively.
774 If the target does not have a mapping for REGNUM, return false,
775 otherwise, return true. */
776
777 int
778 remote_register_number_and_offset (struct gdbarch *gdbarch, int regnum,
779 int *pnum, int *poffset)
780 {
781 struct packet_reg *regs;
782 struct cleanup *old_chain;
783
784 gdb_assert (regnum < gdbarch_num_regs (gdbarch));
785
786 regs = XCNEWVEC (struct packet_reg, gdbarch_num_regs (gdbarch));
787 old_chain = make_cleanup (xfree, regs);
788
789 map_regcache_remote_table (gdbarch, regs);
790
791 *pnum = regs[regnum].pnum;
792 *poffset = regs[regnum].offset;
793
794 do_cleanups (old_chain);
795
796 return *pnum != -1;
797 }
798
799 static void *
800 init_remote_state (struct gdbarch *gdbarch)
801 {
802 struct remote_state *rs = get_remote_state_raw ();
803 struct remote_arch_state *rsa;
804
805 rsa = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct remote_arch_state);
806
807 /* Use the architecture to build a regnum<->pnum table, which will be
808 1:1 unless a feature set specifies otherwise. */
809 rsa->regs = GDBARCH_OBSTACK_CALLOC (gdbarch,
810 gdbarch_num_regs (gdbarch),
811 struct packet_reg);
812
813 /* Record the maximum possible size of the g packet - it may turn out
814 to be smaller. */
815 rsa->sizeof_g_packet = map_regcache_remote_table (gdbarch, rsa->regs);
816
817 /* Default maximum number of characters in a packet body. Many
818 remote stubs have a hardwired buffer size of 400 bytes
819 (c.f. BUFMAX in m68k-stub.c and i386-stub.c). BUFMAX-1 is used
820 as the maximum packet-size to ensure that the packet and an extra
821 NUL character can always fit in the buffer. This stops GDB
822 trashing stubs that try to squeeze an extra NUL into what is
823 already a full buffer (As of 1999-12-04 that was most stubs). */
824 rsa->remote_packet_size = 400 - 1;
825
826 /* This one is filled in when a ``g'' packet is received. */
827 rsa->actual_register_packet_size = 0;
828
829 /* Should rsa->sizeof_g_packet needs more space than the
830 default, adjust the size accordingly. Remember that each byte is
831 encoded as two characters. 32 is the overhead for the packet
832 header / footer. NOTE: cagney/1999-10-26: I suspect that 8
833 (``$NN:G...#NN'') is a better guess, the below has been padded a
834 little. */
835 if (rsa->sizeof_g_packet > ((rsa->remote_packet_size - 32) / 2))
836 rsa->remote_packet_size = (rsa->sizeof_g_packet * 2 + 32);
837
838 /* Make sure that the packet buffer is plenty big enough for
839 this architecture. */
840 if (rs->buf_size < rsa->remote_packet_size)
841 {
842 rs->buf_size = 2 * rsa->remote_packet_size;
843 rs->buf = (char *) xrealloc (rs->buf, rs->buf_size);
844 }
845
846 return rsa;
847 }
848
849 /* Return the current allowed size of a remote packet. This is
850 inferred from the current architecture, and should be used to
851 limit the length of outgoing packets. */
852 static long
853 get_remote_packet_size (void)
854 {
855 struct remote_state *rs = get_remote_state ();
856 struct remote_arch_state *rsa = get_remote_arch_state ();
857
858 if (rs->explicit_packet_size)
859 return rs->explicit_packet_size;
860
861 return rsa->remote_packet_size;
862 }
863
864 static struct packet_reg *
865 packet_reg_from_regnum (struct remote_arch_state *rsa, long regnum)
866 {
867 if (regnum < 0 && regnum >= gdbarch_num_regs (target_gdbarch ()))
868 return NULL;
869 else
870 {
871 struct packet_reg *r = &rsa->regs[regnum];
872
873 gdb_assert (r->regnum == regnum);
874 return r;
875 }
876 }
877
878 static struct packet_reg *
879 packet_reg_from_pnum (struct remote_arch_state *rsa, LONGEST pnum)
880 {
881 int i;
882
883 for (i = 0; i < gdbarch_num_regs (target_gdbarch ()); i++)
884 {
885 struct packet_reg *r = &rsa->regs[i];
886
887 if (r->pnum == pnum)
888 return r;
889 }
890 return NULL;
891 }
892
893 static struct target_ops remote_ops;
894
895 static struct target_ops extended_remote_ops;
896
897 /* FIXME: cagney/1999-09-23: Even though getpkt was called with
898 ``forever'' still use the normal timeout mechanism. This is
899 currently used by the ASYNC code to guarentee that target reads
900 during the initial connect always time-out. Once getpkt has been
901 modified to return a timeout indication and, in turn
902 remote_wait()/wait_for_inferior() have gained a timeout parameter
903 this can go away. */
904 static int wait_forever_enabled_p = 1;
905
906 /* Allow the user to specify what sequence to send to the remote
907 when he requests a program interruption: Although ^C is usually
908 what remote systems expect (this is the default, here), it is
909 sometimes preferable to send a break. On other systems such
910 as the Linux kernel, a break followed by g, which is Magic SysRq g
911 is required in order to interrupt the execution. */
912 const char interrupt_sequence_control_c[] = "Ctrl-C";
913 const char interrupt_sequence_break[] = "BREAK";
914 const char interrupt_sequence_break_g[] = "BREAK-g";
915 static const char *const interrupt_sequence_modes[] =
916 {
917 interrupt_sequence_control_c,
918 interrupt_sequence_break,
919 interrupt_sequence_break_g,
920 NULL
921 };
922 static const char *interrupt_sequence_mode = interrupt_sequence_control_c;
923
924 static void
925 show_interrupt_sequence (struct ui_file *file, int from_tty,
926 struct cmd_list_element *c,
927 const char *value)
928 {
929 if (interrupt_sequence_mode == interrupt_sequence_control_c)
930 fprintf_filtered (file,
931 _("Send the ASCII ETX character (Ctrl-c) "
932 "to the remote target to interrupt the "
933 "execution of the program.\n"));
934 else if (interrupt_sequence_mode == interrupt_sequence_break)
935 fprintf_filtered (file,
936 _("send a break signal to the remote target "
937 "to interrupt the execution of the program.\n"));
938 else if (interrupt_sequence_mode == interrupt_sequence_break_g)
939 fprintf_filtered (file,
940 _("Send a break signal and 'g' a.k.a. Magic SysRq g to "
941 "the remote target to interrupt the execution "
942 "of Linux kernel.\n"));
943 else
944 internal_error (__FILE__, __LINE__,
945 _("Invalid value for interrupt_sequence_mode: %s."),
946 interrupt_sequence_mode);
947 }
948
949 /* This boolean variable specifies whether interrupt_sequence is sent
950 to the remote target when gdb connects to it.
951 This is mostly needed when you debug the Linux kernel: The Linux kernel
952 expects BREAK g which is Magic SysRq g for connecting gdb. */
953 static int interrupt_on_connect = 0;
954
955 /* This variable is used to implement the "set/show remotebreak" commands.
956 Since these commands are now deprecated in favor of "set/show remote
957 interrupt-sequence", it no longer has any effect on the code. */
958 static int remote_break;
959
960 static void
961 set_remotebreak (char *args, int from_tty, struct cmd_list_element *c)
962 {
963 if (remote_break)
964 interrupt_sequence_mode = interrupt_sequence_break;
965 else
966 interrupt_sequence_mode = interrupt_sequence_control_c;
967 }
968
969 static void
970 show_remotebreak (struct ui_file *file, int from_tty,
971 struct cmd_list_element *c,
972 const char *value)
973 {
974 }
975
976 /* This variable sets the number of bits in an address that are to be
977 sent in a memory ("M" or "m") packet. Normally, after stripping
978 leading zeros, the entire address would be sent. This variable
979 restricts the address to REMOTE_ADDRESS_SIZE bits. HISTORY: The
980 initial implementation of remote.c restricted the address sent in
981 memory packets to ``host::sizeof long'' bytes - (typically 32
982 bits). Consequently, for 64 bit targets, the upper 32 bits of an
983 address was never sent. Since fixing this bug may cause a break in
984 some remote targets this variable is principly provided to
985 facilitate backward compatibility. */
986
987 static unsigned int remote_address_size;
988
989 /* Temporary to track who currently owns the terminal. See
990 remote_terminal_* for more details. */
991
992 static int remote_async_terminal_ours_p;
993
994 \f
995 /* User configurable variables for the number of characters in a
996 memory read/write packet. MIN (rsa->remote_packet_size,
997 rsa->sizeof_g_packet) is the default. Some targets need smaller
998 values (fifo overruns, et.al.) and some users need larger values
999 (speed up transfers). The variables ``preferred_*'' (the user
1000 request), ``current_*'' (what was actually set) and ``forced_*''
1001 (Positive - a soft limit, negative - a hard limit). */
1002
1003 struct memory_packet_config
1004 {
1005 char *name;
1006 long size;
1007 int fixed_p;
1008 };
1009
1010 /* The default max memory-write-packet-size. The 16k is historical.
1011 (It came from older GDB's using alloca for buffers and the
1012 knowledge (folklore?) that some hosts don't cope very well with
1013 large alloca calls.) */
1014 #define DEFAULT_MAX_MEMORY_PACKET_SIZE 16384
1015
1016 /* The minimum remote packet size for memory transfers. Ensures we
1017 can write at least one byte. */
1018 #define MIN_MEMORY_PACKET_SIZE 20
1019
1020 /* Compute the current size of a read/write packet. Since this makes
1021 use of ``actual_register_packet_size'' the computation is dynamic. */
1022
1023 static long
1024 get_memory_packet_size (struct memory_packet_config *config)
1025 {
1026 struct remote_state *rs = get_remote_state ();
1027 struct remote_arch_state *rsa = get_remote_arch_state ();
1028
1029 long what_they_get;
1030 if (config->fixed_p)
1031 {
1032 if (config->size <= 0)
1033 what_they_get = DEFAULT_MAX_MEMORY_PACKET_SIZE;
1034 else
1035 what_they_get = config->size;
1036 }
1037 else
1038 {
1039 what_they_get = get_remote_packet_size ();
1040 /* Limit the packet to the size specified by the user. */
1041 if (config->size > 0
1042 && what_they_get > config->size)
1043 what_they_get = config->size;
1044
1045 /* Limit it to the size of the targets ``g'' response unless we have
1046 permission from the stub to use a larger packet size. */
1047 if (rs->explicit_packet_size == 0
1048 && rsa->actual_register_packet_size > 0
1049 && what_they_get > rsa->actual_register_packet_size)
1050 what_they_get = rsa->actual_register_packet_size;
1051 }
1052 if (what_they_get < MIN_MEMORY_PACKET_SIZE)
1053 what_they_get = MIN_MEMORY_PACKET_SIZE;
1054
1055 /* Make sure there is room in the global buffer for this packet
1056 (including its trailing NUL byte). */
1057 if (rs->buf_size < what_they_get + 1)
1058 {
1059 rs->buf_size = 2 * what_they_get;
1060 rs->buf = (char *) xrealloc (rs->buf, 2 * what_they_get);
1061 }
1062
1063 return what_they_get;
1064 }
1065
1066 /* Update the size of a read/write packet. If they user wants
1067 something really big then do a sanity check. */
1068
1069 static void
1070 set_memory_packet_size (char *args, struct memory_packet_config *config)
1071 {
1072 int fixed_p = config->fixed_p;
1073 long size = config->size;
1074
1075 if (args == NULL)
1076 error (_("Argument required (integer, `fixed' or `limited')."));
1077 else if (strcmp (args, "hard") == 0
1078 || strcmp (args, "fixed") == 0)
1079 fixed_p = 1;
1080 else if (strcmp (args, "soft") == 0
1081 || strcmp (args, "limit") == 0)
1082 fixed_p = 0;
1083 else
1084 {
1085 char *end;
1086
1087 size = strtoul (args, &end, 0);
1088 if (args == end)
1089 error (_("Invalid %s (bad syntax)."), config->name);
1090
1091 /* Instead of explicitly capping the size of a packet to or
1092 disallowing it, the user is allowed to set the size to
1093 something arbitrarily large. */
1094 }
1095
1096 /* So that the query shows the correct value. */
1097 if (size <= 0)
1098 size = DEFAULT_MAX_MEMORY_PACKET_SIZE;
1099
1100 /* Extra checks? */
1101 if (fixed_p && !config->fixed_p)
1102 {
1103 if (! query (_("The target may not be able to correctly handle a %s\n"
1104 "of %ld bytes. Change the packet size? "),
1105 config->name, size))
1106 error (_("Packet size not changed."));
1107 }
1108 /* Update the config. */
1109 config->fixed_p = fixed_p;
1110 config->size = size;
1111 }
1112
1113 static void
1114 show_memory_packet_size (struct memory_packet_config *config)
1115 {
1116 printf_filtered (_("The %s is %ld. "), config->name, config->size);
1117 if (config->fixed_p)
1118 printf_filtered (_("Packets are fixed at %ld bytes.\n"),
1119 get_memory_packet_size (config));
1120 else
1121 printf_filtered (_("Packets are limited to %ld bytes.\n"),
1122 get_memory_packet_size (config));
1123 }
1124
1125 static struct memory_packet_config memory_write_packet_config =
1126 {
1127 "memory-write-packet-size",
1128 };
1129
1130 static void
1131 set_memory_write_packet_size (char *args, int from_tty)
1132 {
1133 set_memory_packet_size (args, &memory_write_packet_config);
1134 }
1135
1136 static void
1137 show_memory_write_packet_size (char *args, int from_tty)
1138 {
1139 show_memory_packet_size (&memory_write_packet_config);
1140 }
1141
1142 static long
1143 get_memory_write_packet_size (void)
1144 {
1145 return get_memory_packet_size (&memory_write_packet_config);
1146 }
1147
1148 static struct memory_packet_config memory_read_packet_config =
1149 {
1150 "memory-read-packet-size",
1151 };
1152
1153 static void
1154 set_memory_read_packet_size (char *args, int from_tty)
1155 {
1156 set_memory_packet_size (args, &memory_read_packet_config);
1157 }
1158
1159 static void
1160 show_memory_read_packet_size (char *args, int from_tty)
1161 {
1162 show_memory_packet_size (&memory_read_packet_config);
1163 }
1164
1165 static long
1166 get_memory_read_packet_size (void)
1167 {
1168 long size = get_memory_packet_size (&memory_read_packet_config);
1169
1170 /* FIXME: cagney/1999-11-07: Functions like getpkt() need to get an
1171 extra buffer size argument before the memory read size can be
1172 increased beyond this. */
1173 if (size > get_remote_packet_size ())
1174 size = get_remote_packet_size ();
1175 return size;
1176 }
1177
1178 \f
1179 /* Generic configuration support for packets the stub optionally
1180 supports. Allows the user to specify the use of the packet as well
1181 as allowing GDB to auto-detect support in the remote stub. */
1182
1183 enum packet_support
1184 {
1185 PACKET_SUPPORT_UNKNOWN = 0,
1186 PACKET_ENABLE,
1187 PACKET_DISABLE
1188 };
1189
1190 struct packet_config
1191 {
1192 const char *name;
1193 const char *title;
1194
1195 /* If auto, GDB auto-detects support for this packet or feature,
1196 either through qSupported, or by trying the packet and looking
1197 at the response. If true, GDB assumes the target supports this
1198 packet. If false, the packet is disabled. Configs that don't
1199 have an associated command always have this set to auto. */
1200 enum auto_boolean detect;
1201
1202 /* Does the target support this packet? */
1203 enum packet_support support;
1204 };
1205
1206 /* Analyze a packet's return value and update the packet config
1207 accordingly. */
1208
1209 enum packet_result
1210 {
1211 PACKET_ERROR,
1212 PACKET_OK,
1213 PACKET_UNKNOWN
1214 };
1215
1216 static enum packet_support packet_config_support (struct packet_config *config);
1217 static enum packet_support packet_support (int packet);
1218
1219 static void
1220 show_packet_config_cmd (struct packet_config *config)
1221 {
1222 char *support = "internal-error";
1223
1224 switch (packet_config_support (config))
1225 {
1226 case PACKET_ENABLE:
1227 support = "enabled";
1228 break;
1229 case PACKET_DISABLE:
1230 support = "disabled";
1231 break;
1232 case PACKET_SUPPORT_UNKNOWN:
1233 support = "unknown";
1234 break;
1235 }
1236 switch (config->detect)
1237 {
1238 case AUTO_BOOLEAN_AUTO:
1239 printf_filtered (_("Support for the `%s' packet "
1240 "is auto-detected, currently %s.\n"),
1241 config->name, support);
1242 break;
1243 case AUTO_BOOLEAN_TRUE:
1244 case AUTO_BOOLEAN_FALSE:
1245 printf_filtered (_("Support for the `%s' packet is currently %s.\n"),
1246 config->name, support);
1247 break;
1248 }
1249 }
1250
1251 static void
1252 add_packet_config_cmd (struct packet_config *config, const char *name,
1253 const char *title, int legacy)
1254 {
1255 char *set_doc;
1256 char *show_doc;
1257 char *cmd_name;
1258
1259 config->name = name;
1260 config->title = title;
1261 set_doc = xstrprintf ("Set use of remote protocol `%s' (%s) packet",
1262 name, title);
1263 show_doc = xstrprintf ("Show current use of remote "
1264 "protocol `%s' (%s) packet",
1265 name, title);
1266 /* set/show TITLE-packet {auto,on,off} */
1267 cmd_name = xstrprintf ("%s-packet", title);
1268 add_setshow_auto_boolean_cmd (cmd_name, class_obscure,
1269 &config->detect, set_doc,
1270 show_doc, NULL, /* help_doc */
1271 NULL,
1272 show_remote_protocol_packet_cmd,
1273 &remote_set_cmdlist, &remote_show_cmdlist);
1274 /* The command code copies the documentation strings. */
1275 xfree (set_doc);
1276 xfree (show_doc);
1277 /* set/show remote NAME-packet {auto,on,off} -- legacy. */
1278 if (legacy)
1279 {
1280 char *legacy_name;
1281
1282 legacy_name = xstrprintf ("%s-packet", name);
1283 add_alias_cmd (legacy_name, cmd_name, class_obscure, 0,
1284 &remote_set_cmdlist);
1285 add_alias_cmd (legacy_name, cmd_name, class_obscure, 0,
1286 &remote_show_cmdlist);
1287 }
1288 }
1289
1290 static enum packet_result
1291 packet_check_result (const char *buf)
1292 {
1293 if (buf[0] != '\0')
1294 {
1295 /* The stub recognized the packet request. Check that the
1296 operation succeeded. */
1297 if (buf[0] == 'E'
1298 && isxdigit (buf[1]) && isxdigit (buf[2])
1299 && buf[3] == '\0')
1300 /* "Enn" - definitly an error. */
1301 return PACKET_ERROR;
1302
1303 /* Always treat "E." as an error. This will be used for
1304 more verbose error messages, such as E.memtypes. */
1305 if (buf[0] == 'E' && buf[1] == '.')
1306 return PACKET_ERROR;
1307
1308 /* The packet may or may not be OK. Just assume it is. */
1309 return PACKET_OK;
1310 }
1311 else
1312 /* The stub does not support the packet. */
1313 return PACKET_UNKNOWN;
1314 }
1315
1316 static enum packet_result
1317 packet_ok (const char *buf, struct packet_config *config)
1318 {
1319 enum packet_result result;
1320
1321 if (config->detect != AUTO_BOOLEAN_TRUE
1322 && config->support == PACKET_DISABLE)
1323 internal_error (__FILE__, __LINE__,
1324 _("packet_ok: attempt to use a disabled packet"));
1325
1326 result = packet_check_result (buf);
1327 switch (result)
1328 {
1329 case PACKET_OK:
1330 case PACKET_ERROR:
1331 /* The stub recognized the packet request. */
1332 if (config->support == PACKET_SUPPORT_UNKNOWN)
1333 {
1334 if (remote_debug)
1335 fprintf_unfiltered (gdb_stdlog,
1336 "Packet %s (%s) is supported\n",
1337 config->name, config->title);
1338 config->support = PACKET_ENABLE;
1339 }
1340 break;
1341 case PACKET_UNKNOWN:
1342 /* The stub does not support the packet. */
1343 if (config->detect == AUTO_BOOLEAN_AUTO
1344 && config->support == PACKET_ENABLE)
1345 {
1346 /* If the stub previously indicated that the packet was
1347 supported then there is a protocol error. */
1348 error (_("Protocol error: %s (%s) conflicting enabled responses."),
1349 config->name, config->title);
1350 }
1351 else if (config->detect == AUTO_BOOLEAN_TRUE)
1352 {
1353 /* The user set it wrong. */
1354 error (_("Enabled packet %s (%s) not recognized by stub"),
1355 config->name, config->title);
1356 }
1357
1358 if (remote_debug)
1359 fprintf_unfiltered (gdb_stdlog,
1360 "Packet %s (%s) is NOT supported\n",
1361 config->name, config->title);
1362 config->support = PACKET_DISABLE;
1363 break;
1364 }
1365
1366 return result;
1367 }
1368
1369 enum {
1370 PACKET_vCont = 0,
1371 PACKET_X,
1372 PACKET_qSymbol,
1373 PACKET_P,
1374 PACKET_p,
1375 PACKET_Z0,
1376 PACKET_Z1,
1377 PACKET_Z2,
1378 PACKET_Z3,
1379 PACKET_Z4,
1380 PACKET_vFile_setfs,
1381 PACKET_vFile_open,
1382 PACKET_vFile_pread,
1383 PACKET_vFile_pwrite,
1384 PACKET_vFile_close,
1385 PACKET_vFile_unlink,
1386 PACKET_vFile_readlink,
1387 PACKET_vFile_fstat,
1388 PACKET_qXfer_auxv,
1389 PACKET_qXfer_features,
1390 PACKET_qXfer_exec_file,
1391 PACKET_qXfer_libraries,
1392 PACKET_qXfer_libraries_svr4,
1393 PACKET_qXfer_memory_map,
1394 PACKET_qXfer_spu_read,
1395 PACKET_qXfer_spu_write,
1396 PACKET_qXfer_osdata,
1397 PACKET_qXfer_threads,
1398 PACKET_qXfer_statictrace_read,
1399 PACKET_qXfer_traceframe_info,
1400 PACKET_qXfer_uib,
1401 PACKET_qGetTIBAddr,
1402 PACKET_qGetTLSAddr,
1403 PACKET_qSupported,
1404 PACKET_qTStatus,
1405 PACKET_QPassSignals,
1406 PACKET_QCatchSyscalls,
1407 PACKET_QProgramSignals,
1408 PACKET_qCRC,
1409 PACKET_qSearch_memory,
1410 PACKET_vAttach,
1411 PACKET_vRun,
1412 PACKET_QStartNoAckMode,
1413 PACKET_vKill,
1414 PACKET_qXfer_siginfo_read,
1415 PACKET_qXfer_siginfo_write,
1416 PACKET_qAttached,
1417
1418 /* Support for conditional tracepoints. */
1419 PACKET_ConditionalTracepoints,
1420
1421 /* Support for target-side breakpoint conditions. */
1422 PACKET_ConditionalBreakpoints,
1423
1424 /* Support for target-side breakpoint commands. */
1425 PACKET_BreakpointCommands,
1426
1427 /* Support for fast tracepoints. */
1428 PACKET_FastTracepoints,
1429
1430 /* Support for static tracepoints. */
1431 PACKET_StaticTracepoints,
1432
1433 /* Support for installing tracepoints while a trace experiment is
1434 running. */
1435 PACKET_InstallInTrace,
1436
1437 PACKET_bc,
1438 PACKET_bs,
1439 PACKET_TracepointSource,
1440 PACKET_QAllow,
1441 PACKET_qXfer_fdpic,
1442 PACKET_QDisableRandomization,
1443 PACKET_QAgent,
1444 PACKET_QTBuffer_size,
1445 PACKET_Qbtrace_off,
1446 PACKET_Qbtrace_bts,
1447 PACKET_Qbtrace_pt,
1448 PACKET_qXfer_btrace,
1449
1450 /* Support for the QNonStop packet. */
1451 PACKET_QNonStop,
1452
1453 /* Support for the QThreadEvents packet. */
1454 PACKET_QThreadEvents,
1455
1456 /* Support for multi-process extensions. */
1457 PACKET_multiprocess_feature,
1458
1459 /* Support for enabling and disabling tracepoints while a trace
1460 experiment is running. */
1461 PACKET_EnableDisableTracepoints_feature,
1462
1463 /* Support for collecting strings using the tracenz bytecode. */
1464 PACKET_tracenz_feature,
1465
1466 /* Support for continuing to run a trace experiment while GDB is
1467 disconnected. */
1468 PACKET_DisconnectedTracing_feature,
1469
1470 /* Support for qXfer:libraries-svr4:read with a non-empty annex. */
1471 PACKET_augmented_libraries_svr4_read_feature,
1472
1473 /* Support for the qXfer:btrace-conf:read packet. */
1474 PACKET_qXfer_btrace_conf,
1475
1476 /* Support for the Qbtrace-conf:bts:size packet. */
1477 PACKET_Qbtrace_conf_bts_size,
1478
1479 /* Support for swbreak+ feature. */
1480 PACKET_swbreak_feature,
1481
1482 /* Support for hwbreak+ feature. */
1483 PACKET_hwbreak_feature,
1484
1485 /* Support for fork events. */
1486 PACKET_fork_event_feature,
1487
1488 /* Support for vfork events. */
1489 PACKET_vfork_event_feature,
1490
1491 /* Support for the Qbtrace-conf:pt:size packet. */
1492 PACKET_Qbtrace_conf_pt_size,
1493
1494 /* Support for exec events. */
1495 PACKET_exec_event_feature,
1496
1497 /* Support for query supported vCont actions. */
1498 PACKET_vContSupported,
1499
1500 /* Support remote CTRL-C. */
1501 PACKET_vCtrlC,
1502
1503 /* Support TARGET_WAITKIND_NO_RESUMED. */
1504 PACKET_no_resumed,
1505
1506 PACKET_MAX
1507 };
1508
1509 static struct packet_config remote_protocol_packets[PACKET_MAX];
1510
1511 /* Returns the packet's corresponding "set remote foo-packet" command
1512 state. See struct packet_config for more details. */
1513
1514 static enum auto_boolean
1515 packet_set_cmd_state (int packet)
1516 {
1517 return remote_protocol_packets[packet].detect;
1518 }
1519
1520 /* Returns whether a given packet or feature is supported. This takes
1521 into account the state of the corresponding "set remote foo-packet"
1522 command, which may be used to bypass auto-detection. */
1523
1524 static enum packet_support
1525 packet_config_support (struct packet_config *config)
1526 {
1527 switch (config->detect)
1528 {
1529 case AUTO_BOOLEAN_TRUE:
1530 return PACKET_ENABLE;
1531 case AUTO_BOOLEAN_FALSE:
1532 return PACKET_DISABLE;
1533 case AUTO_BOOLEAN_AUTO:
1534 return config->support;
1535 default:
1536 gdb_assert_not_reached (_("bad switch"));
1537 }
1538 }
1539
1540 /* Same as packet_config_support, but takes the packet's enum value as
1541 argument. */
1542
1543 static enum packet_support
1544 packet_support (int packet)
1545 {
1546 struct packet_config *config = &remote_protocol_packets[packet];
1547
1548 return packet_config_support (config);
1549 }
1550
1551 static void
1552 show_remote_protocol_packet_cmd (struct ui_file *file, int from_tty,
1553 struct cmd_list_element *c,
1554 const char *value)
1555 {
1556 struct packet_config *packet;
1557
1558 for (packet = remote_protocol_packets;
1559 packet < &remote_protocol_packets[PACKET_MAX];
1560 packet++)
1561 {
1562 if (&packet->detect == c->var)
1563 {
1564 show_packet_config_cmd (packet);
1565 return;
1566 }
1567 }
1568 internal_error (__FILE__, __LINE__, _("Could not find config for %s"),
1569 c->name);
1570 }
1571
1572 /* Should we try one of the 'Z' requests? */
1573
1574 enum Z_packet_type
1575 {
1576 Z_PACKET_SOFTWARE_BP,
1577 Z_PACKET_HARDWARE_BP,
1578 Z_PACKET_WRITE_WP,
1579 Z_PACKET_READ_WP,
1580 Z_PACKET_ACCESS_WP,
1581 NR_Z_PACKET_TYPES
1582 };
1583
1584 /* For compatibility with older distributions. Provide a ``set remote
1585 Z-packet ...'' command that updates all the Z packet types. */
1586
1587 static enum auto_boolean remote_Z_packet_detect;
1588
1589 static void
1590 set_remote_protocol_Z_packet_cmd (char *args, int from_tty,
1591 struct cmd_list_element *c)
1592 {
1593 int i;
1594
1595 for (i = 0; i < NR_Z_PACKET_TYPES; i++)
1596 remote_protocol_packets[PACKET_Z0 + i].detect = remote_Z_packet_detect;
1597 }
1598
1599 static void
1600 show_remote_protocol_Z_packet_cmd (struct ui_file *file, int from_tty,
1601 struct cmd_list_element *c,
1602 const char *value)
1603 {
1604 int i;
1605
1606 for (i = 0; i < NR_Z_PACKET_TYPES; i++)
1607 {
1608 show_packet_config_cmd (&remote_protocol_packets[PACKET_Z0 + i]);
1609 }
1610 }
1611
1612 /* Returns true if the multi-process extensions are in effect. */
1613
1614 static int
1615 remote_multi_process_p (struct remote_state *rs)
1616 {
1617 return packet_support (PACKET_multiprocess_feature) == PACKET_ENABLE;
1618 }
1619
1620 /* Returns true if fork events are supported. */
1621
1622 static int
1623 remote_fork_event_p (struct remote_state *rs)
1624 {
1625 return packet_support (PACKET_fork_event_feature) == PACKET_ENABLE;
1626 }
1627
1628 /* Returns true if vfork events are supported. */
1629
1630 static int
1631 remote_vfork_event_p (struct remote_state *rs)
1632 {
1633 return packet_support (PACKET_vfork_event_feature) == PACKET_ENABLE;
1634 }
1635
1636 /* Returns true if exec events are supported. */
1637
1638 static int
1639 remote_exec_event_p (struct remote_state *rs)
1640 {
1641 return packet_support (PACKET_exec_event_feature) == PACKET_ENABLE;
1642 }
1643
1644 /* Insert fork catchpoint target routine. If fork events are enabled
1645 then return success, nothing more to do. */
1646
1647 static int
1648 remote_insert_fork_catchpoint (struct target_ops *ops, int pid)
1649 {
1650 struct remote_state *rs = get_remote_state ();
1651
1652 return !remote_fork_event_p (rs);
1653 }
1654
1655 /* Remove fork catchpoint target routine. Nothing to do, just
1656 return success. */
1657
1658 static int
1659 remote_remove_fork_catchpoint (struct target_ops *ops, int pid)
1660 {
1661 return 0;
1662 }
1663
1664 /* Insert vfork catchpoint target routine. If vfork events are enabled
1665 then return success, nothing more to do. */
1666
1667 static int
1668 remote_insert_vfork_catchpoint (struct target_ops *ops, int pid)
1669 {
1670 struct remote_state *rs = get_remote_state ();
1671
1672 return !remote_vfork_event_p (rs);
1673 }
1674
1675 /* Remove vfork catchpoint target routine. Nothing to do, just
1676 return success. */
1677
1678 static int
1679 remote_remove_vfork_catchpoint (struct target_ops *ops, int pid)
1680 {
1681 return 0;
1682 }
1683
1684 /* Insert exec catchpoint target routine. If exec events are
1685 enabled, just return success. */
1686
1687 static int
1688 remote_insert_exec_catchpoint (struct target_ops *ops, int pid)
1689 {
1690 struct remote_state *rs = get_remote_state ();
1691
1692 return !remote_exec_event_p (rs);
1693 }
1694
1695 /* Remove exec catchpoint target routine. Nothing to do, just
1696 return success. */
1697
1698 static int
1699 remote_remove_exec_catchpoint (struct target_ops *ops, int pid)
1700 {
1701 return 0;
1702 }
1703
1704 \f
1705 /* Asynchronous signal handle registered as event loop source for
1706 when we have pending events ready to be passed to the core. */
1707
1708 static struct async_event_handler *remote_async_inferior_event_token;
1709
1710 \f
1711
1712 static ptid_t magic_null_ptid;
1713 static ptid_t not_sent_ptid;
1714 static ptid_t any_thread_ptid;
1715
1716 /* Find out if the stub attached to PID (and hence GDB should offer to
1717 detach instead of killing it when bailing out). */
1718
1719 static int
1720 remote_query_attached (int pid)
1721 {
1722 struct remote_state *rs = get_remote_state ();
1723 size_t size = get_remote_packet_size ();
1724
1725 if (packet_support (PACKET_qAttached) == PACKET_DISABLE)
1726 return 0;
1727
1728 if (remote_multi_process_p (rs))
1729 xsnprintf (rs->buf, size, "qAttached:%x", pid);
1730 else
1731 xsnprintf (rs->buf, size, "qAttached");
1732
1733 putpkt (rs->buf);
1734 getpkt (&rs->buf, &rs->buf_size, 0);
1735
1736 switch (packet_ok (rs->buf,
1737 &remote_protocol_packets[PACKET_qAttached]))
1738 {
1739 case PACKET_OK:
1740 if (strcmp (rs->buf, "1") == 0)
1741 return 1;
1742 break;
1743 case PACKET_ERROR:
1744 warning (_("Remote failure reply: %s"), rs->buf);
1745 break;
1746 case PACKET_UNKNOWN:
1747 break;
1748 }
1749
1750 return 0;
1751 }
1752
1753 /* Add PID to GDB's inferior table. If FAKE_PID_P is true, then PID
1754 has been invented by GDB, instead of reported by the target. Since
1755 we can be connected to a remote system before before knowing about
1756 any inferior, mark the target with execution when we find the first
1757 inferior. If ATTACHED is 1, then we had just attached to this
1758 inferior. If it is 0, then we just created this inferior. If it
1759 is -1, then try querying the remote stub to find out if it had
1760 attached to the inferior or not. If TRY_OPEN_EXEC is true then
1761 attempt to open this inferior's executable as the main executable
1762 if no main executable is open already. */
1763
1764 static struct inferior *
1765 remote_add_inferior (int fake_pid_p, int pid, int attached,
1766 int try_open_exec)
1767 {
1768 struct inferior *inf;
1769
1770 /* Check whether this process we're learning about is to be
1771 considered attached, or if is to be considered to have been
1772 spawned by the stub. */
1773 if (attached == -1)
1774 attached = remote_query_attached (pid);
1775
1776 if (gdbarch_has_global_solist (target_gdbarch ()))
1777 {
1778 /* If the target shares code across all inferiors, then every
1779 attach adds a new inferior. */
1780 inf = add_inferior (pid);
1781
1782 /* ... and every inferior is bound to the same program space.
1783 However, each inferior may still have its own address
1784 space. */
1785 inf->aspace = maybe_new_address_space ();
1786 inf->pspace = current_program_space;
1787 }
1788 else
1789 {
1790 /* In the traditional debugging scenario, there's a 1-1 match
1791 between program/address spaces. We simply bind the inferior
1792 to the program space's address space. */
1793 inf = current_inferior ();
1794 inferior_appeared (inf, pid);
1795 }
1796
1797 inf->attach_flag = attached;
1798 inf->fake_pid_p = fake_pid_p;
1799
1800 /* If no main executable is currently open then attempt to
1801 open the file that was executed to create this inferior. */
1802 if (try_open_exec && get_exec_file (0) == NULL)
1803 exec_file_locate_attach (pid, 1);
1804
1805 return inf;
1806 }
1807
1808 /* Add thread PTID to GDB's thread list. Tag it as executing/running
1809 according to RUNNING. */
1810
1811 static void
1812 remote_add_thread (ptid_t ptid, int running, int executing)
1813 {
1814 struct remote_state *rs = get_remote_state ();
1815
1816 /* GDB historically didn't pull threads in the initial connection
1817 setup. If the remote target doesn't even have a concept of
1818 threads (e.g., a bare-metal target), even if internally we
1819 consider that a single-threaded target, mentioning a new thread
1820 might be confusing to the user. Be silent then, preserving the
1821 age old behavior. */
1822 if (rs->starting_up)
1823 add_thread_silent (ptid);
1824 else
1825 add_thread (ptid);
1826
1827 set_executing (ptid, executing);
1828 set_running (ptid, running);
1829 }
1830
1831 /* Come here when we learn about a thread id from the remote target.
1832 It may be the first time we hear about such thread, so take the
1833 opportunity to add it to GDB's thread list. In case this is the
1834 first time we're noticing its corresponding inferior, add it to
1835 GDB's inferior list as well. EXECUTING indicates whether the
1836 thread is (internally) executing or stopped. */
1837
1838 static void
1839 remote_notice_new_inferior (ptid_t currthread, int executing)
1840 {
1841 /* In non-stop mode, we assume new found threads are (externally)
1842 running until proven otherwise with a stop reply. In all-stop,
1843 we can only get here if all threads are stopped. */
1844 int running = target_is_non_stop_p () ? 1 : 0;
1845
1846 /* If this is a new thread, add it to GDB's thread list.
1847 If we leave it up to WFI to do this, bad things will happen. */
1848
1849 if (in_thread_list (currthread) && is_exited (currthread))
1850 {
1851 /* We're seeing an event on a thread id we knew had exited.
1852 This has to be a new thread reusing the old id. Add it. */
1853 remote_add_thread (currthread, running, executing);
1854 return;
1855 }
1856
1857 if (!in_thread_list (currthread))
1858 {
1859 struct inferior *inf = NULL;
1860 int pid = ptid_get_pid (currthread);
1861
1862 if (ptid_is_pid (inferior_ptid)
1863 && pid == ptid_get_pid (inferior_ptid))
1864 {
1865 /* inferior_ptid has no thread member yet. This can happen
1866 with the vAttach -> remote_wait,"TAAthread:" path if the
1867 stub doesn't support qC. This is the first stop reported
1868 after an attach, so this is the main thread. Update the
1869 ptid in the thread list. */
1870 if (in_thread_list (pid_to_ptid (pid)))
1871 thread_change_ptid (inferior_ptid, currthread);
1872 else
1873 {
1874 remote_add_thread (currthread, running, executing);
1875 inferior_ptid = currthread;
1876 }
1877 return;
1878 }
1879
1880 if (ptid_equal (magic_null_ptid, inferior_ptid))
1881 {
1882 /* inferior_ptid is not set yet. This can happen with the
1883 vRun -> remote_wait,"TAAthread:" path if the stub
1884 doesn't support qC. This is the first stop reported
1885 after an attach, so this is the main thread. Update the
1886 ptid in the thread list. */
1887 thread_change_ptid (inferior_ptid, currthread);
1888 return;
1889 }
1890
1891 /* When connecting to a target remote, or to a target
1892 extended-remote which already was debugging an inferior, we
1893 may not know about it yet. Add it before adding its child
1894 thread, so notifications are emitted in a sensible order. */
1895 if (!in_inferior_list (ptid_get_pid (currthread)))
1896 {
1897 struct remote_state *rs = get_remote_state ();
1898 int fake_pid_p = !remote_multi_process_p (rs);
1899
1900 inf = remote_add_inferior (fake_pid_p,
1901 ptid_get_pid (currthread), -1, 1);
1902 }
1903
1904 /* This is really a new thread. Add it. */
1905 remote_add_thread (currthread, running, executing);
1906
1907 /* If we found a new inferior, let the common code do whatever
1908 it needs to with it (e.g., read shared libraries, insert
1909 breakpoints), unless we're just setting up an all-stop
1910 connection. */
1911 if (inf != NULL)
1912 {
1913 struct remote_state *rs = get_remote_state ();
1914
1915 if (!rs->starting_up)
1916 notice_new_inferior (currthread, executing, 0);
1917 }
1918 }
1919 }
1920
1921 /* Return the private thread data, creating it if necessary. */
1922
1923 static struct private_thread_info *
1924 demand_private_info (ptid_t ptid)
1925 {
1926 struct thread_info *info = find_thread_ptid (ptid);
1927
1928 gdb_assert (info);
1929
1930 if (!info->priv)
1931 {
1932 info->priv = XNEW (struct private_thread_info);
1933 info->private_dtor = free_private_thread_info;
1934 info->priv->core = -1;
1935 info->priv->extra = NULL;
1936 info->priv->name = NULL;
1937 }
1938
1939 return info->priv;
1940 }
1941
1942 /* Call this function as a result of
1943 1) A halt indication (T packet) containing a thread id
1944 2) A direct query of currthread
1945 3) Successful execution of set thread */
1946
1947 static void
1948 record_currthread (struct remote_state *rs, ptid_t currthread)
1949 {
1950 rs->general_thread = currthread;
1951 }
1952
1953 /* If 'QPassSignals' is supported, tell the remote stub what signals
1954 it can simply pass through to the inferior without reporting. */
1955
1956 static void
1957 remote_pass_signals (struct target_ops *self,
1958 int numsigs, unsigned char *pass_signals)
1959 {
1960 if (packet_support (PACKET_QPassSignals) != PACKET_DISABLE)
1961 {
1962 char *pass_packet, *p;
1963 int count = 0, i;
1964 struct remote_state *rs = get_remote_state ();
1965
1966 gdb_assert (numsigs < 256);
1967 for (i = 0; i < numsigs; i++)
1968 {
1969 if (pass_signals[i])
1970 count++;
1971 }
1972 pass_packet = (char *) xmalloc (count * 3 + strlen ("QPassSignals:") + 1);
1973 strcpy (pass_packet, "QPassSignals:");
1974 p = pass_packet + strlen (pass_packet);
1975 for (i = 0; i < numsigs; i++)
1976 {
1977 if (pass_signals[i])
1978 {
1979 if (i >= 16)
1980 *p++ = tohex (i >> 4);
1981 *p++ = tohex (i & 15);
1982 if (count)
1983 *p++ = ';';
1984 else
1985 break;
1986 count--;
1987 }
1988 }
1989 *p = 0;
1990 if (!rs->last_pass_packet || strcmp (rs->last_pass_packet, pass_packet))
1991 {
1992 putpkt (pass_packet);
1993 getpkt (&rs->buf, &rs->buf_size, 0);
1994 packet_ok (rs->buf, &remote_protocol_packets[PACKET_QPassSignals]);
1995 if (rs->last_pass_packet)
1996 xfree (rs->last_pass_packet);
1997 rs->last_pass_packet = pass_packet;
1998 }
1999 else
2000 xfree (pass_packet);
2001 }
2002 }
2003
2004 /* If 'QCatchSyscalls' is supported, tell the remote stub
2005 to report syscalls to GDB. */
2006
2007 static int
2008 remote_set_syscall_catchpoint (struct target_ops *self,
2009 int pid, int needed, int any_count,
2010 int table_size, int *table)
2011 {
2012 char *catch_packet;
2013 enum packet_result result;
2014 int n_sysno = 0;
2015
2016 if (packet_support (PACKET_QCatchSyscalls) == PACKET_DISABLE)
2017 {
2018 /* Not supported. */
2019 return 1;
2020 }
2021
2022 if (needed && !any_count)
2023 {
2024 int i;
2025
2026 /* Count how many syscalls are to be caught (table[sysno] != 0). */
2027 for (i = 0; i < table_size; i++)
2028 {
2029 if (table[i] != 0)
2030 n_sysno++;
2031 }
2032 }
2033
2034 if (remote_debug)
2035 {
2036 fprintf_unfiltered (gdb_stdlog,
2037 "remote_set_syscall_catchpoint "
2038 "pid %d needed %d any_count %d n_sysno %d\n",
2039 pid, needed, any_count, n_sysno);
2040 }
2041
2042 if (needed)
2043 {
2044 /* Prepare a packet with the sysno list, assuming max 8+1
2045 characters for a sysno. If the resulting packet size is too
2046 big, fallback on the non-selective packet. */
2047 const int maxpktsz = strlen ("QCatchSyscalls:1") + n_sysno * 9 + 1;
2048
2049 catch_packet = (char *) xmalloc (maxpktsz);
2050 strcpy (catch_packet, "QCatchSyscalls:1");
2051 if (!any_count)
2052 {
2053 int i;
2054 char *p;
2055
2056 p = catch_packet;
2057 p += strlen (p);
2058
2059 /* Add in catch_packet each syscall to be caught (table[i] != 0). */
2060 for (i = 0; i < table_size; i++)
2061 {
2062 if (table[i] != 0)
2063 p += xsnprintf (p, catch_packet + maxpktsz - p, ";%x", i);
2064 }
2065 }
2066 if (strlen (catch_packet) > get_remote_packet_size ())
2067 {
2068 /* catch_packet too big. Fallback to less efficient
2069 non selective mode, with GDB doing the filtering. */
2070 catch_packet[sizeof ("QCatchSyscalls:1") - 1] = 0;
2071 }
2072 }
2073 else
2074 catch_packet = xstrdup ("QCatchSyscalls:0");
2075
2076 {
2077 struct cleanup *old_chain = make_cleanup (xfree, catch_packet);
2078 struct remote_state *rs = get_remote_state ();
2079
2080 putpkt (catch_packet);
2081 getpkt (&rs->buf, &rs->buf_size, 0);
2082 result = packet_ok (rs->buf, &remote_protocol_packets[PACKET_QCatchSyscalls]);
2083 do_cleanups (old_chain);
2084 if (result == PACKET_OK)
2085 return 0;
2086 else
2087 return -1;
2088 }
2089 }
2090
2091 /* If 'QProgramSignals' is supported, tell the remote stub what
2092 signals it should pass through to the inferior when detaching. */
2093
2094 static void
2095 remote_program_signals (struct target_ops *self,
2096 int numsigs, unsigned char *signals)
2097 {
2098 if (packet_support (PACKET_QProgramSignals) != PACKET_DISABLE)
2099 {
2100 char *packet, *p;
2101 int count = 0, i;
2102 struct remote_state *rs = get_remote_state ();
2103
2104 gdb_assert (numsigs < 256);
2105 for (i = 0; i < numsigs; i++)
2106 {
2107 if (signals[i])
2108 count++;
2109 }
2110 packet = (char *) xmalloc (count * 3 + strlen ("QProgramSignals:") + 1);
2111 strcpy (packet, "QProgramSignals:");
2112 p = packet + strlen (packet);
2113 for (i = 0; i < numsigs; i++)
2114 {
2115 if (signal_pass_state (i))
2116 {
2117 if (i >= 16)
2118 *p++ = tohex (i >> 4);
2119 *p++ = tohex (i & 15);
2120 if (count)
2121 *p++ = ';';
2122 else
2123 break;
2124 count--;
2125 }
2126 }
2127 *p = 0;
2128 if (!rs->last_program_signals_packet
2129 || strcmp (rs->last_program_signals_packet, packet) != 0)
2130 {
2131 putpkt (packet);
2132 getpkt (&rs->buf, &rs->buf_size, 0);
2133 packet_ok (rs->buf, &remote_protocol_packets[PACKET_QProgramSignals]);
2134 xfree (rs->last_program_signals_packet);
2135 rs->last_program_signals_packet = packet;
2136 }
2137 else
2138 xfree (packet);
2139 }
2140 }
2141
2142 /* If PTID is MAGIC_NULL_PTID, don't set any thread. If PTID is
2143 MINUS_ONE_PTID, set the thread to -1, so the stub returns the
2144 thread. If GEN is set, set the general thread, if not, then set
2145 the step/continue thread. */
2146 static void
2147 set_thread (struct ptid ptid, int gen)
2148 {
2149 struct remote_state *rs = get_remote_state ();
2150 ptid_t state = gen ? rs->general_thread : rs->continue_thread;
2151 char *buf = rs->buf;
2152 char *endbuf = rs->buf + get_remote_packet_size ();
2153
2154 if (ptid_equal (state, ptid))
2155 return;
2156
2157 *buf++ = 'H';
2158 *buf++ = gen ? 'g' : 'c';
2159 if (ptid_equal (ptid, magic_null_ptid))
2160 xsnprintf (buf, endbuf - buf, "0");
2161 else if (ptid_equal (ptid, any_thread_ptid))
2162 xsnprintf (buf, endbuf - buf, "0");
2163 else if (ptid_equal (ptid, minus_one_ptid))
2164 xsnprintf (buf, endbuf - buf, "-1");
2165 else
2166 write_ptid (buf, endbuf, ptid);
2167 putpkt (rs->buf);
2168 getpkt (&rs->buf, &rs->buf_size, 0);
2169 if (gen)
2170 rs->general_thread = ptid;
2171 else
2172 rs->continue_thread = ptid;
2173 }
2174
2175 static void
2176 set_general_thread (struct ptid ptid)
2177 {
2178 set_thread (ptid, 1);
2179 }
2180
2181 static void
2182 set_continue_thread (struct ptid ptid)
2183 {
2184 set_thread (ptid, 0);
2185 }
2186
2187 /* Change the remote current process. Which thread within the process
2188 ends up selected isn't important, as long as it is the same process
2189 as what INFERIOR_PTID points to.
2190
2191 This comes from that fact that there is no explicit notion of
2192 "selected process" in the protocol. The selected process for
2193 general operations is the process the selected general thread
2194 belongs to. */
2195
2196 static void
2197 set_general_process (void)
2198 {
2199 struct remote_state *rs = get_remote_state ();
2200
2201 /* If the remote can't handle multiple processes, don't bother. */
2202 if (!remote_multi_process_p (rs))
2203 return;
2204
2205 /* We only need to change the remote current thread if it's pointing
2206 at some other process. */
2207 if (ptid_get_pid (rs->general_thread) != ptid_get_pid (inferior_ptid))
2208 set_general_thread (inferior_ptid);
2209 }
2210
2211 \f
2212 /* Return nonzero if this is the main thread that we made up ourselves
2213 to model non-threaded targets as single-threaded. */
2214
2215 static int
2216 remote_thread_always_alive (struct target_ops *ops, ptid_t ptid)
2217 {
2218 if (ptid_equal (ptid, magic_null_ptid))
2219 /* The main thread is always alive. */
2220 return 1;
2221
2222 if (ptid_get_pid (ptid) != 0 && ptid_get_lwp (ptid) == 0)
2223 /* The main thread is always alive. This can happen after a
2224 vAttach, if the remote side doesn't support
2225 multi-threading. */
2226 return 1;
2227
2228 return 0;
2229 }
2230
2231 /* Return nonzero if the thread PTID is still alive on the remote
2232 system. */
2233
2234 static int
2235 remote_thread_alive (struct target_ops *ops, ptid_t ptid)
2236 {
2237 struct remote_state *rs = get_remote_state ();
2238 char *p, *endp;
2239
2240 /* Check if this is a thread that we made up ourselves to model
2241 non-threaded targets as single-threaded. */
2242 if (remote_thread_always_alive (ops, ptid))
2243 return 1;
2244
2245 p = rs->buf;
2246 endp = rs->buf + get_remote_packet_size ();
2247
2248 *p++ = 'T';
2249 write_ptid (p, endp, ptid);
2250
2251 putpkt (rs->buf);
2252 getpkt (&rs->buf, &rs->buf_size, 0);
2253 return (rs->buf[0] == 'O' && rs->buf[1] == 'K');
2254 }
2255
2256 /* Return a pointer to a thread name if we know it and NULL otherwise.
2257 The thread_info object owns the memory for the name. */
2258
2259 static const char *
2260 remote_thread_name (struct target_ops *ops, struct thread_info *info)
2261 {
2262 if (info->priv != NULL)
2263 return info->priv->name;
2264
2265 return NULL;
2266 }
2267
2268 /* About these extended threadlist and threadinfo packets. They are
2269 variable length packets but, the fields within them are often fixed
2270 length. They are redundent enough to send over UDP as is the
2271 remote protocol in general. There is a matching unit test module
2272 in libstub. */
2273
2274 /* WARNING: This threadref data structure comes from the remote O.S.,
2275 libstub protocol encoding, and remote.c. It is not particularly
2276 changable. */
2277
2278 /* Right now, the internal structure is int. We want it to be bigger.
2279 Plan to fix this. */
2280
2281 typedef int gdb_threadref; /* Internal GDB thread reference. */
2282
2283 /* gdb_ext_thread_info is an internal GDB data structure which is
2284 equivalent to the reply of the remote threadinfo packet. */
2285
2286 struct gdb_ext_thread_info
2287 {
2288 threadref threadid; /* External form of thread reference. */
2289 int active; /* Has state interesting to GDB?
2290 regs, stack. */
2291 char display[256]; /* Brief state display, name,
2292 blocked/suspended. */
2293 char shortname[32]; /* To be used to name threads. */
2294 char more_display[256]; /* Long info, statistics, queue depth,
2295 whatever. */
2296 };
2297
2298 /* The volume of remote transfers can be limited by submitting
2299 a mask containing bits specifying the desired information.
2300 Use a union of these values as the 'selection' parameter to
2301 get_thread_info. FIXME: Make these TAG names more thread specific. */
2302
2303 #define TAG_THREADID 1
2304 #define TAG_EXISTS 2
2305 #define TAG_DISPLAY 4
2306 #define TAG_THREADNAME 8
2307 #define TAG_MOREDISPLAY 16
2308
2309 #define BUF_THREAD_ID_SIZE (OPAQUETHREADBYTES * 2)
2310
2311 static char *unpack_nibble (char *buf, int *val);
2312
2313 static char *unpack_byte (char *buf, int *value);
2314
2315 static char *pack_int (char *buf, int value);
2316
2317 static char *unpack_int (char *buf, int *value);
2318
2319 static char *unpack_string (char *src, char *dest, int length);
2320
2321 static char *pack_threadid (char *pkt, threadref *id);
2322
2323 static char *unpack_threadid (char *inbuf, threadref *id);
2324
2325 void int_to_threadref (threadref *id, int value);
2326
2327 static int threadref_to_int (threadref *ref);
2328
2329 static void copy_threadref (threadref *dest, threadref *src);
2330
2331 static int threadmatch (threadref *dest, threadref *src);
2332
2333 static char *pack_threadinfo_request (char *pkt, int mode,
2334 threadref *id);
2335
2336 static int remote_unpack_thread_info_response (char *pkt,
2337 threadref *expectedref,
2338 struct gdb_ext_thread_info
2339 *info);
2340
2341
2342 static int remote_get_threadinfo (threadref *threadid,
2343 int fieldset, /*TAG mask */
2344 struct gdb_ext_thread_info *info);
2345
2346 static char *pack_threadlist_request (char *pkt, int startflag,
2347 int threadcount,
2348 threadref *nextthread);
2349
2350 static int parse_threadlist_response (char *pkt,
2351 int result_limit,
2352 threadref *original_echo,
2353 threadref *resultlist,
2354 int *doneflag);
2355
2356 static int remote_get_threadlist (int startflag,
2357 threadref *nextthread,
2358 int result_limit,
2359 int *done,
2360 int *result_count,
2361 threadref *threadlist);
2362
2363 typedef int (*rmt_thread_action) (threadref *ref, void *context);
2364
2365 static int remote_threadlist_iterator (rmt_thread_action stepfunction,
2366 void *context, int looplimit);
2367
2368 static int remote_newthread_step (threadref *ref, void *context);
2369
2370
2371 /* Write a PTID to BUF. ENDBUF points to one-passed-the-end of the
2372 buffer we're allowed to write to. Returns
2373 BUF+CHARACTERS_WRITTEN. */
2374
2375 static char *
2376 write_ptid (char *buf, const char *endbuf, ptid_t ptid)
2377 {
2378 int pid, tid;
2379 struct remote_state *rs = get_remote_state ();
2380
2381 if (remote_multi_process_p (rs))
2382 {
2383 pid = ptid_get_pid (ptid);
2384 if (pid < 0)
2385 buf += xsnprintf (buf, endbuf - buf, "p-%x.", -pid);
2386 else
2387 buf += xsnprintf (buf, endbuf - buf, "p%x.", pid);
2388 }
2389 tid = ptid_get_lwp (ptid);
2390 if (tid < 0)
2391 buf += xsnprintf (buf, endbuf - buf, "-%x", -tid);
2392 else
2393 buf += xsnprintf (buf, endbuf - buf, "%x", tid);
2394
2395 return buf;
2396 }
2397
2398 /* Extract a PTID from BUF. If non-null, OBUF is set to the to one
2399 passed the last parsed char. Returns null_ptid on error. */
2400
2401 static ptid_t
2402 read_ptid (char *buf, char **obuf)
2403 {
2404 char *p = buf;
2405 char *pp;
2406 ULONGEST pid = 0, tid = 0;
2407
2408 if (*p == 'p')
2409 {
2410 /* Multi-process ptid. */
2411 pp = unpack_varlen_hex (p + 1, &pid);
2412 if (*pp != '.')
2413 error (_("invalid remote ptid: %s"), p);
2414
2415 p = pp;
2416 pp = unpack_varlen_hex (p + 1, &tid);
2417 if (obuf)
2418 *obuf = pp;
2419 return ptid_build (pid, tid, 0);
2420 }
2421
2422 /* No multi-process. Just a tid. */
2423 pp = unpack_varlen_hex (p, &tid);
2424
2425 /* Return null_ptid when no thread id is found. */
2426 if (p == pp)
2427 {
2428 if (obuf)
2429 *obuf = pp;
2430 return null_ptid;
2431 }
2432
2433 /* Since the stub is not sending a process id, then default to
2434 what's in inferior_ptid, unless it's null at this point. If so,
2435 then since there's no way to know the pid of the reported
2436 threads, use the magic number. */
2437 if (ptid_equal (inferior_ptid, null_ptid))
2438 pid = ptid_get_pid (magic_null_ptid);
2439 else
2440 pid = ptid_get_pid (inferior_ptid);
2441
2442 if (obuf)
2443 *obuf = pp;
2444 return ptid_build (pid, tid, 0);
2445 }
2446
2447 static int
2448 stubhex (int ch)
2449 {
2450 if (ch >= 'a' && ch <= 'f')
2451 return ch - 'a' + 10;
2452 if (ch >= '0' && ch <= '9')
2453 return ch - '0';
2454 if (ch >= 'A' && ch <= 'F')
2455 return ch - 'A' + 10;
2456 return -1;
2457 }
2458
2459 static int
2460 stub_unpack_int (char *buff, int fieldlength)
2461 {
2462 int nibble;
2463 int retval = 0;
2464
2465 while (fieldlength)
2466 {
2467 nibble = stubhex (*buff++);
2468 retval |= nibble;
2469 fieldlength--;
2470 if (fieldlength)
2471 retval = retval << 4;
2472 }
2473 return retval;
2474 }
2475
2476 static char *
2477 unpack_nibble (char *buf, int *val)
2478 {
2479 *val = fromhex (*buf++);
2480 return buf;
2481 }
2482
2483 static char *
2484 unpack_byte (char *buf, int *value)
2485 {
2486 *value = stub_unpack_int (buf, 2);
2487 return buf + 2;
2488 }
2489
2490 static char *
2491 pack_int (char *buf, int value)
2492 {
2493 buf = pack_hex_byte (buf, (value >> 24) & 0xff);
2494 buf = pack_hex_byte (buf, (value >> 16) & 0xff);
2495 buf = pack_hex_byte (buf, (value >> 8) & 0x0ff);
2496 buf = pack_hex_byte (buf, (value & 0xff));
2497 return buf;
2498 }
2499
2500 static char *
2501 unpack_int (char *buf, int *value)
2502 {
2503 *value = stub_unpack_int (buf, 8);
2504 return buf + 8;
2505 }
2506
2507 #if 0 /* Currently unused, uncomment when needed. */
2508 static char *pack_string (char *pkt, char *string);
2509
2510 static char *
2511 pack_string (char *pkt, char *string)
2512 {
2513 char ch;
2514 int len;
2515
2516 len = strlen (string);
2517 if (len > 200)
2518 len = 200; /* Bigger than most GDB packets, junk??? */
2519 pkt = pack_hex_byte (pkt, len);
2520 while (len-- > 0)
2521 {
2522 ch = *string++;
2523 if ((ch == '\0') || (ch == '#'))
2524 ch = '*'; /* Protect encapsulation. */
2525 *pkt++ = ch;
2526 }
2527 return pkt;
2528 }
2529 #endif /* 0 (unused) */
2530
2531 static char *
2532 unpack_string (char *src, char *dest, int length)
2533 {
2534 while (length--)
2535 *dest++ = *src++;
2536 *dest = '\0';
2537 return src;
2538 }
2539
2540 static char *
2541 pack_threadid (char *pkt, threadref *id)
2542 {
2543 char *limit;
2544 unsigned char *altid;
2545
2546 altid = (unsigned char *) id;
2547 limit = pkt + BUF_THREAD_ID_SIZE;
2548 while (pkt < limit)
2549 pkt = pack_hex_byte (pkt, *altid++);
2550 return pkt;
2551 }
2552
2553
2554 static char *
2555 unpack_threadid (char *inbuf, threadref *id)
2556 {
2557 char *altref;
2558 char *limit = inbuf + BUF_THREAD_ID_SIZE;
2559 int x, y;
2560
2561 altref = (char *) id;
2562
2563 while (inbuf < limit)
2564 {
2565 x = stubhex (*inbuf++);
2566 y = stubhex (*inbuf++);
2567 *altref++ = (x << 4) | y;
2568 }
2569 return inbuf;
2570 }
2571
2572 /* Externally, threadrefs are 64 bits but internally, they are still
2573 ints. This is due to a mismatch of specifications. We would like
2574 to use 64bit thread references internally. This is an adapter
2575 function. */
2576
2577 void
2578 int_to_threadref (threadref *id, int value)
2579 {
2580 unsigned char *scan;
2581
2582 scan = (unsigned char *) id;
2583 {
2584 int i = 4;
2585 while (i--)
2586 *scan++ = 0;
2587 }
2588 *scan++ = (value >> 24) & 0xff;
2589 *scan++ = (value >> 16) & 0xff;
2590 *scan++ = (value >> 8) & 0xff;
2591 *scan++ = (value & 0xff);
2592 }
2593
2594 static int
2595 threadref_to_int (threadref *ref)
2596 {
2597 int i, value = 0;
2598 unsigned char *scan;
2599
2600 scan = *ref;
2601 scan += 4;
2602 i = 4;
2603 while (i-- > 0)
2604 value = (value << 8) | ((*scan++) & 0xff);
2605 return value;
2606 }
2607
2608 static void
2609 copy_threadref (threadref *dest, threadref *src)
2610 {
2611 int i;
2612 unsigned char *csrc, *cdest;
2613
2614 csrc = (unsigned char *) src;
2615 cdest = (unsigned char *) dest;
2616 i = 8;
2617 while (i--)
2618 *cdest++ = *csrc++;
2619 }
2620
2621 static int
2622 threadmatch (threadref *dest, threadref *src)
2623 {
2624 /* Things are broken right now, so just assume we got a match. */
2625 #if 0
2626 unsigned char *srcp, *destp;
2627 int i, result;
2628 srcp = (char *) src;
2629 destp = (char *) dest;
2630
2631 result = 1;
2632 while (i-- > 0)
2633 result &= (*srcp++ == *destp++) ? 1 : 0;
2634 return result;
2635 #endif
2636 return 1;
2637 }
2638
2639 /*
2640 threadid:1, # always request threadid
2641 context_exists:2,
2642 display:4,
2643 unique_name:8,
2644 more_display:16
2645 */
2646
2647 /* Encoding: 'Q':8,'P':8,mask:32,threadid:64 */
2648
2649 static char *
2650 pack_threadinfo_request (char *pkt, int mode, threadref *id)
2651 {
2652 *pkt++ = 'q'; /* Info Query */
2653 *pkt++ = 'P'; /* process or thread info */
2654 pkt = pack_int (pkt, mode); /* mode */
2655 pkt = pack_threadid (pkt, id); /* threadid */
2656 *pkt = '\0'; /* terminate */
2657 return pkt;
2658 }
2659
2660 /* These values tag the fields in a thread info response packet. */
2661 /* Tagging the fields allows us to request specific fields and to
2662 add more fields as time goes by. */
2663
2664 #define TAG_THREADID 1 /* Echo the thread identifier. */
2665 #define TAG_EXISTS 2 /* Is this process defined enough to
2666 fetch registers and its stack? */
2667 #define TAG_DISPLAY 4 /* A short thing maybe to put on a window */
2668 #define TAG_THREADNAME 8 /* string, maps 1-to-1 with a thread is. */
2669 #define TAG_MOREDISPLAY 16 /* Whatever the kernel wants to say about
2670 the process. */
2671
2672 static int
2673 remote_unpack_thread_info_response (char *pkt, threadref *expectedref,
2674 struct gdb_ext_thread_info *info)
2675 {
2676 struct remote_state *rs = get_remote_state ();
2677 int mask, length;
2678 int tag;
2679 threadref ref;
2680 char *limit = pkt + rs->buf_size; /* Plausible parsing limit. */
2681 int retval = 1;
2682
2683 /* info->threadid = 0; FIXME: implement zero_threadref. */
2684 info->active = 0;
2685 info->display[0] = '\0';
2686 info->shortname[0] = '\0';
2687 info->more_display[0] = '\0';
2688
2689 /* Assume the characters indicating the packet type have been
2690 stripped. */
2691 pkt = unpack_int (pkt, &mask); /* arg mask */
2692 pkt = unpack_threadid (pkt, &ref);
2693
2694 if (mask == 0)
2695 warning (_("Incomplete response to threadinfo request."));
2696 if (!threadmatch (&ref, expectedref))
2697 { /* This is an answer to a different request. */
2698 warning (_("ERROR RMT Thread info mismatch."));
2699 return 0;
2700 }
2701 copy_threadref (&info->threadid, &ref);
2702
2703 /* Loop on tagged fields , try to bail if somthing goes wrong. */
2704
2705 /* Packets are terminated with nulls. */
2706 while ((pkt < limit) && mask && *pkt)
2707 {
2708 pkt = unpack_int (pkt, &tag); /* tag */
2709 pkt = unpack_byte (pkt, &length); /* length */
2710 if (!(tag & mask)) /* Tags out of synch with mask. */
2711 {
2712 warning (_("ERROR RMT: threadinfo tag mismatch."));
2713 retval = 0;
2714 break;
2715 }
2716 if (tag == TAG_THREADID)
2717 {
2718 if (length != 16)
2719 {
2720 warning (_("ERROR RMT: length of threadid is not 16."));
2721 retval = 0;
2722 break;
2723 }
2724 pkt = unpack_threadid (pkt, &ref);
2725 mask = mask & ~TAG_THREADID;
2726 continue;
2727 }
2728 if (tag == TAG_EXISTS)
2729 {
2730 info->active = stub_unpack_int (pkt, length);
2731 pkt += length;
2732 mask = mask & ~(TAG_EXISTS);
2733 if (length > 8)
2734 {
2735 warning (_("ERROR RMT: 'exists' length too long."));
2736 retval = 0;
2737 break;
2738 }
2739 continue;
2740 }
2741 if (tag == TAG_THREADNAME)
2742 {
2743 pkt = unpack_string (pkt, &info->shortname[0], length);
2744 mask = mask & ~TAG_THREADNAME;
2745 continue;
2746 }
2747 if (tag == TAG_DISPLAY)
2748 {
2749 pkt = unpack_string (pkt, &info->display[0], length);
2750 mask = mask & ~TAG_DISPLAY;
2751 continue;
2752 }
2753 if (tag == TAG_MOREDISPLAY)
2754 {
2755 pkt = unpack_string (pkt, &info->more_display[0], length);
2756 mask = mask & ~TAG_MOREDISPLAY;
2757 continue;
2758 }
2759 warning (_("ERROR RMT: unknown thread info tag."));
2760 break; /* Not a tag we know about. */
2761 }
2762 return retval;
2763 }
2764
2765 static int
2766 remote_get_threadinfo (threadref *threadid, int fieldset, /* TAG mask */
2767 struct gdb_ext_thread_info *info)
2768 {
2769 struct remote_state *rs = get_remote_state ();
2770 int result;
2771
2772 pack_threadinfo_request (rs->buf, fieldset, threadid);
2773 putpkt (rs->buf);
2774 getpkt (&rs->buf, &rs->buf_size, 0);
2775
2776 if (rs->buf[0] == '\0')
2777 return 0;
2778
2779 result = remote_unpack_thread_info_response (rs->buf + 2,
2780 threadid, info);
2781 return result;
2782 }
2783
2784 /* Format: i'Q':8,i"L":8,initflag:8,batchsize:16,lastthreadid:32 */
2785
2786 static char *
2787 pack_threadlist_request (char *pkt, int startflag, int threadcount,
2788 threadref *nextthread)
2789 {
2790 *pkt++ = 'q'; /* info query packet */
2791 *pkt++ = 'L'; /* Process LIST or threadLIST request */
2792 pkt = pack_nibble (pkt, startflag); /* initflag 1 bytes */
2793 pkt = pack_hex_byte (pkt, threadcount); /* threadcount 2 bytes */
2794 pkt = pack_threadid (pkt, nextthread); /* 64 bit thread identifier */
2795 *pkt = '\0';
2796 return pkt;
2797 }
2798
2799 /* Encoding: 'q':8,'M':8,count:16,done:8,argthreadid:64,(threadid:64)* */
2800
2801 static int
2802 parse_threadlist_response (char *pkt, int result_limit,
2803 threadref *original_echo, threadref *resultlist,
2804 int *doneflag)
2805 {
2806 struct remote_state *rs = get_remote_state ();
2807 char *limit;
2808 int count, resultcount, done;
2809
2810 resultcount = 0;
2811 /* Assume the 'q' and 'M chars have been stripped. */
2812 limit = pkt + (rs->buf_size - BUF_THREAD_ID_SIZE);
2813 /* done parse past here */
2814 pkt = unpack_byte (pkt, &count); /* count field */
2815 pkt = unpack_nibble (pkt, &done);
2816 /* The first threadid is the argument threadid. */
2817 pkt = unpack_threadid (pkt, original_echo); /* should match query packet */
2818 while ((count-- > 0) && (pkt < limit))
2819 {
2820 pkt = unpack_threadid (pkt, resultlist++);
2821 if (resultcount++ >= result_limit)
2822 break;
2823 }
2824 if (doneflag)
2825 *doneflag = done;
2826 return resultcount;
2827 }
2828
2829 /* Fetch the next batch of threads from the remote. Returns -1 if the
2830 qL packet is not supported, 0 on error and 1 on success. */
2831
2832 static int
2833 remote_get_threadlist (int startflag, threadref *nextthread, int result_limit,
2834 int *done, int *result_count, threadref *threadlist)
2835 {
2836 struct remote_state *rs = get_remote_state ();
2837 int result = 1;
2838
2839 /* Trancate result limit to be smaller than the packet size. */
2840 if ((((result_limit + 1) * BUF_THREAD_ID_SIZE) + 10)
2841 >= get_remote_packet_size ())
2842 result_limit = (get_remote_packet_size () / BUF_THREAD_ID_SIZE) - 2;
2843
2844 pack_threadlist_request (rs->buf, startflag, result_limit, nextthread);
2845 putpkt (rs->buf);
2846 getpkt (&rs->buf, &rs->buf_size, 0);
2847 if (*rs->buf == '\0')
2848 {
2849 /* Packet not supported. */
2850 return -1;
2851 }
2852
2853 *result_count =
2854 parse_threadlist_response (rs->buf + 2, result_limit,
2855 &rs->echo_nextthread, threadlist, done);
2856
2857 if (!threadmatch (&rs->echo_nextthread, nextthread))
2858 {
2859 /* FIXME: This is a good reason to drop the packet. */
2860 /* Possably, there is a duplicate response. */
2861 /* Possabilities :
2862 retransmit immediatly - race conditions
2863 retransmit after timeout - yes
2864 exit
2865 wait for packet, then exit
2866 */
2867 warning (_("HMM: threadlist did not echo arg thread, dropping it."));
2868 return 0; /* I choose simply exiting. */
2869 }
2870 if (*result_count <= 0)
2871 {
2872 if (*done != 1)
2873 {
2874 warning (_("RMT ERROR : failed to get remote thread list."));
2875 result = 0;
2876 }
2877 return result; /* break; */
2878 }
2879 if (*result_count > result_limit)
2880 {
2881 *result_count = 0;
2882 warning (_("RMT ERROR: threadlist response longer than requested."));
2883 return 0;
2884 }
2885 return result;
2886 }
2887
2888 /* Fetch the list of remote threads, with the qL packet, and call
2889 STEPFUNCTION for each thread found. Stops iterating and returns 1
2890 if STEPFUNCTION returns true. Stops iterating and returns 0 if the
2891 STEPFUNCTION returns false. If the packet is not supported,
2892 returns -1. */
2893
2894 static int
2895 remote_threadlist_iterator (rmt_thread_action stepfunction, void *context,
2896 int looplimit)
2897 {
2898 struct remote_state *rs = get_remote_state ();
2899 int done, i, result_count;
2900 int startflag = 1;
2901 int result = 1;
2902 int loopcount = 0;
2903
2904 done = 0;
2905 while (!done)
2906 {
2907 if (loopcount++ > looplimit)
2908 {
2909 result = 0;
2910 warning (_("Remote fetch threadlist -infinite loop-."));
2911 break;
2912 }
2913 result = remote_get_threadlist (startflag, &rs->nextthread,
2914 MAXTHREADLISTRESULTS,
2915 &done, &result_count,
2916 rs->resultthreadlist);
2917 if (result <= 0)
2918 break;
2919 /* Clear for later iterations. */
2920 startflag = 0;
2921 /* Setup to resume next batch of thread references, set nextthread. */
2922 if (result_count >= 1)
2923 copy_threadref (&rs->nextthread,
2924 &rs->resultthreadlist[result_count - 1]);
2925 i = 0;
2926 while (result_count--)
2927 {
2928 if (!(*stepfunction) (&rs->resultthreadlist[i++], context))
2929 {
2930 result = 0;
2931 break;
2932 }
2933 }
2934 }
2935 return result;
2936 }
2937
2938 /* A thread found on the remote target. */
2939
2940 typedef struct thread_item
2941 {
2942 /* The thread's PTID. */
2943 ptid_t ptid;
2944
2945 /* The thread's extra info. May be NULL. */
2946 char *extra;
2947
2948 /* The thread's name. May be NULL. */
2949 char *name;
2950
2951 /* The core the thread was running on. -1 if not known. */
2952 int core;
2953 } thread_item_t;
2954 DEF_VEC_O(thread_item_t);
2955
2956 /* Context passed around to the various methods listing remote
2957 threads. As new threads are found, they're added to the ITEMS
2958 vector. */
2959
2960 struct threads_listing_context
2961 {
2962 /* The threads found on the remote target. */
2963 VEC (thread_item_t) *items;
2964 };
2965
2966 /* Discard the contents of the constructed thread listing context. */
2967
2968 static void
2969 clear_threads_listing_context (void *p)
2970 {
2971 struct threads_listing_context *context
2972 = (struct threads_listing_context *) p;
2973 int i;
2974 struct thread_item *item;
2975
2976 for (i = 0; VEC_iterate (thread_item_t, context->items, i, item); ++i)
2977 {
2978 xfree (item->extra);
2979 xfree (item->name);
2980 }
2981
2982 VEC_free (thread_item_t, context->items);
2983 }
2984
2985 /* Remove the thread specified as the related_pid field of WS
2986 from the CONTEXT list. */
2987
2988 static void
2989 threads_listing_context_remove (struct target_waitstatus *ws,
2990 struct threads_listing_context *context)
2991 {
2992 struct thread_item *item;
2993 int i;
2994 ptid_t child_ptid = ws->value.related_pid;
2995
2996 for (i = 0; VEC_iterate (thread_item_t, context->items, i, item); ++i)
2997 {
2998 if (ptid_equal (item->ptid, child_ptid))
2999 {
3000 VEC_ordered_remove (thread_item_t, context->items, i);
3001 break;
3002 }
3003 }
3004 }
3005
3006 static int
3007 remote_newthread_step (threadref *ref, void *data)
3008 {
3009 struct threads_listing_context *context
3010 = (struct threads_listing_context *) data;
3011 struct thread_item item;
3012 int pid = ptid_get_pid (inferior_ptid);
3013
3014 item.ptid = ptid_build (pid, threadref_to_int (ref), 0);
3015 item.core = -1;
3016 item.name = NULL;
3017 item.extra = NULL;
3018
3019 VEC_safe_push (thread_item_t, context->items, &item);
3020
3021 return 1; /* continue iterator */
3022 }
3023
3024 #define CRAZY_MAX_THREADS 1000
3025
3026 static ptid_t
3027 remote_current_thread (ptid_t oldpid)
3028 {
3029 struct remote_state *rs = get_remote_state ();
3030
3031 putpkt ("qC");
3032 getpkt (&rs->buf, &rs->buf_size, 0);
3033 if (rs->buf[0] == 'Q' && rs->buf[1] == 'C')
3034 {
3035 char *obuf;
3036 ptid_t result;
3037
3038 result = read_ptid (&rs->buf[2], &obuf);
3039 if (*obuf != '\0' && remote_debug)
3040 fprintf_unfiltered (gdb_stdlog,
3041 "warning: garbage in qC reply\n");
3042
3043 return result;
3044 }
3045 else
3046 return oldpid;
3047 }
3048
3049 /* List remote threads using the deprecated qL packet. */
3050
3051 static int
3052 remote_get_threads_with_ql (struct target_ops *ops,
3053 struct threads_listing_context *context)
3054 {
3055 if (remote_threadlist_iterator (remote_newthread_step, context,
3056 CRAZY_MAX_THREADS) >= 0)
3057 return 1;
3058
3059 return 0;
3060 }
3061
3062 #if defined(HAVE_LIBEXPAT)
3063
3064 static void
3065 start_thread (struct gdb_xml_parser *parser,
3066 const struct gdb_xml_element *element,
3067 void *user_data, VEC(gdb_xml_value_s) *attributes)
3068 {
3069 struct threads_listing_context *data
3070 = (struct threads_listing_context *) user_data;
3071
3072 struct thread_item item;
3073 char *id;
3074 struct gdb_xml_value *attr;
3075
3076 id = (char *) xml_find_attribute (attributes, "id")->value;
3077 item.ptid = read_ptid (id, NULL);
3078
3079 attr = xml_find_attribute (attributes, "core");
3080 if (attr != NULL)
3081 item.core = *(ULONGEST *) attr->value;
3082 else
3083 item.core = -1;
3084
3085 attr = xml_find_attribute (attributes, "name");
3086 item.name = attr != NULL ? xstrdup ((const char *) attr->value) : NULL;
3087
3088 item.extra = 0;
3089
3090 VEC_safe_push (thread_item_t, data->items, &item);
3091 }
3092
3093 static void
3094 end_thread (struct gdb_xml_parser *parser,
3095 const struct gdb_xml_element *element,
3096 void *user_data, const char *body_text)
3097 {
3098 struct threads_listing_context *data
3099 = (struct threads_listing_context *) user_data;
3100
3101 if (body_text && *body_text)
3102 VEC_last (thread_item_t, data->items)->extra = xstrdup (body_text);
3103 }
3104
3105 const struct gdb_xml_attribute thread_attributes[] = {
3106 { "id", GDB_XML_AF_NONE, NULL, NULL },
3107 { "core", GDB_XML_AF_OPTIONAL, gdb_xml_parse_attr_ulongest, NULL },
3108 { "name", GDB_XML_AF_OPTIONAL, NULL, NULL },
3109 { NULL, GDB_XML_AF_NONE, NULL, NULL }
3110 };
3111
3112 const struct gdb_xml_element thread_children[] = {
3113 { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
3114 };
3115
3116 const struct gdb_xml_element threads_children[] = {
3117 { "thread", thread_attributes, thread_children,
3118 GDB_XML_EF_REPEATABLE | GDB_XML_EF_OPTIONAL,
3119 start_thread, end_thread },
3120 { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
3121 };
3122
3123 const struct gdb_xml_element threads_elements[] = {
3124 { "threads", NULL, threads_children,
3125 GDB_XML_EF_NONE, NULL, NULL },
3126 { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
3127 };
3128
3129 #endif
3130
3131 /* List remote threads using qXfer:threads:read. */
3132
3133 static int
3134 remote_get_threads_with_qxfer (struct target_ops *ops,
3135 struct threads_listing_context *context)
3136 {
3137 #if defined(HAVE_LIBEXPAT)
3138 if (packet_support (PACKET_qXfer_threads) == PACKET_ENABLE)
3139 {
3140 char *xml = target_read_stralloc (ops, TARGET_OBJECT_THREADS, NULL);
3141 struct cleanup *back_to = make_cleanup (xfree, xml);
3142
3143 if (xml != NULL && *xml != '\0')
3144 {
3145 gdb_xml_parse_quick (_("threads"), "threads.dtd",
3146 threads_elements, xml, context);
3147 }
3148
3149 do_cleanups (back_to);
3150 return 1;
3151 }
3152 #endif
3153
3154 return 0;
3155 }
3156
3157 /* List remote threads using qfThreadInfo/qsThreadInfo. */
3158
3159 static int
3160 remote_get_threads_with_qthreadinfo (struct target_ops *ops,
3161 struct threads_listing_context *context)
3162 {
3163 struct remote_state *rs = get_remote_state ();
3164
3165 if (rs->use_threadinfo_query)
3166 {
3167 char *bufp;
3168
3169 putpkt ("qfThreadInfo");
3170 getpkt (&rs->buf, &rs->buf_size, 0);
3171 bufp = rs->buf;
3172 if (bufp[0] != '\0') /* q packet recognized */
3173 {
3174 while (*bufp++ == 'm') /* reply contains one or more TID */
3175 {
3176 do
3177 {
3178 struct thread_item item;
3179
3180 item.ptid = read_ptid (bufp, &bufp);
3181 item.core = -1;
3182 item.name = NULL;
3183 item.extra = NULL;
3184
3185 VEC_safe_push (thread_item_t, context->items, &item);
3186 }
3187 while (*bufp++ == ','); /* comma-separated list */
3188 putpkt ("qsThreadInfo");
3189 getpkt (&rs->buf, &rs->buf_size, 0);
3190 bufp = rs->buf;
3191 }
3192 return 1;
3193 }
3194 else
3195 {
3196 /* Packet not recognized. */
3197 rs->use_threadinfo_query = 0;
3198 }
3199 }
3200
3201 return 0;
3202 }
3203
3204 /* Implement the to_update_thread_list function for the remote
3205 targets. */
3206
3207 static void
3208 remote_update_thread_list (struct target_ops *ops)
3209 {
3210 struct threads_listing_context context;
3211 struct cleanup *old_chain;
3212 int got_list = 0;
3213
3214 context.items = NULL;
3215 old_chain = make_cleanup (clear_threads_listing_context, &context);
3216
3217 /* We have a few different mechanisms to fetch the thread list. Try
3218 them all, starting with the most preferred one first, falling
3219 back to older methods. */
3220 if (remote_get_threads_with_qxfer (ops, &context)
3221 || remote_get_threads_with_qthreadinfo (ops, &context)
3222 || remote_get_threads_with_ql (ops, &context))
3223 {
3224 int i;
3225 struct thread_item *item;
3226 struct thread_info *tp, *tmp;
3227
3228 got_list = 1;
3229
3230 if (VEC_empty (thread_item_t, context.items)
3231 && remote_thread_always_alive (ops, inferior_ptid))
3232 {
3233 /* Some targets don't really support threads, but still
3234 reply an (empty) thread list in response to the thread
3235 listing packets, instead of replying "packet not
3236 supported". Exit early so we don't delete the main
3237 thread. */
3238 do_cleanups (old_chain);
3239 return;
3240 }
3241
3242 /* CONTEXT now holds the current thread list on the remote
3243 target end. Delete GDB-side threads no longer found on the
3244 target. */
3245 ALL_THREADS_SAFE (tp, tmp)
3246 {
3247 for (i = 0;
3248 VEC_iterate (thread_item_t, context.items, i, item);
3249 ++i)
3250 {
3251 if (ptid_equal (item->ptid, tp->ptid))
3252 break;
3253 }
3254
3255 if (i == VEC_length (thread_item_t, context.items))
3256 {
3257 /* Not found. */
3258 delete_thread (tp->ptid);
3259 }
3260 }
3261
3262 /* Remove any unreported fork child threads from CONTEXT so
3263 that we don't interfere with follow fork, which is where
3264 creation of such threads is handled. */
3265 remove_new_fork_children (&context);
3266
3267 /* And now add threads we don't know about yet to our list. */
3268 for (i = 0;
3269 VEC_iterate (thread_item_t, context.items, i, item);
3270 ++i)
3271 {
3272 if (!ptid_equal (item->ptid, null_ptid))
3273 {
3274 struct private_thread_info *info;
3275 /* In non-stop mode, we assume new found threads are
3276 executing until proven otherwise with a stop reply.
3277 In all-stop, we can only get here if all threads are
3278 stopped. */
3279 int executing = target_is_non_stop_p () ? 1 : 0;
3280
3281 remote_notice_new_inferior (item->ptid, executing);
3282
3283 info = demand_private_info (item->ptid);
3284 info->core = item->core;
3285 info->extra = item->extra;
3286 item->extra = NULL;
3287 info->name = item->name;
3288 item->name = NULL;
3289 }
3290 }
3291 }
3292
3293 if (!got_list)
3294 {
3295 /* If no thread listing method is supported, then query whether
3296 each known thread is alive, one by one, with the T packet.
3297 If the target doesn't support threads at all, then this is a
3298 no-op. See remote_thread_alive. */
3299 prune_threads ();
3300 }
3301
3302 do_cleanups (old_chain);
3303 }
3304
3305 /*
3306 * Collect a descriptive string about the given thread.
3307 * The target may say anything it wants to about the thread
3308 * (typically info about its blocked / runnable state, name, etc.).
3309 * This string will appear in the info threads display.
3310 *
3311 * Optional: targets are not required to implement this function.
3312 */
3313
3314 static char *
3315 remote_threads_extra_info (struct target_ops *self, struct thread_info *tp)
3316 {
3317 struct remote_state *rs = get_remote_state ();
3318 int result;
3319 int set;
3320 threadref id;
3321 struct gdb_ext_thread_info threadinfo;
3322 static char display_buf[100]; /* arbitrary... */
3323 int n = 0; /* position in display_buf */
3324
3325 if (rs->remote_desc == 0) /* paranoia */
3326 internal_error (__FILE__, __LINE__,
3327 _("remote_threads_extra_info"));
3328
3329 if (ptid_equal (tp->ptid, magic_null_ptid)
3330 || (ptid_get_pid (tp->ptid) != 0 && ptid_get_lwp (tp->ptid) == 0))
3331 /* This is the main thread which was added by GDB. The remote
3332 server doesn't know about it. */
3333 return NULL;
3334
3335 if (packet_support (PACKET_qXfer_threads) == PACKET_ENABLE)
3336 {
3337 struct thread_info *info = find_thread_ptid (tp->ptid);
3338
3339 if (info && info->priv)
3340 return info->priv->extra;
3341 else
3342 return NULL;
3343 }
3344
3345 if (rs->use_threadextra_query)
3346 {
3347 char *b = rs->buf;
3348 char *endb = rs->buf + get_remote_packet_size ();
3349
3350 xsnprintf (b, endb - b, "qThreadExtraInfo,");
3351 b += strlen (b);
3352 write_ptid (b, endb, tp->ptid);
3353
3354 putpkt (rs->buf);
3355 getpkt (&rs->buf, &rs->buf_size, 0);
3356 if (rs->buf[0] != 0)
3357 {
3358 n = std::min (strlen (rs->buf) / 2, sizeof (display_buf));
3359 result = hex2bin (rs->buf, (gdb_byte *) display_buf, n);
3360 display_buf [result] = '\0';
3361 return display_buf;
3362 }
3363 }
3364
3365 /* If the above query fails, fall back to the old method. */
3366 rs->use_threadextra_query = 0;
3367 set = TAG_THREADID | TAG_EXISTS | TAG_THREADNAME
3368 | TAG_MOREDISPLAY | TAG_DISPLAY;
3369 int_to_threadref (&id, ptid_get_lwp (tp->ptid));
3370 if (remote_get_threadinfo (&id, set, &threadinfo))
3371 if (threadinfo.active)
3372 {
3373 if (*threadinfo.shortname)
3374 n += xsnprintf (&display_buf[0], sizeof (display_buf) - n,
3375 " Name: %s,", threadinfo.shortname);
3376 if (*threadinfo.display)
3377 n += xsnprintf (&display_buf[n], sizeof (display_buf) - n,
3378 " State: %s,", threadinfo.display);
3379 if (*threadinfo.more_display)
3380 n += xsnprintf (&display_buf[n], sizeof (display_buf) - n,
3381 " Priority: %s", threadinfo.more_display);
3382
3383 if (n > 0)
3384 {
3385 /* For purely cosmetic reasons, clear up trailing commas. */
3386 if (',' == display_buf[n-1])
3387 display_buf[n-1] = ' ';
3388 return display_buf;
3389 }
3390 }
3391 return NULL;
3392 }
3393 \f
3394
3395 static int
3396 remote_static_tracepoint_marker_at (struct target_ops *self, CORE_ADDR addr,
3397 struct static_tracepoint_marker *marker)
3398 {
3399 struct remote_state *rs = get_remote_state ();
3400 char *p = rs->buf;
3401
3402 xsnprintf (p, get_remote_packet_size (), "qTSTMat:");
3403 p += strlen (p);
3404 p += hexnumstr (p, addr);
3405 putpkt (rs->buf);
3406 getpkt (&rs->buf, &rs->buf_size, 0);
3407 p = rs->buf;
3408
3409 if (*p == 'E')
3410 error (_("Remote failure reply: %s"), p);
3411
3412 if (*p++ == 'm')
3413 {
3414 parse_static_tracepoint_marker_definition (p, &p, marker);
3415 return 1;
3416 }
3417
3418 return 0;
3419 }
3420
3421 static VEC(static_tracepoint_marker_p) *
3422 remote_static_tracepoint_markers_by_strid (struct target_ops *self,
3423 const char *strid)
3424 {
3425 struct remote_state *rs = get_remote_state ();
3426 VEC(static_tracepoint_marker_p) *markers = NULL;
3427 struct static_tracepoint_marker *marker = NULL;
3428 struct cleanup *old_chain;
3429 char *p;
3430
3431 /* Ask for a first packet of static tracepoint marker
3432 definition. */
3433 putpkt ("qTfSTM");
3434 getpkt (&rs->buf, &rs->buf_size, 0);
3435 p = rs->buf;
3436 if (*p == 'E')
3437 error (_("Remote failure reply: %s"), p);
3438
3439 old_chain = make_cleanup (free_current_marker, &marker);
3440
3441 while (*p++ == 'm')
3442 {
3443 if (marker == NULL)
3444 marker = XCNEW (struct static_tracepoint_marker);
3445
3446 do
3447 {
3448 parse_static_tracepoint_marker_definition (p, &p, marker);
3449
3450 if (strid == NULL || strcmp (strid, marker->str_id) == 0)
3451 {
3452 VEC_safe_push (static_tracepoint_marker_p,
3453 markers, marker);
3454 marker = NULL;
3455 }
3456 else
3457 {
3458 release_static_tracepoint_marker (marker);
3459 memset (marker, 0, sizeof (*marker));
3460 }
3461 }
3462 while (*p++ == ','); /* comma-separated list */
3463 /* Ask for another packet of static tracepoint definition. */
3464 putpkt ("qTsSTM");
3465 getpkt (&rs->buf, &rs->buf_size, 0);
3466 p = rs->buf;
3467 }
3468
3469 do_cleanups (old_chain);
3470 return markers;
3471 }
3472
3473 \f
3474 /* Implement the to_get_ada_task_ptid function for the remote targets. */
3475
3476 static ptid_t
3477 remote_get_ada_task_ptid (struct target_ops *self, long lwp, long thread)
3478 {
3479 return ptid_build (ptid_get_pid (inferior_ptid), lwp, 0);
3480 }
3481 \f
3482
3483 /* Restart the remote side; this is an extended protocol operation. */
3484
3485 static void
3486 extended_remote_restart (void)
3487 {
3488 struct remote_state *rs = get_remote_state ();
3489
3490 /* Send the restart command; for reasons I don't understand the
3491 remote side really expects a number after the "R". */
3492 xsnprintf (rs->buf, get_remote_packet_size (), "R%x", 0);
3493 putpkt (rs->buf);
3494
3495 remote_fileio_reset ();
3496 }
3497 \f
3498 /* Clean up connection to a remote debugger. */
3499
3500 static void
3501 remote_close (struct target_ops *self)
3502 {
3503 struct remote_state *rs = get_remote_state ();
3504
3505 if (rs->remote_desc == NULL)
3506 return; /* already closed */
3507
3508 /* Make sure we leave stdin registered in the event loop. */
3509 remote_terminal_ours (self);
3510
3511 serial_close (rs->remote_desc);
3512 rs->remote_desc = NULL;
3513
3514 /* We don't have a connection to the remote stub anymore. Get rid
3515 of all the inferiors and their threads we were controlling.
3516 Reset inferior_ptid to null_ptid first, as otherwise has_stack_frame
3517 will be unable to find the thread corresponding to (pid, 0, 0). */
3518 inferior_ptid = null_ptid;
3519 discard_all_inferiors ();
3520
3521 /* We are closing the remote target, so we should discard
3522 everything of this target. */
3523 discard_pending_stop_replies_in_queue (rs);
3524
3525 if (remote_async_inferior_event_token)
3526 delete_async_event_handler (&remote_async_inferior_event_token);
3527
3528 remote_notif_state_xfree (rs->notif_state);
3529
3530 trace_reset_local_state ();
3531 }
3532
3533 /* Query the remote side for the text, data and bss offsets. */
3534
3535 static void
3536 get_offsets (void)
3537 {
3538 struct remote_state *rs = get_remote_state ();
3539 char *buf;
3540 char *ptr;
3541 int lose, num_segments = 0, do_sections, do_segments;
3542 CORE_ADDR text_addr, data_addr, bss_addr, segments[2];
3543 struct section_offsets *offs;
3544 struct symfile_segment_data *data;
3545
3546 if (symfile_objfile == NULL)
3547 return;
3548
3549 putpkt ("qOffsets");
3550 getpkt (&rs->buf, &rs->buf_size, 0);
3551 buf = rs->buf;
3552
3553 if (buf[0] == '\000')
3554 return; /* Return silently. Stub doesn't support
3555 this command. */
3556 if (buf[0] == 'E')
3557 {
3558 warning (_("Remote failure reply: %s"), buf);
3559 return;
3560 }
3561
3562 /* Pick up each field in turn. This used to be done with scanf, but
3563 scanf will make trouble if CORE_ADDR size doesn't match
3564 conversion directives correctly. The following code will work
3565 with any size of CORE_ADDR. */
3566 text_addr = data_addr = bss_addr = 0;
3567 ptr = buf;
3568 lose = 0;
3569
3570 if (startswith (ptr, "Text="))
3571 {
3572 ptr += 5;
3573 /* Don't use strtol, could lose on big values. */
3574 while (*ptr && *ptr != ';')
3575 text_addr = (text_addr << 4) + fromhex (*ptr++);
3576
3577 if (startswith (ptr, ";Data="))
3578 {
3579 ptr += 6;
3580 while (*ptr && *ptr != ';')
3581 data_addr = (data_addr << 4) + fromhex (*ptr++);
3582 }
3583 else
3584 lose = 1;
3585
3586 if (!lose && startswith (ptr, ";Bss="))
3587 {
3588 ptr += 5;
3589 while (*ptr && *ptr != ';')
3590 bss_addr = (bss_addr << 4) + fromhex (*ptr++);
3591
3592 if (bss_addr != data_addr)
3593 warning (_("Target reported unsupported offsets: %s"), buf);
3594 }
3595 else
3596 lose = 1;
3597 }
3598 else if (startswith (ptr, "TextSeg="))
3599 {
3600 ptr += 8;
3601 /* Don't use strtol, could lose on big values. */
3602 while (*ptr && *ptr != ';')
3603 text_addr = (text_addr << 4) + fromhex (*ptr++);
3604 num_segments = 1;
3605
3606 if (startswith (ptr, ";DataSeg="))
3607 {
3608 ptr += 9;
3609 while (*ptr && *ptr != ';')
3610 data_addr = (data_addr << 4) + fromhex (*ptr++);
3611 num_segments++;
3612 }
3613 }
3614 else
3615 lose = 1;
3616
3617 if (lose)
3618 error (_("Malformed response to offset query, %s"), buf);
3619 else if (*ptr != '\0')
3620 warning (_("Target reported unsupported offsets: %s"), buf);
3621
3622 offs = ((struct section_offsets *)
3623 alloca (SIZEOF_N_SECTION_OFFSETS (symfile_objfile->num_sections)));
3624 memcpy (offs, symfile_objfile->section_offsets,
3625 SIZEOF_N_SECTION_OFFSETS (symfile_objfile->num_sections));
3626
3627 data = get_symfile_segment_data (symfile_objfile->obfd);
3628 do_segments = (data != NULL);
3629 do_sections = num_segments == 0;
3630
3631 if (num_segments > 0)
3632 {
3633 segments[0] = text_addr;
3634 segments[1] = data_addr;
3635 }
3636 /* If we have two segments, we can still try to relocate everything
3637 by assuming that the .text and .data offsets apply to the whole
3638 text and data segments. Convert the offsets given in the packet
3639 to base addresses for symfile_map_offsets_to_segments. */
3640 else if (data && data->num_segments == 2)
3641 {
3642 segments[0] = data->segment_bases[0] + text_addr;
3643 segments[1] = data->segment_bases[1] + data_addr;
3644 num_segments = 2;
3645 }
3646 /* If the object file has only one segment, assume that it is text
3647 rather than data; main programs with no writable data are rare,
3648 but programs with no code are useless. Of course the code might
3649 have ended up in the data segment... to detect that we would need
3650 the permissions here. */
3651 else if (data && data->num_segments == 1)
3652 {
3653 segments[0] = data->segment_bases[0] + text_addr;
3654 num_segments = 1;
3655 }
3656 /* There's no way to relocate by segment. */
3657 else
3658 do_segments = 0;
3659
3660 if (do_segments)
3661 {
3662 int ret = symfile_map_offsets_to_segments (symfile_objfile->obfd, data,
3663 offs, num_segments, segments);
3664
3665 if (ret == 0 && !do_sections)
3666 error (_("Can not handle qOffsets TextSeg "
3667 "response with this symbol file"));
3668
3669 if (ret > 0)
3670 do_sections = 0;
3671 }
3672
3673 if (data)
3674 free_symfile_segment_data (data);
3675
3676 if (do_sections)
3677 {
3678 offs->offsets[SECT_OFF_TEXT (symfile_objfile)] = text_addr;
3679
3680 /* This is a temporary kludge to force data and bss to use the
3681 same offsets because that's what nlmconv does now. The real
3682 solution requires changes to the stub and remote.c that I
3683 don't have time to do right now. */
3684
3685 offs->offsets[SECT_OFF_DATA (symfile_objfile)] = data_addr;
3686 offs->offsets[SECT_OFF_BSS (symfile_objfile)] = data_addr;
3687 }
3688
3689 objfile_relocate (symfile_objfile, offs);
3690 }
3691
3692 /* Send interrupt_sequence to remote target. */
3693 static void
3694 send_interrupt_sequence (void)
3695 {
3696 struct remote_state *rs = get_remote_state ();
3697
3698 if (interrupt_sequence_mode == interrupt_sequence_control_c)
3699 remote_serial_write ("\x03", 1);
3700 else if (interrupt_sequence_mode == interrupt_sequence_break)
3701 serial_send_break (rs->remote_desc);
3702 else if (interrupt_sequence_mode == interrupt_sequence_break_g)
3703 {
3704 serial_send_break (rs->remote_desc);
3705 remote_serial_write ("g", 1);
3706 }
3707 else
3708 internal_error (__FILE__, __LINE__,
3709 _("Invalid value for interrupt_sequence_mode: %s."),
3710 interrupt_sequence_mode);
3711 }
3712
3713
3714 /* If STOP_REPLY is a T stop reply, look for the "thread" register,
3715 and extract the PTID. Returns NULL_PTID if not found. */
3716
3717 static ptid_t
3718 stop_reply_extract_thread (char *stop_reply)
3719 {
3720 if (stop_reply[0] == 'T' && strlen (stop_reply) > 3)
3721 {
3722 char *p;
3723
3724 /* Txx r:val ; r:val (...) */
3725 p = &stop_reply[3];
3726
3727 /* Look for "register" named "thread". */
3728 while (*p != '\0')
3729 {
3730 char *p1;
3731
3732 p1 = strchr (p, ':');
3733 if (p1 == NULL)
3734 return null_ptid;
3735
3736 if (strncmp (p, "thread", p1 - p) == 0)
3737 return read_ptid (++p1, &p);
3738
3739 p1 = strchr (p, ';');
3740 if (p1 == NULL)
3741 return null_ptid;
3742 p1++;
3743
3744 p = p1;
3745 }
3746 }
3747
3748 return null_ptid;
3749 }
3750
3751 /* Determine the remote side's current thread. If we have a stop
3752 reply handy (in WAIT_STATUS), maybe it's a T stop reply with a
3753 "thread" register we can extract the current thread from. If not,
3754 ask the remote which is the current thread with qC. The former
3755 method avoids a roundtrip. */
3756
3757 static ptid_t
3758 get_current_thread (char *wait_status)
3759 {
3760 ptid_t ptid = null_ptid;
3761
3762 /* Note we don't use remote_parse_stop_reply as that makes use of
3763 the target architecture, which we haven't yet fully determined at
3764 this point. */
3765 if (wait_status != NULL)
3766 ptid = stop_reply_extract_thread (wait_status);
3767 if (ptid_equal (ptid, null_ptid))
3768 ptid = remote_current_thread (inferior_ptid);
3769
3770 return ptid;
3771 }
3772
3773 /* Query the remote target for which is the current thread/process,
3774 add it to our tables, and update INFERIOR_PTID. The caller is
3775 responsible for setting the state such that the remote end is ready
3776 to return the current thread.
3777
3778 This function is called after handling the '?' or 'vRun' packets,
3779 whose response is a stop reply from which we can also try
3780 extracting the thread. If the target doesn't support the explicit
3781 qC query, we infer the current thread from that stop reply, passed
3782 in in WAIT_STATUS, which may be NULL. */
3783
3784 static void
3785 add_current_inferior_and_thread (char *wait_status)
3786 {
3787 struct remote_state *rs = get_remote_state ();
3788 int fake_pid_p = 0;
3789 ptid_t ptid;
3790
3791 inferior_ptid = null_ptid;
3792
3793 /* Now, if we have thread information, update inferior_ptid. */
3794 ptid = get_current_thread (wait_status);
3795
3796 if (!ptid_equal (ptid, null_ptid))
3797 {
3798 if (!remote_multi_process_p (rs))
3799 fake_pid_p = 1;
3800
3801 inferior_ptid = ptid;
3802 }
3803 else
3804 {
3805 /* Without this, some commands which require an active target
3806 (such as kill) won't work. This variable serves (at least)
3807 double duty as both the pid of the target process (if it has
3808 such), and as a flag indicating that a target is active. */
3809 inferior_ptid = magic_null_ptid;
3810 fake_pid_p = 1;
3811 }
3812
3813 remote_add_inferior (fake_pid_p, ptid_get_pid (inferior_ptid), -1, 1);
3814
3815 /* Add the main thread. */
3816 add_thread_silent (inferior_ptid);
3817 }
3818
3819 /* Print info about a thread that was found already stopped on
3820 connection. */
3821
3822 static void
3823 print_one_stopped_thread (struct thread_info *thread)
3824 {
3825 struct target_waitstatus *ws = &thread->suspend.waitstatus;
3826
3827 switch_to_thread (thread->ptid);
3828 stop_pc = get_frame_pc (get_current_frame ());
3829 set_current_sal_from_frame (get_current_frame ());
3830
3831 thread->suspend.waitstatus_pending_p = 0;
3832
3833 if (ws->kind == TARGET_WAITKIND_STOPPED)
3834 {
3835 enum gdb_signal sig = ws->value.sig;
3836
3837 if (signal_print_state (sig))
3838 observer_notify_signal_received (sig);
3839 }
3840 observer_notify_normal_stop (NULL, 1);
3841 }
3842
3843 /* Process all initial stop replies the remote side sent in response
3844 to the ? packet. These indicate threads that were already stopped
3845 on initial connection. We mark these threads as stopped and print
3846 their current frame before giving the user the prompt. */
3847
3848 static void
3849 process_initial_stop_replies (int from_tty)
3850 {
3851 int pending_stop_replies = stop_reply_queue_length ();
3852 struct inferior *inf;
3853 struct thread_info *thread;
3854 struct thread_info *selected = NULL;
3855 struct thread_info *lowest_stopped = NULL;
3856 struct thread_info *first = NULL;
3857
3858 /* Consume the initial pending events. */
3859 while (pending_stop_replies-- > 0)
3860 {
3861 ptid_t waiton_ptid = minus_one_ptid;
3862 ptid_t event_ptid;
3863 struct target_waitstatus ws;
3864 int ignore_event = 0;
3865 struct thread_info *thread;
3866
3867 memset (&ws, 0, sizeof (ws));
3868 event_ptid = target_wait (waiton_ptid, &ws, TARGET_WNOHANG);
3869 if (remote_debug)
3870 print_target_wait_results (waiton_ptid, event_ptid, &ws);
3871
3872 switch (ws.kind)
3873 {
3874 case TARGET_WAITKIND_IGNORE:
3875 case TARGET_WAITKIND_NO_RESUMED:
3876 case TARGET_WAITKIND_SIGNALLED:
3877 case TARGET_WAITKIND_EXITED:
3878 /* We shouldn't see these, but if we do, just ignore. */
3879 if (remote_debug)
3880 fprintf_unfiltered (gdb_stdlog, "remote: event ignored\n");
3881 ignore_event = 1;
3882 break;
3883
3884 case TARGET_WAITKIND_EXECD:
3885 xfree (ws.value.execd_pathname);
3886 break;
3887 default:
3888 break;
3889 }
3890
3891 if (ignore_event)
3892 continue;
3893
3894 thread = find_thread_ptid (event_ptid);
3895
3896 if (ws.kind == TARGET_WAITKIND_STOPPED)
3897 {
3898 enum gdb_signal sig = ws.value.sig;
3899
3900 /* Stubs traditionally report SIGTRAP as initial signal,
3901 instead of signal 0. Suppress it. */
3902 if (sig == GDB_SIGNAL_TRAP)
3903 sig = GDB_SIGNAL_0;
3904 thread->suspend.stop_signal = sig;
3905 ws.value.sig = sig;
3906 }
3907
3908 thread->suspend.waitstatus = ws;
3909
3910 if (ws.kind != TARGET_WAITKIND_STOPPED
3911 || ws.value.sig != GDB_SIGNAL_0)
3912 thread->suspend.waitstatus_pending_p = 1;
3913
3914 set_executing (event_ptid, 0);
3915 set_running (event_ptid, 0);
3916 }
3917
3918 /* "Notice" the new inferiors before anything related to
3919 registers/memory. */
3920 ALL_INFERIORS (inf)
3921 {
3922 if (inf->pid == 0)
3923 continue;
3924
3925 inf->needs_setup = 1;
3926
3927 if (non_stop)
3928 {
3929 thread = any_live_thread_of_process (inf->pid);
3930 notice_new_inferior (thread->ptid,
3931 thread->state == THREAD_RUNNING,
3932 from_tty);
3933 }
3934 }
3935
3936 /* If all-stop on top of non-stop, pause all threads. Note this
3937 records the threads' stop pc, so must be done after "noticing"
3938 the inferiors. */
3939 if (!non_stop)
3940 {
3941 stop_all_threads ();
3942
3943 /* If all threads of an inferior were already stopped, we
3944 haven't setup the inferior yet. */
3945 ALL_INFERIORS (inf)
3946 {
3947 if (inf->pid == 0)
3948 continue;
3949
3950 if (inf->needs_setup)
3951 {
3952 thread = any_live_thread_of_process (inf->pid);
3953 switch_to_thread_no_regs (thread);
3954 setup_inferior (0);
3955 }
3956 }
3957 }
3958
3959 /* Now go over all threads that are stopped, and print their current
3960 frame. If all-stop, then if there's a signalled thread, pick
3961 that as current. */
3962 ALL_NON_EXITED_THREADS (thread)
3963 {
3964 if (first == NULL)
3965 first = thread;
3966
3967 if (!non_stop)
3968 set_running (thread->ptid, 0);
3969 else if (thread->state != THREAD_STOPPED)
3970 continue;
3971
3972 if (selected == NULL
3973 && thread->suspend.waitstatus_pending_p)
3974 selected = thread;
3975
3976 if (lowest_stopped == NULL
3977 || thread->inf->num < lowest_stopped->inf->num
3978 || thread->per_inf_num < lowest_stopped->per_inf_num)
3979 lowest_stopped = thread;
3980
3981 if (non_stop)
3982 print_one_stopped_thread (thread);
3983 }
3984
3985 /* In all-stop, we only print the status of one thread, and leave
3986 others with their status pending. */
3987 if (!non_stop)
3988 {
3989 thread = selected;
3990 if (thread == NULL)
3991 thread = lowest_stopped;
3992 if (thread == NULL)
3993 thread = first;
3994
3995 print_one_stopped_thread (thread);
3996 }
3997
3998 /* For "info program". */
3999 thread = inferior_thread ();
4000 if (thread->state == THREAD_STOPPED)
4001 set_last_target_status (inferior_ptid, thread->suspend.waitstatus);
4002 }
4003
4004 /* Start the remote connection and sync state. */
4005
4006 static void
4007 remote_start_remote (int from_tty, struct target_ops *target, int extended_p)
4008 {
4009 struct remote_state *rs = get_remote_state ();
4010 struct packet_config *noack_config;
4011 char *wait_status = NULL;
4012
4013 /* Signal other parts that we're going through the initial setup,
4014 and so things may not be stable yet. E.g., we don't try to
4015 install tracepoints until we've relocated symbols. Also, a
4016 Ctrl-C before we're connected and synced up can't interrupt the
4017 target. Instead, it offers to drop the (potentially wedged)
4018 connection. */
4019 rs->starting_up = 1;
4020
4021 QUIT;
4022
4023 if (interrupt_on_connect)
4024 send_interrupt_sequence ();
4025
4026 /* Ack any packet which the remote side has already sent. */
4027 remote_serial_write ("+", 1);
4028
4029 /* The first packet we send to the target is the optional "supported
4030 packets" request. If the target can answer this, it will tell us
4031 which later probes to skip. */
4032 remote_query_supported ();
4033
4034 /* If the stub wants to get a QAllow, compose one and send it. */
4035 if (packet_support (PACKET_QAllow) != PACKET_DISABLE)
4036 remote_set_permissions (target);
4037
4038 /* gdbserver < 7.7 (before its fix from 2013-12-11) did reply to any
4039 unknown 'v' packet with string "OK". "OK" gets interpreted by GDB
4040 as a reply to known packet. For packet "vFile:setfs:" it is an
4041 invalid reply and GDB would return error in
4042 remote_hostio_set_filesystem, making remote files access impossible.
4043 Disable "vFile:setfs:" in such case. Do not disable other 'v' packets as
4044 other "vFile" packets get correctly detected even on gdbserver < 7.7. */
4045 {
4046 const char v_mustreplyempty[] = "vMustReplyEmpty";
4047
4048 putpkt (v_mustreplyempty);
4049 getpkt (&rs->buf, &rs->buf_size, 0);
4050 if (strcmp (rs->buf, "OK") == 0)
4051 remote_protocol_packets[PACKET_vFile_setfs].support = PACKET_DISABLE;
4052 else if (strcmp (rs->buf, "") != 0)
4053 error (_("Remote replied unexpectedly to '%s': %s"), v_mustreplyempty,
4054 rs->buf);
4055 }
4056
4057 /* Next, we possibly activate noack mode.
4058
4059 If the QStartNoAckMode packet configuration is set to AUTO,
4060 enable noack mode if the stub reported a wish for it with
4061 qSupported.
4062
4063 If set to TRUE, then enable noack mode even if the stub didn't
4064 report it in qSupported. If the stub doesn't reply OK, the
4065 session ends with an error.
4066
4067 If FALSE, then don't activate noack mode, regardless of what the
4068 stub claimed should be the default with qSupported. */
4069
4070 noack_config = &remote_protocol_packets[PACKET_QStartNoAckMode];
4071 if (packet_config_support (noack_config) != PACKET_DISABLE)
4072 {
4073 putpkt ("QStartNoAckMode");
4074 getpkt (&rs->buf, &rs->buf_size, 0);
4075 if (packet_ok (rs->buf, noack_config) == PACKET_OK)
4076 rs->noack_mode = 1;
4077 }
4078
4079 if (extended_p)
4080 {
4081 /* Tell the remote that we are using the extended protocol. */
4082 putpkt ("!");
4083 getpkt (&rs->buf, &rs->buf_size, 0);
4084 }
4085
4086 /* Let the target know which signals it is allowed to pass down to
4087 the program. */
4088 update_signals_program_target ();
4089
4090 /* Next, if the target can specify a description, read it. We do
4091 this before anything involving memory or registers. */
4092 target_find_description ();
4093
4094 /* Next, now that we know something about the target, update the
4095 address spaces in the program spaces. */
4096 update_address_spaces ();
4097
4098 /* On OSs where the list of libraries is global to all
4099 processes, we fetch them early. */
4100 if (gdbarch_has_global_solist (target_gdbarch ()))
4101 solib_add (NULL, from_tty, target, auto_solib_add);
4102
4103 if (target_is_non_stop_p ())
4104 {
4105 if (packet_support (PACKET_QNonStop) != PACKET_ENABLE)
4106 error (_("Non-stop mode requested, but remote "
4107 "does not support non-stop"));
4108
4109 putpkt ("QNonStop:1");
4110 getpkt (&rs->buf, &rs->buf_size, 0);
4111
4112 if (strcmp (rs->buf, "OK") != 0)
4113 error (_("Remote refused setting non-stop mode with: %s"), rs->buf);
4114
4115 /* Find about threads and processes the stub is already
4116 controlling. We default to adding them in the running state.
4117 The '?' query below will then tell us about which threads are
4118 stopped. */
4119 remote_update_thread_list (target);
4120 }
4121 else if (packet_support (PACKET_QNonStop) == PACKET_ENABLE)
4122 {
4123 /* Don't assume that the stub can operate in all-stop mode.
4124 Request it explicitly. */
4125 putpkt ("QNonStop:0");
4126 getpkt (&rs->buf, &rs->buf_size, 0);
4127
4128 if (strcmp (rs->buf, "OK") != 0)
4129 error (_("Remote refused setting all-stop mode with: %s"), rs->buf);
4130 }
4131
4132 /* Upload TSVs regardless of whether the target is running or not. The
4133 remote stub, such as GDBserver, may have some predefined or builtin
4134 TSVs, even if the target is not running. */
4135 if (remote_get_trace_status (target, current_trace_status ()) != -1)
4136 {
4137 struct uploaded_tsv *uploaded_tsvs = NULL;
4138
4139 remote_upload_trace_state_variables (target, &uploaded_tsvs);
4140 merge_uploaded_trace_state_variables (&uploaded_tsvs);
4141 }
4142
4143 /* Check whether the target is running now. */
4144 putpkt ("?");
4145 getpkt (&rs->buf, &rs->buf_size, 0);
4146
4147 if (!target_is_non_stop_p ())
4148 {
4149 if (rs->buf[0] == 'W' || rs->buf[0] == 'X')
4150 {
4151 if (!extended_p)
4152 error (_("The target is not running (try extended-remote?)"));
4153
4154 /* We're connected, but not running. Drop out before we
4155 call start_remote. */
4156 rs->starting_up = 0;
4157 return;
4158 }
4159 else
4160 {
4161 /* Save the reply for later. */
4162 wait_status = (char *) alloca (strlen (rs->buf) + 1);
4163 strcpy (wait_status, rs->buf);
4164 }
4165
4166 /* Fetch thread list. */
4167 target_update_thread_list ();
4168
4169 /* Let the stub know that we want it to return the thread. */
4170 set_continue_thread (minus_one_ptid);
4171
4172 if (thread_count () == 0)
4173 {
4174 /* Target has no concept of threads at all. GDB treats
4175 non-threaded target as single-threaded; add a main
4176 thread. */
4177 add_current_inferior_and_thread (wait_status);
4178 }
4179 else
4180 {
4181 /* We have thread information; select the thread the target
4182 says should be current. If we're reconnecting to a
4183 multi-threaded program, this will ideally be the thread
4184 that last reported an event before GDB disconnected. */
4185 inferior_ptid = get_current_thread (wait_status);
4186 if (ptid_equal (inferior_ptid, null_ptid))
4187 {
4188 /* Odd... The target was able to list threads, but not
4189 tell us which thread was current (no "thread"
4190 register in T stop reply?). Just pick the first
4191 thread in the thread list then. */
4192
4193 if (remote_debug)
4194 fprintf_unfiltered (gdb_stdlog,
4195 "warning: couldn't determine remote "
4196 "current thread; picking first in list.\n");
4197
4198 inferior_ptid = thread_list->ptid;
4199 }
4200 }
4201
4202 /* init_wait_for_inferior should be called before get_offsets in order
4203 to manage `inserted' flag in bp loc in a correct state.
4204 breakpoint_init_inferior, called from init_wait_for_inferior, set
4205 `inserted' flag to 0, while before breakpoint_re_set, called from
4206 start_remote, set `inserted' flag to 1. In the initialization of
4207 inferior, breakpoint_init_inferior should be called first, and then
4208 breakpoint_re_set can be called. If this order is broken, state of
4209 `inserted' flag is wrong, and cause some problems on breakpoint
4210 manipulation. */
4211 init_wait_for_inferior ();
4212
4213 get_offsets (); /* Get text, data & bss offsets. */
4214
4215 /* If we could not find a description using qXfer, and we know
4216 how to do it some other way, try again. This is not
4217 supported for non-stop; it could be, but it is tricky if
4218 there are no stopped threads when we connect. */
4219 if (remote_read_description_p (target)
4220 && gdbarch_target_desc (target_gdbarch ()) == NULL)
4221 {
4222 target_clear_description ();
4223 target_find_description ();
4224 }
4225
4226 /* Use the previously fetched status. */
4227 gdb_assert (wait_status != NULL);
4228 strcpy (rs->buf, wait_status);
4229 rs->cached_wait_status = 1;
4230
4231 start_remote (from_tty); /* Initialize gdb process mechanisms. */
4232 }
4233 else
4234 {
4235 /* Clear WFI global state. Do this before finding about new
4236 threads and inferiors, and setting the current inferior.
4237 Otherwise we would clear the proceed status of the current
4238 inferior when we want its stop_soon state to be preserved
4239 (see notice_new_inferior). */
4240 init_wait_for_inferior ();
4241
4242 /* In non-stop, we will either get an "OK", meaning that there
4243 are no stopped threads at this time; or, a regular stop
4244 reply. In the latter case, there may be more than one thread
4245 stopped --- we pull them all out using the vStopped
4246 mechanism. */
4247 if (strcmp (rs->buf, "OK") != 0)
4248 {
4249 struct notif_client *notif = &notif_client_stop;
4250
4251 /* remote_notif_get_pending_replies acks this one, and gets
4252 the rest out. */
4253 rs->notif_state->pending_event[notif_client_stop.id]
4254 = remote_notif_parse (notif, rs->buf);
4255 remote_notif_get_pending_events (notif);
4256 }
4257
4258 if (thread_count () == 0)
4259 {
4260 if (!extended_p)
4261 error (_("The target is not running (try extended-remote?)"));
4262
4263 /* We're connected, but not running. Drop out before we
4264 call start_remote. */
4265 rs->starting_up = 0;
4266 return;
4267 }
4268
4269 /* In non-stop mode, any cached wait status will be stored in
4270 the stop reply queue. */
4271 gdb_assert (wait_status == NULL);
4272
4273 /* Report all signals during attach/startup. */
4274 remote_pass_signals (target, 0, NULL);
4275
4276 /* If there are already stopped threads, mark them stopped and
4277 report their stops before giving the prompt to the user. */
4278 process_initial_stop_replies (from_tty);
4279
4280 if (target_can_async_p ())
4281 target_async (1);
4282 }
4283
4284 /* If we connected to a live target, do some additional setup. */
4285 if (target_has_execution)
4286 {
4287 if (symfile_objfile) /* No use without a symbol-file. */
4288 remote_check_symbols ();
4289 }
4290
4291 /* Possibly the target has been engaged in a trace run started
4292 previously; find out where things are at. */
4293 if (remote_get_trace_status (target, current_trace_status ()) != -1)
4294 {
4295 struct uploaded_tp *uploaded_tps = NULL;
4296
4297 if (current_trace_status ()->running)
4298 printf_filtered (_("Trace is already running on the target.\n"));
4299
4300 remote_upload_tracepoints (target, &uploaded_tps);
4301
4302 merge_uploaded_tracepoints (&uploaded_tps);
4303 }
4304
4305 /* Possibly the target has been engaged in a btrace record started
4306 previously; find out where things are at. */
4307 remote_btrace_maybe_reopen ();
4308
4309 /* The thread and inferior lists are now synchronized with the
4310 target, our symbols have been relocated, and we're merged the
4311 target's tracepoints with ours. We're done with basic start
4312 up. */
4313 rs->starting_up = 0;
4314
4315 /* Maybe breakpoints are global and need to be inserted now. */
4316 if (breakpoints_should_be_inserted_now ())
4317 insert_breakpoints ();
4318 }
4319
4320 /* Open a connection to a remote debugger.
4321 NAME is the filename used for communication. */
4322
4323 static void
4324 remote_open (const char *name, int from_tty)
4325 {
4326 remote_open_1 (name, from_tty, &remote_ops, 0);
4327 }
4328
4329 /* Open a connection to a remote debugger using the extended
4330 remote gdb protocol. NAME is the filename used for communication. */
4331
4332 static void
4333 extended_remote_open (const char *name, int from_tty)
4334 {
4335 remote_open_1 (name, from_tty, &extended_remote_ops, 1 /*extended_p */);
4336 }
4337
4338 /* Reset all packets back to "unknown support". Called when opening a
4339 new connection to a remote target. */
4340
4341 static void
4342 reset_all_packet_configs_support (void)
4343 {
4344 int i;
4345
4346 for (i = 0; i < PACKET_MAX; i++)
4347 remote_protocol_packets[i].support = PACKET_SUPPORT_UNKNOWN;
4348 }
4349
4350 /* Initialize all packet configs. */
4351
4352 static void
4353 init_all_packet_configs (void)
4354 {
4355 int i;
4356
4357 for (i = 0; i < PACKET_MAX; i++)
4358 {
4359 remote_protocol_packets[i].detect = AUTO_BOOLEAN_AUTO;
4360 remote_protocol_packets[i].support = PACKET_SUPPORT_UNKNOWN;
4361 }
4362 }
4363
4364 /* Symbol look-up. */
4365
4366 static void
4367 remote_check_symbols (void)
4368 {
4369 struct remote_state *rs = get_remote_state ();
4370 char *msg, *reply, *tmp;
4371 int end;
4372 long reply_size;
4373 struct cleanup *old_chain;
4374
4375 /* The remote side has no concept of inferiors that aren't running
4376 yet, it only knows about running processes. If we're connected
4377 but our current inferior is not running, we should not invite the
4378 remote target to request symbol lookups related to its
4379 (unrelated) current process. */
4380 if (!target_has_execution)
4381 return;
4382
4383 if (packet_support (PACKET_qSymbol) == PACKET_DISABLE)
4384 return;
4385
4386 /* Make sure the remote is pointing at the right process. Note
4387 there's no way to select "no process". */
4388 set_general_process ();
4389
4390 /* Allocate a message buffer. We can't reuse the input buffer in RS,
4391 because we need both at the same time. */
4392 msg = (char *) xmalloc (get_remote_packet_size ());
4393 old_chain = make_cleanup (xfree, msg);
4394 reply = (char *) xmalloc (get_remote_packet_size ());
4395 make_cleanup (free_current_contents, &reply);
4396 reply_size = get_remote_packet_size ();
4397
4398 /* Invite target to request symbol lookups. */
4399
4400 putpkt ("qSymbol::");
4401 getpkt (&reply, &reply_size, 0);
4402 packet_ok (reply, &remote_protocol_packets[PACKET_qSymbol]);
4403
4404 while (startswith (reply, "qSymbol:"))
4405 {
4406 struct bound_minimal_symbol sym;
4407
4408 tmp = &reply[8];
4409 end = hex2bin (tmp, (gdb_byte *) msg, strlen (tmp) / 2);
4410 msg[end] = '\0';
4411 sym = lookup_minimal_symbol (msg, NULL, NULL);
4412 if (sym.minsym == NULL)
4413 xsnprintf (msg, get_remote_packet_size (), "qSymbol::%s", &reply[8]);
4414 else
4415 {
4416 int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
4417 CORE_ADDR sym_addr = BMSYMBOL_VALUE_ADDRESS (sym);
4418
4419 /* If this is a function address, return the start of code
4420 instead of any data function descriptor. */
4421 sym_addr = gdbarch_convert_from_func_ptr_addr (target_gdbarch (),
4422 sym_addr,
4423 &current_target);
4424
4425 xsnprintf (msg, get_remote_packet_size (), "qSymbol:%s:%s",
4426 phex_nz (sym_addr, addr_size), &reply[8]);
4427 }
4428
4429 putpkt (msg);
4430 getpkt (&reply, &reply_size, 0);
4431 }
4432
4433 do_cleanups (old_chain);
4434 }
4435
4436 static struct serial *
4437 remote_serial_open (const char *name)
4438 {
4439 static int udp_warning = 0;
4440
4441 /* FIXME: Parsing NAME here is a hack. But we want to warn here instead
4442 of in ser-tcp.c, because it is the remote protocol assuming that the
4443 serial connection is reliable and not the serial connection promising
4444 to be. */
4445 if (!udp_warning && startswith (name, "udp:"))
4446 {
4447 warning (_("The remote protocol may be unreliable over UDP.\n"
4448 "Some events may be lost, rendering further debugging "
4449 "impossible."));
4450 udp_warning = 1;
4451 }
4452
4453 return serial_open (name);
4454 }
4455
4456 /* Inform the target of our permission settings. The permission flags
4457 work without this, but if the target knows the settings, it can do
4458 a couple things. First, it can add its own check, to catch cases
4459 that somehow manage to get by the permissions checks in target
4460 methods. Second, if the target is wired to disallow particular
4461 settings (for instance, a system in the field that is not set up to
4462 be able to stop at a breakpoint), it can object to any unavailable
4463 permissions. */
4464
4465 void
4466 remote_set_permissions (struct target_ops *self)
4467 {
4468 struct remote_state *rs = get_remote_state ();
4469
4470 xsnprintf (rs->buf, get_remote_packet_size (), "QAllow:"
4471 "WriteReg:%x;WriteMem:%x;"
4472 "InsertBreak:%x;InsertTrace:%x;"
4473 "InsertFastTrace:%x;Stop:%x",
4474 may_write_registers, may_write_memory,
4475 may_insert_breakpoints, may_insert_tracepoints,
4476 may_insert_fast_tracepoints, may_stop);
4477 putpkt (rs->buf);
4478 getpkt (&rs->buf, &rs->buf_size, 0);
4479
4480 /* If the target didn't like the packet, warn the user. Do not try
4481 to undo the user's settings, that would just be maddening. */
4482 if (strcmp (rs->buf, "OK") != 0)
4483 warning (_("Remote refused setting permissions with: %s"), rs->buf);
4484 }
4485
4486 /* This type describes each known response to the qSupported
4487 packet. */
4488 struct protocol_feature
4489 {
4490 /* The name of this protocol feature. */
4491 const char *name;
4492
4493 /* The default for this protocol feature. */
4494 enum packet_support default_support;
4495
4496 /* The function to call when this feature is reported, or after
4497 qSupported processing if the feature is not supported.
4498 The first argument points to this structure. The second
4499 argument indicates whether the packet requested support be
4500 enabled, disabled, or probed (or the default, if this function
4501 is being called at the end of processing and this feature was
4502 not reported). The third argument may be NULL; if not NULL, it
4503 is a NUL-terminated string taken from the packet following
4504 this feature's name and an equals sign. */
4505 void (*func) (const struct protocol_feature *, enum packet_support,
4506 const char *);
4507
4508 /* The corresponding packet for this feature. Only used if
4509 FUNC is remote_supported_packet. */
4510 int packet;
4511 };
4512
4513 static void
4514 remote_supported_packet (const struct protocol_feature *feature,
4515 enum packet_support support,
4516 const char *argument)
4517 {
4518 if (argument)
4519 {
4520 warning (_("Remote qSupported response supplied an unexpected value for"
4521 " \"%s\"."), feature->name);
4522 return;
4523 }
4524
4525 remote_protocol_packets[feature->packet].support = support;
4526 }
4527
4528 static void
4529 remote_packet_size (const struct protocol_feature *feature,
4530 enum packet_support support, const char *value)
4531 {
4532 struct remote_state *rs = get_remote_state ();
4533
4534 int packet_size;
4535 char *value_end;
4536
4537 if (support != PACKET_ENABLE)
4538 return;
4539
4540 if (value == NULL || *value == '\0')
4541 {
4542 warning (_("Remote target reported \"%s\" without a size."),
4543 feature->name);
4544 return;
4545 }
4546
4547 errno = 0;
4548 packet_size = strtol (value, &value_end, 16);
4549 if (errno != 0 || *value_end != '\0' || packet_size < 0)
4550 {
4551 warning (_("Remote target reported \"%s\" with a bad size: \"%s\"."),
4552 feature->name, value);
4553 return;
4554 }
4555
4556 /* Record the new maximum packet size. */
4557 rs->explicit_packet_size = packet_size;
4558 }
4559
4560 static const struct protocol_feature remote_protocol_features[] = {
4561 { "PacketSize", PACKET_DISABLE, remote_packet_size, -1 },
4562 { "qXfer:auxv:read", PACKET_DISABLE, remote_supported_packet,
4563 PACKET_qXfer_auxv },
4564 { "qXfer:exec-file:read", PACKET_DISABLE, remote_supported_packet,
4565 PACKET_qXfer_exec_file },
4566 { "qXfer:features:read", PACKET_DISABLE, remote_supported_packet,
4567 PACKET_qXfer_features },
4568 { "qXfer:libraries:read", PACKET_DISABLE, remote_supported_packet,
4569 PACKET_qXfer_libraries },
4570 { "qXfer:libraries-svr4:read", PACKET_DISABLE, remote_supported_packet,
4571 PACKET_qXfer_libraries_svr4 },
4572 { "augmented-libraries-svr4-read", PACKET_DISABLE,
4573 remote_supported_packet, PACKET_augmented_libraries_svr4_read_feature },
4574 { "qXfer:memory-map:read", PACKET_DISABLE, remote_supported_packet,
4575 PACKET_qXfer_memory_map },
4576 { "qXfer:spu:read", PACKET_DISABLE, remote_supported_packet,
4577 PACKET_qXfer_spu_read },
4578 { "qXfer:spu:write", PACKET_DISABLE, remote_supported_packet,
4579 PACKET_qXfer_spu_write },
4580 { "qXfer:osdata:read", PACKET_DISABLE, remote_supported_packet,
4581 PACKET_qXfer_osdata },
4582 { "qXfer:threads:read", PACKET_DISABLE, remote_supported_packet,
4583 PACKET_qXfer_threads },
4584 { "qXfer:traceframe-info:read", PACKET_DISABLE, remote_supported_packet,
4585 PACKET_qXfer_traceframe_info },
4586 { "QPassSignals", PACKET_DISABLE, remote_supported_packet,
4587 PACKET_QPassSignals },
4588 { "QCatchSyscalls", PACKET_DISABLE, remote_supported_packet,
4589 PACKET_QCatchSyscalls },
4590 { "QProgramSignals", PACKET_DISABLE, remote_supported_packet,
4591 PACKET_QProgramSignals },
4592 { "QStartNoAckMode", PACKET_DISABLE, remote_supported_packet,
4593 PACKET_QStartNoAckMode },
4594 { "multiprocess", PACKET_DISABLE, remote_supported_packet,
4595 PACKET_multiprocess_feature },
4596 { "QNonStop", PACKET_DISABLE, remote_supported_packet, PACKET_QNonStop },
4597 { "qXfer:siginfo:read", PACKET_DISABLE, remote_supported_packet,
4598 PACKET_qXfer_siginfo_read },
4599 { "qXfer:siginfo:write", PACKET_DISABLE, remote_supported_packet,
4600 PACKET_qXfer_siginfo_write },
4601 { "ConditionalTracepoints", PACKET_DISABLE, remote_supported_packet,
4602 PACKET_ConditionalTracepoints },
4603 { "ConditionalBreakpoints", PACKET_DISABLE, remote_supported_packet,
4604 PACKET_ConditionalBreakpoints },
4605 { "BreakpointCommands", PACKET_DISABLE, remote_supported_packet,
4606 PACKET_BreakpointCommands },
4607 { "FastTracepoints", PACKET_DISABLE, remote_supported_packet,
4608 PACKET_FastTracepoints },
4609 { "StaticTracepoints", PACKET_DISABLE, remote_supported_packet,
4610 PACKET_StaticTracepoints },
4611 {"InstallInTrace", PACKET_DISABLE, remote_supported_packet,
4612 PACKET_InstallInTrace},
4613 { "DisconnectedTracing", PACKET_DISABLE, remote_supported_packet,
4614 PACKET_DisconnectedTracing_feature },
4615 { "ReverseContinue", PACKET_DISABLE, remote_supported_packet,
4616 PACKET_bc },
4617 { "ReverseStep", PACKET_DISABLE, remote_supported_packet,
4618 PACKET_bs },
4619 { "TracepointSource", PACKET_DISABLE, remote_supported_packet,
4620 PACKET_TracepointSource },
4621 { "QAllow", PACKET_DISABLE, remote_supported_packet,
4622 PACKET_QAllow },
4623 { "EnableDisableTracepoints", PACKET_DISABLE, remote_supported_packet,
4624 PACKET_EnableDisableTracepoints_feature },
4625 { "qXfer:fdpic:read", PACKET_DISABLE, remote_supported_packet,
4626 PACKET_qXfer_fdpic },
4627 { "qXfer:uib:read", PACKET_DISABLE, remote_supported_packet,
4628 PACKET_qXfer_uib },
4629 { "QDisableRandomization", PACKET_DISABLE, remote_supported_packet,
4630 PACKET_QDisableRandomization },
4631 { "QAgent", PACKET_DISABLE, remote_supported_packet, PACKET_QAgent},
4632 { "QTBuffer:size", PACKET_DISABLE,
4633 remote_supported_packet, PACKET_QTBuffer_size},
4634 { "tracenz", PACKET_DISABLE, remote_supported_packet, PACKET_tracenz_feature },
4635 { "Qbtrace:off", PACKET_DISABLE, remote_supported_packet, PACKET_Qbtrace_off },
4636 { "Qbtrace:bts", PACKET_DISABLE, remote_supported_packet, PACKET_Qbtrace_bts },
4637 { "Qbtrace:pt", PACKET_DISABLE, remote_supported_packet, PACKET_Qbtrace_pt },
4638 { "qXfer:btrace:read", PACKET_DISABLE, remote_supported_packet,
4639 PACKET_qXfer_btrace },
4640 { "qXfer:btrace-conf:read", PACKET_DISABLE, remote_supported_packet,
4641 PACKET_qXfer_btrace_conf },
4642 { "Qbtrace-conf:bts:size", PACKET_DISABLE, remote_supported_packet,
4643 PACKET_Qbtrace_conf_bts_size },
4644 { "swbreak", PACKET_DISABLE, remote_supported_packet, PACKET_swbreak_feature },
4645 { "hwbreak", PACKET_DISABLE, remote_supported_packet, PACKET_hwbreak_feature },
4646 { "fork-events", PACKET_DISABLE, remote_supported_packet,
4647 PACKET_fork_event_feature },
4648 { "vfork-events", PACKET_DISABLE, remote_supported_packet,
4649 PACKET_vfork_event_feature },
4650 { "exec-events", PACKET_DISABLE, remote_supported_packet,
4651 PACKET_exec_event_feature },
4652 { "Qbtrace-conf:pt:size", PACKET_DISABLE, remote_supported_packet,
4653 PACKET_Qbtrace_conf_pt_size },
4654 { "vContSupported", PACKET_DISABLE, remote_supported_packet, PACKET_vContSupported },
4655 { "QThreadEvents", PACKET_DISABLE, remote_supported_packet, PACKET_QThreadEvents },
4656 { "no-resumed", PACKET_DISABLE, remote_supported_packet, PACKET_no_resumed },
4657 };
4658
4659 static char *remote_support_xml;
4660
4661 /* Register string appended to "xmlRegisters=" in qSupported query. */
4662
4663 void
4664 register_remote_support_xml (const char *xml)
4665 {
4666 #if defined(HAVE_LIBEXPAT)
4667 if (remote_support_xml == NULL)
4668 remote_support_xml = concat ("xmlRegisters=", xml, (char *) NULL);
4669 else
4670 {
4671 char *copy = xstrdup (remote_support_xml + 13);
4672 char *p = strtok (copy, ",");
4673
4674 do
4675 {
4676 if (strcmp (p, xml) == 0)
4677 {
4678 /* already there */
4679 xfree (copy);
4680 return;
4681 }
4682 }
4683 while ((p = strtok (NULL, ",")) != NULL);
4684 xfree (copy);
4685
4686 remote_support_xml = reconcat (remote_support_xml,
4687 remote_support_xml, ",", xml,
4688 (char *) NULL);
4689 }
4690 #endif
4691 }
4692
4693 static char *
4694 remote_query_supported_append (char *msg, const char *append)
4695 {
4696 if (msg)
4697 return reconcat (msg, msg, ";", append, (char *) NULL);
4698 else
4699 return xstrdup (append);
4700 }
4701
4702 static void
4703 remote_query_supported (void)
4704 {
4705 struct remote_state *rs = get_remote_state ();
4706 char *next;
4707 int i;
4708 unsigned char seen [ARRAY_SIZE (remote_protocol_features)];
4709
4710 /* The packet support flags are handled differently for this packet
4711 than for most others. We treat an error, a disabled packet, and
4712 an empty response identically: any features which must be reported
4713 to be used will be automatically disabled. An empty buffer
4714 accomplishes this, since that is also the representation for a list
4715 containing no features. */
4716
4717 rs->buf[0] = 0;
4718 if (packet_support (PACKET_qSupported) != PACKET_DISABLE)
4719 {
4720 char *q = NULL;
4721 struct cleanup *old_chain = make_cleanup (free_current_contents, &q);
4722
4723 if (packet_set_cmd_state (PACKET_multiprocess_feature) != AUTO_BOOLEAN_FALSE)
4724 q = remote_query_supported_append (q, "multiprocess+");
4725
4726 if (packet_set_cmd_state (PACKET_swbreak_feature) != AUTO_BOOLEAN_FALSE)
4727 q = remote_query_supported_append (q, "swbreak+");
4728 if (packet_set_cmd_state (PACKET_hwbreak_feature) != AUTO_BOOLEAN_FALSE)
4729 q = remote_query_supported_append (q, "hwbreak+");
4730
4731 q = remote_query_supported_append (q, "qRelocInsn+");
4732
4733 if (packet_set_cmd_state (PACKET_fork_event_feature)
4734 != AUTO_BOOLEAN_FALSE)
4735 q = remote_query_supported_append (q, "fork-events+");
4736 if (packet_set_cmd_state (PACKET_vfork_event_feature)
4737 != AUTO_BOOLEAN_FALSE)
4738 q = remote_query_supported_append (q, "vfork-events+");
4739 if (packet_set_cmd_state (PACKET_exec_event_feature)
4740 != AUTO_BOOLEAN_FALSE)
4741 q = remote_query_supported_append (q, "exec-events+");
4742
4743 if (packet_set_cmd_state (PACKET_vContSupported) != AUTO_BOOLEAN_FALSE)
4744 q = remote_query_supported_append (q, "vContSupported+");
4745
4746 if (packet_set_cmd_state (PACKET_QThreadEvents) != AUTO_BOOLEAN_FALSE)
4747 q = remote_query_supported_append (q, "QThreadEvents+");
4748
4749 if (packet_set_cmd_state (PACKET_no_resumed) != AUTO_BOOLEAN_FALSE)
4750 q = remote_query_supported_append (q, "no-resumed+");
4751
4752 /* Keep this one last to work around a gdbserver <= 7.10 bug in
4753 the qSupported:xmlRegisters=i386 handling. */
4754 if (remote_support_xml != NULL)
4755 q = remote_query_supported_append (q, remote_support_xml);
4756
4757 q = reconcat (q, "qSupported:", q, (char *) NULL);
4758 putpkt (q);
4759
4760 do_cleanups (old_chain);
4761
4762 getpkt (&rs->buf, &rs->buf_size, 0);
4763
4764 /* If an error occured, warn, but do not return - just reset the
4765 buffer to empty and go on to disable features. */
4766 if (packet_ok (rs->buf, &remote_protocol_packets[PACKET_qSupported])
4767 == PACKET_ERROR)
4768 {
4769 warning (_("Remote failure reply: %s"), rs->buf);
4770 rs->buf[0] = 0;
4771 }
4772 }
4773
4774 memset (seen, 0, sizeof (seen));
4775
4776 next = rs->buf;
4777 while (*next)
4778 {
4779 enum packet_support is_supported;
4780 char *p, *end, *name_end, *value;
4781
4782 /* First separate out this item from the rest of the packet. If
4783 there's another item after this, we overwrite the separator
4784 (terminated strings are much easier to work with). */
4785 p = next;
4786 end = strchr (p, ';');
4787 if (end == NULL)
4788 {
4789 end = p + strlen (p);
4790 next = end;
4791 }
4792 else
4793 {
4794 *end = '\0';
4795 next = end + 1;
4796
4797 if (end == p)
4798 {
4799 warning (_("empty item in \"qSupported\" response"));
4800 continue;
4801 }
4802 }
4803
4804 name_end = strchr (p, '=');
4805 if (name_end)
4806 {
4807 /* This is a name=value entry. */
4808 is_supported = PACKET_ENABLE;
4809 value = name_end + 1;
4810 *name_end = '\0';
4811 }
4812 else
4813 {
4814 value = NULL;
4815 switch (end[-1])
4816 {
4817 case '+':
4818 is_supported = PACKET_ENABLE;
4819 break;
4820
4821 case '-':
4822 is_supported = PACKET_DISABLE;
4823 break;
4824
4825 case '?':
4826 is_supported = PACKET_SUPPORT_UNKNOWN;
4827 break;
4828
4829 default:
4830 warning (_("unrecognized item \"%s\" "
4831 "in \"qSupported\" response"), p);
4832 continue;
4833 }
4834 end[-1] = '\0';
4835 }
4836
4837 for (i = 0; i < ARRAY_SIZE (remote_protocol_features); i++)
4838 if (strcmp (remote_protocol_features[i].name, p) == 0)
4839 {
4840 const struct protocol_feature *feature;
4841
4842 seen[i] = 1;
4843 feature = &remote_protocol_features[i];
4844 feature->func (feature, is_supported, value);
4845 break;
4846 }
4847 }
4848
4849 /* If we increased the packet size, make sure to increase the global
4850 buffer size also. We delay this until after parsing the entire
4851 qSupported packet, because this is the same buffer we were
4852 parsing. */
4853 if (rs->buf_size < rs->explicit_packet_size)
4854 {
4855 rs->buf_size = rs->explicit_packet_size;
4856 rs->buf = (char *) xrealloc (rs->buf, rs->buf_size);
4857 }
4858
4859 /* Handle the defaults for unmentioned features. */
4860 for (i = 0; i < ARRAY_SIZE (remote_protocol_features); i++)
4861 if (!seen[i])
4862 {
4863 const struct protocol_feature *feature;
4864
4865 feature = &remote_protocol_features[i];
4866 feature->func (feature, feature->default_support, NULL);
4867 }
4868 }
4869
4870 /* Serial QUIT handler for the remote serial descriptor.
4871
4872 Defers handling a Ctrl-C until we're done with the current
4873 command/response packet sequence, unless:
4874
4875 - We're setting up the connection. Don't send a remote interrupt
4876 request, as we're not fully synced yet. Quit immediately
4877 instead.
4878
4879 - The target has been resumed in the foreground
4880 (target_terminal_is_ours is false) with a synchronous resume
4881 packet, and we're blocked waiting for the stop reply, thus a
4882 Ctrl-C should be immediately sent to the target.
4883
4884 - We get a second Ctrl-C while still within the same serial read or
4885 write. In that case the serial is seemingly wedged --- offer to
4886 quit/disconnect.
4887
4888 - We see a second Ctrl-C without target response, after having
4889 previously interrupted the target. In that case the target/stub
4890 is probably wedged --- offer to quit/disconnect.
4891 */
4892
4893 static void
4894 remote_serial_quit_handler (void)
4895 {
4896 struct remote_state *rs = get_remote_state ();
4897
4898 if (check_quit_flag ())
4899 {
4900 /* If we're starting up, we're not fully synced yet. Quit
4901 immediately. */
4902 if (rs->starting_up)
4903 quit ();
4904 else if (rs->got_ctrlc_during_io)
4905 {
4906 if (query (_("The target is not responding to GDB commands.\n"
4907 "Stop debugging it? ")))
4908 remote_unpush_and_throw ();
4909 }
4910 /* If ^C has already been sent once, offer to disconnect. */
4911 else if (!target_terminal_is_ours () && rs->ctrlc_pending_p)
4912 interrupt_query ();
4913 /* All-stop protocol, and blocked waiting for stop reply. Send
4914 an interrupt request. */
4915 else if (!target_terminal_is_ours () && rs->waiting_for_stop_reply)
4916 target_interrupt (inferior_ptid);
4917 else
4918 rs->got_ctrlc_during_io = 1;
4919 }
4920 }
4921
4922 /* Remove any of the remote.c targets from target stack. Upper targets depend
4923 on it so remove them first. */
4924
4925 static void
4926 remote_unpush_target (void)
4927 {
4928 pop_all_targets_at_and_above (process_stratum);
4929 }
4930
4931 static void
4932 remote_unpush_and_throw (void)
4933 {
4934 remote_unpush_target ();
4935 throw_error (TARGET_CLOSE_ERROR, _("Disconnected from target."));
4936 }
4937
4938 static void
4939 remote_open_1 (const char *name, int from_tty,
4940 struct target_ops *target, int extended_p)
4941 {
4942 struct remote_state *rs = get_remote_state ();
4943
4944 if (name == 0)
4945 error (_("To open a remote debug connection, you need to specify what\n"
4946 "serial device is attached to the remote system\n"
4947 "(e.g. /dev/ttyS0, /dev/ttya, COM1, etc.)."));
4948
4949 /* See FIXME above. */
4950 if (!target_async_permitted)
4951 wait_forever_enabled_p = 1;
4952
4953 /* If we're connected to a running target, target_preopen will kill it.
4954 Ask this question first, before target_preopen has a chance to kill
4955 anything. */
4956 if (rs->remote_desc != NULL && !have_inferiors ())
4957 {
4958 if (from_tty
4959 && !query (_("Already connected to a remote target. Disconnect? ")))
4960 error (_("Still connected."));
4961 }
4962
4963 /* Here the possibly existing remote target gets unpushed. */
4964 target_preopen (from_tty);
4965
4966 /* Make sure we send the passed signals list the next time we resume. */
4967 xfree (rs->last_pass_packet);
4968 rs->last_pass_packet = NULL;
4969
4970 /* Make sure we send the program signals list the next time we
4971 resume. */
4972 xfree (rs->last_program_signals_packet);
4973 rs->last_program_signals_packet = NULL;
4974
4975 remote_fileio_reset ();
4976 reopen_exec_file ();
4977 reread_symbols ();
4978
4979 rs->remote_desc = remote_serial_open (name);
4980 if (!rs->remote_desc)
4981 perror_with_name (name);
4982
4983 if (baud_rate != -1)
4984 {
4985 if (serial_setbaudrate (rs->remote_desc, baud_rate))
4986 {
4987 /* The requested speed could not be set. Error out to
4988 top level after closing remote_desc. Take care to
4989 set remote_desc to NULL to avoid closing remote_desc
4990 more than once. */
4991 serial_close (rs->remote_desc);
4992 rs->remote_desc = NULL;
4993 perror_with_name (name);
4994 }
4995 }
4996
4997 serial_setparity (rs->remote_desc, serial_parity);
4998 serial_raw (rs->remote_desc);
4999
5000 /* If there is something sitting in the buffer we might take it as a
5001 response to a command, which would be bad. */
5002 serial_flush_input (rs->remote_desc);
5003
5004 if (from_tty)
5005 {
5006 puts_filtered ("Remote debugging using ");
5007 puts_filtered (name);
5008 puts_filtered ("\n");
5009 }
5010 push_target (target); /* Switch to using remote target now. */
5011
5012 /* Register extra event sources in the event loop. */
5013 remote_async_inferior_event_token
5014 = create_async_event_handler (remote_async_inferior_event_handler,
5015 NULL);
5016 rs->notif_state = remote_notif_state_allocate ();
5017
5018 /* Reset the target state; these things will be queried either by
5019 remote_query_supported or as they are needed. */
5020 reset_all_packet_configs_support ();
5021 rs->cached_wait_status = 0;
5022 rs->explicit_packet_size = 0;
5023 rs->noack_mode = 0;
5024 rs->extended = extended_p;
5025 rs->waiting_for_stop_reply = 0;
5026 rs->ctrlc_pending_p = 0;
5027 rs->got_ctrlc_during_io = 0;
5028
5029 rs->general_thread = not_sent_ptid;
5030 rs->continue_thread = not_sent_ptid;
5031 rs->remote_traceframe_number = -1;
5032
5033 rs->last_resume_exec_dir = EXEC_FORWARD;
5034
5035 /* Probe for ability to use "ThreadInfo" query, as required. */
5036 rs->use_threadinfo_query = 1;
5037 rs->use_threadextra_query = 1;
5038
5039 readahead_cache_invalidate ();
5040
5041 /* Start out by owning the terminal. */
5042 remote_async_terminal_ours_p = 1;
5043
5044 if (target_async_permitted)
5045 {
5046 /* FIXME: cagney/1999-09-23: During the initial connection it is
5047 assumed that the target is already ready and able to respond to
5048 requests. Unfortunately remote_start_remote() eventually calls
5049 wait_for_inferior() with no timeout. wait_forever_enabled_p gets
5050 around this. Eventually a mechanism that allows
5051 wait_for_inferior() to expect/get timeouts will be
5052 implemented. */
5053 wait_forever_enabled_p = 0;
5054 }
5055
5056 /* First delete any symbols previously loaded from shared libraries. */
5057 no_shared_libraries (NULL, 0);
5058
5059 /* Start afresh. */
5060 init_thread_list ();
5061
5062 /* Start the remote connection. If error() or QUIT, discard this
5063 target (we'd otherwise be in an inconsistent state) and then
5064 propogate the error on up the exception chain. This ensures that
5065 the caller doesn't stumble along blindly assuming that the
5066 function succeeded. The CLI doesn't have this problem but other
5067 UI's, such as MI do.
5068
5069 FIXME: cagney/2002-05-19: Instead of re-throwing the exception,
5070 this function should return an error indication letting the
5071 caller restore the previous state. Unfortunately the command
5072 ``target remote'' is directly wired to this function making that
5073 impossible. On a positive note, the CLI side of this problem has
5074 been fixed - the function set_cmd_context() makes it possible for
5075 all the ``target ....'' commands to share a common callback
5076 function. See cli-dump.c. */
5077 {
5078
5079 TRY
5080 {
5081 remote_start_remote (from_tty, target, extended_p);
5082 }
5083 CATCH (ex, RETURN_MASK_ALL)
5084 {
5085 /* Pop the partially set up target - unless something else did
5086 already before throwing the exception. */
5087 if (rs->remote_desc != NULL)
5088 remote_unpush_target ();
5089 if (target_async_permitted)
5090 wait_forever_enabled_p = 1;
5091 throw_exception (ex);
5092 }
5093 END_CATCH
5094 }
5095
5096 remote_btrace_reset ();
5097
5098 if (target_async_permitted)
5099 wait_forever_enabled_p = 1;
5100 }
5101
5102 /* Detach the specified process. */
5103
5104 static void
5105 remote_detach_pid (int pid)
5106 {
5107 struct remote_state *rs = get_remote_state ();
5108
5109 if (remote_multi_process_p (rs))
5110 xsnprintf (rs->buf, get_remote_packet_size (), "D;%x", pid);
5111 else
5112 strcpy (rs->buf, "D");
5113
5114 putpkt (rs->buf);
5115 getpkt (&rs->buf, &rs->buf_size, 0);
5116
5117 if (rs->buf[0] == 'O' && rs->buf[1] == 'K')
5118 ;
5119 else if (rs->buf[0] == '\0')
5120 error (_("Remote doesn't know how to detach"));
5121 else
5122 error (_("Can't detach process."));
5123 }
5124
5125 /* This detaches a program to which we previously attached, using
5126 inferior_ptid to identify the process. After this is done, GDB
5127 can be used to debug some other program. We better not have left
5128 any breakpoints in the target program or it'll die when it hits
5129 one. */
5130
5131 static void
5132 remote_detach_1 (const char *args, int from_tty)
5133 {
5134 int pid = ptid_get_pid (inferior_ptid);
5135 struct remote_state *rs = get_remote_state ();
5136 struct thread_info *tp = find_thread_ptid (inferior_ptid);
5137 int is_fork_parent;
5138
5139 if (args)
5140 error (_("Argument given to \"detach\" when remotely debugging."));
5141
5142 if (!target_has_execution)
5143 error (_("No process to detach from."));
5144
5145 target_announce_detach (from_tty);
5146
5147 /* Tell the remote target to detach. */
5148 remote_detach_pid (pid);
5149
5150 /* Exit only if this is the only active inferior. */
5151 if (from_tty && !rs->extended && number_of_live_inferiors () == 1)
5152 puts_filtered (_("Ending remote debugging.\n"));
5153
5154 /* Check to see if we are detaching a fork parent. Note that if we
5155 are detaching a fork child, tp == NULL. */
5156 is_fork_parent = (tp != NULL
5157 && tp->pending_follow.kind == TARGET_WAITKIND_FORKED);
5158
5159 /* If doing detach-on-fork, we don't mourn, because that will delete
5160 breakpoints that should be available for the followed inferior. */
5161 if (!is_fork_parent)
5162 target_mourn_inferior ();
5163 else
5164 {
5165 inferior_ptid = null_ptid;
5166 detach_inferior (pid);
5167 }
5168 }
5169
5170 static void
5171 remote_detach (struct target_ops *ops, const char *args, int from_tty)
5172 {
5173 remote_detach_1 (args, from_tty);
5174 }
5175
5176 static void
5177 extended_remote_detach (struct target_ops *ops, const char *args, int from_tty)
5178 {
5179 remote_detach_1 (args, from_tty);
5180 }
5181
5182 /* Target follow-fork function for remote targets. On entry, and
5183 at return, the current inferior is the fork parent.
5184
5185 Note that although this is currently only used for extended-remote,
5186 it is named remote_follow_fork in anticipation of using it for the
5187 remote target as well. */
5188
5189 static int
5190 remote_follow_fork (struct target_ops *ops, int follow_child,
5191 int detach_fork)
5192 {
5193 struct remote_state *rs = get_remote_state ();
5194 enum target_waitkind kind = inferior_thread ()->pending_follow.kind;
5195
5196 if ((kind == TARGET_WAITKIND_FORKED && remote_fork_event_p (rs))
5197 || (kind == TARGET_WAITKIND_VFORKED && remote_vfork_event_p (rs)))
5198 {
5199 /* When following the parent and detaching the child, we detach
5200 the child here. For the case of following the child and
5201 detaching the parent, the detach is done in the target-
5202 independent follow fork code in infrun.c. We can't use
5203 target_detach when detaching an unfollowed child because
5204 the client side doesn't know anything about the child. */
5205 if (detach_fork && !follow_child)
5206 {
5207 /* Detach the fork child. */
5208 ptid_t child_ptid;
5209 pid_t child_pid;
5210
5211 child_ptid = inferior_thread ()->pending_follow.value.related_pid;
5212 child_pid = ptid_get_pid (child_ptid);
5213
5214 remote_detach_pid (child_pid);
5215 detach_inferior (child_pid);
5216 }
5217 }
5218 return 0;
5219 }
5220
5221 /* Target follow-exec function for remote targets. Save EXECD_PATHNAME
5222 in the program space of the new inferior. On entry and at return the
5223 current inferior is the exec'ing inferior. INF is the new exec'd
5224 inferior, which may be the same as the exec'ing inferior unless
5225 follow-exec-mode is "new". */
5226
5227 static void
5228 remote_follow_exec (struct target_ops *ops,
5229 struct inferior *inf, char *execd_pathname)
5230 {
5231 /* We know that this is a target file name, so if it has the "target:"
5232 prefix we strip it off before saving it in the program space. */
5233 if (is_target_filename (execd_pathname))
5234 execd_pathname += strlen (TARGET_SYSROOT_PREFIX);
5235
5236 set_pspace_remote_exec_file (inf->pspace, execd_pathname);
5237 }
5238
5239 /* Same as remote_detach, but don't send the "D" packet; just disconnect. */
5240
5241 static void
5242 remote_disconnect (struct target_ops *target, const char *args, int from_tty)
5243 {
5244 if (args)
5245 error (_("Argument given to \"disconnect\" when remotely debugging."));
5246
5247 /* Make sure we unpush even the extended remote targets. Calling
5248 target_mourn_inferior won't unpush, and remote_mourn won't
5249 unpush if there is more than one inferior left. */
5250 unpush_target (target);
5251 generic_mourn_inferior ();
5252
5253 if (from_tty)
5254 puts_filtered ("Ending remote debugging.\n");
5255 }
5256
5257 /* Attach to the process specified by ARGS. If FROM_TTY is non-zero,
5258 be chatty about it. */
5259
5260 static void
5261 extended_remote_attach (struct target_ops *target, const char *args,
5262 int from_tty)
5263 {
5264 struct remote_state *rs = get_remote_state ();
5265 int pid;
5266 char *wait_status = NULL;
5267
5268 pid = parse_pid_to_attach (args);
5269
5270 /* Remote PID can be freely equal to getpid, do not check it here the same
5271 way as in other targets. */
5272
5273 if (packet_support (PACKET_vAttach) == PACKET_DISABLE)
5274 error (_("This target does not support attaching to a process"));
5275
5276 if (from_tty)
5277 {
5278 char *exec_file = get_exec_file (0);
5279
5280 if (exec_file)
5281 printf_unfiltered (_("Attaching to program: %s, %s\n"), exec_file,
5282 target_pid_to_str (pid_to_ptid (pid)));
5283 else
5284 printf_unfiltered (_("Attaching to %s\n"),
5285 target_pid_to_str (pid_to_ptid (pid)));
5286
5287 gdb_flush (gdb_stdout);
5288 }
5289
5290 xsnprintf (rs->buf, get_remote_packet_size (), "vAttach;%x", pid);
5291 putpkt (rs->buf);
5292 getpkt (&rs->buf, &rs->buf_size, 0);
5293
5294 switch (packet_ok (rs->buf,
5295 &remote_protocol_packets[PACKET_vAttach]))
5296 {
5297 case PACKET_OK:
5298 if (!target_is_non_stop_p ())
5299 {
5300 /* Save the reply for later. */
5301 wait_status = (char *) alloca (strlen (rs->buf) + 1);
5302 strcpy (wait_status, rs->buf);
5303 }
5304 else if (strcmp (rs->buf, "OK") != 0)
5305 error (_("Attaching to %s failed with: %s"),
5306 target_pid_to_str (pid_to_ptid (pid)),
5307 rs->buf);
5308 break;
5309 case PACKET_UNKNOWN:
5310 error (_("This target does not support attaching to a process"));
5311 default:
5312 error (_("Attaching to %s failed"),
5313 target_pid_to_str (pid_to_ptid (pid)));
5314 }
5315
5316 set_current_inferior (remote_add_inferior (0, pid, 1, 0));
5317
5318 inferior_ptid = pid_to_ptid (pid);
5319
5320 if (target_is_non_stop_p ())
5321 {
5322 struct thread_info *thread;
5323
5324 /* Get list of threads. */
5325 remote_update_thread_list (target);
5326
5327 thread = first_thread_of_process (pid);
5328 if (thread)
5329 inferior_ptid = thread->ptid;
5330 else
5331 inferior_ptid = pid_to_ptid (pid);
5332
5333 /* Invalidate our notion of the remote current thread. */
5334 record_currthread (rs, minus_one_ptid);
5335 }
5336 else
5337 {
5338 /* Now, if we have thread information, update inferior_ptid. */
5339 inferior_ptid = remote_current_thread (inferior_ptid);
5340
5341 /* Add the main thread to the thread list. */
5342 add_thread_silent (inferior_ptid);
5343 }
5344
5345 /* Next, if the target can specify a description, read it. We do
5346 this before anything involving memory or registers. */
5347 target_find_description ();
5348
5349 if (!target_is_non_stop_p ())
5350 {
5351 /* Use the previously fetched status. */
5352 gdb_assert (wait_status != NULL);
5353
5354 if (target_can_async_p ())
5355 {
5356 struct notif_event *reply
5357 = remote_notif_parse (&notif_client_stop, wait_status);
5358
5359 push_stop_reply ((struct stop_reply *) reply);
5360
5361 target_async (1);
5362 }
5363 else
5364 {
5365 gdb_assert (wait_status != NULL);
5366 strcpy (rs->buf, wait_status);
5367 rs->cached_wait_status = 1;
5368 }
5369 }
5370 else
5371 gdb_assert (wait_status == NULL);
5372 }
5373
5374 /* Implementation of the to_post_attach method. */
5375
5376 static void
5377 extended_remote_post_attach (struct target_ops *ops, int pid)
5378 {
5379 /* Get text, data & bss offsets. */
5380 get_offsets ();
5381
5382 /* In certain cases GDB might not have had the chance to start
5383 symbol lookup up until now. This could happen if the debugged
5384 binary is not using shared libraries, the vsyscall page is not
5385 present (on Linux) and the binary itself hadn't changed since the
5386 debugging process was started. */
5387 if (symfile_objfile != NULL)
5388 remote_check_symbols();
5389 }
5390
5391 \f
5392 /* Check for the availability of vCont. This function should also check
5393 the response. */
5394
5395 static void
5396 remote_vcont_probe (struct remote_state *rs)
5397 {
5398 char *buf;
5399
5400 strcpy (rs->buf, "vCont?");
5401 putpkt (rs->buf);
5402 getpkt (&rs->buf, &rs->buf_size, 0);
5403 buf = rs->buf;
5404
5405 /* Make sure that the features we assume are supported. */
5406 if (startswith (buf, "vCont"))
5407 {
5408 char *p = &buf[5];
5409 int support_c, support_C;
5410
5411 rs->supports_vCont.s = 0;
5412 rs->supports_vCont.S = 0;
5413 support_c = 0;
5414 support_C = 0;
5415 rs->supports_vCont.t = 0;
5416 rs->supports_vCont.r = 0;
5417 while (p && *p == ';')
5418 {
5419 p++;
5420 if (*p == 's' && (*(p + 1) == ';' || *(p + 1) == 0))
5421 rs->supports_vCont.s = 1;
5422 else if (*p == 'S' && (*(p + 1) == ';' || *(p + 1) == 0))
5423 rs->supports_vCont.S = 1;
5424 else if (*p == 'c' && (*(p + 1) == ';' || *(p + 1) == 0))
5425 support_c = 1;
5426 else if (*p == 'C' && (*(p + 1) == ';' || *(p + 1) == 0))
5427 support_C = 1;
5428 else if (*p == 't' && (*(p + 1) == ';' || *(p + 1) == 0))
5429 rs->supports_vCont.t = 1;
5430 else if (*p == 'r' && (*(p + 1) == ';' || *(p + 1) == 0))
5431 rs->supports_vCont.r = 1;
5432
5433 p = strchr (p, ';');
5434 }
5435
5436 /* If c, and C are not all supported, we can't use vCont. Clearing
5437 BUF will make packet_ok disable the packet. */
5438 if (!support_c || !support_C)
5439 buf[0] = 0;
5440 }
5441
5442 packet_ok (buf, &remote_protocol_packets[PACKET_vCont]);
5443 }
5444
5445 /* Helper function for building "vCont" resumptions. Write a
5446 resumption to P. ENDP points to one-passed-the-end of the buffer
5447 we're allowed to write to. Returns BUF+CHARACTERS_WRITTEN. The
5448 thread to be resumed is PTID; STEP and SIGGNAL indicate whether the
5449 resumed thread should be single-stepped and/or signalled. If PTID
5450 equals minus_one_ptid, then all threads are resumed; if PTID
5451 represents a process, then all threads of the process are resumed;
5452 the thread to be stepped and/or signalled is given in the global
5453 INFERIOR_PTID. */
5454
5455 static char *
5456 append_resumption (char *p, char *endp,
5457 ptid_t ptid, int step, enum gdb_signal siggnal)
5458 {
5459 struct remote_state *rs = get_remote_state ();
5460
5461 if (step && siggnal != GDB_SIGNAL_0)
5462 p += xsnprintf (p, endp - p, ";S%02x", siggnal);
5463 else if (step
5464 /* GDB is willing to range step. */
5465 && use_range_stepping
5466 /* Target supports range stepping. */
5467 && rs->supports_vCont.r
5468 /* We don't currently support range stepping multiple
5469 threads with a wildcard (though the protocol allows it,
5470 so stubs shouldn't make an active effort to forbid
5471 it). */
5472 && !(remote_multi_process_p (rs) && ptid_is_pid (ptid)))
5473 {
5474 struct thread_info *tp;
5475
5476 if (ptid_equal (ptid, minus_one_ptid))
5477 {
5478 /* If we don't know about the target thread's tid, then
5479 we're resuming magic_null_ptid (see caller). */
5480 tp = find_thread_ptid (magic_null_ptid);
5481 }
5482 else
5483 tp = find_thread_ptid (ptid);
5484 gdb_assert (tp != NULL);
5485
5486 if (tp->control.may_range_step)
5487 {
5488 int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
5489
5490 p += xsnprintf (p, endp - p, ";r%s,%s",
5491 phex_nz (tp->control.step_range_start,
5492 addr_size),
5493 phex_nz (tp->control.step_range_end,
5494 addr_size));
5495 }
5496 else
5497 p += xsnprintf (p, endp - p, ";s");
5498 }
5499 else if (step)
5500 p += xsnprintf (p, endp - p, ";s");
5501 else if (siggnal != GDB_SIGNAL_0)
5502 p += xsnprintf (p, endp - p, ";C%02x", siggnal);
5503 else
5504 p += xsnprintf (p, endp - p, ";c");
5505
5506 if (remote_multi_process_p (rs) && ptid_is_pid (ptid))
5507 {
5508 ptid_t nptid;
5509
5510 /* All (-1) threads of process. */
5511 nptid = ptid_build (ptid_get_pid (ptid), -1, 0);
5512
5513 p += xsnprintf (p, endp - p, ":");
5514 p = write_ptid (p, endp, nptid);
5515 }
5516 else if (!ptid_equal (ptid, minus_one_ptid))
5517 {
5518 p += xsnprintf (p, endp - p, ":");
5519 p = write_ptid (p, endp, ptid);
5520 }
5521
5522 return p;
5523 }
5524
5525 /* Clear the thread's private info on resume. */
5526
5527 static void
5528 resume_clear_thread_private_info (struct thread_info *thread)
5529 {
5530 if (thread->priv != NULL)
5531 {
5532 thread->priv->stop_reason = TARGET_STOPPED_BY_NO_REASON;
5533 thread->priv->watch_data_address = 0;
5534 }
5535 }
5536
5537 /* Append a vCont continue-with-signal action for threads that have a
5538 non-zero stop signal. */
5539
5540 static char *
5541 append_pending_thread_resumptions (char *p, char *endp, ptid_t ptid)
5542 {
5543 struct thread_info *thread;
5544
5545 ALL_NON_EXITED_THREADS (thread)
5546 if (ptid_match (thread->ptid, ptid)
5547 && !ptid_equal (inferior_ptid, thread->ptid)
5548 && thread->suspend.stop_signal != GDB_SIGNAL_0)
5549 {
5550 p = append_resumption (p, endp, thread->ptid,
5551 0, thread->suspend.stop_signal);
5552 thread->suspend.stop_signal = GDB_SIGNAL_0;
5553 resume_clear_thread_private_info (thread);
5554 }
5555
5556 return p;
5557 }
5558
5559 /* Resume the remote inferior by using a "vCont" packet. The thread
5560 to be resumed is PTID; STEP and SIGGNAL indicate whether the
5561 resumed thread should be single-stepped and/or signalled. If PTID
5562 equals minus_one_ptid, then all threads are resumed; the thread to
5563 be stepped and/or signalled is given in the global INFERIOR_PTID.
5564 This function returns non-zero iff it resumes the inferior.
5565
5566 This function issues a strict subset of all possible vCont commands at the
5567 moment. */
5568
5569 static int
5570 remote_vcont_resume (ptid_t ptid, int step, enum gdb_signal siggnal)
5571 {
5572 struct remote_state *rs = get_remote_state ();
5573 char *p;
5574 char *endp;
5575
5576 if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
5577 remote_vcont_probe (rs);
5578
5579 if (packet_support (PACKET_vCont) == PACKET_DISABLE)
5580 return 0;
5581
5582 p = rs->buf;
5583 endp = rs->buf + get_remote_packet_size ();
5584
5585 /* If we could generate a wider range of packets, we'd have to worry
5586 about overflowing BUF. Should there be a generic
5587 "multi-part-packet" packet? */
5588
5589 p += xsnprintf (p, endp - p, "vCont");
5590
5591 if (ptid_equal (ptid, magic_null_ptid))
5592 {
5593 /* MAGIC_NULL_PTID means that we don't have any active threads,
5594 so we don't have any TID numbers the inferior will
5595 understand. Make sure to only send forms that do not specify
5596 a TID. */
5597 append_resumption (p, endp, minus_one_ptid, step, siggnal);
5598 }
5599 else if (ptid_equal (ptid, minus_one_ptid) || ptid_is_pid (ptid))
5600 {
5601 /* Resume all threads (of all processes, or of a single
5602 process), with preference for INFERIOR_PTID. This assumes
5603 inferior_ptid belongs to the set of all threads we are about
5604 to resume. */
5605 if (step || siggnal != GDB_SIGNAL_0)
5606 {
5607 /* Step inferior_ptid, with or without signal. */
5608 p = append_resumption (p, endp, inferior_ptid, step, siggnal);
5609 }
5610
5611 /* Also pass down any pending signaled resumption for other
5612 threads not the current. */
5613 p = append_pending_thread_resumptions (p, endp, ptid);
5614
5615 /* And continue others without a signal. */
5616 append_resumption (p, endp, ptid, /*step=*/ 0, GDB_SIGNAL_0);
5617 }
5618 else
5619 {
5620 /* Scheduler locking; resume only PTID. */
5621 append_resumption (p, endp, ptid, step, siggnal);
5622 }
5623
5624 gdb_assert (strlen (rs->buf) < get_remote_packet_size ());
5625 putpkt (rs->buf);
5626
5627 if (target_is_non_stop_p ())
5628 {
5629 /* In non-stop, the stub replies to vCont with "OK". The stop
5630 reply will be reported asynchronously by means of a `%Stop'
5631 notification. */
5632 getpkt (&rs->buf, &rs->buf_size, 0);
5633 if (strcmp (rs->buf, "OK") != 0)
5634 error (_("Unexpected vCont reply in non-stop mode: %s"), rs->buf);
5635 }
5636
5637 return 1;
5638 }
5639
5640 /* Tell the remote machine to resume. */
5641
5642 static void
5643 remote_resume (struct target_ops *ops,
5644 ptid_t ptid, int step, enum gdb_signal siggnal)
5645 {
5646 struct remote_state *rs = get_remote_state ();
5647 char *buf;
5648 struct thread_info *thread;
5649
5650 /* In all-stop, we can't mark REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN
5651 (explained in remote-notif.c:handle_notification) so
5652 remote_notif_process is not called. We need find a place where
5653 it is safe to start a 'vNotif' sequence. It is good to do it
5654 before resuming inferior, because inferior was stopped and no RSP
5655 traffic at that moment. */
5656 if (!target_is_non_stop_p ())
5657 remote_notif_process (rs->notif_state, &notif_client_stop);
5658
5659 rs->last_sent_signal = siggnal;
5660 rs->last_sent_step = step;
5661
5662 rs->last_resume_exec_dir = execution_direction;
5663
5664 /* The vCont packet doesn't need to specify threads via Hc. */
5665 /* No reverse support (yet) for vCont. */
5666 if (execution_direction != EXEC_REVERSE)
5667 if (remote_vcont_resume (ptid, step, siggnal))
5668 goto done;
5669
5670 /* All other supported resume packets do use Hc, so set the continue
5671 thread. */
5672 if (ptid_equal (ptid, minus_one_ptid))
5673 set_continue_thread (any_thread_ptid);
5674 else
5675 set_continue_thread (ptid);
5676
5677 ALL_NON_EXITED_THREADS (thread)
5678 resume_clear_thread_private_info (thread);
5679
5680 buf = rs->buf;
5681 if (execution_direction == EXEC_REVERSE)
5682 {
5683 /* We don't pass signals to the target in reverse exec mode. */
5684 if (info_verbose && siggnal != GDB_SIGNAL_0)
5685 warning (_(" - Can't pass signal %d to target in reverse: ignored."),
5686 siggnal);
5687
5688 if (step && packet_support (PACKET_bs) == PACKET_DISABLE)
5689 error (_("Remote reverse-step not supported."));
5690 if (!step && packet_support (PACKET_bc) == PACKET_DISABLE)
5691 error (_("Remote reverse-continue not supported."));
5692
5693 strcpy (buf, step ? "bs" : "bc");
5694 }
5695 else if (siggnal != GDB_SIGNAL_0)
5696 {
5697 buf[0] = step ? 'S' : 'C';
5698 buf[1] = tohex (((int) siggnal >> 4) & 0xf);
5699 buf[2] = tohex (((int) siggnal) & 0xf);
5700 buf[3] = '\0';
5701 }
5702 else
5703 strcpy (buf, step ? "s" : "c");
5704
5705 putpkt (buf);
5706
5707 done:
5708 /* We are about to start executing the inferior, let's register it
5709 with the event loop. NOTE: this is the one place where all the
5710 execution commands end up. We could alternatively do this in each
5711 of the execution commands in infcmd.c. */
5712 /* FIXME: ezannoni 1999-09-28: We may need to move this out of here
5713 into infcmd.c in order to allow inferior function calls to work
5714 NOT asynchronously. */
5715 if (target_can_async_p ())
5716 target_async (1);
5717
5718 /* We've just told the target to resume. The remote server will
5719 wait for the inferior to stop, and then send a stop reply. In
5720 the mean time, we can't start another command/query ourselves
5721 because the stub wouldn't be ready to process it. This applies
5722 only to the base all-stop protocol, however. In non-stop (which
5723 only supports vCont), the stub replies with an "OK", and is
5724 immediate able to process further serial input. */
5725 if (!target_is_non_stop_p ())
5726 rs->waiting_for_stop_reply = 1;
5727 }
5728 \f
5729
5730 /* Non-stop version of target_stop. Uses `vCont;t' to stop a remote
5731 thread, all threads of a remote process, or all threads of all
5732 processes. */
5733
5734 static void
5735 remote_stop_ns (ptid_t ptid)
5736 {
5737 struct remote_state *rs = get_remote_state ();
5738 char *p = rs->buf;
5739 char *endp = rs->buf + get_remote_packet_size ();
5740
5741 if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
5742 remote_vcont_probe (rs);
5743
5744 if (!rs->supports_vCont.t)
5745 error (_("Remote server does not support stopping threads"));
5746
5747 if (ptid_equal (ptid, minus_one_ptid)
5748 || (!remote_multi_process_p (rs) && ptid_is_pid (ptid)))
5749 p += xsnprintf (p, endp - p, "vCont;t");
5750 else
5751 {
5752 ptid_t nptid;
5753
5754 p += xsnprintf (p, endp - p, "vCont;t:");
5755
5756 if (ptid_is_pid (ptid))
5757 /* All (-1) threads of process. */
5758 nptid = ptid_build (ptid_get_pid (ptid), -1, 0);
5759 else
5760 {
5761 /* Small optimization: if we already have a stop reply for
5762 this thread, no use in telling the stub we want this
5763 stopped. */
5764 if (peek_stop_reply (ptid))
5765 return;
5766
5767 nptid = ptid;
5768 }
5769
5770 write_ptid (p, endp, nptid);
5771 }
5772
5773 /* In non-stop, we get an immediate OK reply. The stop reply will
5774 come in asynchronously by notification. */
5775 putpkt (rs->buf);
5776 getpkt (&rs->buf, &rs->buf_size, 0);
5777 if (strcmp (rs->buf, "OK") != 0)
5778 error (_("Stopping %s failed: %s"), target_pid_to_str (ptid), rs->buf);
5779 }
5780
5781 /* All-stop version of target_interrupt. Sends a break or a ^C to
5782 interrupt the remote target. It is undefined which thread of which
5783 process reports the interrupt. */
5784
5785 static void
5786 remote_interrupt_as (void)
5787 {
5788 struct remote_state *rs = get_remote_state ();
5789
5790 rs->ctrlc_pending_p = 1;
5791
5792 /* If the inferior is stopped already, but the core didn't know
5793 about it yet, just ignore the request. The cached wait status
5794 will be collected in remote_wait. */
5795 if (rs->cached_wait_status)
5796 return;
5797
5798 /* Send interrupt_sequence to remote target. */
5799 send_interrupt_sequence ();
5800 }
5801
5802 /* Non-stop version of target_interrupt. Uses `vCtrlC' to interrupt
5803 the remote target. It is undefined which thread of which process
5804 reports the interrupt. Throws an error if the packet is not
5805 supported by the server. */
5806
5807 static void
5808 remote_interrupt_ns (void)
5809 {
5810 struct remote_state *rs = get_remote_state ();
5811 char *p = rs->buf;
5812 char *endp = rs->buf + get_remote_packet_size ();
5813
5814 xsnprintf (p, endp - p, "vCtrlC");
5815
5816 /* In non-stop, we get an immediate OK reply. The stop reply will
5817 come in asynchronously by notification. */
5818 putpkt (rs->buf);
5819 getpkt (&rs->buf, &rs->buf_size, 0);
5820
5821 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_vCtrlC]))
5822 {
5823 case PACKET_OK:
5824 break;
5825 case PACKET_UNKNOWN:
5826 error (_("No support for interrupting the remote target."));
5827 case PACKET_ERROR:
5828 error (_("Interrupting target failed: %s"), rs->buf);
5829 }
5830 }
5831
5832 /* Implement the to_stop function for the remote targets. */
5833
5834 static void
5835 remote_stop (struct target_ops *self, ptid_t ptid)
5836 {
5837 if (remote_debug)
5838 fprintf_unfiltered (gdb_stdlog, "remote_stop called\n");
5839
5840 if (target_is_non_stop_p ())
5841 remote_stop_ns (ptid);
5842 else
5843 {
5844 /* We don't currently have a way to transparently pause the
5845 remote target in all-stop mode. Interrupt it instead. */
5846 remote_interrupt_as ();
5847 }
5848 }
5849
5850 /* Implement the to_interrupt function for the remote targets. */
5851
5852 static void
5853 remote_interrupt (struct target_ops *self, ptid_t ptid)
5854 {
5855 struct remote_state *rs = get_remote_state ();
5856
5857 if (remote_debug)
5858 fprintf_unfiltered (gdb_stdlog, "remote_interrupt called\n");
5859
5860 if (target_is_non_stop_p ())
5861 remote_interrupt_ns ();
5862 else
5863 remote_interrupt_as ();
5864 }
5865
5866 /* Implement the to_pass_ctrlc function for the remote targets. */
5867
5868 static void
5869 remote_pass_ctrlc (struct target_ops *self)
5870 {
5871 struct remote_state *rs = get_remote_state ();
5872
5873 if (remote_debug)
5874 fprintf_unfiltered (gdb_stdlog, "remote_pass_ctrlc called\n");
5875
5876 /* If we're starting up, we're not fully synced yet. Quit
5877 immediately. */
5878 if (rs->starting_up)
5879 quit ();
5880 /* If ^C has already been sent once, offer to disconnect. */
5881 else if (rs->ctrlc_pending_p)
5882 interrupt_query ();
5883 else
5884 target_interrupt (inferior_ptid);
5885 }
5886
5887 /* Ask the user what to do when an interrupt is received. */
5888
5889 static void
5890 interrupt_query (void)
5891 {
5892 struct remote_state *rs = get_remote_state ();
5893
5894 if (rs->waiting_for_stop_reply && rs->ctrlc_pending_p)
5895 {
5896 if (query (_("The target is not responding to interrupt requests.\n"
5897 "Stop debugging it? ")))
5898 {
5899 remote_unpush_target ();
5900 throw_error (TARGET_CLOSE_ERROR, _("Disconnected from target."));
5901 }
5902 }
5903 else
5904 {
5905 if (query (_("Interrupted while waiting for the program.\n"
5906 "Give up waiting? ")))
5907 quit ();
5908 }
5909 }
5910
5911 /* Enable/disable target terminal ownership. Most targets can use
5912 terminal groups to control terminal ownership. Remote targets are
5913 different in that explicit transfer of ownership to/from GDB/target
5914 is required. */
5915
5916 static void
5917 remote_terminal_inferior (struct target_ops *self)
5918 {
5919 /* FIXME: cagney/1999-09-27: Make calls to target_terminal_*()
5920 idempotent. The event-loop GDB talking to an asynchronous target
5921 with a synchronous command calls this function from both
5922 event-top.c and infrun.c/infcmd.c. Once GDB stops trying to
5923 transfer the terminal to the target when it shouldn't this guard
5924 can go away. */
5925 if (!remote_async_terminal_ours_p)
5926 return;
5927 remote_async_terminal_ours_p = 0;
5928 /* NOTE: At this point we could also register our selves as the
5929 recipient of all input. Any characters typed could then be
5930 passed on down to the target. */
5931 }
5932
5933 static void
5934 remote_terminal_ours (struct target_ops *self)
5935 {
5936 /* See FIXME in remote_terminal_inferior. */
5937 if (remote_async_terminal_ours_p)
5938 return;
5939 remote_async_terminal_ours_p = 1;
5940 }
5941
5942 static void
5943 remote_console_output (char *msg)
5944 {
5945 char *p;
5946
5947 for (p = msg; p[0] && p[1]; p += 2)
5948 {
5949 char tb[2];
5950 char c = fromhex (p[0]) * 16 + fromhex (p[1]);
5951
5952 tb[0] = c;
5953 tb[1] = 0;
5954 fputs_unfiltered (tb, gdb_stdtarg);
5955 }
5956 gdb_flush (gdb_stdtarg);
5957 }
5958
5959 typedef struct cached_reg
5960 {
5961 int num;
5962 gdb_byte data[MAX_REGISTER_SIZE];
5963 } cached_reg_t;
5964
5965 DEF_VEC_O(cached_reg_t);
5966
5967 typedef struct stop_reply
5968 {
5969 struct notif_event base;
5970
5971 /* The identifier of the thread about this event */
5972 ptid_t ptid;
5973
5974 /* The remote state this event is associated with. When the remote
5975 connection, represented by a remote_state object, is closed,
5976 all the associated stop_reply events should be released. */
5977 struct remote_state *rs;
5978
5979 struct target_waitstatus ws;
5980
5981 /* Expedited registers. This makes remote debugging a bit more
5982 efficient for those targets that provide critical registers as
5983 part of their normal status mechanism (as another roundtrip to
5984 fetch them is avoided). */
5985 VEC(cached_reg_t) *regcache;
5986
5987 enum target_stop_reason stop_reason;
5988
5989 CORE_ADDR watch_data_address;
5990
5991 int core;
5992 } *stop_reply_p;
5993
5994 DECLARE_QUEUE_P (stop_reply_p);
5995 DEFINE_QUEUE_P (stop_reply_p);
5996 /* The list of already fetched and acknowledged stop events. This
5997 queue is used for notification Stop, and other notifications
5998 don't need queue for their events, because the notification events
5999 of Stop can't be consumed immediately, so that events should be
6000 queued first, and be consumed by remote_wait_{ns,as} one per
6001 time. Other notifications can consume their events immediately,
6002 so queue is not needed for them. */
6003 static QUEUE (stop_reply_p) *stop_reply_queue;
6004
6005 static void
6006 stop_reply_xfree (struct stop_reply *r)
6007 {
6008 notif_event_xfree ((struct notif_event *) r);
6009 }
6010
6011 /* Return the length of the stop reply queue. */
6012
6013 static int
6014 stop_reply_queue_length (void)
6015 {
6016 return QUEUE_length (stop_reply_p, stop_reply_queue);
6017 }
6018
6019 static void
6020 remote_notif_stop_parse (struct notif_client *self, char *buf,
6021 struct notif_event *event)
6022 {
6023 remote_parse_stop_reply (buf, (struct stop_reply *) event);
6024 }
6025
6026 static void
6027 remote_notif_stop_ack (struct notif_client *self, char *buf,
6028 struct notif_event *event)
6029 {
6030 struct stop_reply *stop_reply = (struct stop_reply *) event;
6031
6032 /* acknowledge */
6033 putpkt (self->ack_command);
6034
6035 if (stop_reply->ws.kind == TARGET_WAITKIND_IGNORE)
6036 /* We got an unknown stop reply. */
6037 error (_("Unknown stop reply"));
6038
6039 push_stop_reply (stop_reply);
6040 }
6041
6042 static int
6043 remote_notif_stop_can_get_pending_events (struct notif_client *self)
6044 {
6045 /* We can't get pending events in remote_notif_process for
6046 notification stop, and we have to do this in remote_wait_ns
6047 instead. If we fetch all queued events from stub, remote stub
6048 may exit and we have no chance to process them back in
6049 remote_wait_ns. */
6050 mark_async_event_handler (remote_async_inferior_event_token);
6051 return 0;
6052 }
6053
6054 static void
6055 stop_reply_dtr (struct notif_event *event)
6056 {
6057 struct stop_reply *r = (struct stop_reply *) event;
6058
6059 VEC_free (cached_reg_t, r->regcache);
6060 }
6061
6062 static struct notif_event *
6063 remote_notif_stop_alloc_reply (void)
6064 {
6065 /* We cast to a pointer to the "base class". */
6066 struct notif_event *r = (struct notif_event *) XNEW (struct stop_reply);
6067
6068 r->dtr = stop_reply_dtr;
6069
6070 return r;
6071 }
6072
6073 /* A client of notification Stop. */
6074
6075 struct notif_client notif_client_stop =
6076 {
6077 "Stop",
6078 "vStopped",
6079 remote_notif_stop_parse,
6080 remote_notif_stop_ack,
6081 remote_notif_stop_can_get_pending_events,
6082 remote_notif_stop_alloc_reply,
6083 REMOTE_NOTIF_STOP,
6084 };
6085
6086 /* A parameter to pass data in and out. */
6087
6088 struct queue_iter_param
6089 {
6090 void *input;
6091 struct stop_reply *output;
6092 };
6093
6094 /* Determine if THREAD is a pending fork parent thread. ARG contains
6095 the pid of the process that owns the threads we want to check, or
6096 -1 if we want to check all threads. */
6097
6098 static int
6099 is_pending_fork_parent (struct target_waitstatus *ws, int event_pid,
6100 ptid_t thread_ptid)
6101 {
6102 if (ws->kind == TARGET_WAITKIND_FORKED
6103 || ws->kind == TARGET_WAITKIND_VFORKED)
6104 {
6105 if (event_pid == -1 || event_pid == ptid_get_pid (thread_ptid))
6106 return 1;
6107 }
6108
6109 return 0;
6110 }
6111
6112 /* Check whether EVENT is a fork event, and if it is, remove the
6113 fork child from the context list passed in DATA. */
6114
6115 static int
6116 remove_child_of_pending_fork (QUEUE (stop_reply_p) *q,
6117 QUEUE_ITER (stop_reply_p) *iter,
6118 stop_reply_p event,
6119 void *data)
6120 {
6121 struct queue_iter_param *param = (struct queue_iter_param *) data;
6122 struct threads_listing_context *context
6123 = (struct threads_listing_context *) param->input;
6124
6125 if (event->ws.kind == TARGET_WAITKIND_FORKED
6126 || event->ws.kind == TARGET_WAITKIND_VFORKED
6127 || event->ws.kind == TARGET_WAITKIND_THREAD_EXITED)
6128 threads_listing_context_remove (&event->ws, context);
6129
6130 return 1;
6131 }
6132
6133 /* If CONTEXT contains any fork child threads that have not been
6134 reported yet, remove them from the CONTEXT list. If such a
6135 thread exists it is because we are stopped at a fork catchpoint
6136 and have not yet called follow_fork, which will set up the
6137 host-side data structures for the new process. */
6138
6139 static void
6140 remove_new_fork_children (struct threads_listing_context *context)
6141 {
6142 struct thread_info * thread;
6143 int pid = -1;
6144 struct notif_client *notif = &notif_client_stop;
6145 struct queue_iter_param param;
6146
6147 /* For any threads stopped at a fork event, remove the corresponding
6148 fork child threads from the CONTEXT list. */
6149 ALL_NON_EXITED_THREADS (thread)
6150 {
6151 struct target_waitstatus *ws;
6152
6153 if (thread->suspend.waitstatus_pending_p)
6154 ws = &thread->suspend.waitstatus;
6155 else
6156 ws = &thread->pending_follow;
6157
6158 if (is_pending_fork_parent (ws, pid, thread->ptid))
6159 {
6160 threads_listing_context_remove (ws, context);
6161 }
6162 }
6163
6164 /* Check for any pending fork events (not reported or processed yet)
6165 in process PID and remove those fork child threads from the
6166 CONTEXT list as well. */
6167 remote_notif_get_pending_events (notif);
6168 param.input = context;
6169 param.output = NULL;
6170 QUEUE_iterate (stop_reply_p, stop_reply_queue,
6171 remove_child_of_pending_fork, &param);
6172 }
6173
6174 /* Remove stop replies in the queue if its pid is equal to the given
6175 inferior's pid. */
6176
6177 static int
6178 remove_stop_reply_for_inferior (QUEUE (stop_reply_p) *q,
6179 QUEUE_ITER (stop_reply_p) *iter,
6180 stop_reply_p event,
6181 void *data)
6182 {
6183 struct queue_iter_param *param = (struct queue_iter_param *) data;
6184 struct inferior *inf = (struct inferior *) param->input;
6185
6186 if (ptid_get_pid (event->ptid) == inf->pid)
6187 {
6188 stop_reply_xfree (event);
6189 QUEUE_remove_elem (stop_reply_p, q, iter);
6190 }
6191
6192 return 1;
6193 }
6194
6195 /* Discard all pending stop replies of inferior INF. */
6196
6197 static void
6198 discard_pending_stop_replies (struct inferior *inf)
6199 {
6200 struct queue_iter_param param;
6201 struct stop_reply *reply;
6202 struct remote_state *rs = get_remote_state ();
6203 struct remote_notif_state *rns = rs->notif_state;
6204
6205 /* This function can be notified when an inferior exists. When the
6206 target is not remote, the notification state is NULL. */
6207 if (rs->remote_desc == NULL)
6208 return;
6209
6210 reply = (struct stop_reply *) rns->pending_event[notif_client_stop.id];
6211
6212 /* Discard the in-flight notification. */
6213 if (reply != NULL && ptid_get_pid (reply->ptid) == inf->pid)
6214 {
6215 stop_reply_xfree (reply);
6216 rns->pending_event[notif_client_stop.id] = NULL;
6217 }
6218
6219 param.input = inf;
6220 param.output = NULL;
6221 /* Discard the stop replies we have already pulled with
6222 vStopped. */
6223 QUEUE_iterate (stop_reply_p, stop_reply_queue,
6224 remove_stop_reply_for_inferior, &param);
6225 }
6226
6227 /* If its remote state is equal to the given remote state,
6228 remove EVENT from the stop reply queue. */
6229
6230 static int
6231 remove_stop_reply_of_remote_state (QUEUE (stop_reply_p) *q,
6232 QUEUE_ITER (stop_reply_p) *iter,
6233 stop_reply_p event,
6234 void *data)
6235 {
6236 struct queue_iter_param *param = (struct queue_iter_param *) data;
6237 struct remote_state *rs = (struct remote_state *) param->input;
6238
6239 if (event->rs == rs)
6240 {
6241 stop_reply_xfree (event);
6242 QUEUE_remove_elem (stop_reply_p, q, iter);
6243 }
6244
6245 return 1;
6246 }
6247
6248 /* Discard the stop replies for RS in stop_reply_queue. */
6249
6250 static void
6251 discard_pending_stop_replies_in_queue (struct remote_state *rs)
6252 {
6253 struct queue_iter_param param;
6254
6255 param.input = rs;
6256 param.output = NULL;
6257 /* Discard the stop replies we have already pulled with
6258 vStopped. */
6259 QUEUE_iterate (stop_reply_p, stop_reply_queue,
6260 remove_stop_reply_of_remote_state, &param);
6261 }
6262
6263 /* A parameter to pass data in and out. */
6264
6265 static int
6266 remote_notif_remove_once_on_match (QUEUE (stop_reply_p) *q,
6267 QUEUE_ITER (stop_reply_p) *iter,
6268 stop_reply_p event,
6269 void *data)
6270 {
6271 struct queue_iter_param *param = (struct queue_iter_param *) data;
6272 ptid_t *ptid = (ptid_t *) param->input;
6273
6274 if (ptid_match (event->ptid, *ptid))
6275 {
6276 param->output = event;
6277 QUEUE_remove_elem (stop_reply_p, q, iter);
6278 return 0;
6279 }
6280
6281 return 1;
6282 }
6283
6284 /* Remove the first reply in 'stop_reply_queue' which matches
6285 PTID. */
6286
6287 static struct stop_reply *
6288 remote_notif_remove_queued_reply (ptid_t ptid)
6289 {
6290 struct queue_iter_param param;
6291
6292 param.input = &ptid;
6293 param.output = NULL;
6294
6295 QUEUE_iterate (stop_reply_p, stop_reply_queue,
6296 remote_notif_remove_once_on_match, &param);
6297 if (notif_debug)
6298 fprintf_unfiltered (gdb_stdlog,
6299 "notif: discard queued event: 'Stop' in %s\n",
6300 target_pid_to_str (ptid));
6301
6302 return param.output;
6303 }
6304
6305 /* Look for a queued stop reply belonging to PTID. If one is found,
6306 remove it from the queue, and return it. Returns NULL if none is
6307 found. If there are still queued events left to process, tell the
6308 event loop to get back to target_wait soon. */
6309
6310 static struct stop_reply *
6311 queued_stop_reply (ptid_t ptid)
6312 {
6313 struct stop_reply *r = remote_notif_remove_queued_reply (ptid);
6314
6315 if (!QUEUE_is_empty (stop_reply_p, stop_reply_queue))
6316 /* There's still at least an event left. */
6317 mark_async_event_handler (remote_async_inferior_event_token);
6318
6319 return r;
6320 }
6321
6322 /* Push a fully parsed stop reply in the stop reply queue. Since we
6323 know that we now have at least one queued event left to pass to the
6324 core side, tell the event loop to get back to target_wait soon. */
6325
6326 static void
6327 push_stop_reply (struct stop_reply *new_event)
6328 {
6329 QUEUE_enque (stop_reply_p, stop_reply_queue, new_event);
6330
6331 if (notif_debug)
6332 fprintf_unfiltered (gdb_stdlog,
6333 "notif: push 'Stop' %s to queue %d\n",
6334 target_pid_to_str (new_event->ptid),
6335 QUEUE_length (stop_reply_p,
6336 stop_reply_queue));
6337
6338 mark_async_event_handler (remote_async_inferior_event_token);
6339 }
6340
6341 static int
6342 stop_reply_match_ptid_and_ws (QUEUE (stop_reply_p) *q,
6343 QUEUE_ITER (stop_reply_p) *iter,
6344 struct stop_reply *event,
6345 void *data)
6346 {
6347 ptid_t *ptid = (ptid_t *) data;
6348
6349 return !(ptid_equal (*ptid, event->ptid)
6350 && event->ws.kind == TARGET_WAITKIND_STOPPED);
6351 }
6352
6353 /* Returns true if we have a stop reply for PTID. */
6354
6355 static int
6356 peek_stop_reply (ptid_t ptid)
6357 {
6358 return !QUEUE_iterate (stop_reply_p, stop_reply_queue,
6359 stop_reply_match_ptid_and_ws, &ptid);
6360 }
6361
6362 /* Helper for remote_parse_stop_reply. Return nonzero if the substring
6363 starting with P and ending with PEND matches PREFIX. */
6364
6365 static int
6366 strprefix (const char *p, const char *pend, const char *prefix)
6367 {
6368 for ( ; p < pend; p++, prefix++)
6369 if (*p != *prefix)
6370 return 0;
6371 return *prefix == '\0';
6372 }
6373
6374 /* Parse the stop reply in BUF. Either the function succeeds, and the
6375 result is stored in EVENT, or throws an error. */
6376
6377 static void
6378 remote_parse_stop_reply (char *buf, struct stop_reply *event)
6379 {
6380 struct remote_arch_state *rsa = get_remote_arch_state ();
6381 ULONGEST addr;
6382 char *p;
6383 int skipregs = 0;
6384
6385 event->ptid = null_ptid;
6386 event->rs = get_remote_state ();
6387 event->ws.kind = TARGET_WAITKIND_IGNORE;
6388 event->ws.value.integer = 0;
6389 event->stop_reason = TARGET_STOPPED_BY_NO_REASON;
6390 event->regcache = NULL;
6391 event->core = -1;
6392
6393 switch (buf[0])
6394 {
6395 case 'T': /* Status with PC, SP, FP, ... */
6396 /* Expedited reply, containing Signal, {regno, reg} repeat. */
6397 /* format is: 'Tssn...:r...;n...:r...;n...:r...;#cc', where
6398 ss = signal number
6399 n... = register number
6400 r... = register contents
6401 */
6402
6403 p = &buf[3]; /* after Txx */
6404 while (*p)
6405 {
6406 char *p1;
6407 int fieldsize;
6408
6409 p1 = strchr (p, ':');
6410 if (p1 == NULL)
6411 error (_("Malformed packet(a) (missing colon): %s\n\
6412 Packet: '%s'\n"),
6413 p, buf);
6414 if (p == p1)
6415 error (_("Malformed packet(a) (missing register number): %s\n\
6416 Packet: '%s'\n"),
6417 p, buf);
6418
6419 /* Some "registers" are actually extended stop information.
6420 Note if you're adding a new entry here: GDB 7.9 and
6421 earlier assume that all register "numbers" that start
6422 with an hex digit are real register numbers. Make sure
6423 the server only sends such a packet if it knows the
6424 client understands it. */
6425
6426 if (strprefix (p, p1, "thread"))
6427 event->ptid = read_ptid (++p1, &p);
6428 else if (strprefix (p, p1, "syscall_entry"))
6429 {
6430 ULONGEST sysno;
6431
6432 event->ws.kind = TARGET_WAITKIND_SYSCALL_ENTRY;
6433 p = unpack_varlen_hex (++p1, &sysno);
6434 event->ws.value.syscall_number = (int) sysno;
6435 }
6436 else if (strprefix (p, p1, "syscall_return"))
6437 {
6438 ULONGEST sysno;
6439
6440 event->ws.kind = TARGET_WAITKIND_SYSCALL_RETURN;
6441 p = unpack_varlen_hex (++p1, &sysno);
6442 event->ws.value.syscall_number = (int) sysno;
6443 }
6444 else if (strprefix (p, p1, "watch")
6445 || strprefix (p, p1, "rwatch")
6446 || strprefix (p, p1, "awatch"))
6447 {
6448 event->stop_reason = TARGET_STOPPED_BY_WATCHPOINT;
6449 p = unpack_varlen_hex (++p1, &addr);
6450 event->watch_data_address = (CORE_ADDR) addr;
6451 }
6452 else if (strprefix (p, p1, "swbreak"))
6453 {
6454 event->stop_reason = TARGET_STOPPED_BY_SW_BREAKPOINT;
6455
6456 /* Make sure the stub doesn't forget to indicate support
6457 with qSupported. */
6458 if (packet_support (PACKET_swbreak_feature) != PACKET_ENABLE)
6459 error (_("Unexpected swbreak stop reason"));
6460
6461 /* The value part is documented as "must be empty",
6462 though we ignore it, in case we ever decide to make
6463 use of it in a backward compatible way. */
6464 p = strchrnul (p1 + 1, ';');
6465 }
6466 else if (strprefix (p, p1, "hwbreak"))
6467 {
6468 event->stop_reason = TARGET_STOPPED_BY_HW_BREAKPOINT;
6469
6470 /* Make sure the stub doesn't forget to indicate support
6471 with qSupported. */
6472 if (packet_support (PACKET_hwbreak_feature) != PACKET_ENABLE)
6473 error (_("Unexpected hwbreak stop reason"));
6474
6475 /* See above. */
6476 p = strchrnul (p1 + 1, ';');
6477 }
6478 else if (strprefix (p, p1, "library"))
6479 {
6480 event->ws.kind = TARGET_WAITKIND_LOADED;
6481 p = strchrnul (p1 + 1, ';');
6482 }
6483 else if (strprefix (p, p1, "replaylog"))
6484 {
6485 event->ws.kind = TARGET_WAITKIND_NO_HISTORY;
6486 /* p1 will indicate "begin" or "end", but it makes
6487 no difference for now, so ignore it. */
6488 p = strchrnul (p1 + 1, ';');
6489 }
6490 else if (strprefix (p, p1, "core"))
6491 {
6492 ULONGEST c;
6493
6494 p = unpack_varlen_hex (++p1, &c);
6495 event->core = c;
6496 }
6497 else if (strprefix (p, p1, "fork"))
6498 {
6499 event->ws.value.related_pid = read_ptid (++p1, &p);
6500 event->ws.kind = TARGET_WAITKIND_FORKED;
6501 }
6502 else if (strprefix (p, p1, "vfork"))
6503 {
6504 event->ws.value.related_pid = read_ptid (++p1, &p);
6505 event->ws.kind = TARGET_WAITKIND_VFORKED;
6506 }
6507 else if (strprefix (p, p1, "vforkdone"))
6508 {
6509 event->ws.kind = TARGET_WAITKIND_VFORK_DONE;
6510 p = strchrnul (p1 + 1, ';');
6511 }
6512 else if (strprefix (p, p1, "exec"))
6513 {
6514 ULONGEST ignored;
6515 char pathname[PATH_MAX];
6516 int pathlen;
6517
6518 /* Determine the length of the execd pathname. */
6519 p = unpack_varlen_hex (++p1, &ignored);
6520 pathlen = (p - p1) / 2;
6521
6522 /* Save the pathname for event reporting and for
6523 the next run command. */
6524 hex2bin (p1, (gdb_byte *) pathname, pathlen);
6525 pathname[pathlen] = '\0';
6526
6527 /* This is freed during event handling. */
6528 event->ws.value.execd_pathname = xstrdup (pathname);
6529 event->ws.kind = TARGET_WAITKIND_EXECD;
6530
6531 /* Skip the registers included in this packet, since
6532 they may be for an architecture different from the
6533 one used by the original program. */
6534 skipregs = 1;
6535 }
6536 else if (strprefix (p, p1, "create"))
6537 {
6538 event->ws.kind = TARGET_WAITKIND_THREAD_CREATED;
6539 p = strchrnul (p1 + 1, ';');
6540 }
6541 else
6542 {
6543 ULONGEST pnum;
6544 char *p_temp;
6545
6546 if (skipregs)
6547 {
6548 p = strchrnul (p1 + 1, ';');
6549 p++;
6550 continue;
6551 }
6552
6553 /* Maybe a real ``P'' register number. */
6554 p_temp = unpack_varlen_hex (p, &pnum);
6555 /* If the first invalid character is the colon, we got a
6556 register number. Otherwise, it's an unknown stop
6557 reason. */
6558 if (p_temp == p1)
6559 {
6560 struct packet_reg *reg = packet_reg_from_pnum (rsa, pnum);
6561 cached_reg_t cached_reg;
6562
6563 if (reg == NULL)
6564 error (_("Remote sent bad register number %s: %s\n\
6565 Packet: '%s'\n"),
6566 hex_string (pnum), p, buf);
6567
6568 cached_reg.num = reg->regnum;
6569
6570 p = p1 + 1;
6571 fieldsize = hex2bin (p, cached_reg.data,
6572 register_size (target_gdbarch (),
6573 reg->regnum));
6574 p += 2 * fieldsize;
6575 if (fieldsize < register_size (target_gdbarch (),
6576 reg->regnum))
6577 warning (_("Remote reply is too short: %s"), buf);
6578
6579 VEC_safe_push (cached_reg_t, event->regcache, &cached_reg);
6580 }
6581 else
6582 {
6583 /* Not a number. Silently skip unknown optional
6584 info. */
6585 p = strchrnul (p1 + 1, ';');
6586 }
6587 }
6588
6589 if (*p != ';')
6590 error (_("Remote register badly formatted: %s\nhere: %s"),
6591 buf, p);
6592 ++p;
6593 }
6594
6595 if (event->ws.kind != TARGET_WAITKIND_IGNORE)
6596 break;
6597
6598 /* fall through */
6599 case 'S': /* Old style status, just signal only. */
6600 {
6601 int sig;
6602
6603 event->ws.kind = TARGET_WAITKIND_STOPPED;
6604 sig = (fromhex (buf[1]) << 4) + fromhex (buf[2]);
6605 if (GDB_SIGNAL_FIRST <= sig && sig < GDB_SIGNAL_LAST)
6606 event->ws.value.sig = (enum gdb_signal) sig;
6607 else
6608 event->ws.value.sig = GDB_SIGNAL_UNKNOWN;
6609 }
6610 break;
6611 case 'w': /* Thread exited. */
6612 {
6613 char *p;
6614 ULONGEST value;
6615
6616 event->ws.kind = TARGET_WAITKIND_THREAD_EXITED;
6617 p = unpack_varlen_hex (&buf[1], &value);
6618 event->ws.value.integer = value;
6619 if (*p != ';')
6620 error (_("stop reply packet badly formatted: %s"), buf);
6621 event->ptid = read_ptid (++p, NULL);
6622 break;
6623 }
6624 case 'W': /* Target exited. */
6625 case 'X':
6626 {
6627 char *p;
6628 int pid;
6629 ULONGEST value;
6630
6631 /* GDB used to accept only 2 hex chars here. Stubs should
6632 only send more if they detect GDB supports multi-process
6633 support. */
6634 p = unpack_varlen_hex (&buf[1], &value);
6635
6636 if (buf[0] == 'W')
6637 {
6638 /* The remote process exited. */
6639 event->ws.kind = TARGET_WAITKIND_EXITED;
6640 event->ws.value.integer = value;
6641 }
6642 else
6643 {
6644 /* The remote process exited with a signal. */
6645 event->ws.kind = TARGET_WAITKIND_SIGNALLED;
6646 if (GDB_SIGNAL_FIRST <= value && value < GDB_SIGNAL_LAST)
6647 event->ws.value.sig = (enum gdb_signal) value;
6648 else
6649 event->ws.value.sig = GDB_SIGNAL_UNKNOWN;
6650 }
6651
6652 /* If no process is specified, assume inferior_ptid. */
6653 pid = ptid_get_pid (inferior_ptid);
6654 if (*p == '\0')
6655 ;
6656 else if (*p == ';')
6657 {
6658 p++;
6659
6660 if (*p == '\0')
6661 ;
6662 else if (startswith (p, "process:"))
6663 {
6664 ULONGEST upid;
6665
6666 p += sizeof ("process:") - 1;
6667 unpack_varlen_hex (p, &upid);
6668 pid = upid;
6669 }
6670 else
6671 error (_("unknown stop reply packet: %s"), buf);
6672 }
6673 else
6674 error (_("unknown stop reply packet: %s"), buf);
6675 event->ptid = pid_to_ptid (pid);
6676 }
6677 break;
6678 case 'N':
6679 event->ws.kind = TARGET_WAITKIND_NO_RESUMED;
6680 event->ptid = minus_one_ptid;
6681 break;
6682 }
6683
6684 if (target_is_non_stop_p () && ptid_equal (event->ptid, null_ptid))
6685 error (_("No process or thread specified in stop reply: %s"), buf);
6686 }
6687
6688 /* When the stub wants to tell GDB about a new notification reply, it
6689 sends a notification (%Stop, for example). Those can come it at
6690 any time, hence, we have to make sure that any pending
6691 putpkt/getpkt sequence we're making is finished, before querying
6692 the stub for more events with the corresponding ack command
6693 (vStopped, for example). E.g., if we started a vStopped sequence
6694 immediately upon receiving the notification, something like this
6695 could happen:
6696
6697 1.1) --> Hg 1
6698 1.2) <-- OK
6699 1.3) --> g
6700 1.4) <-- %Stop
6701 1.5) --> vStopped
6702 1.6) <-- (registers reply to step #1.3)
6703
6704 Obviously, the reply in step #1.6 would be unexpected to a vStopped
6705 query.
6706
6707 To solve this, whenever we parse a %Stop notification successfully,
6708 we mark the REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN, and carry on
6709 doing whatever we were doing:
6710
6711 2.1) --> Hg 1
6712 2.2) <-- OK
6713 2.3) --> g
6714 2.4) <-- %Stop
6715 <GDB marks the REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN>
6716 2.5) <-- (registers reply to step #2.3)
6717
6718 Eventualy after step #2.5, we return to the event loop, which
6719 notices there's an event on the
6720 REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN event and calls the
6721 associated callback --- the function below. At this point, we're
6722 always safe to start a vStopped sequence. :
6723
6724 2.6) --> vStopped
6725 2.7) <-- T05 thread:2
6726 2.8) --> vStopped
6727 2.9) --> OK
6728 */
6729
6730 void
6731 remote_notif_get_pending_events (struct notif_client *nc)
6732 {
6733 struct remote_state *rs = get_remote_state ();
6734
6735 if (rs->notif_state->pending_event[nc->id] != NULL)
6736 {
6737 if (notif_debug)
6738 fprintf_unfiltered (gdb_stdlog,
6739 "notif: process: '%s' ack pending event\n",
6740 nc->name);
6741
6742 /* acknowledge */
6743 nc->ack (nc, rs->buf, rs->notif_state->pending_event[nc->id]);
6744 rs->notif_state->pending_event[nc->id] = NULL;
6745
6746 while (1)
6747 {
6748 getpkt (&rs->buf, &rs->buf_size, 0);
6749 if (strcmp (rs->buf, "OK") == 0)
6750 break;
6751 else
6752 remote_notif_ack (nc, rs->buf);
6753 }
6754 }
6755 else
6756 {
6757 if (notif_debug)
6758 fprintf_unfiltered (gdb_stdlog,
6759 "notif: process: '%s' no pending reply\n",
6760 nc->name);
6761 }
6762 }
6763
6764 /* Called when it is decided that STOP_REPLY holds the info of the
6765 event that is to be returned to the core. This function always
6766 destroys STOP_REPLY. */
6767
6768 static ptid_t
6769 process_stop_reply (struct stop_reply *stop_reply,
6770 struct target_waitstatus *status)
6771 {
6772 ptid_t ptid;
6773
6774 *status = stop_reply->ws;
6775 ptid = stop_reply->ptid;
6776
6777 /* If no thread/process was reported by the stub, assume the current
6778 inferior. */
6779 if (ptid_equal (ptid, null_ptid))
6780 ptid = inferior_ptid;
6781
6782 if (status->kind != TARGET_WAITKIND_EXITED
6783 && status->kind != TARGET_WAITKIND_SIGNALLED
6784 && status->kind != TARGET_WAITKIND_NO_RESUMED)
6785 {
6786 struct private_thread_info *remote_thr;
6787
6788 /* Expedited registers. */
6789 if (stop_reply->regcache)
6790 {
6791 struct regcache *regcache
6792 = get_thread_arch_regcache (ptid, target_gdbarch ());
6793 cached_reg_t *reg;
6794 int ix;
6795
6796 for (ix = 0;
6797 VEC_iterate(cached_reg_t, stop_reply->regcache, ix, reg);
6798 ix++)
6799 regcache_raw_supply (regcache, reg->num, reg->data);
6800 VEC_free (cached_reg_t, stop_reply->regcache);
6801 }
6802
6803 remote_notice_new_inferior (ptid, 0);
6804 remote_thr = demand_private_info (ptid);
6805 remote_thr->core = stop_reply->core;
6806 remote_thr->stop_reason = stop_reply->stop_reason;
6807 remote_thr->watch_data_address = stop_reply->watch_data_address;
6808 }
6809
6810 stop_reply_xfree (stop_reply);
6811 return ptid;
6812 }
6813
6814 /* The non-stop mode version of target_wait. */
6815
6816 static ptid_t
6817 remote_wait_ns (ptid_t ptid, struct target_waitstatus *status, int options)
6818 {
6819 struct remote_state *rs = get_remote_state ();
6820 struct stop_reply *stop_reply;
6821 int ret;
6822 int is_notif = 0;
6823
6824 /* If in non-stop mode, get out of getpkt even if a
6825 notification is received. */
6826
6827 ret = getpkt_or_notif_sane (&rs->buf, &rs->buf_size,
6828 0 /* forever */, &is_notif);
6829 while (1)
6830 {
6831 if (ret != -1 && !is_notif)
6832 switch (rs->buf[0])
6833 {
6834 case 'E': /* Error of some sort. */
6835 /* We're out of sync with the target now. Did it continue
6836 or not? We can't tell which thread it was in non-stop,
6837 so just ignore this. */
6838 warning (_("Remote failure reply: %s"), rs->buf);
6839 break;
6840 case 'O': /* Console output. */
6841 remote_console_output (rs->buf + 1);
6842 break;
6843 default:
6844 warning (_("Invalid remote reply: %s"), rs->buf);
6845 break;
6846 }
6847
6848 /* Acknowledge a pending stop reply that may have arrived in the
6849 mean time. */
6850 if (rs->notif_state->pending_event[notif_client_stop.id] != NULL)
6851 remote_notif_get_pending_events (&notif_client_stop);
6852
6853 /* If indeed we noticed a stop reply, we're done. */
6854 stop_reply = queued_stop_reply (ptid);
6855 if (stop_reply != NULL)
6856 return process_stop_reply (stop_reply, status);
6857
6858 /* Still no event. If we're just polling for an event, then
6859 return to the event loop. */
6860 if (options & TARGET_WNOHANG)
6861 {
6862 status->kind = TARGET_WAITKIND_IGNORE;
6863 return minus_one_ptid;
6864 }
6865
6866 /* Otherwise do a blocking wait. */
6867 ret = getpkt_or_notif_sane (&rs->buf, &rs->buf_size,
6868 1 /* forever */, &is_notif);
6869 }
6870 }
6871
6872 /* Wait until the remote machine stops, then return, storing status in
6873 STATUS just as `wait' would. */
6874
6875 static ptid_t
6876 remote_wait_as (ptid_t ptid, struct target_waitstatus *status, int options)
6877 {
6878 struct remote_state *rs = get_remote_state ();
6879 ptid_t event_ptid = null_ptid;
6880 char *buf;
6881 struct stop_reply *stop_reply;
6882
6883 again:
6884
6885 status->kind = TARGET_WAITKIND_IGNORE;
6886 status->value.integer = 0;
6887
6888 stop_reply = queued_stop_reply (ptid);
6889 if (stop_reply != NULL)
6890 return process_stop_reply (stop_reply, status);
6891
6892 if (rs->cached_wait_status)
6893 /* Use the cached wait status, but only once. */
6894 rs->cached_wait_status = 0;
6895 else
6896 {
6897 int ret;
6898 int is_notif;
6899 int forever = ((options & TARGET_WNOHANG) == 0
6900 && wait_forever_enabled_p);
6901
6902 if (!rs->waiting_for_stop_reply)
6903 {
6904 status->kind = TARGET_WAITKIND_NO_RESUMED;
6905 return minus_one_ptid;
6906 }
6907
6908 /* FIXME: cagney/1999-09-27: If we're in async mode we should
6909 _never_ wait for ever -> test on target_is_async_p().
6910 However, before we do that we need to ensure that the caller
6911 knows how to take the target into/out of async mode. */
6912 ret = getpkt_or_notif_sane (&rs->buf, &rs->buf_size,
6913 forever, &is_notif);
6914
6915 /* GDB gets a notification. Return to core as this event is
6916 not interesting. */
6917 if (ret != -1 && is_notif)
6918 return minus_one_ptid;
6919
6920 if (ret == -1 && (options & TARGET_WNOHANG) != 0)
6921 return minus_one_ptid;
6922 }
6923
6924 buf = rs->buf;
6925
6926 /* Assume that the target has acknowledged Ctrl-C unless we receive
6927 an 'F' or 'O' packet. */
6928 if (buf[0] != 'F' && buf[0] != 'O')
6929 rs->ctrlc_pending_p = 0;
6930
6931 switch (buf[0])
6932 {
6933 case 'E': /* Error of some sort. */
6934 /* We're out of sync with the target now. Did it continue or
6935 not? Not is more likely, so report a stop. */
6936 rs->waiting_for_stop_reply = 0;
6937
6938 warning (_("Remote failure reply: %s"), buf);
6939 status->kind = TARGET_WAITKIND_STOPPED;
6940 status->value.sig = GDB_SIGNAL_0;
6941 break;
6942 case 'F': /* File-I/O request. */
6943 /* GDB may access the inferior memory while handling the File-I/O
6944 request, but we don't want GDB accessing memory while waiting
6945 for a stop reply. See the comments in putpkt_binary. Set
6946 waiting_for_stop_reply to 0 temporarily. */
6947 rs->waiting_for_stop_reply = 0;
6948 remote_fileio_request (buf, rs->ctrlc_pending_p);
6949 rs->ctrlc_pending_p = 0;
6950 /* GDB handled the File-I/O request, and the target is running
6951 again. Keep waiting for events. */
6952 rs->waiting_for_stop_reply = 1;
6953 break;
6954 case 'N': case 'T': case 'S': case 'X': case 'W':
6955 {
6956 struct stop_reply *stop_reply;
6957
6958 /* There is a stop reply to handle. */
6959 rs->waiting_for_stop_reply = 0;
6960
6961 stop_reply
6962 = (struct stop_reply *) remote_notif_parse (&notif_client_stop,
6963 rs->buf);
6964
6965 event_ptid = process_stop_reply (stop_reply, status);
6966 break;
6967 }
6968 case 'O': /* Console output. */
6969 remote_console_output (buf + 1);
6970 break;
6971 case '\0':
6972 if (rs->last_sent_signal != GDB_SIGNAL_0)
6973 {
6974 /* Zero length reply means that we tried 'S' or 'C' and the
6975 remote system doesn't support it. */
6976 target_terminal_ours_for_output ();
6977 printf_filtered
6978 ("Can't send signals to this remote system. %s not sent.\n",
6979 gdb_signal_to_name (rs->last_sent_signal));
6980 rs->last_sent_signal = GDB_SIGNAL_0;
6981 target_terminal_inferior ();
6982
6983 strcpy (buf, rs->last_sent_step ? "s" : "c");
6984 putpkt (buf);
6985 break;
6986 }
6987 /* else fallthrough */
6988 default:
6989 warning (_("Invalid remote reply: %s"), buf);
6990 break;
6991 }
6992
6993 if (status->kind == TARGET_WAITKIND_NO_RESUMED)
6994 return minus_one_ptid;
6995 else if (status->kind == TARGET_WAITKIND_IGNORE)
6996 {
6997 /* Nothing interesting happened. If we're doing a non-blocking
6998 poll, we're done. Otherwise, go back to waiting. */
6999 if (options & TARGET_WNOHANG)
7000 return minus_one_ptid;
7001 else
7002 goto again;
7003 }
7004 else if (status->kind != TARGET_WAITKIND_EXITED
7005 && status->kind != TARGET_WAITKIND_SIGNALLED)
7006 {
7007 if (!ptid_equal (event_ptid, null_ptid))
7008 record_currthread (rs, event_ptid);
7009 else
7010 event_ptid = inferior_ptid;
7011 }
7012 else
7013 /* A process exit. Invalidate our notion of current thread. */
7014 record_currthread (rs, minus_one_ptid);
7015
7016 return event_ptid;
7017 }
7018
7019 /* Wait until the remote machine stops, then return, storing status in
7020 STATUS just as `wait' would. */
7021
7022 static ptid_t
7023 remote_wait (struct target_ops *ops,
7024 ptid_t ptid, struct target_waitstatus *status, int options)
7025 {
7026 ptid_t event_ptid;
7027
7028 if (target_is_non_stop_p ())
7029 event_ptid = remote_wait_ns (ptid, status, options);
7030 else
7031 event_ptid = remote_wait_as (ptid, status, options);
7032
7033 if (target_is_async_p ())
7034 {
7035 /* If there are are events left in the queue tell the event loop
7036 to return here. */
7037 if (!QUEUE_is_empty (stop_reply_p, stop_reply_queue))
7038 mark_async_event_handler (remote_async_inferior_event_token);
7039 }
7040
7041 return event_ptid;
7042 }
7043
7044 /* Fetch a single register using a 'p' packet. */
7045
7046 static int
7047 fetch_register_using_p (struct regcache *regcache, struct packet_reg *reg)
7048 {
7049 struct remote_state *rs = get_remote_state ();
7050 char *buf, *p;
7051 char regp[MAX_REGISTER_SIZE];
7052 int i;
7053
7054 if (packet_support (PACKET_p) == PACKET_DISABLE)
7055 return 0;
7056
7057 if (reg->pnum == -1)
7058 return 0;
7059
7060 p = rs->buf;
7061 *p++ = 'p';
7062 p += hexnumstr (p, reg->pnum);
7063 *p++ = '\0';
7064 putpkt (rs->buf);
7065 getpkt (&rs->buf, &rs->buf_size, 0);
7066
7067 buf = rs->buf;
7068
7069 switch (packet_ok (buf, &remote_protocol_packets[PACKET_p]))
7070 {
7071 case PACKET_OK:
7072 break;
7073 case PACKET_UNKNOWN:
7074 return 0;
7075 case PACKET_ERROR:
7076 error (_("Could not fetch register \"%s\"; remote failure reply '%s'"),
7077 gdbarch_register_name (get_regcache_arch (regcache),
7078 reg->regnum),
7079 buf);
7080 }
7081
7082 /* If this register is unfetchable, tell the regcache. */
7083 if (buf[0] == 'x')
7084 {
7085 regcache_raw_supply (regcache, reg->regnum, NULL);
7086 return 1;
7087 }
7088
7089 /* Otherwise, parse and supply the value. */
7090 p = buf;
7091 i = 0;
7092 while (p[0] != 0)
7093 {
7094 if (p[1] == 0)
7095 error (_("fetch_register_using_p: early buf termination"));
7096
7097 regp[i++] = fromhex (p[0]) * 16 + fromhex (p[1]);
7098 p += 2;
7099 }
7100 regcache_raw_supply (regcache, reg->regnum, regp);
7101 return 1;
7102 }
7103
7104 /* Fetch the registers included in the target's 'g' packet. */
7105
7106 static int
7107 send_g_packet (void)
7108 {
7109 struct remote_state *rs = get_remote_state ();
7110 int buf_len;
7111
7112 xsnprintf (rs->buf, get_remote_packet_size (), "g");
7113 remote_send (&rs->buf, &rs->buf_size);
7114
7115 /* We can get out of synch in various cases. If the first character
7116 in the buffer is not a hex character, assume that has happened
7117 and try to fetch another packet to read. */
7118 while ((rs->buf[0] < '0' || rs->buf[0] > '9')
7119 && (rs->buf[0] < 'A' || rs->buf[0] > 'F')
7120 && (rs->buf[0] < 'a' || rs->buf[0] > 'f')
7121 && rs->buf[0] != 'x') /* New: unavailable register value. */
7122 {
7123 if (remote_debug)
7124 fprintf_unfiltered (gdb_stdlog,
7125 "Bad register packet; fetching a new packet\n");
7126 getpkt (&rs->buf, &rs->buf_size, 0);
7127 }
7128
7129 buf_len = strlen (rs->buf);
7130
7131 /* Sanity check the received packet. */
7132 if (buf_len % 2 != 0)
7133 error (_("Remote 'g' packet reply is of odd length: %s"), rs->buf);
7134
7135 return buf_len / 2;
7136 }
7137
7138 static void
7139 process_g_packet (struct regcache *regcache)
7140 {
7141 struct gdbarch *gdbarch = get_regcache_arch (regcache);
7142 struct remote_state *rs = get_remote_state ();
7143 struct remote_arch_state *rsa = get_remote_arch_state ();
7144 int i, buf_len;
7145 char *p;
7146 char *regs;
7147
7148 buf_len = strlen (rs->buf);
7149
7150 /* Further sanity checks, with knowledge of the architecture. */
7151 if (buf_len > 2 * rsa->sizeof_g_packet)
7152 error (_("Remote 'g' packet reply is too long: %s"), rs->buf);
7153
7154 /* Save the size of the packet sent to us by the target. It is used
7155 as a heuristic when determining the max size of packets that the
7156 target can safely receive. */
7157 if (rsa->actual_register_packet_size == 0)
7158 rsa->actual_register_packet_size = buf_len;
7159
7160 /* If this is smaller than we guessed the 'g' packet would be,
7161 update our records. A 'g' reply that doesn't include a register's
7162 value implies either that the register is not available, or that
7163 the 'p' packet must be used. */
7164 if (buf_len < 2 * rsa->sizeof_g_packet)
7165 {
7166 rsa->sizeof_g_packet = buf_len / 2;
7167
7168 for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
7169 {
7170 if (rsa->regs[i].pnum == -1)
7171 continue;
7172
7173 if (rsa->regs[i].offset >= rsa->sizeof_g_packet)
7174 rsa->regs[i].in_g_packet = 0;
7175 else
7176 rsa->regs[i].in_g_packet = 1;
7177 }
7178 }
7179
7180 regs = (char *) alloca (rsa->sizeof_g_packet);
7181
7182 /* Unimplemented registers read as all bits zero. */
7183 memset (regs, 0, rsa->sizeof_g_packet);
7184
7185 /* Reply describes registers byte by byte, each byte encoded as two
7186 hex characters. Suck them all up, then supply them to the
7187 register cacheing/storage mechanism. */
7188
7189 p = rs->buf;
7190 for (i = 0; i < rsa->sizeof_g_packet; i++)
7191 {
7192 if (p[0] == 0 || p[1] == 0)
7193 /* This shouldn't happen - we adjusted sizeof_g_packet above. */
7194 internal_error (__FILE__, __LINE__,
7195 _("unexpected end of 'g' packet reply"));
7196
7197 if (p[0] == 'x' && p[1] == 'x')
7198 regs[i] = 0; /* 'x' */
7199 else
7200 regs[i] = fromhex (p[0]) * 16 + fromhex (p[1]);
7201 p += 2;
7202 }
7203
7204 for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
7205 {
7206 struct packet_reg *r = &rsa->regs[i];
7207
7208 if (r->in_g_packet)
7209 {
7210 if (r->offset * 2 >= strlen (rs->buf))
7211 /* This shouldn't happen - we adjusted in_g_packet above. */
7212 internal_error (__FILE__, __LINE__,
7213 _("unexpected end of 'g' packet reply"));
7214 else if (rs->buf[r->offset * 2] == 'x')
7215 {
7216 gdb_assert (r->offset * 2 < strlen (rs->buf));
7217 /* The register isn't available, mark it as such (at
7218 the same time setting the value to zero). */
7219 regcache_raw_supply (regcache, r->regnum, NULL);
7220 }
7221 else
7222 regcache_raw_supply (regcache, r->regnum,
7223 regs + r->offset);
7224 }
7225 }
7226 }
7227
7228 static void
7229 fetch_registers_using_g (struct regcache *regcache)
7230 {
7231 send_g_packet ();
7232 process_g_packet (regcache);
7233 }
7234
7235 /* Make the remote selected traceframe match GDB's selected
7236 traceframe. */
7237
7238 static void
7239 set_remote_traceframe (void)
7240 {
7241 int newnum;
7242 struct remote_state *rs = get_remote_state ();
7243
7244 if (rs->remote_traceframe_number == get_traceframe_number ())
7245 return;
7246
7247 /* Avoid recursion, remote_trace_find calls us again. */
7248 rs->remote_traceframe_number = get_traceframe_number ();
7249
7250 newnum = target_trace_find (tfind_number,
7251 get_traceframe_number (), 0, 0, NULL);
7252
7253 /* Should not happen. If it does, all bets are off. */
7254 if (newnum != get_traceframe_number ())
7255 warning (_("could not set remote traceframe"));
7256 }
7257
7258 static void
7259 remote_fetch_registers (struct target_ops *ops,
7260 struct regcache *regcache, int regnum)
7261 {
7262 struct remote_arch_state *rsa = get_remote_arch_state ();
7263 int i;
7264
7265 set_remote_traceframe ();
7266 set_general_thread (inferior_ptid);
7267
7268 if (regnum >= 0)
7269 {
7270 struct packet_reg *reg = packet_reg_from_regnum (rsa, regnum);
7271
7272 gdb_assert (reg != NULL);
7273
7274 /* If this register might be in the 'g' packet, try that first -
7275 we are likely to read more than one register. If this is the
7276 first 'g' packet, we might be overly optimistic about its
7277 contents, so fall back to 'p'. */
7278 if (reg->in_g_packet)
7279 {
7280 fetch_registers_using_g (regcache);
7281 if (reg->in_g_packet)
7282 return;
7283 }
7284
7285 if (fetch_register_using_p (regcache, reg))
7286 return;
7287
7288 /* This register is not available. */
7289 regcache_raw_supply (regcache, reg->regnum, NULL);
7290
7291 return;
7292 }
7293
7294 fetch_registers_using_g (regcache);
7295
7296 for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++)
7297 if (!rsa->regs[i].in_g_packet)
7298 if (!fetch_register_using_p (regcache, &rsa->regs[i]))
7299 {
7300 /* This register is not available. */
7301 regcache_raw_supply (regcache, i, NULL);
7302 }
7303 }
7304
7305 /* Prepare to store registers. Since we may send them all (using a
7306 'G' request), we have to read out the ones we don't want to change
7307 first. */
7308
7309 static void
7310 remote_prepare_to_store (struct target_ops *self, struct regcache *regcache)
7311 {
7312 struct remote_arch_state *rsa = get_remote_arch_state ();
7313 int i;
7314 gdb_byte buf[MAX_REGISTER_SIZE];
7315
7316 /* Make sure the entire registers array is valid. */
7317 switch (packet_support (PACKET_P))
7318 {
7319 case PACKET_DISABLE:
7320 case PACKET_SUPPORT_UNKNOWN:
7321 /* Make sure all the necessary registers are cached. */
7322 for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++)
7323 if (rsa->regs[i].in_g_packet)
7324 regcache_raw_read (regcache, rsa->regs[i].regnum, buf);
7325 break;
7326 case PACKET_ENABLE:
7327 break;
7328 }
7329 }
7330
7331 /* Helper: Attempt to store REGNUM using the P packet. Return fail IFF
7332 packet was not recognized. */
7333
7334 static int
7335 store_register_using_P (const struct regcache *regcache,
7336 struct packet_reg *reg)
7337 {
7338 struct gdbarch *gdbarch = get_regcache_arch (regcache);
7339 struct remote_state *rs = get_remote_state ();
7340 /* Try storing a single register. */
7341 char *buf = rs->buf;
7342 gdb_byte regp[MAX_REGISTER_SIZE];
7343 char *p;
7344
7345 if (packet_support (PACKET_P) == PACKET_DISABLE)
7346 return 0;
7347
7348 if (reg->pnum == -1)
7349 return 0;
7350
7351 xsnprintf (buf, get_remote_packet_size (), "P%s=", phex_nz (reg->pnum, 0));
7352 p = buf + strlen (buf);
7353 regcache_raw_collect (regcache, reg->regnum, regp);
7354 bin2hex (regp, p, register_size (gdbarch, reg->regnum));
7355 putpkt (rs->buf);
7356 getpkt (&rs->buf, &rs->buf_size, 0);
7357
7358 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_P]))
7359 {
7360 case PACKET_OK:
7361 return 1;
7362 case PACKET_ERROR:
7363 error (_("Could not write register \"%s\"; remote failure reply '%s'"),
7364 gdbarch_register_name (gdbarch, reg->regnum), rs->buf);
7365 case PACKET_UNKNOWN:
7366 return 0;
7367 default:
7368 internal_error (__FILE__, __LINE__, _("Bad result from packet_ok"));
7369 }
7370 }
7371
7372 /* Store register REGNUM, or all registers if REGNUM == -1, from the
7373 contents of the register cache buffer. FIXME: ignores errors. */
7374
7375 static void
7376 store_registers_using_G (const struct regcache *regcache)
7377 {
7378 struct remote_state *rs = get_remote_state ();
7379 struct remote_arch_state *rsa = get_remote_arch_state ();
7380 gdb_byte *regs;
7381 char *p;
7382
7383 /* Extract all the registers in the regcache copying them into a
7384 local buffer. */
7385 {
7386 int i;
7387
7388 regs = (gdb_byte *) alloca (rsa->sizeof_g_packet);
7389 memset (regs, 0, rsa->sizeof_g_packet);
7390 for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++)
7391 {
7392 struct packet_reg *r = &rsa->regs[i];
7393
7394 if (r->in_g_packet)
7395 regcache_raw_collect (regcache, r->regnum, regs + r->offset);
7396 }
7397 }
7398
7399 /* Command describes registers byte by byte,
7400 each byte encoded as two hex characters. */
7401 p = rs->buf;
7402 *p++ = 'G';
7403 /* remote_prepare_to_store insures that rsa->sizeof_g_packet gets
7404 updated. */
7405 bin2hex (regs, p, rsa->sizeof_g_packet);
7406 putpkt (rs->buf);
7407 getpkt (&rs->buf, &rs->buf_size, 0);
7408 if (packet_check_result (rs->buf) == PACKET_ERROR)
7409 error (_("Could not write registers; remote failure reply '%s'"),
7410 rs->buf);
7411 }
7412
7413 /* Store register REGNUM, or all registers if REGNUM == -1, from the contents
7414 of the register cache buffer. FIXME: ignores errors. */
7415
7416 static void
7417 remote_store_registers (struct target_ops *ops,
7418 struct regcache *regcache, int regnum)
7419 {
7420 struct remote_arch_state *rsa = get_remote_arch_state ();
7421 int i;
7422
7423 set_remote_traceframe ();
7424 set_general_thread (inferior_ptid);
7425
7426 if (regnum >= 0)
7427 {
7428 struct packet_reg *reg = packet_reg_from_regnum (rsa, regnum);
7429
7430 gdb_assert (reg != NULL);
7431
7432 /* Always prefer to store registers using the 'P' packet if
7433 possible; we often change only a small number of registers.
7434 Sometimes we change a larger number; we'd need help from a
7435 higher layer to know to use 'G'. */
7436 if (store_register_using_P (regcache, reg))
7437 return;
7438
7439 /* For now, don't complain if we have no way to write the
7440 register. GDB loses track of unavailable registers too
7441 easily. Some day, this may be an error. We don't have
7442 any way to read the register, either... */
7443 if (!reg->in_g_packet)
7444 return;
7445
7446 store_registers_using_G (regcache);
7447 return;
7448 }
7449
7450 store_registers_using_G (regcache);
7451
7452 for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++)
7453 if (!rsa->regs[i].in_g_packet)
7454 if (!store_register_using_P (regcache, &rsa->regs[i]))
7455 /* See above for why we do not issue an error here. */
7456 continue;
7457 }
7458 \f
7459
7460 /* Return the number of hex digits in num. */
7461
7462 static int
7463 hexnumlen (ULONGEST num)
7464 {
7465 int i;
7466
7467 for (i = 0; num != 0; i++)
7468 num >>= 4;
7469
7470 return std::max (i, 1);
7471 }
7472
7473 /* Set BUF to the minimum number of hex digits representing NUM. */
7474
7475 static int
7476 hexnumstr (char *buf, ULONGEST num)
7477 {
7478 int len = hexnumlen (num);
7479
7480 return hexnumnstr (buf, num, len);
7481 }
7482
7483
7484 /* Set BUF to the hex digits representing NUM, padded to WIDTH characters. */
7485
7486 static int
7487 hexnumnstr (char *buf, ULONGEST num, int width)
7488 {
7489 int i;
7490
7491 buf[width] = '\0';
7492
7493 for (i = width - 1; i >= 0; i--)
7494 {
7495 buf[i] = "0123456789abcdef"[(num & 0xf)];
7496 num >>= 4;
7497 }
7498
7499 return width;
7500 }
7501
7502 /* Mask all but the least significant REMOTE_ADDRESS_SIZE bits. */
7503
7504 static CORE_ADDR
7505 remote_address_masked (CORE_ADDR addr)
7506 {
7507 unsigned int address_size = remote_address_size;
7508
7509 /* If "remoteaddresssize" was not set, default to target address size. */
7510 if (!address_size)
7511 address_size = gdbarch_addr_bit (target_gdbarch ());
7512
7513 if (address_size > 0
7514 && address_size < (sizeof (ULONGEST) * 8))
7515 {
7516 /* Only create a mask when that mask can safely be constructed
7517 in a ULONGEST variable. */
7518 ULONGEST mask = 1;
7519
7520 mask = (mask << address_size) - 1;
7521 addr &= mask;
7522 }
7523 return addr;
7524 }
7525
7526 /* Determine whether the remote target supports binary downloading.
7527 This is accomplished by sending a no-op memory write of zero length
7528 to the target at the specified address. It does not suffice to send
7529 the whole packet, since many stubs strip the eighth bit and
7530 subsequently compute a wrong checksum, which causes real havoc with
7531 remote_write_bytes.
7532
7533 NOTE: This can still lose if the serial line is not eight-bit
7534 clean. In cases like this, the user should clear "remote
7535 X-packet". */
7536
7537 static void
7538 check_binary_download (CORE_ADDR addr)
7539 {
7540 struct remote_state *rs = get_remote_state ();
7541
7542 switch (packet_support (PACKET_X))
7543 {
7544 case PACKET_DISABLE:
7545 break;
7546 case PACKET_ENABLE:
7547 break;
7548 case PACKET_SUPPORT_UNKNOWN:
7549 {
7550 char *p;
7551
7552 p = rs->buf;
7553 *p++ = 'X';
7554 p += hexnumstr (p, (ULONGEST) addr);
7555 *p++ = ',';
7556 p += hexnumstr (p, (ULONGEST) 0);
7557 *p++ = ':';
7558 *p = '\0';
7559
7560 putpkt_binary (rs->buf, (int) (p - rs->buf));
7561 getpkt (&rs->buf, &rs->buf_size, 0);
7562
7563 if (rs->buf[0] == '\0')
7564 {
7565 if (remote_debug)
7566 fprintf_unfiltered (gdb_stdlog,
7567 "binary downloading NOT "
7568 "supported by target\n");
7569 remote_protocol_packets[PACKET_X].support = PACKET_DISABLE;
7570 }
7571 else
7572 {
7573 if (remote_debug)
7574 fprintf_unfiltered (gdb_stdlog,
7575 "binary downloading supported by target\n");
7576 remote_protocol_packets[PACKET_X].support = PACKET_ENABLE;
7577 }
7578 break;
7579 }
7580 }
7581 }
7582
7583 /* Helper function to resize the payload in order to try to get a good
7584 alignment. We try to write an amount of data such that the next write will
7585 start on an address aligned on REMOTE_ALIGN_WRITES. */
7586
7587 static int
7588 align_for_efficient_write (int todo, CORE_ADDR memaddr)
7589 {
7590 return ((memaddr + todo) & ~(REMOTE_ALIGN_WRITES - 1)) - memaddr;
7591 }
7592
7593 /* Write memory data directly to the remote machine.
7594 This does not inform the data cache; the data cache uses this.
7595 HEADER is the starting part of the packet.
7596 MEMADDR is the address in the remote memory space.
7597 MYADDR is the address of the buffer in our space.
7598 LEN_UNITS is the number of addressable units to write.
7599 UNIT_SIZE is the length in bytes of an addressable unit.
7600 PACKET_FORMAT should be either 'X' or 'M', and indicates if we
7601 should send data as binary ('X'), or hex-encoded ('M').
7602
7603 The function creates packet of the form
7604 <HEADER><ADDRESS>,<LENGTH>:<DATA>
7605
7606 where encoding of <DATA> is terminated by PACKET_FORMAT.
7607
7608 If USE_LENGTH is 0, then the <LENGTH> field and the preceding comma
7609 are omitted.
7610
7611 Return the transferred status, error or OK (an
7612 'enum target_xfer_status' value). Save the number of addressable units
7613 transferred in *XFERED_LEN_UNITS. Only transfer a single packet.
7614
7615 On a platform with an addressable memory size of 2 bytes (UNIT_SIZE == 2), an
7616 exchange between gdb and the stub could look like (?? in place of the
7617 checksum):
7618
7619 -> $m1000,4#??
7620 <- aaaabbbbccccdddd
7621
7622 -> $M1000,3:eeeeffffeeee#??
7623 <- OK
7624
7625 -> $m1000,4#??
7626 <- eeeeffffeeeedddd */
7627
7628 static enum target_xfer_status
7629 remote_write_bytes_aux (const char *header, CORE_ADDR memaddr,
7630 const gdb_byte *myaddr, ULONGEST len_units,
7631 int unit_size, ULONGEST *xfered_len_units,
7632 char packet_format, int use_length)
7633 {
7634 struct remote_state *rs = get_remote_state ();
7635 char *p;
7636 char *plen = NULL;
7637 int plenlen = 0;
7638 int todo_units;
7639 int units_written;
7640 int payload_capacity_bytes;
7641 int payload_length_bytes;
7642
7643 if (packet_format != 'X' && packet_format != 'M')
7644 internal_error (__FILE__, __LINE__,
7645 _("remote_write_bytes_aux: bad packet format"));
7646
7647 if (len_units == 0)
7648 return TARGET_XFER_EOF;
7649
7650 payload_capacity_bytes = get_memory_write_packet_size ();
7651
7652 /* The packet buffer will be large enough for the payload;
7653 get_memory_packet_size ensures this. */
7654 rs->buf[0] = '\0';
7655
7656 /* Compute the size of the actual payload by subtracting out the
7657 packet header and footer overhead: "$M<memaddr>,<len>:...#nn". */
7658
7659 payload_capacity_bytes -= strlen ("$,:#NN");
7660 if (!use_length)
7661 /* The comma won't be used. */
7662 payload_capacity_bytes += 1;
7663 payload_capacity_bytes -= strlen (header);
7664 payload_capacity_bytes -= hexnumlen (memaddr);
7665
7666 /* Construct the packet excluding the data: "<header><memaddr>,<len>:". */
7667
7668 strcat (rs->buf, header);
7669 p = rs->buf + strlen (header);
7670
7671 /* Compute a best guess of the number of bytes actually transfered. */
7672 if (packet_format == 'X')
7673 {
7674 /* Best guess at number of bytes that will fit. */
7675 todo_units = std::min (len_units,
7676 (ULONGEST) payload_capacity_bytes / unit_size);
7677 if (use_length)
7678 payload_capacity_bytes -= hexnumlen (todo_units);
7679 todo_units = std::min (todo_units, payload_capacity_bytes / unit_size);
7680 }
7681 else
7682 {
7683 /* Number of bytes that will fit. */
7684 todo_units
7685 = std::min (len_units,
7686 (ULONGEST) (payload_capacity_bytes / unit_size) / 2);
7687 if (use_length)
7688 payload_capacity_bytes -= hexnumlen (todo_units);
7689 todo_units = std::min (todo_units,
7690 (payload_capacity_bytes / unit_size) / 2);
7691 }
7692
7693 if (todo_units <= 0)
7694 internal_error (__FILE__, __LINE__,
7695 _("minimum packet size too small to write data"));
7696
7697 /* If we already need another packet, then try to align the end
7698 of this packet to a useful boundary. */
7699 if (todo_units > 2 * REMOTE_ALIGN_WRITES && todo_units < len_units)
7700 todo_units = align_for_efficient_write (todo_units, memaddr);
7701
7702 /* Append "<memaddr>". */
7703 memaddr = remote_address_masked (memaddr);
7704 p += hexnumstr (p, (ULONGEST) memaddr);
7705
7706 if (use_length)
7707 {
7708 /* Append ",". */
7709 *p++ = ',';
7710
7711 /* Append the length and retain its location and size. It may need to be
7712 adjusted once the packet body has been created. */
7713 plen = p;
7714 plenlen = hexnumstr (p, (ULONGEST) todo_units);
7715 p += plenlen;
7716 }
7717
7718 /* Append ":". */
7719 *p++ = ':';
7720 *p = '\0';
7721
7722 /* Append the packet body. */
7723 if (packet_format == 'X')
7724 {
7725 /* Binary mode. Send target system values byte by byte, in
7726 increasing byte addresses. Only escape certain critical
7727 characters. */
7728 payload_length_bytes =
7729 remote_escape_output (myaddr, todo_units, unit_size, (gdb_byte *) p,
7730 &units_written, payload_capacity_bytes);
7731
7732 /* If not all TODO units fit, then we'll need another packet. Make
7733 a second try to keep the end of the packet aligned. Don't do
7734 this if the packet is tiny. */
7735 if (units_written < todo_units && units_written > 2 * REMOTE_ALIGN_WRITES)
7736 {
7737 int new_todo_units;
7738
7739 new_todo_units = align_for_efficient_write (units_written, memaddr);
7740
7741 if (new_todo_units != units_written)
7742 payload_length_bytes =
7743 remote_escape_output (myaddr, new_todo_units, unit_size,
7744 (gdb_byte *) p, &units_written,
7745 payload_capacity_bytes);
7746 }
7747
7748 p += payload_length_bytes;
7749 if (use_length && units_written < todo_units)
7750 {
7751 /* Escape chars have filled up the buffer prematurely,
7752 and we have actually sent fewer units than planned.
7753 Fix-up the length field of the packet. Use the same
7754 number of characters as before. */
7755 plen += hexnumnstr (plen, (ULONGEST) units_written,
7756 plenlen);
7757 *plen = ':'; /* overwrite \0 from hexnumnstr() */
7758 }
7759 }
7760 else
7761 {
7762 /* Normal mode: Send target system values byte by byte, in
7763 increasing byte addresses. Each byte is encoded as a two hex
7764 value. */
7765 p += 2 * bin2hex (myaddr, p, todo_units * unit_size);
7766 units_written = todo_units;
7767 }
7768
7769 putpkt_binary (rs->buf, (int) (p - rs->buf));
7770 getpkt (&rs->buf, &rs->buf_size, 0);
7771
7772 if (rs->buf[0] == 'E')
7773 return TARGET_XFER_E_IO;
7774
7775 /* Return UNITS_WRITTEN, not TODO_UNITS, in case escape chars caused us to
7776 send fewer units than we'd planned. */
7777 *xfered_len_units = (ULONGEST) units_written;
7778 return TARGET_XFER_OK;
7779 }
7780
7781 /* Write memory data directly to the remote machine.
7782 This does not inform the data cache; the data cache uses this.
7783 MEMADDR is the address in the remote memory space.
7784 MYADDR is the address of the buffer in our space.
7785 LEN is the number of bytes.
7786
7787 Return the transferred status, error or OK (an
7788 'enum target_xfer_status' value). Save the number of bytes
7789 transferred in *XFERED_LEN. Only transfer a single packet. */
7790
7791 static enum target_xfer_status
7792 remote_write_bytes (CORE_ADDR memaddr, const gdb_byte *myaddr, ULONGEST len,
7793 int unit_size, ULONGEST *xfered_len)
7794 {
7795 char *packet_format = 0;
7796
7797 /* Check whether the target supports binary download. */
7798 check_binary_download (memaddr);
7799
7800 switch (packet_support (PACKET_X))
7801 {
7802 case PACKET_ENABLE:
7803 packet_format = "X";
7804 break;
7805 case PACKET_DISABLE:
7806 packet_format = "M";
7807 break;
7808 case PACKET_SUPPORT_UNKNOWN:
7809 internal_error (__FILE__, __LINE__,
7810 _("remote_write_bytes: bad internal state"));
7811 default:
7812 internal_error (__FILE__, __LINE__, _("bad switch"));
7813 }
7814
7815 return remote_write_bytes_aux (packet_format,
7816 memaddr, myaddr, len, unit_size, xfered_len,
7817 packet_format[0], 1);
7818 }
7819
7820 /* Read memory data directly from the remote machine.
7821 This does not use the data cache; the data cache uses this.
7822 MEMADDR is the address in the remote memory space.
7823 MYADDR is the address of the buffer in our space.
7824 LEN_UNITS is the number of addressable memory units to read..
7825 UNIT_SIZE is the length in bytes of an addressable unit.
7826
7827 Return the transferred status, error or OK (an
7828 'enum target_xfer_status' value). Save the number of bytes
7829 transferred in *XFERED_LEN_UNITS.
7830
7831 See the comment of remote_write_bytes_aux for an example of
7832 memory read/write exchange between gdb and the stub. */
7833
7834 static enum target_xfer_status
7835 remote_read_bytes_1 (CORE_ADDR memaddr, gdb_byte *myaddr, ULONGEST len_units,
7836 int unit_size, ULONGEST *xfered_len_units)
7837 {
7838 struct remote_state *rs = get_remote_state ();
7839 int buf_size_bytes; /* Max size of packet output buffer. */
7840 char *p;
7841 int todo_units;
7842 int decoded_bytes;
7843
7844 buf_size_bytes = get_memory_read_packet_size ();
7845 /* The packet buffer will be large enough for the payload;
7846 get_memory_packet_size ensures this. */
7847
7848 /* Number of units that will fit. */
7849 todo_units = std::min (len_units,
7850 (ULONGEST) (buf_size_bytes / unit_size) / 2);
7851
7852 /* Construct "m"<memaddr>","<len>". */
7853 memaddr = remote_address_masked (memaddr);
7854 p = rs->buf;
7855 *p++ = 'm';
7856 p += hexnumstr (p, (ULONGEST) memaddr);
7857 *p++ = ',';
7858 p += hexnumstr (p, (ULONGEST) todo_units);
7859 *p = '\0';
7860 putpkt (rs->buf);
7861 getpkt (&rs->buf, &rs->buf_size, 0);
7862 if (rs->buf[0] == 'E'
7863 && isxdigit (rs->buf[1]) && isxdigit (rs->buf[2])
7864 && rs->buf[3] == '\0')
7865 return TARGET_XFER_E_IO;
7866 /* Reply describes memory byte by byte, each byte encoded as two hex
7867 characters. */
7868 p = rs->buf;
7869 decoded_bytes = hex2bin (p, myaddr, todo_units * unit_size);
7870 /* Return what we have. Let higher layers handle partial reads. */
7871 *xfered_len_units = (ULONGEST) (decoded_bytes / unit_size);
7872 return TARGET_XFER_OK;
7873 }
7874
7875 /* Using the set of read-only target sections of remote, read live
7876 read-only memory.
7877
7878 For interface/parameters/return description see target.h,
7879 to_xfer_partial. */
7880
7881 static enum target_xfer_status
7882 remote_xfer_live_readonly_partial (struct target_ops *ops, gdb_byte *readbuf,
7883 ULONGEST memaddr, ULONGEST len,
7884 int unit_size, ULONGEST *xfered_len)
7885 {
7886 struct target_section *secp;
7887 struct target_section_table *table;
7888
7889 secp = target_section_by_addr (ops, memaddr);
7890 if (secp != NULL
7891 && (bfd_get_section_flags (secp->the_bfd_section->owner,
7892 secp->the_bfd_section)
7893 & SEC_READONLY))
7894 {
7895 struct target_section *p;
7896 ULONGEST memend = memaddr + len;
7897
7898 table = target_get_section_table (ops);
7899
7900 for (p = table->sections; p < table->sections_end; p++)
7901 {
7902 if (memaddr >= p->addr)
7903 {
7904 if (memend <= p->endaddr)
7905 {
7906 /* Entire transfer is within this section. */
7907 return remote_read_bytes_1 (memaddr, readbuf, len, unit_size,
7908 xfered_len);
7909 }
7910 else if (memaddr >= p->endaddr)
7911 {
7912 /* This section ends before the transfer starts. */
7913 continue;
7914 }
7915 else
7916 {
7917 /* This section overlaps the transfer. Just do half. */
7918 len = p->endaddr - memaddr;
7919 return remote_read_bytes_1 (memaddr, readbuf, len, unit_size,
7920 xfered_len);
7921 }
7922 }
7923 }
7924 }
7925
7926 return TARGET_XFER_EOF;
7927 }
7928
7929 /* Similar to remote_read_bytes_1, but it reads from the remote stub
7930 first if the requested memory is unavailable in traceframe.
7931 Otherwise, fall back to remote_read_bytes_1. */
7932
7933 static enum target_xfer_status
7934 remote_read_bytes (struct target_ops *ops, CORE_ADDR memaddr,
7935 gdb_byte *myaddr, ULONGEST len, int unit_size,
7936 ULONGEST *xfered_len)
7937 {
7938 if (len == 0)
7939 return TARGET_XFER_EOF;
7940
7941 if (get_traceframe_number () != -1)
7942 {
7943 VEC(mem_range_s) *available;
7944
7945 /* If we fail to get the set of available memory, then the
7946 target does not support querying traceframe info, and so we
7947 attempt reading from the traceframe anyway (assuming the
7948 target implements the old QTro packet then). */
7949 if (traceframe_available_memory (&available, memaddr, len))
7950 {
7951 struct cleanup *old_chain;
7952
7953 old_chain = make_cleanup (VEC_cleanup(mem_range_s), &available);
7954
7955 if (VEC_empty (mem_range_s, available)
7956 || VEC_index (mem_range_s, available, 0)->start != memaddr)
7957 {
7958 enum target_xfer_status res;
7959
7960 /* Don't read into the traceframe's available
7961 memory. */
7962 if (!VEC_empty (mem_range_s, available))
7963 {
7964 LONGEST oldlen = len;
7965
7966 len = VEC_index (mem_range_s, available, 0)->start - memaddr;
7967 gdb_assert (len <= oldlen);
7968 }
7969
7970 do_cleanups (old_chain);
7971
7972 /* This goes through the topmost target again. */
7973 res = remote_xfer_live_readonly_partial (ops, myaddr, memaddr,
7974 len, unit_size, xfered_len);
7975 if (res == TARGET_XFER_OK)
7976 return TARGET_XFER_OK;
7977 else
7978 {
7979 /* No use trying further, we know some memory starting
7980 at MEMADDR isn't available. */
7981 *xfered_len = len;
7982 return TARGET_XFER_UNAVAILABLE;
7983 }
7984 }
7985
7986 /* Don't try to read more than how much is available, in
7987 case the target implements the deprecated QTro packet to
7988 cater for older GDBs (the target's knowledge of read-only
7989 sections may be outdated by now). */
7990 len = VEC_index (mem_range_s, available, 0)->length;
7991
7992 do_cleanups (old_chain);
7993 }
7994 }
7995
7996 return remote_read_bytes_1 (memaddr, myaddr, len, unit_size, xfered_len);
7997 }
7998
7999 \f
8000
8001 /* Sends a packet with content determined by the printf format string
8002 FORMAT and the remaining arguments, then gets the reply. Returns
8003 whether the packet was a success, a failure, or unknown. */
8004
8005 static enum packet_result remote_send_printf (const char *format, ...)
8006 ATTRIBUTE_PRINTF (1, 2);
8007
8008 static enum packet_result
8009 remote_send_printf (const char *format, ...)
8010 {
8011 struct remote_state *rs = get_remote_state ();
8012 int max_size = get_remote_packet_size ();
8013 va_list ap;
8014
8015 va_start (ap, format);
8016
8017 rs->buf[0] = '\0';
8018 if (vsnprintf (rs->buf, max_size, format, ap) >= max_size)
8019 internal_error (__FILE__, __LINE__, _("Too long remote packet."));
8020
8021 if (putpkt (rs->buf) < 0)
8022 error (_("Communication problem with target."));
8023
8024 rs->buf[0] = '\0';
8025 getpkt (&rs->buf, &rs->buf_size, 0);
8026
8027 return packet_check_result (rs->buf);
8028 }
8029
8030 static void
8031 restore_remote_timeout (void *p)
8032 {
8033 int value = *(int *)p;
8034
8035 remote_timeout = value;
8036 }
8037
8038 /* Flash writing can take quite some time. We'll set
8039 effectively infinite timeout for flash operations.
8040 In future, we'll need to decide on a better approach. */
8041 static const int remote_flash_timeout = 1000;
8042
8043 static void
8044 remote_flash_erase (struct target_ops *ops,
8045 ULONGEST address, LONGEST length)
8046 {
8047 int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
8048 int saved_remote_timeout = remote_timeout;
8049 enum packet_result ret;
8050 struct cleanup *back_to = make_cleanup (restore_remote_timeout,
8051 &saved_remote_timeout);
8052
8053 remote_timeout = remote_flash_timeout;
8054
8055 ret = remote_send_printf ("vFlashErase:%s,%s",
8056 phex (address, addr_size),
8057 phex (length, 4));
8058 switch (ret)
8059 {
8060 case PACKET_UNKNOWN:
8061 error (_("Remote target does not support flash erase"));
8062 case PACKET_ERROR:
8063 error (_("Error erasing flash with vFlashErase packet"));
8064 default:
8065 break;
8066 }
8067
8068 do_cleanups (back_to);
8069 }
8070
8071 static enum target_xfer_status
8072 remote_flash_write (struct target_ops *ops, ULONGEST address,
8073 ULONGEST length, ULONGEST *xfered_len,
8074 const gdb_byte *data)
8075 {
8076 int saved_remote_timeout = remote_timeout;
8077 enum target_xfer_status ret;
8078 struct cleanup *back_to = make_cleanup (restore_remote_timeout,
8079 &saved_remote_timeout);
8080
8081 remote_timeout = remote_flash_timeout;
8082 ret = remote_write_bytes_aux ("vFlashWrite:", address, data, length, 1,
8083 xfered_len,'X', 0);
8084 do_cleanups (back_to);
8085
8086 return ret;
8087 }
8088
8089 static void
8090 remote_flash_done (struct target_ops *ops)
8091 {
8092 int saved_remote_timeout = remote_timeout;
8093 int ret;
8094 struct cleanup *back_to = make_cleanup (restore_remote_timeout,
8095 &saved_remote_timeout);
8096
8097 remote_timeout = remote_flash_timeout;
8098 ret = remote_send_printf ("vFlashDone");
8099 do_cleanups (back_to);
8100
8101 switch (ret)
8102 {
8103 case PACKET_UNKNOWN:
8104 error (_("Remote target does not support vFlashDone"));
8105 case PACKET_ERROR:
8106 error (_("Error finishing flash operation"));
8107 default:
8108 break;
8109 }
8110 }
8111
8112 static void
8113 remote_files_info (struct target_ops *ignore)
8114 {
8115 puts_filtered ("Debugging a target over a serial line.\n");
8116 }
8117 \f
8118 /* Stuff for dealing with the packets which are part of this protocol.
8119 See comment at top of file for details. */
8120
8121 /* Close/unpush the remote target, and throw a TARGET_CLOSE_ERROR
8122 error to higher layers. Called when a serial error is detected.
8123 The exception message is STRING, followed by a colon and a blank,
8124 the system error message for errno at function entry and final dot
8125 for output compatibility with throw_perror_with_name. */
8126
8127 static void
8128 unpush_and_perror (const char *string)
8129 {
8130 int saved_errno = errno;
8131
8132 remote_unpush_target ();
8133 throw_error (TARGET_CLOSE_ERROR, "%s: %s.", string,
8134 safe_strerror (saved_errno));
8135 }
8136
8137 /* Read a single character from the remote end. The current quit
8138 handler is overridden to avoid quitting in the middle of packet
8139 sequence, as that would break communication with the remote server.
8140 See remote_serial_quit_handler for more detail. */
8141
8142 static int
8143 readchar (int timeout)
8144 {
8145 int ch;
8146 struct remote_state *rs = get_remote_state ();
8147 struct cleanup *old_chain;
8148
8149 old_chain = make_cleanup_override_quit_handler (remote_serial_quit_handler);
8150
8151 rs->got_ctrlc_during_io = 0;
8152
8153 ch = serial_readchar (rs->remote_desc, timeout);
8154
8155 if (rs->got_ctrlc_during_io)
8156 set_quit_flag ();
8157
8158 do_cleanups (old_chain);
8159
8160 if (ch >= 0)
8161 return ch;
8162
8163 switch ((enum serial_rc) ch)
8164 {
8165 case SERIAL_EOF:
8166 remote_unpush_target ();
8167 throw_error (TARGET_CLOSE_ERROR, _("Remote connection closed"));
8168 /* no return */
8169 case SERIAL_ERROR:
8170 unpush_and_perror (_("Remote communication error. "
8171 "Target disconnected."));
8172 /* no return */
8173 case SERIAL_TIMEOUT:
8174 break;
8175 }
8176 return ch;
8177 }
8178
8179 /* Wrapper for serial_write that closes the target and throws if
8180 writing fails. The current quit handler is overridden to avoid
8181 quitting in the middle of packet sequence, as that would break
8182 communication with the remote server. See
8183 remote_serial_quit_handler for more detail. */
8184
8185 static void
8186 remote_serial_write (const char *str, int len)
8187 {
8188 struct remote_state *rs = get_remote_state ();
8189 struct cleanup *old_chain;
8190
8191 old_chain = make_cleanup_override_quit_handler (remote_serial_quit_handler);
8192
8193 rs->got_ctrlc_during_io = 0;
8194
8195 if (serial_write (rs->remote_desc, str, len))
8196 {
8197 unpush_and_perror (_("Remote communication error. "
8198 "Target disconnected."));
8199 }
8200
8201 if (rs->got_ctrlc_during_io)
8202 set_quit_flag ();
8203
8204 do_cleanups (old_chain);
8205 }
8206
8207 /* Send the command in *BUF to the remote machine, and read the reply
8208 into *BUF. Report an error if we get an error reply. Resize
8209 *BUF using xrealloc if necessary to hold the result, and update
8210 *SIZEOF_BUF. */
8211
8212 static void
8213 remote_send (char **buf,
8214 long *sizeof_buf)
8215 {
8216 putpkt (*buf);
8217 getpkt (buf, sizeof_buf, 0);
8218
8219 if ((*buf)[0] == 'E')
8220 error (_("Remote failure reply: %s"), *buf);
8221 }
8222
8223 /* Return a pointer to an xmalloc'ed string representing an escaped
8224 version of BUF, of len N. E.g. \n is converted to \\n, \t to \\t,
8225 etc. The caller is responsible for releasing the returned
8226 memory. */
8227
8228 static char *
8229 escape_buffer (const char *buf, int n)
8230 {
8231 struct cleanup *old_chain;
8232 struct ui_file *stb;
8233 char *str;
8234
8235 stb = mem_fileopen ();
8236 old_chain = make_cleanup_ui_file_delete (stb);
8237
8238 fputstrn_unfiltered (buf, n, '\\', stb);
8239 str = ui_file_xstrdup (stb, NULL);
8240 do_cleanups (old_chain);
8241 return str;
8242 }
8243
8244 /* Display a null-terminated packet on stdout, for debugging, using C
8245 string notation. */
8246
8247 static void
8248 print_packet (const char *buf)
8249 {
8250 puts_filtered ("\"");
8251 fputstr_filtered (buf, '"', gdb_stdout);
8252 puts_filtered ("\"");
8253 }
8254
8255 int
8256 putpkt (const char *buf)
8257 {
8258 return putpkt_binary (buf, strlen (buf));
8259 }
8260
8261 /* Send a packet to the remote machine, with error checking. The data
8262 of the packet is in BUF. The string in BUF can be at most
8263 get_remote_packet_size () - 5 to account for the $, # and checksum,
8264 and for a possible /0 if we are debugging (remote_debug) and want
8265 to print the sent packet as a string. */
8266
8267 static int
8268 putpkt_binary (const char *buf, int cnt)
8269 {
8270 struct remote_state *rs = get_remote_state ();
8271 int i;
8272 unsigned char csum = 0;
8273 char *buf2 = (char *) xmalloc (cnt + 6);
8274 struct cleanup *old_chain = make_cleanup (xfree, buf2);
8275
8276 int ch;
8277 int tcount = 0;
8278 char *p;
8279
8280 /* Catch cases like trying to read memory or listing threads while
8281 we're waiting for a stop reply. The remote server wouldn't be
8282 ready to handle this request, so we'd hang and timeout. We don't
8283 have to worry about this in synchronous mode, because in that
8284 case it's not possible to issue a command while the target is
8285 running. This is not a problem in non-stop mode, because in that
8286 case, the stub is always ready to process serial input. */
8287 if (!target_is_non_stop_p ()
8288 && target_is_async_p ()
8289 && rs->waiting_for_stop_reply)
8290 {
8291 error (_("Cannot execute this command while the target is running.\n"
8292 "Use the \"interrupt\" command to stop the target\n"
8293 "and then try again."));
8294 }
8295
8296 /* We're sending out a new packet. Make sure we don't look at a
8297 stale cached response. */
8298 rs->cached_wait_status = 0;
8299
8300 /* Copy the packet into buffer BUF2, encapsulating it
8301 and giving it a checksum. */
8302
8303 p = buf2;
8304 *p++ = '$';
8305
8306 for (i = 0; i < cnt; i++)
8307 {
8308 csum += buf[i];
8309 *p++ = buf[i];
8310 }
8311 *p++ = '#';
8312 *p++ = tohex ((csum >> 4) & 0xf);
8313 *p++ = tohex (csum & 0xf);
8314
8315 /* Send it over and over until we get a positive ack. */
8316
8317 while (1)
8318 {
8319 int started_error_output = 0;
8320
8321 if (remote_debug)
8322 {
8323 struct cleanup *old_chain;
8324 char *str;
8325
8326 *p = '\0';
8327 str = escape_buffer (buf2, p - buf2);
8328 old_chain = make_cleanup (xfree, str);
8329 fprintf_unfiltered (gdb_stdlog, "Sending packet: %s...", str);
8330 gdb_flush (gdb_stdlog);
8331 do_cleanups (old_chain);
8332 }
8333 remote_serial_write (buf2, p - buf2);
8334
8335 /* If this is a no acks version of the remote protocol, send the
8336 packet and move on. */
8337 if (rs->noack_mode)
8338 break;
8339
8340 /* Read until either a timeout occurs (-2) or '+' is read.
8341 Handle any notification that arrives in the mean time. */
8342 while (1)
8343 {
8344 ch = readchar (remote_timeout);
8345
8346 if (remote_debug)
8347 {
8348 switch (ch)
8349 {
8350 case '+':
8351 case '-':
8352 case SERIAL_TIMEOUT:
8353 case '$':
8354 case '%':
8355 if (started_error_output)
8356 {
8357 putchar_unfiltered ('\n');
8358 started_error_output = 0;
8359 }
8360 }
8361 }
8362
8363 switch (ch)
8364 {
8365 case '+':
8366 if (remote_debug)
8367 fprintf_unfiltered (gdb_stdlog, "Ack\n");
8368 do_cleanups (old_chain);
8369 return 1;
8370 case '-':
8371 if (remote_debug)
8372 fprintf_unfiltered (gdb_stdlog, "Nak\n");
8373 /* FALLTHROUGH */
8374 case SERIAL_TIMEOUT:
8375 tcount++;
8376 if (tcount > 3)
8377 {
8378 do_cleanups (old_chain);
8379 return 0;
8380 }
8381 break; /* Retransmit buffer. */
8382 case '$':
8383 {
8384 if (remote_debug)
8385 fprintf_unfiltered (gdb_stdlog,
8386 "Packet instead of Ack, ignoring it\n");
8387 /* It's probably an old response sent because an ACK
8388 was lost. Gobble up the packet and ack it so it
8389 doesn't get retransmitted when we resend this
8390 packet. */
8391 skip_frame ();
8392 remote_serial_write ("+", 1);
8393 continue; /* Now, go look for +. */
8394 }
8395
8396 case '%':
8397 {
8398 int val;
8399
8400 /* If we got a notification, handle it, and go back to looking
8401 for an ack. */
8402 /* We've found the start of a notification. Now
8403 collect the data. */
8404 val = read_frame (&rs->buf, &rs->buf_size);
8405 if (val >= 0)
8406 {
8407 if (remote_debug)
8408 {
8409 struct cleanup *old_chain;
8410 char *str;
8411
8412 str = escape_buffer (rs->buf, val);
8413 old_chain = make_cleanup (xfree, str);
8414 fprintf_unfiltered (gdb_stdlog,
8415 " Notification received: %s\n",
8416 str);
8417 do_cleanups (old_chain);
8418 }
8419 handle_notification (rs->notif_state, rs->buf);
8420 /* We're in sync now, rewait for the ack. */
8421 tcount = 0;
8422 }
8423 else
8424 {
8425 if (remote_debug)
8426 {
8427 if (!started_error_output)
8428 {
8429 started_error_output = 1;
8430 fprintf_unfiltered (gdb_stdlog, "putpkt: Junk: ");
8431 }
8432 fputc_unfiltered (ch & 0177, gdb_stdlog);
8433 fprintf_unfiltered (gdb_stdlog, "%s", rs->buf);
8434 }
8435 }
8436 continue;
8437 }
8438 /* fall-through */
8439 default:
8440 if (remote_debug)
8441 {
8442 if (!started_error_output)
8443 {
8444 started_error_output = 1;
8445 fprintf_unfiltered (gdb_stdlog, "putpkt: Junk: ");
8446 }
8447 fputc_unfiltered (ch & 0177, gdb_stdlog);
8448 }
8449 continue;
8450 }
8451 break; /* Here to retransmit. */
8452 }
8453
8454 #if 0
8455 /* This is wrong. If doing a long backtrace, the user should be
8456 able to get out next time we call QUIT, without anything as
8457 violent as interrupt_query. If we want to provide a way out of
8458 here without getting to the next QUIT, it should be based on
8459 hitting ^C twice as in remote_wait. */
8460 if (quit_flag)
8461 {
8462 quit_flag = 0;
8463 interrupt_query ();
8464 }
8465 #endif
8466 }
8467
8468 do_cleanups (old_chain);
8469 return 0;
8470 }
8471
8472 /* Come here after finding the start of a frame when we expected an
8473 ack. Do our best to discard the rest of this packet. */
8474
8475 static void
8476 skip_frame (void)
8477 {
8478 int c;
8479
8480 while (1)
8481 {
8482 c = readchar (remote_timeout);
8483 switch (c)
8484 {
8485 case SERIAL_TIMEOUT:
8486 /* Nothing we can do. */
8487 return;
8488 case '#':
8489 /* Discard the two bytes of checksum and stop. */
8490 c = readchar (remote_timeout);
8491 if (c >= 0)
8492 c = readchar (remote_timeout);
8493
8494 return;
8495 case '*': /* Run length encoding. */
8496 /* Discard the repeat count. */
8497 c = readchar (remote_timeout);
8498 if (c < 0)
8499 return;
8500 break;
8501 default:
8502 /* A regular character. */
8503 break;
8504 }
8505 }
8506 }
8507
8508 /* Come here after finding the start of the frame. Collect the rest
8509 into *BUF, verifying the checksum, length, and handling run-length
8510 compression. NUL terminate the buffer. If there is not enough room,
8511 expand *BUF using xrealloc.
8512
8513 Returns -1 on error, number of characters in buffer (ignoring the
8514 trailing NULL) on success. (could be extended to return one of the
8515 SERIAL status indications). */
8516
8517 static long
8518 read_frame (char **buf_p,
8519 long *sizeof_buf)
8520 {
8521 unsigned char csum;
8522 long bc;
8523 int c;
8524 char *buf = *buf_p;
8525 struct remote_state *rs = get_remote_state ();
8526
8527 csum = 0;
8528 bc = 0;
8529
8530 while (1)
8531 {
8532 c = readchar (remote_timeout);
8533 switch (c)
8534 {
8535 case SERIAL_TIMEOUT:
8536 if (remote_debug)
8537 fputs_filtered ("Timeout in mid-packet, retrying\n", gdb_stdlog);
8538 return -1;
8539 case '$':
8540 if (remote_debug)
8541 fputs_filtered ("Saw new packet start in middle of old one\n",
8542 gdb_stdlog);
8543 return -1; /* Start a new packet, count retries. */
8544 case '#':
8545 {
8546 unsigned char pktcsum;
8547 int check_0 = 0;
8548 int check_1 = 0;
8549
8550 buf[bc] = '\0';
8551
8552 check_0 = readchar (remote_timeout);
8553 if (check_0 >= 0)
8554 check_1 = readchar (remote_timeout);
8555
8556 if (check_0 == SERIAL_TIMEOUT || check_1 == SERIAL_TIMEOUT)
8557 {
8558 if (remote_debug)
8559 fputs_filtered ("Timeout in checksum, retrying\n",
8560 gdb_stdlog);
8561 return -1;
8562 }
8563 else if (check_0 < 0 || check_1 < 0)
8564 {
8565 if (remote_debug)
8566 fputs_filtered ("Communication error in checksum\n",
8567 gdb_stdlog);
8568 return -1;
8569 }
8570
8571 /* Don't recompute the checksum; with no ack packets we
8572 don't have any way to indicate a packet retransmission
8573 is necessary. */
8574 if (rs->noack_mode)
8575 return bc;
8576
8577 pktcsum = (fromhex (check_0) << 4) | fromhex (check_1);
8578 if (csum == pktcsum)
8579 return bc;
8580
8581 if (remote_debug)
8582 {
8583 struct cleanup *old_chain;
8584 char *str;
8585
8586 str = escape_buffer (buf, bc);
8587 old_chain = make_cleanup (xfree, str);
8588 fprintf_unfiltered (gdb_stdlog,
8589 "Bad checksum, sentsum=0x%x, "
8590 "csum=0x%x, buf=%s\n",
8591 pktcsum, csum, str);
8592 do_cleanups (old_chain);
8593 }
8594 /* Number of characters in buffer ignoring trailing
8595 NULL. */
8596 return -1;
8597 }
8598 case '*': /* Run length encoding. */
8599 {
8600 int repeat;
8601
8602 csum += c;
8603 c = readchar (remote_timeout);
8604 csum += c;
8605 repeat = c - ' ' + 3; /* Compute repeat count. */
8606
8607 /* The character before ``*'' is repeated. */
8608
8609 if (repeat > 0 && repeat <= 255 && bc > 0)
8610 {
8611 if (bc + repeat - 1 >= *sizeof_buf - 1)
8612 {
8613 /* Make some more room in the buffer. */
8614 *sizeof_buf += repeat;
8615 *buf_p = (char *) xrealloc (*buf_p, *sizeof_buf);
8616 buf = *buf_p;
8617 }
8618
8619 memset (&buf[bc], buf[bc - 1], repeat);
8620 bc += repeat;
8621 continue;
8622 }
8623
8624 buf[bc] = '\0';
8625 printf_filtered (_("Invalid run length encoding: %s\n"), buf);
8626 return -1;
8627 }
8628 default:
8629 if (bc >= *sizeof_buf - 1)
8630 {
8631 /* Make some more room in the buffer. */
8632 *sizeof_buf *= 2;
8633 *buf_p = (char *) xrealloc (*buf_p, *sizeof_buf);
8634 buf = *buf_p;
8635 }
8636
8637 buf[bc++] = c;
8638 csum += c;
8639 continue;
8640 }
8641 }
8642 }
8643
8644 /* Read a packet from the remote machine, with error checking, and
8645 store it in *BUF. Resize *BUF using xrealloc if necessary to hold
8646 the result, and update *SIZEOF_BUF. If FOREVER, wait forever
8647 rather than timing out; this is used (in synchronous mode) to wait
8648 for a target that is is executing user code to stop. */
8649 /* FIXME: ezannoni 2000-02-01 this wrapper is necessary so that we
8650 don't have to change all the calls to getpkt to deal with the
8651 return value, because at the moment I don't know what the right
8652 thing to do it for those. */
8653 void
8654 getpkt (char **buf,
8655 long *sizeof_buf,
8656 int forever)
8657 {
8658 getpkt_sane (buf, sizeof_buf, forever);
8659 }
8660
8661
8662 /* Read a packet from the remote machine, with error checking, and
8663 store it in *BUF. Resize *BUF using xrealloc if necessary to hold
8664 the result, and update *SIZEOF_BUF. If FOREVER, wait forever
8665 rather than timing out; this is used (in synchronous mode) to wait
8666 for a target that is is executing user code to stop. If FOREVER ==
8667 0, this function is allowed to time out gracefully and return an
8668 indication of this to the caller. Otherwise return the number of
8669 bytes read. If EXPECTING_NOTIF, consider receiving a notification
8670 enough reason to return to the caller. *IS_NOTIF is an output
8671 boolean that indicates whether *BUF holds a notification or not
8672 (a regular packet). */
8673
8674 static int
8675 getpkt_or_notif_sane_1 (char **buf, long *sizeof_buf, int forever,
8676 int expecting_notif, int *is_notif)
8677 {
8678 struct remote_state *rs = get_remote_state ();
8679 int c;
8680 int tries;
8681 int timeout;
8682 int val = -1;
8683
8684 /* We're reading a new response. Make sure we don't look at a
8685 previously cached response. */
8686 rs->cached_wait_status = 0;
8687
8688 strcpy (*buf, "timeout");
8689
8690 if (forever)
8691 timeout = watchdog > 0 ? watchdog : -1;
8692 else if (expecting_notif)
8693 timeout = 0; /* There should already be a char in the buffer. If
8694 not, bail out. */
8695 else
8696 timeout = remote_timeout;
8697
8698 #define MAX_TRIES 3
8699
8700 /* Process any number of notifications, and then return when
8701 we get a packet. */
8702 for (;;)
8703 {
8704 /* If we get a timeout or bad checksum, retry up to MAX_TRIES
8705 times. */
8706 for (tries = 1; tries <= MAX_TRIES; tries++)
8707 {
8708 /* This can loop forever if the remote side sends us
8709 characters continuously, but if it pauses, we'll get
8710 SERIAL_TIMEOUT from readchar because of timeout. Then
8711 we'll count that as a retry.
8712
8713 Note that even when forever is set, we will only wait
8714 forever prior to the start of a packet. After that, we
8715 expect characters to arrive at a brisk pace. They should
8716 show up within remote_timeout intervals. */
8717 do
8718 c = readchar (timeout);
8719 while (c != SERIAL_TIMEOUT && c != '$' && c != '%');
8720
8721 if (c == SERIAL_TIMEOUT)
8722 {
8723 if (expecting_notif)
8724 return -1; /* Don't complain, it's normal to not get
8725 anything in this case. */
8726
8727 if (forever) /* Watchdog went off? Kill the target. */
8728 {
8729 remote_unpush_target ();
8730 throw_error (TARGET_CLOSE_ERROR,
8731 _("Watchdog timeout has expired. "
8732 "Target detached."));
8733 }
8734 if (remote_debug)
8735 fputs_filtered ("Timed out.\n", gdb_stdlog);
8736 }
8737 else
8738 {
8739 /* We've found the start of a packet or notification.
8740 Now collect the data. */
8741 val = read_frame (buf, sizeof_buf);
8742 if (val >= 0)
8743 break;
8744 }
8745
8746 remote_serial_write ("-", 1);
8747 }
8748
8749 if (tries > MAX_TRIES)
8750 {
8751 /* We have tried hard enough, and just can't receive the
8752 packet/notification. Give up. */
8753 printf_unfiltered (_("Ignoring packet error, continuing...\n"));
8754
8755 /* Skip the ack char if we're in no-ack mode. */
8756 if (!rs->noack_mode)
8757 remote_serial_write ("+", 1);
8758 return -1;
8759 }
8760
8761 /* If we got an ordinary packet, return that to our caller. */
8762 if (c == '$')
8763 {
8764 if (remote_debug)
8765 {
8766 struct cleanup *old_chain;
8767 char *str;
8768
8769 str = escape_buffer (*buf, val);
8770 old_chain = make_cleanup (xfree, str);
8771 fprintf_unfiltered (gdb_stdlog, "Packet received: %s\n", str);
8772 do_cleanups (old_chain);
8773 }
8774
8775 /* Skip the ack char if we're in no-ack mode. */
8776 if (!rs->noack_mode)
8777 remote_serial_write ("+", 1);
8778 if (is_notif != NULL)
8779 *is_notif = 0;
8780 return val;
8781 }
8782
8783 /* If we got a notification, handle it, and go back to looking
8784 for a packet. */
8785 else
8786 {
8787 gdb_assert (c == '%');
8788
8789 if (remote_debug)
8790 {
8791 struct cleanup *old_chain;
8792 char *str;
8793
8794 str = escape_buffer (*buf, val);
8795 old_chain = make_cleanup (xfree, str);
8796 fprintf_unfiltered (gdb_stdlog,
8797 " Notification received: %s\n",
8798 str);
8799 do_cleanups (old_chain);
8800 }
8801 if (is_notif != NULL)
8802 *is_notif = 1;
8803
8804 handle_notification (rs->notif_state, *buf);
8805
8806 /* Notifications require no acknowledgement. */
8807
8808 if (expecting_notif)
8809 return val;
8810 }
8811 }
8812 }
8813
8814 static int
8815 getpkt_sane (char **buf, long *sizeof_buf, int forever)
8816 {
8817 return getpkt_or_notif_sane_1 (buf, sizeof_buf, forever, 0, NULL);
8818 }
8819
8820 static int
8821 getpkt_or_notif_sane (char **buf, long *sizeof_buf, int forever,
8822 int *is_notif)
8823 {
8824 return getpkt_or_notif_sane_1 (buf, sizeof_buf, forever, 1,
8825 is_notif);
8826 }
8827
8828 /* Check whether EVENT is a fork event for the process specified
8829 by the pid passed in DATA, and if it is, kill the fork child. */
8830
8831 static int
8832 kill_child_of_pending_fork (QUEUE (stop_reply_p) *q,
8833 QUEUE_ITER (stop_reply_p) *iter,
8834 stop_reply_p event,
8835 void *data)
8836 {
8837 struct queue_iter_param *param = (struct queue_iter_param *) data;
8838 int parent_pid = *(int *) param->input;
8839
8840 if (is_pending_fork_parent (&event->ws, parent_pid, event->ptid))
8841 {
8842 struct remote_state *rs = get_remote_state ();
8843 int child_pid = ptid_get_pid (event->ws.value.related_pid);
8844 int res;
8845
8846 res = remote_vkill (child_pid, rs);
8847 if (res != 0)
8848 error (_("Can't kill fork child process %d"), child_pid);
8849 }
8850
8851 return 1;
8852 }
8853
8854 /* Kill any new fork children of process PID that haven't been
8855 processed by follow_fork. */
8856
8857 static void
8858 kill_new_fork_children (int pid, struct remote_state *rs)
8859 {
8860 struct thread_info *thread;
8861 struct notif_client *notif = &notif_client_stop;
8862 struct queue_iter_param param;
8863
8864 /* Kill the fork child threads of any threads in process PID
8865 that are stopped at a fork event. */
8866 ALL_NON_EXITED_THREADS (thread)
8867 {
8868 struct target_waitstatus *ws = &thread->pending_follow;
8869
8870 if (is_pending_fork_parent (ws, pid, thread->ptid))
8871 {
8872 struct remote_state *rs = get_remote_state ();
8873 int child_pid = ptid_get_pid (ws->value.related_pid);
8874 int res;
8875
8876 res = remote_vkill (child_pid, rs);
8877 if (res != 0)
8878 error (_("Can't kill fork child process %d"), child_pid);
8879 }
8880 }
8881
8882 /* Check for any pending fork events (not reported or processed yet)
8883 in process PID and kill those fork child threads as well. */
8884 remote_notif_get_pending_events (notif);
8885 param.input = &pid;
8886 param.output = NULL;
8887 QUEUE_iterate (stop_reply_p, stop_reply_queue,
8888 kill_child_of_pending_fork, &param);
8889 }
8890
8891 \f
8892 /* Target hook to kill the current inferior. */
8893
8894 static void
8895 remote_kill (struct target_ops *ops)
8896 {
8897 int res = -1;
8898 int pid = ptid_get_pid (inferior_ptid);
8899 struct remote_state *rs = get_remote_state ();
8900
8901 if (packet_support (PACKET_vKill) != PACKET_DISABLE)
8902 {
8903 /* If we're stopped while forking and we haven't followed yet,
8904 kill the child task. We need to do this before killing the
8905 parent task because if this is a vfork then the parent will
8906 be sleeping. */
8907 kill_new_fork_children (pid, rs);
8908
8909 res = remote_vkill (pid, rs);
8910 if (res == 0)
8911 {
8912 target_mourn_inferior ();
8913 return;
8914 }
8915 }
8916
8917 /* If we are in 'target remote' mode and we are killing the only
8918 inferior, then we will tell gdbserver to exit and unpush the
8919 target. */
8920 if (res == -1 && !remote_multi_process_p (rs)
8921 && number_of_live_inferiors () == 1)
8922 {
8923 remote_kill_k ();
8924
8925 /* We've killed the remote end, we get to mourn it. If we are
8926 not in extended mode, mourning the inferior also unpushes
8927 remote_ops from the target stack, which closes the remote
8928 connection. */
8929 target_mourn_inferior ();
8930
8931 return;
8932 }
8933
8934 error (_("Can't kill process"));
8935 }
8936
8937 /* Send a kill request to the target using the 'vKill' packet. */
8938
8939 static int
8940 remote_vkill (int pid, struct remote_state *rs)
8941 {
8942 if (packet_support (PACKET_vKill) == PACKET_DISABLE)
8943 return -1;
8944
8945 /* Tell the remote target to detach. */
8946 xsnprintf (rs->buf, get_remote_packet_size (), "vKill;%x", pid);
8947 putpkt (rs->buf);
8948 getpkt (&rs->buf, &rs->buf_size, 0);
8949
8950 switch (packet_ok (rs->buf,
8951 &remote_protocol_packets[PACKET_vKill]))
8952 {
8953 case PACKET_OK:
8954 return 0;
8955 case PACKET_ERROR:
8956 return 1;
8957 case PACKET_UNKNOWN:
8958 return -1;
8959 default:
8960 internal_error (__FILE__, __LINE__, _("Bad result from packet_ok"));
8961 }
8962 }
8963
8964 /* Send a kill request to the target using the 'k' packet. */
8965
8966 static void
8967 remote_kill_k (void)
8968 {
8969 /* Catch errors so the user can quit from gdb even when we
8970 aren't on speaking terms with the remote system. */
8971 TRY
8972 {
8973 putpkt ("k");
8974 }
8975 CATCH (ex, RETURN_MASK_ERROR)
8976 {
8977 if (ex.error == TARGET_CLOSE_ERROR)
8978 {
8979 /* If we got an (EOF) error that caused the target
8980 to go away, then we're done, that's what we wanted.
8981 "k" is susceptible to cause a premature EOF, given
8982 that the remote server isn't actually required to
8983 reply to "k", and it can happen that it doesn't
8984 even get to reply ACK to the "k". */
8985 return;
8986 }
8987
8988 /* Otherwise, something went wrong. We didn't actually kill
8989 the target. Just propagate the exception, and let the
8990 user or higher layers decide what to do. */
8991 throw_exception (ex);
8992 }
8993 END_CATCH
8994 }
8995
8996 static void
8997 remote_mourn (struct target_ops *target)
8998 {
8999 struct remote_state *rs = get_remote_state ();
9000
9001 /* In 'target remote' mode with one inferior, we close the connection. */
9002 if (!rs->extended && number_of_live_inferiors () <= 1)
9003 {
9004 unpush_target (target);
9005
9006 /* remote_close takes care of doing most of the clean up. */
9007 generic_mourn_inferior ();
9008 return;
9009 }
9010
9011 /* In case we got here due to an error, but we're going to stay
9012 connected. */
9013 rs->waiting_for_stop_reply = 0;
9014
9015 /* If the current general thread belonged to the process we just
9016 detached from or has exited, the remote side current general
9017 thread becomes undefined. Considering a case like this:
9018
9019 - We just got here due to a detach.
9020 - The process that we're detaching from happens to immediately
9021 report a global breakpoint being hit in non-stop mode, in the
9022 same thread we had selected before.
9023 - GDB attaches to this process again.
9024 - This event happens to be the next event we handle.
9025
9026 GDB would consider that the current general thread didn't need to
9027 be set on the stub side (with Hg), since for all it knew,
9028 GENERAL_THREAD hadn't changed.
9029
9030 Notice that although in all-stop mode, the remote server always
9031 sets the current thread to the thread reporting the stop event,
9032 that doesn't happen in non-stop mode; in non-stop, the stub *must
9033 not* change the current thread when reporting a breakpoint hit,
9034 due to the decoupling of event reporting and event handling.
9035
9036 To keep things simple, we always invalidate our notion of the
9037 current thread. */
9038 record_currthread (rs, minus_one_ptid);
9039
9040 /* Call common code to mark the inferior as not running. */
9041 generic_mourn_inferior ();
9042
9043 if (!have_inferiors ())
9044 {
9045 if (!remote_multi_process_p (rs))
9046 {
9047 /* Check whether the target is running now - some remote stubs
9048 automatically restart after kill. */
9049 putpkt ("?");
9050 getpkt (&rs->buf, &rs->buf_size, 0);
9051
9052 if (rs->buf[0] == 'S' || rs->buf[0] == 'T')
9053 {
9054 /* Assume that the target has been restarted. Set
9055 inferior_ptid so that bits of core GDB realizes
9056 there's something here, e.g., so that the user can
9057 say "kill" again. */
9058 inferior_ptid = magic_null_ptid;
9059 }
9060 }
9061 }
9062 }
9063
9064 static int
9065 extended_remote_supports_disable_randomization (struct target_ops *self)
9066 {
9067 return packet_support (PACKET_QDisableRandomization) == PACKET_ENABLE;
9068 }
9069
9070 static void
9071 extended_remote_disable_randomization (int val)
9072 {
9073 struct remote_state *rs = get_remote_state ();
9074 char *reply;
9075
9076 xsnprintf (rs->buf, get_remote_packet_size (), "QDisableRandomization:%x",
9077 val);
9078 putpkt (rs->buf);
9079 reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
9080 if (*reply == '\0')
9081 error (_("Target does not support QDisableRandomization."));
9082 if (strcmp (reply, "OK") != 0)
9083 error (_("Bogus QDisableRandomization reply from target: %s"), reply);
9084 }
9085
9086 static int
9087 extended_remote_run (char *args)
9088 {
9089 struct remote_state *rs = get_remote_state ();
9090 int len;
9091 const char *remote_exec_file = get_remote_exec_file ();
9092
9093 /* If the user has disabled vRun support, or we have detected that
9094 support is not available, do not try it. */
9095 if (packet_support (PACKET_vRun) == PACKET_DISABLE)
9096 return -1;
9097
9098 strcpy (rs->buf, "vRun;");
9099 len = strlen (rs->buf);
9100
9101 if (strlen (remote_exec_file) * 2 + len >= get_remote_packet_size ())
9102 error (_("Remote file name too long for run packet"));
9103 len += 2 * bin2hex ((gdb_byte *) remote_exec_file, rs->buf + len,
9104 strlen (remote_exec_file));
9105
9106 gdb_assert (args != NULL);
9107 if (*args)
9108 {
9109 struct cleanup *back_to;
9110 int i;
9111 char **argv;
9112
9113 argv = gdb_buildargv (args);
9114 back_to = make_cleanup_freeargv (argv);
9115 for (i = 0; argv[i] != NULL; i++)
9116 {
9117 if (strlen (argv[i]) * 2 + 1 + len >= get_remote_packet_size ())
9118 error (_("Argument list too long for run packet"));
9119 rs->buf[len++] = ';';
9120 len += 2 * bin2hex ((gdb_byte *) argv[i], rs->buf + len,
9121 strlen (argv[i]));
9122 }
9123 do_cleanups (back_to);
9124 }
9125
9126 rs->buf[len++] = '\0';
9127
9128 putpkt (rs->buf);
9129 getpkt (&rs->buf, &rs->buf_size, 0);
9130
9131 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_vRun]))
9132 {
9133 case PACKET_OK:
9134 /* We have a wait response. All is well. */
9135 return 0;
9136 case PACKET_UNKNOWN:
9137 return -1;
9138 case PACKET_ERROR:
9139 if (remote_exec_file[0] == '\0')
9140 error (_("Running the default executable on the remote target failed; "
9141 "try \"set remote exec-file\"?"));
9142 else
9143 error (_("Running \"%s\" on the remote target failed"),
9144 remote_exec_file);
9145 default:
9146 gdb_assert_not_reached (_("bad switch"));
9147 }
9148 }
9149
9150 /* In the extended protocol we want to be able to do things like
9151 "run" and have them basically work as expected. So we need
9152 a special create_inferior function. We support changing the
9153 executable file and the command line arguments, but not the
9154 environment. */
9155
9156 static void
9157 extended_remote_create_inferior (struct target_ops *ops,
9158 char *exec_file, char *args,
9159 char **env, int from_tty)
9160 {
9161 int run_worked;
9162 char *stop_reply;
9163 struct remote_state *rs = get_remote_state ();
9164 const char *remote_exec_file = get_remote_exec_file ();
9165
9166 /* If running asynchronously, register the target file descriptor
9167 with the event loop. */
9168 if (target_can_async_p ())
9169 target_async (1);
9170
9171 /* Disable address space randomization if requested (and supported). */
9172 if (extended_remote_supports_disable_randomization (ops))
9173 extended_remote_disable_randomization (disable_randomization);
9174
9175 /* Now restart the remote server. */
9176 run_worked = extended_remote_run (args) != -1;
9177 if (!run_worked)
9178 {
9179 /* vRun was not supported. Fail if we need it to do what the
9180 user requested. */
9181 if (remote_exec_file[0])
9182 error (_("Remote target does not support \"set remote exec-file\""));
9183 if (args[0])
9184 error (_("Remote target does not support \"set args\" or run <ARGS>"));
9185
9186 /* Fall back to "R". */
9187 extended_remote_restart ();
9188 }
9189
9190 if (!have_inferiors ())
9191 {
9192 /* Clean up from the last time we ran, before we mark the target
9193 running again. This will mark breakpoints uninserted, and
9194 get_offsets may insert breakpoints. */
9195 init_thread_list ();
9196 init_wait_for_inferior ();
9197 }
9198
9199 /* vRun's success return is a stop reply. */
9200 stop_reply = run_worked ? rs->buf : NULL;
9201 add_current_inferior_and_thread (stop_reply);
9202
9203 /* Get updated offsets, if the stub uses qOffsets. */
9204 get_offsets ();
9205 }
9206 \f
9207
9208 /* Given a location's target info BP_TGT and the packet buffer BUF, output
9209 the list of conditions (in agent expression bytecode format), if any, the
9210 target needs to evaluate. The output is placed into the packet buffer
9211 started from BUF and ended at BUF_END. */
9212
9213 static int
9214 remote_add_target_side_condition (struct gdbarch *gdbarch,
9215 struct bp_target_info *bp_tgt, char *buf,
9216 char *buf_end)
9217 {
9218 struct agent_expr *aexpr = NULL;
9219 int i, ix;
9220
9221 if (VEC_empty (agent_expr_p, bp_tgt->conditions))
9222 return 0;
9223
9224 buf += strlen (buf);
9225 xsnprintf (buf, buf_end - buf, "%s", ";");
9226 buf++;
9227
9228 /* Send conditions to the target and free the vector. */
9229 for (ix = 0;
9230 VEC_iterate (agent_expr_p, bp_tgt->conditions, ix, aexpr);
9231 ix++)
9232 {
9233 xsnprintf (buf, buf_end - buf, "X%x,", aexpr->len);
9234 buf += strlen (buf);
9235 for (i = 0; i < aexpr->len; ++i)
9236 buf = pack_hex_byte (buf, aexpr->buf[i]);
9237 *buf = '\0';
9238 }
9239 return 0;
9240 }
9241
9242 static void
9243 remote_add_target_side_commands (struct gdbarch *gdbarch,
9244 struct bp_target_info *bp_tgt, char *buf)
9245 {
9246 struct agent_expr *aexpr = NULL;
9247 int i, ix;
9248
9249 if (VEC_empty (agent_expr_p, bp_tgt->tcommands))
9250 return;
9251
9252 buf += strlen (buf);
9253
9254 sprintf (buf, ";cmds:%x,", bp_tgt->persist);
9255 buf += strlen (buf);
9256
9257 /* Concatenate all the agent expressions that are commands into the
9258 cmds parameter. */
9259 for (ix = 0;
9260 VEC_iterate (agent_expr_p, bp_tgt->tcommands, ix, aexpr);
9261 ix++)
9262 {
9263 sprintf (buf, "X%x,", aexpr->len);
9264 buf += strlen (buf);
9265 for (i = 0; i < aexpr->len; ++i)
9266 buf = pack_hex_byte (buf, aexpr->buf[i]);
9267 *buf = '\0';
9268 }
9269 }
9270
9271 /* Insert a breakpoint. On targets that have software breakpoint
9272 support, we ask the remote target to do the work; on targets
9273 which don't, we insert a traditional memory breakpoint. */
9274
9275 static int
9276 remote_insert_breakpoint (struct target_ops *ops,
9277 struct gdbarch *gdbarch,
9278 struct bp_target_info *bp_tgt)
9279 {
9280 /* Try the "Z" s/w breakpoint packet if it is not already disabled.
9281 If it succeeds, then set the support to PACKET_ENABLE. If it
9282 fails, and the user has explicitly requested the Z support then
9283 report an error, otherwise, mark it disabled and go on. */
9284
9285 if (packet_support (PACKET_Z0) != PACKET_DISABLE)
9286 {
9287 CORE_ADDR addr = bp_tgt->reqstd_address;
9288 struct remote_state *rs;
9289 char *p, *endbuf;
9290 int bpsize;
9291
9292 /* Make sure the remote is pointing at the right process, if
9293 necessary. */
9294 if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
9295 set_general_process ();
9296
9297 gdbarch_remote_breakpoint_from_pc (gdbarch, &addr, &bpsize);
9298
9299 rs = get_remote_state ();
9300 p = rs->buf;
9301 endbuf = rs->buf + get_remote_packet_size ();
9302
9303 *(p++) = 'Z';
9304 *(p++) = '0';
9305 *(p++) = ',';
9306 addr = (ULONGEST) remote_address_masked (addr);
9307 p += hexnumstr (p, addr);
9308 xsnprintf (p, endbuf - p, ",%d", bpsize);
9309
9310 if (remote_supports_cond_breakpoints (ops))
9311 remote_add_target_side_condition (gdbarch, bp_tgt, p, endbuf);
9312
9313 if (remote_can_run_breakpoint_commands (ops))
9314 remote_add_target_side_commands (gdbarch, bp_tgt, p);
9315
9316 putpkt (rs->buf);
9317 getpkt (&rs->buf, &rs->buf_size, 0);
9318
9319 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0]))
9320 {
9321 case PACKET_ERROR:
9322 return -1;
9323 case PACKET_OK:
9324 bp_tgt->placed_address = addr;
9325 bp_tgt->placed_size = bpsize;
9326 return 0;
9327 case PACKET_UNKNOWN:
9328 break;
9329 }
9330 }
9331
9332 /* If this breakpoint has target-side commands but this stub doesn't
9333 support Z0 packets, throw error. */
9334 if (!VEC_empty (agent_expr_p, bp_tgt->tcommands))
9335 throw_error (NOT_SUPPORTED_ERROR, _("\
9336 Target doesn't support breakpoints that have target side commands."));
9337
9338 return memory_insert_breakpoint (ops, gdbarch, bp_tgt);
9339 }
9340
9341 static int
9342 remote_remove_breakpoint (struct target_ops *ops,
9343 struct gdbarch *gdbarch,
9344 struct bp_target_info *bp_tgt,
9345 enum remove_bp_reason reason)
9346 {
9347 CORE_ADDR addr = bp_tgt->placed_address;
9348 struct remote_state *rs = get_remote_state ();
9349
9350 if (packet_support (PACKET_Z0) != PACKET_DISABLE)
9351 {
9352 char *p = rs->buf;
9353 char *endbuf = rs->buf + get_remote_packet_size ();
9354
9355 /* Make sure the remote is pointing at the right process, if
9356 necessary. */
9357 if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
9358 set_general_process ();
9359
9360 *(p++) = 'z';
9361 *(p++) = '0';
9362 *(p++) = ',';
9363
9364 addr = (ULONGEST) remote_address_masked (bp_tgt->placed_address);
9365 p += hexnumstr (p, addr);
9366 xsnprintf (p, endbuf - p, ",%d", bp_tgt->placed_size);
9367
9368 putpkt (rs->buf);
9369 getpkt (&rs->buf, &rs->buf_size, 0);
9370
9371 return (rs->buf[0] == 'E');
9372 }
9373
9374 return memory_remove_breakpoint (ops, gdbarch, bp_tgt, reason);
9375 }
9376
9377 static enum Z_packet_type
9378 watchpoint_to_Z_packet (int type)
9379 {
9380 switch (type)
9381 {
9382 case hw_write:
9383 return Z_PACKET_WRITE_WP;
9384 break;
9385 case hw_read:
9386 return Z_PACKET_READ_WP;
9387 break;
9388 case hw_access:
9389 return Z_PACKET_ACCESS_WP;
9390 break;
9391 default:
9392 internal_error (__FILE__, __LINE__,
9393 _("hw_bp_to_z: bad watchpoint type %d"), type);
9394 }
9395 }
9396
9397 static int
9398 remote_insert_watchpoint (struct target_ops *self, CORE_ADDR addr, int len,
9399 enum target_hw_bp_type type, struct expression *cond)
9400 {
9401 struct remote_state *rs = get_remote_state ();
9402 char *endbuf = rs->buf + get_remote_packet_size ();
9403 char *p;
9404 enum Z_packet_type packet = watchpoint_to_Z_packet (type);
9405
9406 if (packet_support (PACKET_Z0 + packet) == PACKET_DISABLE)
9407 return 1;
9408
9409 /* Make sure the remote is pointing at the right process, if
9410 necessary. */
9411 if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
9412 set_general_process ();
9413
9414 xsnprintf (rs->buf, endbuf - rs->buf, "Z%x,", packet);
9415 p = strchr (rs->buf, '\0');
9416 addr = remote_address_masked (addr);
9417 p += hexnumstr (p, (ULONGEST) addr);
9418 xsnprintf (p, endbuf - p, ",%x", len);
9419
9420 putpkt (rs->buf);
9421 getpkt (&rs->buf, &rs->buf_size, 0);
9422
9423 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0 + packet]))
9424 {
9425 case PACKET_ERROR:
9426 return -1;
9427 case PACKET_UNKNOWN:
9428 return 1;
9429 case PACKET_OK:
9430 return 0;
9431 }
9432 internal_error (__FILE__, __LINE__,
9433 _("remote_insert_watchpoint: reached end of function"));
9434 }
9435
9436 static int
9437 remote_watchpoint_addr_within_range (struct target_ops *target, CORE_ADDR addr,
9438 CORE_ADDR start, int length)
9439 {
9440 CORE_ADDR diff = remote_address_masked (addr - start);
9441
9442 return diff < length;
9443 }
9444
9445
9446 static int
9447 remote_remove_watchpoint (struct target_ops *self, CORE_ADDR addr, int len,
9448 enum target_hw_bp_type type, struct expression *cond)
9449 {
9450 struct remote_state *rs = get_remote_state ();
9451 char *endbuf = rs->buf + get_remote_packet_size ();
9452 char *p;
9453 enum Z_packet_type packet = watchpoint_to_Z_packet (type);
9454
9455 if (packet_support (PACKET_Z0 + packet) == PACKET_DISABLE)
9456 return -1;
9457
9458 /* Make sure the remote is pointing at the right process, if
9459 necessary. */
9460 if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
9461 set_general_process ();
9462
9463 xsnprintf (rs->buf, endbuf - rs->buf, "z%x,", packet);
9464 p = strchr (rs->buf, '\0');
9465 addr = remote_address_masked (addr);
9466 p += hexnumstr (p, (ULONGEST) addr);
9467 xsnprintf (p, endbuf - p, ",%x", len);
9468 putpkt (rs->buf);
9469 getpkt (&rs->buf, &rs->buf_size, 0);
9470
9471 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0 + packet]))
9472 {
9473 case PACKET_ERROR:
9474 case PACKET_UNKNOWN:
9475 return -1;
9476 case PACKET_OK:
9477 return 0;
9478 }
9479 internal_error (__FILE__, __LINE__,
9480 _("remote_remove_watchpoint: reached end of function"));
9481 }
9482
9483
9484 int remote_hw_watchpoint_limit = -1;
9485 int remote_hw_watchpoint_length_limit = -1;
9486 int remote_hw_breakpoint_limit = -1;
9487
9488 static int
9489 remote_region_ok_for_hw_watchpoint (struct target_ops *self,
9490 CORE_ADDR addr, int len)
9491 {
9492 if (remote_hw_watchpoint_length_limit == 0)
9493 return 0;
9494 else if (remote_hw_watchpoint_length_limit < 0)
9495 return 1;
9496 else if (len <= remote_hw_watchpoint_length_limit)
9497 return 1;
9498 else
9499 return 0;
9500 }
9501
9502 static int
9503 remote_check_watch_resources (struct target_ops *self,
9504 enum bptype type, int cnt, int ot)
9505 {
9506 if (type == bp_hardware_breakpoint)
9507 {
9508 if (remote_hw_breakpoint_limit == 0)
9509 return 0;
9510 else if (remote_hw_breakpoint_limit < 0)
9511 return 1;
9512 else if (cnt <= remote_hw_breakpoint_limit)
9513 return 1;
9514 }
9515 else
9516 {
9517 if (remote_hw_watchpoint_limit == 0)
9518 return 0;
9519 else if (remote_hw_watchpoint_limit < 0)
9520 return 1;
9521 else if (ot)
9522 return -1;
9523 else if (cnt <= remote_hw_watchpoint_limit)
9524 return 1;
9525 }
9526 return -1;
9527 }
9528
9529 /* The to_stopped_by_sw_breakpoint method of target remote. */
9530
9531 static int
9532 remote_stopped_by_sw_breakpoint (struct target_ops *ops)
9533 {
9534 struct thread_info *thread = inferior_thread ();
9535
9536 return (thread->priv != NULL
9537 && thread->priv->stop_reason == TARGET_STOPPED_BY_SW_BREAKPOINT);
9538 }
9539
9540 /* The to_supports_stopped_by_sw_breakpoint method of target
9541 remote. */
9542
9543 static int
9544 remote_supports_stopped_by_sw_breakpoint (struct target_ops *ops)
9545 {
9546 return (packet_support (PACKET_swbreak_feature) == PACKET_ENABLE);
9547 }
9548
9549 /* The to_stopped_by_hw_breakpoint method of target remote. */
9550
9551 static int
9552 remote_stopped_by_hw_breakpoint (struct target_ops *ops)
9553 {
9554 struct thread_info *thread = inferior_thread ();
9555
9556 return (thread->priv != NULL
9557 && thread->priv->stop_reason == TARGET_STOPPED_BY_HW_BREAKPOINT);
9558 }
9559
9560 /* The to_supports_stopped_by_hw_breakpoint method of target
9561 remote. */
9562
9563 static int
9564 remote_supports_stopped_by_hw_breakpoint (struct target_ops *ops)
9565 {
9566 return (packet_support (PACKET_hwbreak_feature) == PACKET_ENABLE);
9567 }
9568
9569 static int
9570 remote_stopped_by_watchpoint (struct target_ops *ops)
9571 {
9572 struct thread_info *thread = inferior_thread ();
9573
9574 return (thread->priv != NULL
9575 && thread->priv->stop_reason == TARGET_STOPPED_BY_WATCHPOINT);
9576 }
9577
9578 static int
9579 remote_stopped_data_address (struct target_ops *target, CORE_ADDR *addr_p)
9580 {
9581 struct thread_info *thread = inferior_thread ();
9582
9583 if (thread->priv != NULL
9584 && thread->priv->stop_reason == TARGET_STOPPED_BY_WATCHPOINT)
9585 {
9586 *addr_p = thread->priv->watch_data_address;
9587 return 1;
9588 }
9589
9590 return 0;
9591 }
9592
9593
9594 static int
9595 remote_insert_hw_breakpoint (struct target_ops *self, struct gdbarch *gdbarch,
9596 struct bp_target_info *bp_tgt)
9597 {
9598 CORE_ADDR addr = bp_tgt->reqstd_address;
9599 struct remote_state *rs;
9600 char *p, *endbuf;
9601 char *message;
9602 int bpsize;
9603
9604 /* The length field should be set to the size of a breakpoint
9605 instruction, even though we aren't inserting one ourselves. */
9606
9607 gdbarch_remote_breakpoint_from_pc (gdbarch, &addr, &bpsize);
9608
9609 if (packet_support (PACKET_Z1) == PACKET_DISABLE)
9610 return -1;
9611
9612 /* Make sure the remote is pointing at the right process, if
9613 necessary. */
9614 if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
9615 set_general_process ();
9616
9617 rs = get_remote_state ();
9618 p = rs->buf;
9619 endbuf = rs->buf + get_remote_packet_size ();
9620
9621 *(p++) = 'Z';
9622 *(p++) = '1';
9623 *(p++) = ',';
9624
9625 addr = remote_address_masked (addr);
9626 p += hexnumstr (p, (ULONGEST) addr);
9627 xsnprintf (p, endbuf - p, ",%x", bpsize);
9628
9629 if (remote_supports_cond_breakpoints (self))
9630 remote_add_target_side_condition (gdbarch, bp_tgt, p, endbuf);
9631
9632 if (remote_can_run_breakpoint_commands (self))
9633 remote_add_target_side_commands (gdbarch, bp_tgt, p);
9634
9635 putpkt (rs->buf);
9636 getpkt (&rs->buf, &rs->buf_size, 0);
9637
9638 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z1]))
9639 {
9640 case PACKET_ERROR:
9641 if (rs->buf[1] == '.')
9642 {
9643 message = strchr (rs->buf + 2, '.');
9644 if (message)
9645 error (_("Remote failure reply: %s"), message + 1);
9646 }
9647 return -1;
9648 case PACKET_UNKNOWN:
9649 return -1;
9650 case PACKET_OK:
9651 bp_tgt->placed_address = addr;
9652 bp_tgt->placed_size = bpsize;
9653 return 0;
9654 }
9655 internal_error (__FILE__, __LINE__,
9656 _("remote_insert_hw_breakpoint: reached end of function"));
9657 }
9658
9659
9660 static int
9661 remote_remove_hw_breakpoint (struct target_ops *self, struct gdbarch *gdbarch,
9662 struct bp_target_info *bp_tgt)
9663 {
9664 CORE_ADDR addr;
9665 struct remote_state *rs = get_remote_state ();
9666 char *p = rs->buf;
9667 char *endbuf = rs->buf + get_remote_packet_size ();
9668
9669 if (packet_support (PACKET_Z1) == PACKET_DISABLE)
9670 return -1;
9671
9672 /* Make sure the remote is pointing at the right process, if
9673 necessary. */
9674 if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
9675 set_general_process ();
9676
9677 *(p++) = 'z';
9678 *(p++) = '1';
9679 *(p++) = ',';
9680
9681 addr = remote_address_masked (bp_tgt->placed_address);
9682 p += hexnumstr (p, (ULONGEST) addr);
9683 xsnprintf (p, endbuf - p, ",%x", bp_tgt->placed_size);
9684
9685 putpkt (rs->buf);
9686 getpkt (&rs->buf, &rs->buf_size, 0);
9687
9688 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z1]))
9689 {
9690 case PACKET_ERROR:
9691 case PACKET_UNKNOWN:
9692 return -1;
9693 case PACKET_OK:
9694 return 0;
9695 }
9696 internal_error (__FILE__, __LINE__,
9697 _("remote_remove_hw_breakpoint: reached end of function"));
9698 }
9699
9700 /* Verify memory using the "qCRC:" request. */
9701
9702 static int
9703 remote_verify_memory (struct target_ops *ops,
9704 const gdb_byte *data, CORE_ADDR lma, ULONGEST size)
9705 {
9706 struct remote_state *rs = get_remote_state ();
9707 unsigned long host_crc, target_crc;
9708 char *tmp;
9709
9710 /* It doesn't make sense to use qCRC if the remote target is
9711 connected but not running. */
9712 if (target_has_execution && packet_support (PACKET_qCRC) != PACKET_DISABLE)
9713 {
9714 enum packet_result result;
9715
9716 /* Make sure the remote is pointing at the right process. */
9717 set_general_process ();
9718
9719 /* FIXME: assumes lma can fit into long. */
9720 xsnprintf (rs->buf, get_remote_packet_size (), "qCRC:%lx,%lx",
9721 (long) lma, (long) size);
9722 putpkt (rs->buf);
9723
9724 /* Be clever; compute the host_crc before waiting for target
9725 reply. */
9726 host_crc = xcrc32 (data, size, 0xffffffff);
9727
9728 getpkt (&rs->buf, &rs->buf_size, 0);
9729
9730 result = packet_ok (rs->buf,
9731 &remote_protocol_packets[PACKET_qCRC]);
9732 if (result == PACKET_ERROR)
9733 return -1;
9734 else if (result == PACKET_OK)
9735 {
9736 for (target_crc = 0, tmp = &rs->buf[1]; *tmp; tmp++)
9737 target_crc = target_crc * 16 + fromhex (*tmp);
9738
9739 return (host_crc == target_crc);
9740 }
9741 }
9742
9743 return simple_verify_memory (ops, data, lma, size);
9744 }
9745
9746 /* compare-sections command
9747
9748 With no arguments, compares each loadable section in the exec bfd
9749 with the same memory range on the target, and reports mismatches.
9750 Useful for verifying the image on the target against the exec file. */
9751
9752 static void
9753 compare_sections_command (char *args, int from_tty)
9754 {
9755 asection *s;
9756 struct cleanup *old_chain;
9757 gdb_byte *sectdata;
9758 const char *sectname;
9759 bfd_size_type size;
9760 bfd_vma lma;
9761 int matched = 0;
9762 int mismatched = 0;
9763 int res;
9764 int read_only = 0;
9765
9766 if (!exec_bfd)
9767 error (_("command cannot be used without an exec file"));
9768
9769 /* Make sure the remote is pointing at the right process. */
9770 set_general_process ();
9771
9772 if (args != NULL && strcmp (args, "-r") == 0)
9773 {
9774 read_only = 1;
9775 args = NULL;
9776 }
9777
9778 for (s = exec_bfd->sections; s; s = s->next)
9779 {
9780 if (!(s->flags & SEC_LOAD))
9781 continue; /* Skip non-loadable section. */
9782
9783 if (read_only && (s->flags & SEC_READONLY) == 0)
9784 continue; /* Skip writeable sections */
9785
9786 size = bfd_get_section_size (s);
9787 if (size == 0)
9788 continue; /* Skip zero-length section. */
9789
9790 sectname = bfd_get_section_name (exec_bfd, s);
9791 if (args && strcmp (args, sectname) != 0)
9792 continue; /* Not the section selected by user. */
9793
9794 matched = 1; /* Do this section. */
9795 lma = s->lma;
9796
9797 sectdata = (gdb_byte *) xmalloc (size);
9798 old_chain = make_cleanup (xfree, sectdata);
9799 bfd_get_section_contents (exec_bfd, s, sectdata, 0, size);
9800
9801 res = target_verify_memory (sectdata, lma, size);
9802
9803 if (res == -1)
9804 error (_("target memory fault, section %s, range %s -- %s"), sectname,
9805 paddress (target_gdbarch (), lma),
9806 paddress (target_gdbarch (), lma + size));
9807
9808 printf_filtered ("Section %s, range %s -- %s: ", sectname,
9809 paddress (target_gdbarch (), lma),
9810 paddress (target_gdbarch (), lma + size));
9811 if (res)
9812 printf_filtered ("matched.\n");
9813 else
9814 {
9815 printf_filtered ("MIS-MATCHED!\n");
9816 mismatched++;
9817 }
9818
9819 do_cleanups (old_chain);
9820 }
9821 if (mismatched > 0)
9822 warning (_("One or more sections of the target image does not match\n\
9823 the loaded file\n"));
9824 if (args && !matched)
9825 printf_filtered (_("No loaded section named '%s'.\n"), args);
9826 }
9827
9828 /* Write LEN bytes from WRITEBUF into OBJECT_NAME/ANNEX at OFFSET
9829 into remote target. The number of bytes written to the remote
9830 target is returned, or -1 for error. */
9831
9832 static enum target_xfer_status
9833 remote_write_qxfer (struct target_ops *ops, const char *object_name,
9834 const char *annex, const gdb_byte *writebuf,
9835 ULONGEST offset, LONGEST len, ULONGEST *xfered_len,
9836 struct packet_config *packet)
9837 {
9838 int i, buf_len;
9839 ULONGEST n;
9840 struct remote_state *rs = get_remote_state ();
9841 int max_size = get_memory_write_packet_size ();
9842
9843 if (packet->support == PACKET_DISABLE)
9844 return TARGET_XFER_E_IO;
9845
9846 /* Insert header. */
9847 i = snprintf (rs->buf, max_size,
9848 "qXfer:%s:write:%s:%s:",
9849 object_name, annex ? annex : "",
9850 phex_nz (offset, sizeof offset));
9851 max_size -= (i + 1);
9852
9853 /* Escape as much data as fits into rs->buf. */
9854 buf_len = remote_escape_output
9855 (writebuf, len, 1, (gdb_byte *) rs->buf + i, &max_size, max_size);
9856
9857 if (putpkt_binary (rs->buf, i + buf_len) < 0
9858 || getpkt_sane (&rs->buf, &rs->buf_size, 0) < 0
9859 || packet_ok (rs->buf, packet) != PACKET_OK)
9860 return TARGET_XFER_E_IO;
9861
9862 unpack_varlen_hex (rs->buf, &n);
9863
9864 *xfered_len = n;
9865 return TARGET_XFER_OK;
9866 }
9867
9868 /* Read OBJECT_NAME/ANNEX from the remote target using a qXfer packet.
9869 Data at OFFSET, of up to LEN bytes, is read into READBUF; the
9870 number of bytes read is returned, or 0 for EOF, or -1 for error.
9871 The number of bytes read may be less than LEN without indicating an
9872 EOF. PACKET is checked and updated to indicate whether the remote
9873 target supports this object. */
9874
9875 static enum target_xfer_status
9876 remote_read_qxfer (struct target_ops *ops, const char *object_name,
9877 const char *annex,
9878 gdb_byte *readbuf, ULONGEST offset, LONGEST len,
9879 ULONGEST *xfered_len,
9880 struct packet_config *packet)
9881 {
9882 struct remote_state *rs = get_remote_state ();
9883 LONGEST i, n, packet_len;
9884
9885 if (packet->support == PACKET_DISABLE)
9886 return TARGET_XFER_E_IO;
9887
9888 /* Check whether we've cached an end-of-object packet that matches
9889 this request. */
9890 if (rs->finished_object)
9891 {
9892 if (strcmp (object_name, rs->finished_object) == 0
9893 && strcmp (annex ? annex : "", rs->finished_annex) == 0
9894 && offset == rs->finished_offset)
9895 return TARGET_XFER_EOF;
9896
9897
9898 /* Otherwise, we're now reading something different. Discard
9899 the cache. */
9900 xfree (rs->finished_object);
9901 xfree (rs->finished_annex);
9902 rs->finished_object = NULL;
9903 rs->finished_annex = NULL;
9904 }
9905
9906 /* Request only enough to fit in a single packet. The actual data
9907 may not, since we don't know how much of it will need to be escaped;
9908 the target is free to respond with slightly less data. We subtract
9909 five to account for the response type and the protocol frame. */
9910 n = std::min (get_remote_packet_size () - 5, len);
9911 snprintf (rs->buf, get_remote_packet_size () - 4, "qXfer:%s:read:%s:%s,%s",
9912 object_name, annex ? annex : "",
9913 phex_nz (offset, sizeof offset),
9914 phex_nz (n, sizeof n));
9915 i = putpkt (rs->buf);
9916 if (i < 0)
9917 return TARGET_XFER_E_IO;
9918
9919 rs->buf[0] = '\0';
9920 packet_len = getpkt_sane (&rs->buf, &rs->buf_size, 0);
9921 if (packet_len < 0 || packet_ok (rs->buf, packet) != PACKET_OK)
9922 return TARGET_XFER_E_IO;
9923
9924 if (rs->buf[0] != 'l' && rs->buf[0] != 'm')
9925 error (_("Unknown remote qXfer reply: %s"), rs->buf);
9926
9927 /* 'm' means there is (or at least might be) more data after this
9928 batch. That does not make sense unless there's at least one byte
9929 of data in this reply. */
9930 if (rs->buf[0] == 'm' && packet_len == 1)
9931 error (_("Remote qXfer reply contained no data."));
9932
9933 /* Got some data. */
9934 i = remote_unescape_input ((gdb_byte *) rs->buf + 1,
9935 packet_len - 1, readbuf, n);
9936
9937 /* 'l' is an EOF marker, possibly including a final block of data,
9938 or possibly empty. If we have the final block of a non-empty
9939 object, record this fact to bypass a subsequent partial read. */
9940 if (rs->buf[0] == 'l' && offset + i > 0)
9941 {
9942 rs->finished_object = xstrdup (object_name);
9943 rs->finished_annex = xstrdup (annex ? annex : "");
9944 rs->finished_offset = offset + i;
9945 }
9946
9947 if (i == 0)
9948 return TARGET_XFER_EOF;
9949 else
9950 {
9951 *xfered_len = i;
9952 return TARGET_XFER_OK;
9953 }
9954 }
9955
9956 static enum target_xfer_status
9957 remote_xfer_partial (struct target_ops *ops, enum target_object object,
9958 const char *annex, gdb_byte *readbuf,
9959 const gdb_byte *writebuf, ULONGEST offset, ULONGEST len,
9960 ULONGEST *xfered_len)
9961 {
9962 struct remote_state *rs;
9963 int i;
9964 char *p2;
9965 char query_type;
9966 int unit_size = gdbarch_addressable_memory_unit_size (target_gdbarch ());
9967
9968 set_remote_traceframe ();
9969 set_general_thread (inferior_ptid);
9970
9971 rs = get_remote_state ();
9972
9973 /* Handle memory using the standard memory routines. */
9974 if (object == TARGET_OBJECT_MEMORY)
9975 {
9976 /* If the remote target is connected but not running, we should
9977 pass this request down to a lower stratum (e.g. the executable
9978 file). */
9979 if (!target_has_execution)
9980 return TARGET_XFER_EOF;
9981
9982 if (writebuf != NULL)
9983 return remote_write_bytes (offset, writebuf, len, unit_size,
9984 xfered_len);
9985 else
9986 return remote_read_bytes (ops, offset, readbuf, len, unit_size,
9987 xfered_len);
9988 }
9989
9990 /* Handle SPU memory using qxfer packets. */
9991 if (object == TARGET_OBJECT_SPU)
9992 {
9993 if (readbuf)
9994 return remote_read_qxfer (ops, "spu", annex, readbuf, offset, len,
9995 xfered_len, &remote_protocol_packets
9996 [PACKET_qXfer_spu_read]);
9997 else
9998 return remote_write_qxfer (ops, "spu", annex, writebuf, offset, len,
9999 xfered_len, &remote_protocol_packets
10000 [PACKET_qXfer_spu_write]);
10001 }
10002
10003 /* Handle extra signal info using qxfer packets. */
10004 if (object == TARGET_OBJECT_SIGNAL_INFO)
10005 {
10006 if (readbuf)
10007 return remote_read_qxfer (ops, "siginfo", annex, readbuf, offset, len,
10008 xfered_len, &remote_protocol_packets
10009 [PACKET_qXfer_siginfo_read]);
10010 else
10011 return remote_write_qxfer (ops, "siginfo", annex,
10012 writebuf, offset, len, xfered_len,
10013 &remote_protocol_packets
10014 [PACKET_qXfer_siginfo_write]);
10015 }
10016
10017 if (object == TARGET_OBJECT_STATIC_TRACE_DATA)
10018 {
10019 if (readbuf)
10020 return remote_read_qxfer (ops, "statictrace", annex,
10021 readbuf, offset, len, xfered_len,
10022 &remote_protocol_packets
10023 [PACKET_qXfer_statictrace_read]);
10024 else
10025 return TARGET_XFER_E_IO;
10026 }
10027
10028 /* Only handle flash writes. */
10029 if (writebuf != NULL)
10030 {
10031 switch (object)
10032 {
10033 case TARGET_OBJECT_FLASH:
10034 return remote_flash_write (ops, offset, len, xfered_len,
10035 writebuf);
10036
10037 default:
10038 return TARGET_XFER_E_IO;
10039 }
10040 }
10041
10042 /* Map pre-existing objects onto letters. DO NOT do this for new
10043 objects!!! Instead specify new query packets. */
10044 switch (object)
10045 {
10046 case TARGET_OBJECT_AVR:
10047 query_type = 'R';
10048 break;
10049
10050 case TARGET_OBJECT_AUXV:
10051 gdb_assert (annex == NULL);
10052 return remote_read_qxfer (ops, "auxv", annex, readbuf, offset, len,
10053 xfered_len,
10054 &remote_protocol_packets[PACKET_qXfer_auxv]);
10055
10056 case TARGET_OBJECT_AVAILABLE_FEATURES:
10057 return remote_read_qxfer
10058 (ops, "features", annex, readbuf, offset, len, xfered_len,
10059 &remote_protocol_packets[PACKET_qXfer_features]);
10060
10061 case TARGET_OBJECT_LIBRARIES:
10062 return remote_read_qxfer
10063 (ops, "libraries", annex, readbuf, offset, len, xfered_len,
10064 &remote_protocol_packets[PACKET_qXfer_libraries]);
10065
10066 case TARGET_OBJECT_LIBRARIES_SVR4:
10067 return remote_read_qxfer
10068 (ops, "libraries-svr4", annex, readbuf, offset, len, xfered_len,
10069 &remote_protocol_packets[PACKET_qXfer_libraries_svr4]);
10070
10071 case TARGET_OBJECT_MEMORY_MAP:
10072 gdb_assert (annex == NULL);
10073 return remote_read_qxfer (ops, "memory-map", annex, readbuf, offset, len,
10074 xfered_len,
10075 &remote_protocol_packets[PACKET_qXfer_memory_map]);
10076
10077 case TARGET_OBJECT_OSDATA:
10078 /* Should only get here if we're connected. */
10079 gdb_assert (rs->remote_desc);
10080 return remote_read_qxfer
10081 (ops, "osdata", annex, readbuf, offset, len, xfered_len,
10082 &remote_protocol_packets[PACKET_qXfer_osdata]);
10083
10084 case TARGET_OBJECT_THREADS:
10085 gdb_assert (annex == NULL);
10086 return remote_read_qxfer (ops, "threads", annex, readbuf, offset, len,
10087 xfered_len,
10088 &remote_protocol_packets[PACKET_qXfer_threads]);
10089
10090 case TARGET_OBJECT_TRACEFRAME_INFO:
10091 gdb_assert (annex == NULL);
10092 return remote_read_qxfer
10093 (ops, "traceframe-info", annex, readbuf, offset, len, xfered_len,
10094 &remote_protocol_packets[PACKET_qXfer_traceframe_info]);
10095
10096 case TARGET_OBJECT_FDPIC:
10097 return remote_read_qxfer (ops, "fdpic", annex, readbuf, offset, len,
10098 xfered_len,
10099 &remote_protocol_packets[PACKET_qXfer_fdpic]);
10100
10101 case TARGET_OBJECT_OPENVMS_UIB:
10102 return remote_read_qxfer (ops, "uib", annex, readbuf, offset, len,
10103 xfered_len,
10104 &remote_protocol_packets[PACKET_qXfer_uib]);
10105
10106 case TARGET_OBJECT_BTRACE:
10107 return remote_read_qxfer (ops, "btrace", annex, readbuf, offset, len,
10108 xfered_len,
10109 &remote_protocol_packets[PACKET_qXfer_btrace]);
10110
10111 case TARGET_OBJECT_BTRACE_CONF:
10112 return remote_read_qxfer (ops, "btrace-conf", annex, readbuf, offset,
10113 len, xfered_len,
10114 &remote_protocol_packets[PACKET_qXfer_btrace_conf]);
10115
10116 case TARGET_OBJECT_EXEC_FILE:
10117 return remote_read_qxfer (ops, "exec-file", annex, readbuf, offset,
10118 len, xfered_len,
10119 &remote_protocol_packets[PACKET_qXfer_exec_file]);
10120
10121 default:
10122 return TARGET_XFER_E_IO;
10123 }
10124
10125 /* Minimum outbuf size is get_remote_packet_size (). If LEN is not
10126 large enough let the caller deal with it. */
10127 if (len < get_remote_packet_size ())
10128 return TARGET_XFER_E_IO;
10129 len = get_remote_packet_size ();
10130
10131 /* Except for querying the minimum buffer size, target must be open. */
10132 if (!rs->remote_desc)
10133 error (_("remote query is only available after target open"));
10134
10135 gdb_assert (annex != NULL);
10136 gdb_assert (readbuf != NULL);
10137
10138 p2 = rs->buf;
10139 *p2++ = 'q';
10140 *p2++ = query_type;
10141
10142 /* We used one buffer char for the remote protocol q command and
10143 another for the query type. As the remote protocol encapsulation
10144 uses 4 chars plus one extra in case we are debugging
10145 (remote_debug), we have PBUFZIZ - 7 left to pack the query
10146 string. */
10147 i = 0;
10148 while (annex[i] && (i < (get_remote_packet_size () - 8)))
10149 {
10150 /* Bad caller may have sent forbidden characters. */
10151 gdb_assert (isprint (annex[i]) && annex[i] != '$' && annex[i] != '#');
10152 *p2++ = annex[i];
10153 i++;
10154 }
10155 *p2 = '\0';
10156 gdb_assert (annex[i] == '\0');
10157
10158 i = putpkt (rs->buf);
10159 if (i < 0)
10160 return TARGET_XFER_E_IO;
10161
10162 getpkt (&rs->buf, &rs->buf_size, 0);
10163 strcpy ((char *) readbuf, rs->buf);
10164
10165 *xfered_len = strlen ((char *) readbuf);
10166 return TARGET_XFER_OK;
10167 }
10168
10169 /* Implementation of to_get_memory_xfer_limit. */
10170
10171 static ULONGEST
10172 remote_get_memory_xfer_limit (struct target_ops *ops)
10173 {
10174 return get_memory_write_packet_size ();
10175 }
10176
10177 static int
10178 remote_search_memory (struct target_ops* ops,
10179 CORE_ADDR start_addr, ULONGEST search_space_len,
10180 const gdb_byte *pattern, ULONGEST pattern_len,
10181 CORE_ADDR *found_addrp)
10182 {
10183 int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
10184 struct remote_state *rs = get_remote_state ();
10185 int max_size = get_memory_write_packet_size ();
10186 struct packet_config *packet =
10187 &remote_protocol_packets[PACKET_qSearch_memory];
10188 /* Number of packet bytes used to encode the pattern;
10189 this could be more than PATTERN_LEN due to escape characters. */
10190 int escaped_pattern_len;
10191 /* Amount of pattern that was encodable in the packet. */
10192 int used_pattern_len;
10193 int i;
10194 int found;
10195 ULONGEST found_addr;
10196
10197 /* Don't go to the target if we don't have to.
10198 This is done before checking packet->support to avoid the possibility that
10199 a success for this edge case means the facility works in general. */
10200 if (pattern_len > search_space_len)
10201 return 0;
10202 if (pattern_len == 0)
10203 {
10204 *found_addrp = start_addr;
10205 return 1;
10206 }
10207
10208 /* If we already know the packet isn't supported, fall back to the simple
10209 way of searching memory. */
10210
10211 if (packet_config_support (packet) == PACKET_DISABLE)
10212 {
10213 /* Target doesn't provided special support, fall back and use the
10214 standard support (copy memory and do the search here). */
10215 return simple_search_memory (ops, start_addr, search_space_len,
10216 pattern, pattern_len, found_addrp);
10217 }
10218
10219 /* Make sure the remote is pointing at the right process. */
10220 set_general_process ();
10221
10222 /* Insert header. */
10223 i = snprintf (rs->buf, max_size,
10224 "qSearch:memory:%s;%s;",
10225 phex_nz (start_addr, addr_size),
10226 phex_nz (search_space_len, sizeof (search_space_len)));
10227 max_size -= (i + 1);
10228
10229 /* Escape as much data as fits into rs->buf. */
10230 escaped_pattern_len =
10231 remote_escape_output (pattern, pattern_len, 1, (gdb_byte *) rs->buf + i,
10232 &used_pattern_len, max_size);
10233
10234 /* Bail if the pattern is too large. */
10235 if (used_pattern_len != pattern_len)
10236 error (_("Pattern is too large to transmit to remote target."));
10237
10238 if (putpkt_binary (rs->buf, i + escaped_pattern_len) < 0
10239 || getpkt_sane (&rs->buf, &rs->buf_size, 0) < 0
10240 || packet_ok (rs->buf, packet) != PACKET_OK)
10241 {
10242 /* The request may not have worked because the command is not
10243 supported. If so, fall back to the simple way. */
10244 if (packet->support == PACKET_DISABLE)
10245 {
10246 return simple_search_memory (ops, start_addr, search_space_len,
10247 pattern, pattern_len, found_addrp);
10248 }
10249 return -1;
10250 }
10251
10252 if (rs->buf[0] == '0')
10253 found = 0;
10254 else if (rs->buf[0] == '1')
10255 {
10256 found = 1;
10257 if (rs->buf[1] != ',')
10258 error (_("Unknown qSearch:memory reply: %s"), rs->buf);
10259 unpack_varlen_hex (rs->buf + 2, &found_addr);
10260 *found_addrp = found_addr;
10261 }
10262 else
10263 error (_("Unknown qSearch:memory reply: %s"), rs->buf);
10264
10265 return found;
10266 }
10267
10268 static void
10269 remote_rcmd (struct target_ops *self, const char *command,
10270 struct ui_file *outbuf)
10271 {
10272 struct remote_state *rs = get_remote_state ();
10273 char *p = rs->buf;
10274
10275 if (!rs->remote_desc)
10276 error (_("remote rcmd is only available after target open"));
10277
10278 /* Send a NULL command across as an empty command. */
10279 if (command == NULL)
10280 command = "";
10281
10282 /* The query prefix. */
10283 strcpy (rs->buf, "qRcmd,");
10284 p = strchr (rs->buf, '\0');
10285
10286 if ((strlen (rs->buf) + strlen (command) * 2 + 8/*misc*/)
10287 > get_remote_packet_size ())
10288 error (_("\"monitor\" command ``%s'' is too long."), command);
10289
10290 /* Encode the actual command. */
10291 bin2hex ((const gdb_byte *) command, p, strlen (command));
10292
10293 if (putpkt (rs->buf) < 0)
10294 error (_("Communication problem with target."));
10295
10296 /* get/display the response */
10297 while (1)
10298 {
10299 char *buf;
10300
10301 /* XXX - see also remote_get_noisy_reply(). */
10302 QUIT; /* Allow user to bail out with ^C. */
10303 rs->buf[0] = '\0';
10304 if (getpkt_sane (&rs->buf, &rs->buf_size, 0) == -1)
10305 {
10306 /* Timeout. Continue to (try to) read responses.
10307 This is better than stopping with an error, assuming the stub
10308 is still executing the (long) monitor command.
10309 If needed, the user can interrupt gdb using C-c, obtaining
10310 an effect similar to stop on timeout. */
10311 continue;
10312 }
10313 buf = rs->buf;
10314 if (buf[0] == '\0')
10315 error (_("Target does not support this command."));
10316 if (buf[0] == 'O' && buf[1] != 'K')
10317 {
10318 remote_console_output (buf + 1); /* 'O' message from stub. */
10319 continue;
10320 }
10321 if (strcmp (buf, "OK") == 0)
10322 break;
10323 if (strlen (buf) == 3 && buf[0] == 'E'
10324 && isdigit (buf[1]) && isdigit (buf[2]))
10325 {
10326 error (_("Protocol error with Rcmd"));
10327 }
10328 for (p = buf; p[0] != '\0' && p[1] != '\0'; p += 2)
10329 {
10330 char c = (fromhex (p[0]) << 4) + fromhex (p[1]);
10331
10332 fputc_unfiltered (c, outbuf);
10333 }
10334 break;
10335 }
10336 }
10337
10338 static VEC(mem_region_s) *
10339 remote_memory_map (struct target_ops *ops)
10340 {
10341 VEC(mem_region_s) *result = NULL;
10342 char *text = target_read_stralloc (&current_target,
10343 TARGET_OBJECT_MEMORY_MAP, NULL);
10344
10345 if (text)
10346 {
10347 struct cleanup *back_to = make_cleanup (xfree, text);
10348
10349 result = parse_memory_map (text);
10350 do_cleanups (back_to);
10351 }
10352
10353 return result;
10354 }
10355
10356 static void
10357 packet_command (char *args, int from_tty)
10358 {
10359 struct remote_state *rs = get_remote_state ();
10360
10361 if (!rs->remote_desc)
10362 error (_("command can only be used with remote target"));
10363
10364 if (!args)
10365 error (_("remote-packet command requires packet text as argument"));
10366
10367 puts_filtered ("sending: ");
10368 print_packet (args);
10369 puts_filtered ("\n");
10370 putpkt (args);
10371
10372 getpkt (&rs->buf, &rs->buf_size, 0);
10373 puts_filtered ("received: ");
10374 print_packet (rs->buf);
10375 puts_filtered ("\n");
10376 }
10377
10378 #if 0
10379 /* --------- UNIT_TEST for THREAD oriented PACKETS ------------------- */
10380
10381 static void display_thread_info (struct gdb_ext_thread_info *info);
10382
10383 static void threadset_test_cmd (char *cmd, int tty);
10384
10385 static void threadalive_test (char *cmd, int tty);
10386
10387 static void threadlist_test_cmd (char *cmd, int tty);
10388
10389 int get_and_display_threadinfo (threadref *ref);
10390
10391 static void threadinfo_test_cmd (char *cmd, int tty);
10392
10393 static int thread_display_step (threadref *ref, void *context);
10394
10395 static void threadlist_update_test_cmd (char *cmd, int tty);
10396
10397 static void init_remote_threadtests (void);
10398
10399 #define SAMPLE_THREAD 0x05060708 /* Truncated 64 bit threadid. */
10400
10401 static void
10402 threadset_test_cmd (char *cmd, int tty)
10403 {
10404 int sample_thread = SAMPLE_THREAD;
10405
10406 printf_filtered (_("Remote threadset test\n"));
10407 set_general_thread (sample_thread);
10408 }
10409
10410
10411 static void
10412 threadalive_test (char *cmd, int tty)
10413 {
10414 int sample_thread = SAMPLE_THREAD;
10415 int pid = ptid_get_pid (inferior_ptid);
10416 ptid_t ptid = ptid_build (pid, sample_thread, 0);
10417
10418 if (remote_thread_alive (ptid))
10419 printf_filtered ("PASS: Thread alive test\n");
10420 else
10421 printf_filtered ("FAIL: Thread alive test\n");
10422 }
10423
10424 void output_threadid (char *title, threadref *ref);
10425
10426 void
10427 output_threadid (char *title, threadref *ref)
10428 {
10429 char hexid[20];
10430
10431 pack_threadid (&hexid[0], ref); /* Convert threead id into hex. */
10432 hexid[16] = 0;
10433 printf_filtered ("%s %s\n", title, (&hexid[0]));
10434 }
10435
10436 static void
10437 threadlist_test_cmd (char *cmd, int tty)
10438 {
10439 int startflag = 1;
10440 threadref nextthread;
10441 int done, result_count;
10442 threadref threadlist[3];
10443
10444 printf_filtered ("Remote Threadlist test\n");
10445 if (!remote_get_threadlist (startflag, &nextthread, 3, &done,
10446 &result_count, &threadlist[0]))
10447 printf_filtered ("FAIL: threadlist test\n");
10448 else
10449 {
10450 threadref *scan = threadlist;
10451 threadref *limit = scan + result_count;
10452
10453 while (scan < limit)
10454 output_threadid (" thread ", scan++);
10455 }
10456 }
10457
10458 void
10459 display_thread_info (struct gdb_ext_thread_info *info)
10460 {
10461 output_threadid ("Threadid: ", &info->threadid);
10462 printf_filtered ("Name: %s\n ", info->shortname);
10463 printf_filtered ("State: %s\n", info->display);
10464 printf_filtered ("other: %s\n\n", info->more_display);
10465 }
10466
10467 int
10468 get_and_display_threadinfo (threadref *ref)
10469 {
10470 int result;
10471 int set;
10472 struct gdb_ext_thread_info threadinfo;
10473
10474 set = TAG_THREADID | TAG_EXISTS | TAG_THREADNAME
10475 | TAG_MOREDISPLAY | TAG_DISPLAY;
10476 if (0 != (result = remote_get_threadinfo (ref, set, &threadinfo)))
10477 display_thread_info (&threadinfo);
10478 return result;
10479 }
10480
10481 static void
10482 threadinfo_test_cmd (char *cmd, int tty)
10483 {
10484 int athread = SAMPLE_THREAD;
10485 threadref thread;
10486 int set;
10487
10488 int_to_threadref (&thread, athread);
10489 printf_filtered ("Remote Threadinfo test\n");
10490 if (!get_and_display_threadinfo (&thread))
10491 printf_filtered ("FAIL cannot get thread info\n");
10492 }
10493
10494 static int
10495 thread_display_step (threadref *ref, void *context)
10496 {
10497 /* output_threadid(" threadstep ",ref); *//* simple test */
10498 return get_and_display_threadinfo (ref);
10499 }
10500
10501 static void
10502 threadlist_update_test_cmd (char *cmd, int tty)
10503 {
10504 printf_filtered ("Remote Threadlist update test\n");
10505 remote_threadlist_iterator (thread_display_step, 0, CRAZY_MAX_THREADS);
10506 }
10507
10508 static void
10509 init_remote_threadtests (void)
10510 {
10511 add_com ("tlist", class_obscure, threadlist_test_cmd,
10512 _("Fetch and print the remote list of "
10513 "thread identifiers, one pkt only"));
10514 add_com ("tinfo", class_obscure, threadinfo_test_cmd,
10515 _("Fetch and display info about one thread"));
10516 add_com ("tset", class_obscure, threadset_test_cmd,
10517 _("Test setting to a different thread"));
10518 add_com ("tupd", class_obscure, threadlist_update_test_cmd,
10519 _("Iterate through updating all remote thread info"));
10520 add_com ("talive", class_obscure, threadalive_test,
10521 _(" Remote thread alive test "));
10522 }
10523
10524 #endif /* 0 */
10525
10526 /* Convert a thread ID to a string. Returns the string in a static
10527 buffer. */
10528
10529 static char *
10530 remote_pid_to_str (struct target_ops *ops, ptid_t ptid)
10531 {
10532 static char buf[64];
10533 struct remote_state *rs = get_remote_state ();
10534
10535 if (ptid_equal (ptid, null_ptid))
10536 return normal_pid_to_str (ptid);
10537 else if (ptid_is_pid (ptid))
10538 {
10539 /* Printing an inferior target id. */
10540
10541 /* When multi-process extensions are off, there's no way in the
10542 remote protocol to know the remote process id, if there's any
10543 at all. There's one exception --- when we're connected with
10544 target extended-remote, and we manually attached to a process
10545 with "attach PID". We don't record anywhere a flag that
10546 allows us to distinguish that case from the case of
10547 connecting with extended-remote and the stub already being
10548 attached to a process, and reporting yes to qAttached, hence
10549 no smart special casing here. */
10550 if (!remote_multi_process_p (rs))
10551 {
10552 xsnprintf (buf, sizeof buf, "Remote target");
10553 return buf;
10554 }
10555
10556 return normal_pid_to_str (ptid);
10557 }
10558 else
10559 {
10560 if (ptid_equal (magic_null_ptid, ptid))
10561 xsnprintf (buf, sizeof buf, "Thread <main>");
10562 else if (remote_multi_process_p (rs))
10563 if (ptid_get_lwp (ptid) == 0)
10564 return normal_pid_to_str (ptid);
10565 else
10566 xsnprintf (buf, sizeof buf, "Thread %d.%ld",
10567 ptid_get_pid (ptid), ptid_get_lwp (ptid));
10568 else
10569 xsnprintf (buf, sizeof buf, "Thread %ld",
10570 ptid_get_lwp (ptid));
10571 return buf;
10572 }
10573 }
10574
10575 /* Get the address of the thread local variable in OBJFILE which is
10576 stored at OFFSET within the thread local storage for thread PTID. */
10577
10578 static CORE_ADDR
10579 remote_get_thread_local_address (struct target_ops *ops,
10580 ptid_t ptid, CORE_ADDR lm, CORE_ADDR offset)
10581 {
10582 if (packet_support (PACKET_qGetTLSAddr) != PACKET_DISABLE)
10583 {
10584 struct remote_state *rs = get_remote_state ();
10585 char *p = rs->buf;
10586 char *endp = rs->buf + get_remote_packet_size ();
10587 enum packet_result result;
10588
10589 strcpy (p, "qGetTLSAddr:");
10590 p += strlen (p);
10591 p = write_ptid (p, endp, ptid);
10592 *p++ = ',';
10593 p += hexnumstr (p, offset);
10594 *p++ = ',';
10595 p += hexnumstr (p, lm);
10596 *p++ = '\0';
10597
10598 putpkt (rs->buf);
10599 getpkt (&rs->buf, &rs->buf_size, 0);
10600 result = packet_ok (rs->buf,
10601 &remote_protocol_packets[PACKET_qGetTLSAddr]);
10602 if (result == PACKET_OK)
10603 {
10604 ULONGEST result;
10605
10606 unpack_varlen_hex (rs->buf, &result);
10607 return result;
10608 }
10609 else if (result == PACKET_UNKNOWN)
10610 throw_error (TLS_GENERIC_ERROR,
10611 _("Remote target doesn't support qGetTLSAddr packet"));
10612 else
10613 throw_error (TLS_GENERIC_ERROR,
10614 _("Remote target failed to process qGetTLSAddr request"));
10615 }
10616 else
10617 throw_error (TLS_GENERIC_ERROR,
10618 _("TLS not supported or disabled on this target"));
10619 /* Not reached. */
10620 return 0;
10621 }
10622
10623 /* Provide thread local base, i.e. Thread Information Block address.
10624 Returns 1 if ptid is found and thread_local_base is non zero. */
10625
10626 static int
10627 remote_get_tib_address (struct target_ops *self, ptid_t ptid, CORE_ADDR *addr)
10628 {
10629 if (packet_support (PACKET_qGetTIBAddr) != PACKET_DISABLE)
10630 {
10631 struct remote_state *rs = get_remote_state ();
10632 char *p = rs->buf;
10633 char *endp = rs->buf + get_remote_packet_size ();
10634 enum packet_result result;
10635
10636 strcpy (p, "qGetTIBAddr:");
10637 p += strlen (p);
10638 p = write_ptid (p, endp, ptid);
10639 *p++ = '\0';
10640
10641 putpkt (rs->buf);
10642 getpkt (&rs->buf, &rs->buf_size, 0);
10643 result = packet_ok (rs->buf,
10644 &remote_protocol_packets[PACKET_qGetTIBAddr]);
10645 if (result == PACKET_OK)
10646 {
10647 ULONGEST result;
10648
10649 unpack_varlen_hex (rs->buf, &result);
10650 if (addr)
10651 *addr = (CORE_ADDR) result;
10652 return 1;
10653 }
10654 else if (result == PACKET_UNKNOWN)
10655 error (_("Remote target doesn't support qGetTIBAddr packet"));
10656 else
10657 error (_("Remote target failed to process qGetTIBAddr request"));
10658 }
10659 else
10660 error (_("qGetTIBAddr not supported or disabled on this target"));
10661 /* Not reached. */
10662 return 0;
10663 }
10664
10665 /* Support for inferring a target description based on the current
10666 architecture and the size of a 'g' packet. While the 'g' packet
10667 can have any size (since optional registers can be left off the
10668 end), some sizes are easily recognizable given knowledge of the
10669 approximate architecture. */
10670
10671 struct remote_g_packet_guess
10672 {
10673 int bytes;
10674 const struct target_desc *tdesc;
10675 };
10676 typedef struct remote_g_packet_guess remote_g_packet_guess_s;
10677 DEF_VEC_O(remote_g_packet_guess_s);
10678
10679 struct remote_g_packet_data
10680 {
10681 VEC(remote_g_packet_guess_s) *guesses;
10682 };
10683
10684 static struct gdbarch_data *remote_g_packet_data_handle;
10685
10686 static void *
10687 remote_g_packet_data_init (struct obstack *obstack)
10688 {
10689 return OBSTACK_ZALLOC (obstack, struct remote_g_packet_data);
10690 }
10691
10692 void
10693 register_remote_g_packet_guess (struct gdbarch *gdbarch, int bytes,
10694 const struct target_desc *tdesc)
10695 {
10696 struct remote_g_packet_data *data
10697 = ((struct remote_g_packet_data *)
10698 gdbarch_data (gdbarch, remote_g_packet_data_handle));
10699 struct remote_g_packet_guess new_guess, *guess;
10700 int ix;
10701
10702 gdb_assert (tdesc != NULL);
10703
10704 for (ix = 0;
10705 VEC_iterate (remote_g_packet_guess_s, data->guesses, ix, guess);
10706 ix++)
10707 if (guess->bytes == bytes)
10708 internal_error (__FILE__, __LINE__,
10709 _("Duplicate g packet description added for size %d"),
10710 bytes);
10711
10712 new_guess.bytes = bytes;
10713 new_guess.tdesc = tdesc;
10714 VEC_safe_push (remote_g_packet_guess_s, data->guesses, &new_guess);
10715 }
10716
10717 /* Return 1 if remote_read_description would do anything on this target
10718 and architecture, 0 otherwise. */
10719
10720 static int
10721 remote_read_description_p (struct target_ops *target)
10722 {
10723 struct remote_g_packet_data *data
10724 = ((struct remote_g_packet_data *)
10725 gdbarch_data (target_gdbarch (), remote_g_packet_data_handle));
10726
10727 if (!VEC_empty (remote_g_packet_guess_s, data->guesses))
10728 return 1;
10729
10730 return 0;
10731 }
10732
10733 static const struct target_desc *
10734 remote_read_description (struct target_ops *target)
10735 {
10736 struct remote_g_packet_data *data
10737 = ((struct remote_g_packet_data *)
10738 gdbarch_data (target_gdbarch (), remote_g_packet_data_handle));
10739
10740 /* Do not try this during initial connection, when we do not know
10741 whether there is a running but stopped thread. */
10742 if (!target_has_execution || ptid_equal (inferior_ptid, null_ptid))
10743 return target->beneath->to_read_description (target->beneath);
10744
10745 if (!VEC_empty (remote_g_packet_guess_s, data->guesses))
10746 {
10747 struct remote_g_packet_guess *guess;
10748 int ix;
10749 int bytes = send_g_packet ();
10750
10751 for (ix = 0;
10752 VEC_iterate (remote_g_packet_guess_s, data->guesses, ix, guess);
10753 ix++)
10754 if (guess->bytes == bytes)
10755 return guess->tdesc;
10756
10757 /* We discard the g packet. A minor optimization would be to
10758 hold on to it, and fill the register cache once we have selected
10759 an architecture, but it's too tricky to do safely. */
10760 }
10761
10762 return target->beneath->to_read_description (target->beneath);
10763 }
10764
10765 /* Remote file transfer support. This is host-initiated I/O, not
10766 target-initiated; for target-initiated, see remote-fileio.c. */
10767
10768 /* If *LEFT is at least the length of STRING, copy STRING to
10769 *BUFFER, update *BUFFER to point to the new end of the buffer, and
10770 decrease *LEFT. Otherwise raise an error. */
10771
10772 static void
10773 remote_buffer_add_string (char **buffer, int *left, char *string)
10774 {
10775 int len = strlen (string);
10776
10777 if (len > *left)
10778 error (_("Packet too long for target."));
10779
10780 memcpy (*buffer, string, len);
10781 *buffer += len;
10782 *left -= len;
10783
10784 /* NUL-terminate the buffer as a convenience, if there is
10785 room. */
10786 if (*left)
10787 **buffer = '\0';
10788 }
10789
10790 /* If *LEFT is large enough, hex encode LEN bytes from BYTES into
10791 *BUFFER, update *BUFFER to point to the new end of the buffer, and
10792 decrease *LEFT. Otherwise raise an error. */
10793
10794 static void
10795 remote_buffer_add_bytes (char **buffer, int *left, const gdb_byte *bytes,
10796 int len)
10797 {
10798 if (2 * len > *left)
10799 error (_("Packet too long for target."));
10800
10801 bin2hex (bytes, *buffer, len);
10802 *buffer += 2 * len;
10803 *left -= 2 * len;
10804
10805 /* NUL-terminate the buffer as a convenience, if there is
10806 room. */
10807 if (*left)
10808 **buffer = '\0';
10809 }
10810
10811 /* If *LEFT is large enough, convert VALUE to hex and add it to
10812 *BUFFER, update *BUFFER to point to the new end of the buffer, and
10813 decrease *LEFT. Otherwise raise an error. */
10814
10815 static void
10816 remote_buffer_add_int (char **buffer, int *left, ULONGEST value)
10817 {
10818 int len = hexnumlen (value);
10819
10820 if (len > *left)
10821 error (_("Packet too long for target."));
10822
10823 hexnumstr (*buffer, value);
10824 *buffer += len;
10825 *left -= len;
10826
10827 /* NUL-terminate the buffer as a convenience, if there is
10828 room. */
10829 if (*left)
10830 **buffer = '\0';
10831 }
10832
10833 /* Parse an I/O result packet from BUFFER. Set RETCODE to the return
10834 value, *REMOTE_ERRNO to the remote error number or zero if none
10835 was included, and *ATTACHMENT to point to the start of the annex
10836 if any. The length of the packet isn't needed here; there may
10837 be NUL bytes in BUFFER, but they will be after *ATTACHMENT.
10838
10839 Return 0 if the packet could be parsed, -1 if it could not. If
10840 -1 is returned, the other variables may not be initialized. */
10841
10842 static int
10843 remote_hostio_parse_result (char *buffer, int *retcode,
10844 int *remote_errno, char **attachment)
10845 {
10846 char *p, *p2;
10847
10848 *remote_errno = 0;
10849 *attachment = NULL;
10850
10851 if (buffer[0] != 'F')
10852 return -1;
10853
10854 errno = 0;
10855 *retcode = strtol (&buffer[1], &p, 16);
10856 if (errno != 0 || p == &buffer[1])
10857 return -1;
10858
10859 /* Check for ",errno". */
10860 if (*p == ',')
10861 {
10862 errno = 0;
10863 *remote_errno = strtol (p + 1, &p2, 16);
10864 if (errno != 0 || p + 1 == p2)
10865 return -1;
10866 p = p2;
10867 }
10868
10869 /* Check for ";attachment". If there is no attachment, the
10870 packet should end here. */
10871 if (*p == ';')
10872 {
10873 *attachment = p + 1;
10874 return 0;
10875 }
10876 else if (*p == '\0')
10877 return 0;
10878 else
10879 return -1;
10880 }
10881
10882 /* Send a prepared I/O packet to the target and read its response.
10883 The prepared packet is in the global RS->BUF before this function
10884 is called, and the answer is there when we return.
10885
10886 COMMAND_BYTES is the length of the request to send, which may include
10887 binary data. WHICH_PACKET is the packet configuration to check
10888 before attempting a packet. If an error occurs, *REMOTE_ERRNO
10889 is set to the error number and -1 is returned. Otherwise the value
10890 returned by the function is returned.
10891
10892 ATTACHMENT and ATTACHMENT_LEN should be non-NULL if and only if an
10893 attachment is expected; an error will be reported if there's a
10894 mismatch. If one is found, *ATTACHMENT will be set to point into
10895 the packet buffer and *ATTACHMENT_LEN will be set to the
10896 attachment's length. */
10897
10898 static int
10899 remote_hostio_send_command (int command_bytes, int which_packet,
10900 int *remote_errno, char **attachment,
10901 int *attachment_len)
10902 {
10903 struct remote_state *rs = get_remote_state ();
10904 int ret, bytes_read;
10905 char *attachment_tmp;
10906
10907 if (!rs->remote_desc
10908 || packet_support (which_packet) == PACKET_DISABLE)
10909 {
10910 *remote_errno = FILEIO_ENOSYS;
10911 return -1;
10912 }
10913
10914 putpkt_binary (rs->buf, command_bytes);
10915 bytes_read = getpkt_sane (&rs->buf, &rs->buf_size, 0);
10916
10917 /* If it timed out, something is wrong. Don't try to parse the
10918 buffer. */
10919 if (bytes_read < 0)
10920 {
10921 *remote_errno = FILEIO_EINVAL;
10922 return -1;
10923 }
10924
10925 switch (packet_ok (rs->buf, &remote_protocol_packets[which_packet]))
10926 {
10927 case PACKET_ERROR:
10928 *remote_errno = FILEIO_EINVAL;
10929 return -1;
10930 case PACKET_UNKNOWN:
10931 *remote_errno = FILEIO_ENOSYS;
10932 return -1;
10933 case PACKET_OK:
10934 break;
10935 }
10936
10937 if (remote_hostio_parse_result (rs->buf, &ret, remote_errno,
10938 &attachment_tmp))
10939 {
10940 *remote_errno = FILEIO_EINVAL;
10941 return -1;
10942 }
10943
10944 /* Make sure we saw an attachment if and only if we expected one. */
10945 if ((attachment_tmp == NULL && attachment != NULL)
10946 || (attachment_tmp != NULL && attachment == NULL))
10947 {
10948 *remote_errno = FILEIO_EINVAL;
10949 return -1;
10950 }
10951
10952 /* If an attachment was found, it must point into the packet buffer;
10953 work out how many bytes there were. */
10954 if (attachment_tmp != NULL)
10955 {
10956 *attachment = attachment_tmp;
10957 *attachment_len = bytes_read - (*attachment - rs->buf);
10958 }
10959
10960 return ret;
10961 }
10962
10963 /* Invalidate the readahead cache. */
10964
10965 static void
10966 readahead_cache_invalidate (void)
10967 {
10968 struct remote_state *rs = get_remote_state ();
10969
10970 rs->readahead_cache.fd = -1;
10971 }
10972
10973 /* Invalidate the readahead cache if it is holding data for FD. */
10974
10975 static void
10976 readahead_cache_invalidate_fd (int fd)
10977 {
10978 struct remote_state *rs = get_remote_state ();
10979
10980 if (rs->readahead_cache.fd == fd)
10981 rs->readahead_cache.fd = -1;
10982 }
10983
10984 /* Set the filesystem remote_hostio functions that take FILENAME
10985 arguments will use. Return 0 on success, or -1 if an error
10986 occurs (and set *REMOTE_ERRNO). */
10987
10988 static int
10989 remote_hostio_set_filesystem (struct inferior *inf, int *remote_errno)
10990 {
10991 struct remote_state *rs = get_remote_state ();
10992 int required_pid = (inf == NULL || inf->fake_pid_p) ? 0 : inf->pid;
10993 char *p = rs->buf;
10994 int left = get_remote_packet_size () - 1;
10995 char arg[9];
10996 int ret;
10997
10998 if (packet_support (PACKET_vFile_setfs) == PACKET_DISABLE)
10999 return 0;
11000
11001 if (rs->fs_pid != -1 && required_pid == rs->fs_pid)
11002 return 0;
11003
11004 remote_buffer_add_string (&p, &left, "vFile:setfs:");
11005
11006 xsnprintf (arg, sizeof (arg), "%x", required_pid);
11007 remote_buffer_add_string (&p, &left, arg);
11008
11009 ret = remote_hostio_send_command (p - rs->buf, PACKET_vFile_setfs,
11010 remote_errno, NULL, NULL);
11011
11012 if (packet_support (PACKET_vFile_setfs) == PACKET_DISABLE)
11013 return 0;
11014
11015 if (ret == 0)
11016 rs->fs_pid = required_pid;
11017
11018 return ret;
11019 }
11020
11021 /* Implementation of to_fileio_open. */
11022
11023 static int
11024 remote_hostio_open (struct target_ops *self,
11025 struct inferior *inf, const char *filename,
11026 int flags, int mode, int warn_if_slow,
11027 int *remote_errno)
11028 {
11029 struct remote_state *rs = get_remote_state ();
11030 char *p = rs->buf;
11031 int left = get_remote_packet_size () - 1;
11032
11033 if (warn_if_slow)
11034 {
11035 static int warning_issued = 0;
11036
11037 printf_unfiltered (_("Reading %s from remote target...\n"),
11038 filename);
11039
11040 if (!warning_issued)
11041 {
11042 warning (_("File transfers from remote targets can be slow."
11043 " Use \"set sysroot\" to access files locally"
11044 " instead."));
11045 warning_issued = 1;
11046 }
11047 }
11048
11049 if (remote_hostio_set_filesystem (inf, remote_errno) != 0)
11050 return -1;
11051
11052 remote_buffer_add_string (&p, &left, "vFile:open:");
11053
11054 remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
11055 strlen (filename));
11056 remote_buffer_add_string (&p, &left, ",");
11057
11058 remote_buffer_add_int (&p, &left, flags);
11059 remote_buffer_add_string (&p, &left, ",");
11060
11061 remote_buffer_add_int (&p, &left, mode);
11062
11063 return remote_hostio_send_command (p - rs->buf, PACKET_vFile_open,
11064 remote_errno, NULL, NULL);
11065 }
11066
11067 /* Implementation of to_fileio_pwrite. */
11068
11069 static int
11070 remote_hostio_pwrite (struct target_ops *self,
11071 int fd, const gdb_byte *write_buf, int len,
11072 ULONGEST offset, int *remote_errno)
11073 {
11074 struct remote_state *rs = get_remote_state ();
11075 char *p = rs->buf;
11076 int left = get_remote_packet_size ();
11077 int out_len;
11078
11079 readahead_cache_invalidate_fd (fd);
11080
11081 remote_buffer_add_string (&p, &left, "vFile:pwrite:");
11082
11083 remote_buffer_add_int (&p, &left, fd);
11084 remote_buffer_add_string (&p, &left, ",");
11085
11086 remote_buffer_add_int (&p, &left, offset);
11087 remote_buffer_add_string (&p, &left, ",");
11088
11089 p += remote_escape_output (write_buf, len, 1, (gdb_byte *) p, &out_len,
11090 get_remote_packet_size () - (p - rs->buf));
11091
11092 return remote_hostio_send_command (p - rs->buf, PACKET_vFile_pwrite,
11093 remote_errno, NULL, NULL);
11094 }
11095
11096 /* Helper for the implementation of to_fileio_pread. Read the file
11097 from the remote side with vFile:pread. */
11098
11099 static int
11100 remote_hostio_pread_vFile (struct target_ops *self,
11101 int fd, gdb_byte *read_buf, int len,
11102 ULONGEST offset, int *remote_errno)
11103 {
11104 struct remote_state *rs = get_remote_state ();
11105 char *p = rs->buf;
11106 char *attachment;
11107 int left = get_remote_packet_size ();
11108 int ret, attachment_len;
11109 int read_len;
11110
11111 remote_buffer_add_string (&p, &left, "vFile:pread:");
11112
11113 remote_buffer_add_int (&p, &left, fd);
11114 remote_buffer_add_string (&p, &left, ",");
11115
11116 remote_buffer_add_int (&p, &left, len);
11117 remote_buffer_add_string (&p, &left, ",");
11118
11119 remote_buffer_add_int (&p, &left, offset);
11120
11121 ret = remote_hostio_send_command (p - rs->buf, PACKET_vFile_pread,
11122 remote_errno, &attachment,
11123 &attachment_len);
11124
11125 if (ret < 0)
11126 return ret;
11127
11128 read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len,
11129 read_buf, len);
11130 if (read_len != ret)
11131 error (_("Read returned %d, but %d bytes."), ret, (int) read_len);
11132
11133 return ret;
11134 }
11135
11136 /* Serve pread from the readahead cache. Returns number of bytes
11137 read, or 0 if the request can't be served from the cache. */
11138
11139 static int
11140 remote_hostio_pread_from_cache (struct remote_state *rs,
11141 int fd, gdb_byte *read_buf, size_t len,
11142 ULONGEST offset)
11143 {
11144 struct readahead_cache *cache = &rs->readahead_cache;
11145
11146 if (cache->fd == fd
11147 && cache->offset <= offset
11148 && offset < cache->offset + cache->bufsize)
11149 {
11150 ULONGEST max = cache->offset + cache->bufsize;
11151
11152 if (offset + len > max)
11153 len = max - offset;
11154
11155 memcpy (read_buf, cache->buf + offset - cache->offset, len);
11156 return len;
11157 }
11158
11159 return 0;
11160 }
11161
11162 /* Implementation of to_fileio_pread. */
11163
11164 static int
11165 remote_hostio_pread (struct target_ops *self,
11166 int fd, gdb_byte *read_buf, int len,
11167 ULONGEST offset, int *remote_errno)
11168 {
11169 int ret;
11170 struct remote_state *rs = get_remote_state ();
11171 struct readahead_cache *cache = &rs->readahead_cache;
11172
11173 ret = remote_hostio_pread_from_cache (rs, fd, read_buf, len, offset);
11174 if (ret > 0)
11175 {
11176 cache->hit_count++;
11177
11178 if (remote_debug)
11179 fprintf_unfiltered (gdb_stdlog, "readahead cache hit %s\n",
11180 pulongest (cache->hit_count));
11181 return ret;
11182 }
11183
11184 cache->miss_count++;
11185 if (remote_debug)
11186 fprintf_unfiltered (gdb_stdlog, "readahead cache miss %s\n",
11187 pulongest (cache->miss_count));
11188
11189 cache->fd = fd;
11190 cache->offset = offset;
11191 cache->bufsize = get_remote_packet_size ();
11192 cache->buf = (gdb_byte *) xrealloc (cache->buf, cache->bufsize);
11193
11194 ret = remote_hostio_pread_vFile (self, cache->fd, cache->buf, cache->bufsize,
11195 cache->offset, remote_errno);
11196 if (ret <= 0)
11197 {
11198 readahead_cache_invalidate_fd (fd);
11199 return ret;
11200 }
11201
11202 cache->bufsize = ret;
11203 return remote_hostio_pread_from_cache (rs, fd, read_buf, len, offset);
11204 }
11205
11206 /* Implementation of to_fileio_close. */
11207
11208 static int
11209 remote_hostio_close (struct target_ops *self, int fd, int *remote_errno)
11210 {
11211 struct remote_state *rs = get_remote_state ();
11212 char *p = rs->buf;
11213 int left = get_remote_packet_size () - 1;
11214
11215 readahead_cache_invalidate_fd (fd);
11216
11217 remote_buffer_add_string (&p, &left, "vFile:close:");
11218
11219 remote_buffer_add_int (&p, &left, fd);
11220
11221 return remote_hostio_send_command (p - rs->buf, PACKET_vFile_close,
11222 remote_errno, NULL, NULL);
11223 }
11224
11225 /* Implementation of to_fileio_unlink. */
11226
11227 static int
11228 remote_hostio_unlink (struct target_ops *self,
11229 struct inferior *inf, const char *filename,
11230 int *remote_errno)
11231 {
11232 struct remote_state *rs = get_remote_state ();
11233 char *p = rs->buf;
11234 int left = get_remote_packet_size () - 1;
11235
11236 if (remote_hostio_set_filesystem (inf, remote_errno) != 0)
11237 return -1;
11238
11239 remote_buffer_add_string (&p, &left, "vFile:unlink:");
11240
11241 remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
11242 strlen (filename));
11243
11244 return remote_hostio_send_command (p - rs->buf, PACKET_vFile_unlink,
11245 remote_errno, NULL, NULL);
11246 }
11247
11248 /* Implementation of to_fileio_readlink. */
11249
11250 static char *
11251 remote_hostio_readlink (struct target_ops *self,
11252 struct inferior *inf, const char *filename,
11253 int *remote_errno)
11254 {
11255 struct remote_state *rs = get_remote_state ();
11256 char *p = rs->buf;
11257 char *attachment;
11258 int left = get_remote_packet_size ();
11259 int len, attachment_len;
11260 int read_len;
11261 char *ret;
11262
11263 if (remote_hostio_set_filesystem (inf, remote_errno) != 0)
11264 return NULL;
11265
11266 remote_buffer_add_string (&p, &left, "vFile:readlink:");
11267
11268 remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
11269 strlen (filename));
11270
11271 len = remote_hostio_send_command (p - rs->buf, PACKET_vFile_readlink,
11272 remote_errno, &attachment,
11273 &attachment_len);
11274
11275 if (len < 0)
11276 return NULL;
11277
11278 ret = (char *) xmalloc (len + 1);
11279
11280 read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len,
11281 (gdb_byte *) ret, len);
11282 if (read_len != len)
11283 error (_("Readlink returned %d, but %d bytes."), len, read_len);
11284
11285 ret[len] = '\0';
11286 return ret;
11287 }
11288
11289 /* Implementation of to_fileio_fstat. */
11290
11291 static int
11292 remote_hostio_fstat (struct target_ops *self,
11293 int fd, struct stat *st,
11294 int *remote_errno)
11295 {
11296 struct remote_state *rs = get_remote_state ();
11297 char *p = rs->buf;
11298 int left = get_remote_packet_size ();
11299 int attachment_len, ret;
11300 char *attachment;
11301 struct fio_stat fst;
11302 int read_len;
11303
11304 remote_buffer_add_string (&p, &left, "vFile:fstat:");
11305
11306 remote_buffer_add_int (&p, &left, fd);
11307
11308 ret = remote_hostio_send_command (p - rs->buf, PACKET_vFile_fstat,
11309 remote_errno, &attachment,
11310 &attachment_len);
11311 if (ret < 0)
11312 {
11313 if (*remote_errno != FILEIO_ENOSYS)
11314 return ret;
11315
11316 /* Strictly we should return -1, ENOSYS here, but when
11317 "set sysroot remote:" was implemented in August 2008
11318 BFD's need for a stat function was sidestepped with
11319 this hack. This was not remedied until March 2015
11320 so we retain the previous behavior to avoid breaking
11321 compatibility.
11322
11323 Note that the memset is a March 2015 addition; older
11324 GDBs set st_size *and nothing else* so the structure
11325 would have garbage in all other fields. This might
11326 break something but retaining the previous behavior
11327 here would be just too wrong. */
11328
11329 memset (st, 0, sizeof (struct stat));
11330 st->st_size = INT_MAX;
11331 return 0;
11332 }
11333
11334 read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len,
11335 (gdb_byte *) &fst, sizeof (fst));
11336
11337 if (read_len != ret)
11338 error (_("vFile:fstat returned %d, but %d bytes."), ret, read_len);
11339
11340 if (read_len != sizeof (fst))
11341 error (_("vFile:fstat returned %d bytes, but expecting %d."),
11342 read_len, (int) sizeof (fst));
11343
11344 remote_fileio_to_host_stat (&fst, st);
11345
11346 return 0;
11347 }
11348
11349 /* Implementation of to_filesystem_is_local. */
11350
11351 static int
11352 remote_filesystem_is_local (struct target_ops *self)
11353 {
11354 /* Valgrind GDB presents itself as a remote target but works
11355 on the local filesystem: it does not implement remote get
11356 and users are not expected to set a sysroot. To handle
11357 this case we treat the remote filesystem as local if the
11358 sysroot is exactly TARGET_SYSROOT_PREFIX and if the stub
11359 does not support vFile:open. */
11360 if (strcmp (gdb_sysroot, TARGET_SYSROOT_PREFIX) == 0)
11361 {
11362 enum packet_support ps = packet_support (PACKET_vFile_open);
11363
11364 if (ps == PACKET_SUPPORT_UNKNOWN)
11365 {
11366 int fd, remote_errno;
11367
11368 /* Try opening a file to probe support. The supplied
11369 filename is irrelevant, we only care about whether
11370 the stub recognizes the packet or not. */
11371 fd = remote_hostio_open (self, NULL, "just probing",
11372 FILEIO_O_RDONLY, 0700, 0,
11373 &remote_errno);
11374
11375 if (fd >= 0)
11376 remote_hostio_close (self, fd, &remote_errno);
11377
11378 ps = packet_support (PACKET_vFile_open);
11379 }
11380
11381 if (ps == PACKET_DISABLE)
11382 {
11383 static int warning_issued = 0;
11384
11385 if (!warning_issued)
11386 {
11387 warning (_("remote target does not support file"
11388 " transfer, attempting to access files"
11389 " from local filesystem."));
11390 warning_issued = 1;
11391 }
11392
11393 return 1;
11394 }
11395 }
11396
11397 return 0;
11398 }
11399
11400 static int
11401 remote_fileio_errno_to_host (int errnum)
11402 {
11403 switch (errnum)
11404 {
11405 case FILEIO_EPERM:
11406 return EPERM;
11407 case FILEIO_ENOENT:
11408 return ENOENT;
11409 case FILEIO_EINTR:
11410 return EINTR;
11411 case FILEIO_EIO:
11412 return EIO;
11413 case FILEIO_EBADF:
11414 return EBADF;
11415 case FILEIO_EACCES:
11416 return EACCES;
11417 case FILEIO_EFAULT:
11418 return EFAULT;
11419 case FILEIO_EBUSY:
11420 return EBUSY;
11421 case FILEIO_EEXIST:
11422 return EEXIST;
11423 case FILEIO_ENODEV:
11424 return ENODEV;
11425 case FILEIO_ENOTDIR:
11426 return ENOTDIR;
11427 case FILEIO_EISDIR:
11428 return EISDIR;
11429 case FILEIO_EINVAL:
11430 return EINVAL;
11431 case FILEIO_ENFILE:
11432 return ENFILE;
11433 case FILEIO_EMFILE:
11434 return EMFILE;
11435 case FILEIO_EFBIG:
11436 return EFBIG;
11437 case FILEIO_ENOSPC:
11438 return ENOSPC;
11439 case FILEIO_ESPIPE:
11440 return ESPIPE;
11441 case FILEIO_EROFS:
11442 return EROFS;
11443 case FILEIO_ENOSYS:
11444 return ENOSYS;
11445 case FILEIO_ENAMETOOLONG:
11446 return ENAMETOOLONG;
11447 }
11448 return -1;
11449 }
11450
11451 static char *
11452 remote_hostio_error (int errnum)
11453 {
11454 int host_error = remote_fileio_errno_to_host (errnum);
11455
11456 if (host_error == -1)
11457 error (_("Unknown remote I/O error %d"), errnum);
11458 else
11459 error (_("Remote I/O error: %s"), safe_strerror (host_error));
11460 }
11461
11462 static void
11463 remote_hostio_close_cleanup (void *opaque)
11464 {
11465 int fd = *(int *) opaque;
11466 int remote_errno;
11467
11468 remote_hostio_close (find_target_at (process_stratum), fd, &remote_errno);
11469 }
11470
11471 void
11472 remote_file_put (const char *local_file, const char *remote_file, int from_tty)
11473 {
11474 struct cleanup *back_to, *close_cleanup;
11475 int retcode, fd, remote_errno, bytes, io_size;
11476 FILE *file;
11477 gdb_byte *buffer;
11478 int bytes_in_buffer;
11479 int saw_eof;
11480 ULONGEST offset;
11481 struct remote_state *rs = get_remote_state ();
11482
11483 if (!rs->remote_desc)
11484 error (_("command can only be used with remote target"));
11485
11486 file = gdb_fopen_cloexec (local_file, "rb");
11487 if (file == NULL)
11488 perror_with_name (local_file);
11489 back_to = make_cleanup_fclose (file);
11490
11491 fd = remote_hostio_open (find_target_at (process_stratum), NULL,
11492 remote_file, (FILEIO_O_WRONLY | FILEIO_O_CREAT
11493 | FILEIO_O_TRUNC),
11494 0700, 0, &remote_errno);
11495 if (fd == -1)
11496 remote_hostio_error (remote_errno);
11497
11498 /* Send up to this many bytes at once. They won't all fit in the
11499 remote packet limit, so we'll transfer slightly fewer. */
11500 io_size = get_remote_packet_size ();
11501 buffer = (gdb_byte *) xmalloc (io_size);
11502 make_cleanup (xfree, buffer);
11503
11504 close_cleanup = make_cleanup (remote_hostio_close_cleanup, &fd);
11505
11506 bytes_in_buffer = 0;
11507 saw_eof = 0;
11508 offset = 0;
11509 while (bytes_in_buffer || !saw_eof)
11510 {
11511 if (!saw_eof)
11512 {
11513 bytes = fread (buffer + bytes_in_buffer, 1,
11514 io_size - bytes_in_buffer,
11515 file);
11516 if (bytes == 0)
11517 {
11518 if (ferror (file))
11519 error (_("Error reading %s."), local_file);
11520 else
11521 {
11522 /* EOF. Unless there is something still in the
11523 buffer from the last iteration, we are done. */
11524 saw_eof = 1;
11525 if (bytes_in_buffer == 0)
11526 break;
11527 }
11528 }
11529 }
11530 else
11531 bytes = 0;
11532
11533 bytes += bytes_in_buffer;
11534 bytes_in_buffer = 0;
11535
11536 retcode = remote_hostio_pwrite (find_target_at (process_stratum),
11537 fd, buffer, bytes,
11538 offset, &remote_errno);
11539
11540 if (retcode < 0)
11541 remote_hostio_error (remote_errno);
11542 else if (retcode == 0)
11543 error (_("Remote write of %d bytes returned 0!"), bytes);
11544 else if (retcode < bytes)
11545 {
11546 /* Short write. Save the rest of the read data for the next
11547 write. */
11548 bytes_in_buffer = bytes - retcode;
11549 memmove (buffer, buffer + retcode, bytes_in_buffer);
11550 }
11551
11552 offset += retcode;
11553 }
11554
11555 discard_cleanups (close_cleanup);
11556 if (remote_hostio_close (find_target_at (process_stratum), fd, &remote_errno))
11557 remote_hostio_error (remote_errno);
11558
11559 if (from_tty)
11560 printf_filtered (_("Successfully sent file \"%s\".\n"), local_file);
11561 do_cleanups (back_to);
11562 }
11563
11564 void
11565 remote_file_get (const char *remote_file, const char *local_file, int from_tty)
11566 {
11567 struct cleanup *back_to, *close_cleanup;
11568 int fd, remote_errno, bytes, io_size;
11569 FILE *file;
11570 gdb_byte *buffer;
11571 ULONGEST offset;
11572 struct remote_state *rs = get_remote_state ();
11573
11574 if (!rs->remote_desc)
11575 error (_("command can only be used with remote target"));
11576
11577 fd = remote_hostio_open (find_target_at (process_stratum), NULL,
11578 remote_file, FILEIO_O_RDONLY, 0, 0,
11579 &remote_errno);
11580 if (fd == -1)
11581 remote_hostio_error (remote_errno);
11582
11583 file = gdb_fopen_cloexec (local_file, "wb");
11584 if (file == NULL)
11585 perror_with_name (local_file);
11586 back_to = make_cleanup_fclose (file);
11587
11588 /* Send up to this many bytes at once. They won't all fit in the
11589 remote packet limit, so we'll transfer slightly fewer. */
11590 io_size = get_remote_packet_size ();
11591 buffer = (gdb_byte *) xmalloc (io_size);
11592 make_cleanup (xfree, buffer);
11593
11594 close_cleanup = make_cleanup (remote_hostio_close_cleanup, &fd);
11595
11596 offset = 0;
11597 while (1)
11598 {
11599 bytes = remote_hostio_pread (find_target_at (process_stratum),
11600 fd, buffer, io_size, offset, &remote_errno);
11601 if (bytes == 0)
11602 /* Success, but no bytes, means end-of-file. */
11603 break;
11604 if (bytes == -1)
11605 remote_hostio_error (remote_errno);
11606
11607 offset += bytes;
11608
11609 bytes = fwrite (buffer, 1, bytes, file);
11610 if (bytes == 0)
11611 perror_with_name (local_file);
11612 }
11613
11614 discard_cleanups (close_cleanup);
11615 if (remote_hostio_close (find_target_at (process_stratum), fd, &remote_errno))
11616 remote_hostio_error (remote_errno);
11617
11618 if (from_tty)
11619 printf_filtered (_("Successfully fetched file \"%s\".\n"), remote_file);
11620 do_cleanups (back_to);
11621 }
11622
11623 void
11624 remote_file_delete (const char *remote_file, int from_tty)
11625 {
11626 int retcode, remote_errno;
11627 struct remote_state *rs = get_remote_state ();
11628
11629 if (!rs->remote_desc)
11630 error (_("command can only be used with remote target"));
11631
11632 retcode = remote_hostio_unlink (find_target_at (process_stratum),
11633 NULL, remote_file, &remote_errno);
11634 if (retcode == -1)
11635 remote_hostio_error (remote_errno);
11636
11637 if (from_tty)
11638 printf_filtered (_("Successfully deleted file \"%s\".\n"), remote_file);
11639 }
11640
11641 static void
11642 remote_put_command (char *args, int from_tty)
11643 {
11644 struct cleanup *back_to;
11645 char **argv;
11646
11647 if (args == NULL)
11648 error_no_arg (_("file to put"));
11649
11650 argv = gdb_buildargv (args);
11651 back_to = make_cleanup_freeargv (argv);
11652 if (argv[0] == NULL || argv[1] == NULL || argv[2] != NULL)
11653 error (_("Invalid parameters to remote put"));
11654
11655 remote_file_put (argv[0], argv[1], from_tty);
11656
11657 do_cleanups (back_to);
11658 }
11659
11660 static void
11661 remote_get_command (char *args, int from_tty)
11662 {
11663 struct cleanup *back_to;
11664 char **argv;
11665
11666 if (args == NULL)
11667 error_no_arg (_("file to get"));
11668
11669 argv = gdb_buildargv (args);
11670 back_to = make_cleanup_freeargv (argv);
11671 if (argv[0] == NULL || argv[1] == NULL || argv[2] != NULL)
11672 error (_("Invalid parameters to remote get"));
11673
11674 remote_file_get (argv[0], argv[1], from_tty);
11675
11676 do_cleanups (back_to);
11677 }
11678
11679 static void
11680 remote_delete_command (char *args, int from_tty)
11681 {
11682 struct cleanup *back_to;
11683 char **argv;
11684
11685 if (args == NULL)
11686 error_no_arg (_("file to delete"));
11687
11688 argv = gdb_buildargv (args);
11689 back_to = make_cleanup_freeargv (argv);
11690 if (argv[0] == NULL || argv[1] != NULL)
11691 error (_("Invalid parameters to remote delete"));
11692
11693 remote_file_delete (argv[0], from_tty);
11694
11695 do_cleanups (back_to);
11696 }
11697
11698 static void
11699 remote_command (char *args, int from_tty)
11700 {
11701 help_list (remote_cmdlist, "remote ", all_commands, gdb_stdout);
11702 }
11703
11704 static int
11705 remote_can_execute_reverse (struct target_ops *self)
11706 {
11707 if (packet_support (PACKET_bs) == PACKET_ENABLE
11708 || packet_support (PACKET_bc) == PACKET_ENABLE)
11709 return 1;
11710 else
11711 return 0;
11712 }
11713
11714 static int
11715 remote_supports_non_stop (struct target_ops *self)
11716 {
11717 return 1;
11718 }
11719
11720 static int
11721 remote_supports_disable_randomization (struct target_ops *self)
11722 {
11723 /* Only supported in extended mode. */
11724 return 0;
11725 }
11726
11727 static int
11728 remote_supports_multi_process (struct target_ops *self)
11729 {
11730 struct remote_state *rs = get_remote_state ();
11731
11732 return remote_multi_process_p (rs);
11733 }
11734
11735 static int
11736 remote_supports_cond_tracepoints (void)
11737 {
11738 return packet_support (PACKET_ConditionalTracepoints) == PACKET_ENABLE;
11739 }
11740
11741 static int
11742 remote_supports_cond_breakpoints (struct target_ops *self)
11743 {
11744 return packet_support (PACKET_ConditionalBreakpoints) == PACKET_ENABLE;
11745 }
11746
11747 static int
11748 remote_supports_fast_tracepoints (void)
11749 {
11750 return packet_support (PACKET_FastTracepoints) == PACKET_ENABLE;
11751 }
11752
11753 static int
11754 remote_supports_static_tracepoints (void)
11755 {
11756 return packet_support (PACKET_StaticTracepoints) == PACKET_ENABLE;
11757 }
11758
11759 static int
11760 remote_supports_install_in_trace (void)
11761 {
11762 return packet_support (PACKET_InstallInTrace) == PACKET_ENABLE;
11763 }
11764
11765 static int
11766 remote_supports_enable_disable_tracepoint (struct target_ops *self)
11767 {
11768 return (packet_support (PACKET_EnableDisableTracepoints_feature)
11769 == PACKET_ENABLE);
11770 }
11771
11772 static int
11773 remote_supports_string_tracing (struct target_ops *self)
11774 {
11775 return packet_support (PACKET_tracenz_feature) == PACKET_ENABLE;
11776 }
11777
11778 static int
11779 remote_can_run_breakpoint_commands (struct target_ops *self)
11780 {
11781 return packet_support (PACKET_BreakpointCommands) == PACKET_ENABLE;
11782 }
11783
11784 static void
11785 remote_trace_init (struct target_ops *self)
11786 {
11787 putpkt ("QTinit");
11788 remote_get_noisy_reply (&target_buf, &target_buf_size);
11789 if (strcmp (target_buf, "OK") != 0)
11790 error (_("Target does not support this command."));
11791 }
11792
11793 static void free_actions_list (char **actions_list);
11794 static void free_actions_list_cleanup_wrapper (void *);
11795 static void
11796 free_actions_list_cleanup_wrapper (void *al)
11797 {
11798 free_actions_list ((char **) al);
11799 }
11800
11801 static void
11802 free_actions_list (char **actions_list)
11803 {
11804 int ndx;
11805
11806 if (actions_list == 0)
11807 return;
11808
11809 for (ndx = 0; actions_list[ndx]; ndx++)
11810 xfree (actions_list[ndx]);
11811
11812 xfree (actions_list);
11813 }
11814
11815 /* Recursive routine to walk through command list including loops, and
11816 download packets for each command. */
11817
11818 static void
11819 remote_download_command_source (int num, ULONGEST addr,
11820 struct command_line *cmds)
11821 {
11822 struct remote_state *rs = get_remote_state ();
11823 struct command_line *cmd;
11824
11825 for (cmd = cmds; cmd; cmd = cmd->next)
11826 {
11827 QUIT; /* Allow user to bail out with ^C. */
11828 strcpy (rs->buf, "QTDPsrc:");
11829 encode_source_string (num, addr, "cmd", cmd->line,
11830 rs->buf + strlen (rs->buf),
11831 rs->buf_size - strlen (rs->buf));
11832 putpkt (rs->buf);
11833 remote_get_noisy_reply (&target_buf, &target_buf_size);
11834 if (strcmp (target_buf, "OK"))
11835 warning (_("Target does not support source download."));
11836
11837 if (cmd->control_type == while_control
11838 || cmd->control_type == while_stepping_control)
11839 {
11840 remote_download_command_source (num, addr, *cmd->body_list);
11841
11842 QUIT; /* Allow user to bail out with ^C. */
11843 strcpy (rs->buf, "QTDPsrc:");
11844 encode_source_string (num, addr, "cmd", "end",
11845 rs->buf + strlen (rs->buf),
11846 rs->buf_size - strlen (rs->buf));
11847 putpkt (rs->buf);
11848 remote_get_noisy_reply (&target_buf, &target_buf_size);
11849 if (strcmp (target_buf, "OK"))
11850 warning (_("Target does not support source download."));
11851 }
11852 }
11853 }
11854
11855 static void
11856 remote_download_tracepoint (struct target_ops *self, struct bp_location *loc)
11857 {
11858 #define BUF_SIZE 2048
11859
11860 CORE_ADDR tpaddr;
11861 char addrbuf[40];
11862 char buf[BUF_SIZE];
11863 char **tdp_actions;
11864 char **stepping_actions;
11865 int ndx;
11866 struct cleanup *old_chain = NULL;
11867 struct agent_expr *aexpr;
11868 struct cleanup *aexpr_chain = NULL;
11869 char *pkt;
11870 struct breakpoint *b = loc->owner;
11871 struct tracepoint *t = (struct tracepoint *) b;
11872
11873 encode_actions_rsp (loc, &tdp_actions, &stepping_actions);
11874 old_chain = make_cleanup (free_actions_list_cleanup_wrapper,
11875 tdp_actions);
11876 (void) make_cleanup (free_actions_list_cleanup_wrapper,
11877 stepping_actions);
11878
11879 tpaddr = loc->address;
11880 sprintf_vma (addrbuf, tpaddr);
11881 xsnprintf (buf, BUF_SIZE, "QTDP:%x:%s:%c:%lx:%x", b->number,
11882 addrbuf, /* address */
11883 (b->enable_state == bp_enabled ? 'E' : 'D'),
11884 t->step_count, t->pass_count);
11885 /* Fast tracepoints are mostly handled by the target, but we can
11886 tell the target how big of an instruction block should be moved
11887 around. */
11888 if (b->type == bp_fast_tracepoint)
11889 {
11890 /* Only test for support at download time; we may not know
11891 target capabilities at definition time. */
11892 if (remote_supports_fast_tracepoints ())
11893 {
11894 if (gdbarch_fast_tracepoint_valid_at (loc->gdbarch, tpaddr,
11895 NULL))
11896 xsnprintf (buf + strlen (buf), BUF_SIZE - strlen (buf), ":F%x",
11897 gdb_insn_length (loc->gdbarch, tpaddr));
11898 else
11899 /* If it passed validation at definition but fails now,
11900 something is very wrong. */
11901 internal_error (__FILE__, __LINE__,
11902 _("Fast tracepoint not "
11903 "valid during download"));
11904 }
11905 else
11906 /* Fast tracepoints are functionally identical to regular
11907 tracepoints, so don't take lack of support as a reason to
11908 give up on the trace run. */
11909 warning (_("Target does not support fast tracepoints, "
11910 "downloading %d as regular tracepoint"), b->number);
11911 }
11912 else if (b->type == bp_static_tracepoint)
11913 {
11914 /* Only test for support at download time; we may not know
11915 target capabilities at definition time. */
11916 if (remote_supports_static_tracepoints ())
11917 {
11918 struct static_tracepoint_marker marker;
11919
11920 if (target_static_tracepoint_marker_at (tpaddr, &marker))
11921 strcat (buf, ":S");
11922 else
11923 error (_("Static tracepoint not valid during download"));
11924 }
11925 else
11926 /* Fast tracepoints are functionally identical to regular
11927 tracepoints, so don't take lack of support as a reason
11928 to give up on the trace run. */
11929 error (_("Target does not support static tracepoints"));
11930 }
11931 /* If the tracepoint has a conditional, make it into an agent
11932 expression and append to the definition. */
11933 if (loc->cond)
11934 {
11935 /* Only test support at download time, we may not know target
11936 capabilities at definition time. */
11937 if (remote_supports_cond_tracepoints ())
11938 {
11939 aexpr = gen_eval_for_expr (tpaddr, loc->cond);
11940 aexpr_chain = make_cleanup_free_agent_expr (aexpr);
11941 xsnprintf (buf + strlen (buf), BUF_SIZE - strlen (buf), ":X%x,",
11942 aexpr->len);
11943 pkt = buf + strlen (buf);
11944 for (ndx = 0; ndx < aexpr->len; ++ndx)
11945 pkt = pack_hex_byte (pkt, aexpr->buf[ndx]);
11946 *pkt = '\0';
11947 do_cleanups (aexpr_chain);
11948 }
11949 else
11950 warning (_("Target does not support conditional tracepoints, "
11951 "ignoring tp %d cond"), b->number);
11952 }
11953
11954 if (b->commands || *default_collect)
11955 strcat (buf, "-");
11956 putpkt (buf);
11957 remote_get_noisy_reply (&target_buf, &target_buf_size);
11958 if (strcmp (target_buf, "OK"))
11959 error (_("Target does not support tracepoints."));
11960
11961 /* do_single_steps (t); */
11962 if (tdp_actions)
11963 {
11964 for (ndx = 0; tdp_actions[ndx]; ndx++)
11965 {
11966 QUIT; /* Allow user to bail out with ^C. */
11967 xsnprintf (buf, BUF_SIZE, "QTDP:-%x:%s:%s%c",
11968 b->number, addrbuf, /* address */
11969 tdp_actions[ndx],
11970 ((tdp_actions[ndx + 1] || stepping_actions)
11971 ? '-' : 0));
11972 putpkt (buf);
11973 remote_get_noisy_reply (&target_buf,
11974 &target_buf_size);
11975 if (strcmp (target_buf, "OK"))
11976 error (_("Error on target while setting tracepoints."));
11977 }
11978 }
11979 if (stepping_actions)
11980 {
11981 for (ndx = 0; stepping_actions[ndx]; ndx++)
11982 {
11983 QUIT; /* Allow user to bail out with ^C. */
11984 xsnprintf (buf, BUF_SIZE, "QTDP:-%x:%s:%s%s%s",
11985 b->number, addrbuf, /* address */
11986 ((ndx == 0) ? "S" : ""),
11987 stepping_actions[ndx],
11988 (stepping_actions[ndx + 1] ? "-" : ""));
11989 putpkt (buf);
11990 remote_get_noisy_reply (&target_buf,
11991 &target_buf_size);
11992 if (strcmp (target_buf, "OK"))
11993 error (_("Error on target while setting tracepoints."));
11994 }
11995 }
11996
11997 if (packet_support (PACKET_TracepointSource) == PACKET_ENABLE)
11998 {
11999 if (b->location != NULL)
12000 {
12001 strcpy (buf, "QTDPsrc:");
12002 encode_source_string (b->number, loc->address, "at",
12003 event_location_to_string (b->location),
12004 buf + strlen (buf), 2048 - strlen (buf));
12005 putpkt (buf);
12006 remote_get_noisy_reply (&target_buf, &target_buf_size);
12007 if (strcmp (target_buf, "OK"))
12008 warning (_("Target does not support source download."));
12009 }
12010 if (b->cond_string)
12011 {
12012 strcpy (buf, "QTDPsrc:");
12013 encode_source_string (b->number, loc->address,
12014 "cond", b->cond_string, buf + strlen (buf),
12015 2048 - strlen (buf));
12016 putpkt (buf);
12017 remote_get_noisy_reply (&target_buf, &target_buf_size);
12018 if (strcmp (target_buf, "OK"))
12019 warning (_("Target does not support source download."));
12020 }
12021 remote_download_command_source (b->number, loc->address,
12022 breakpoint_commands (b));
12023 }
12024
12025 do_cleanups (old_chain);
12026 }
12027
12028 static int
12029 remote_can_download_tracepoint (struct target_ops *self)
12030 {
12031 struct remote_state *rs = get_remote_state ();
12032 struct trace_status *ts;
12033 int status;
12034
12035 /* Don't try to install tracepoints until we've relocated our
12036 symbols, and fetched and merged the target's tracepoint list with
12037 ours. */
12038 if (rs->starting_up)
12039 return 0;
12040
12041 ts = current_trace_status ();
12042 status = remote_get_trace_status (self, ts);
12043
12044 if (status == -1 || !ts->running_known || !ts->running)
12045 return 0;
12046
12047 /* If we are in a tracing experiment, but remote stub doesn't support
12048 installing tracepoint in trace, we have to return. */
12049 if (!remote_supports_install_in_trace ())
12050 return 0;
12051
12052 return 1;
12053 }
12054
12055
12056 static void
12057 remote_download_trace_state_variable (struct target_ops *self,
12058 struct trace_state_variable *tsv)
12059 {
12060 struct remote_state *rs = get_remote_state ();
12061 char *p;
12062
12063 xsnprintf (rs->buf, get_remote_packet_size (), "QTDV:%x:%s:%x:",
12064 tsv->number, phex ((ULONGEST) tsv->initial_value, 8),
12065 tsv->builtin);
12066 p = rs->buf + strlen (rs->buf);
12067 if ((p - rs->buf) + strlen (tsv->name) * 2 >= get_remote_packet_size ())
12068 error (_("Trace state variable name too long for tsv definition packet"));
12069 p += 2 * bin2hex ((gdb_byte *) (tsv->name), p, strlen (tsv->name));
12070 *p++ = '\0';
12071 putpkt (rs->buf);
12072 remote_get_noisy_reply (&target_buf, &target_buf_size);
12073 if (*target_buf == '\0')
12074 error (_("Target does not support this command."));
12075 if (strcmp (target_buf, "OK") != 0)
12076 error (_("Error on target while downloading trace state variable."));
12077 }
12078
12079 static void
12080 remote_enable_tracepoint (struct target_ops *self,
12081 struct bp_location *location)
12082 {
12083 struct remote_state *rs = get_remote_state ();
12084 char addr_buf[40];
12085
12086 sprintf_vma (addr_buf, location->address);
12087 xsnprintf (rs->buf, get_remote_packet_size (), "QTEnable:%x:%s",
12088 location->owner->number, addr_buf);
12089 putpkt (rs->buf);
12090 remote_get_noisy_reply (&rs->buf, &rs->buf_size);
12091 if (*rs->buf == '\0')
12092 error (_("Target does not support enabling tracepoints while a trace run is ongoing."));
12093 if (strcmp (rs->buf, "OK") != 0)
12094 error (_("Error on target while enabling tracepoint."));
12095 }
12096
12097 static void
12098 remote_disable_tracepoint (struct target_ops *self,
12099 struct bp_location *location)
12100 {
12101 struct remote_state *rs = get_remote_state ();
12102 char addr_buf[40];
12103
12104 sprintf_vma (addr_buf, location->address);
12105 xsnprintf (rs->buf, get_remote_packet_size (), "QTDisable:%x:%s",
12106 location->owner->number, addr_buf);
12107 putpkt (rs->buf);
12108 remote_get_noisy_reply (&rs->buf, &rs->buf_size);
12109 if (*rs->buf == '\0')
12110 error (_("Target does not support disabling tracepoints while a trace run is ongoing."));
12111 if (strcmp (rs->buf, "OK") != 0)
12112 error (_("Error on target while disabling tracepoint."));
12113 }
12114
12115 static void
12116 remote_trace_set_readonly_regions (struct target_ops *self)
12117 {
12118 asection *s;
12119 bfd *abfd = NULL;
12120 bfd_size_type size;
12121 bfd_vma vma;
12122 int anysecs = 0;
12123 int offset = 0;
12124
12125 if (!exec_bfd)
12126 return; /* No information to give. */
12127
12128 strcpy (target_buf, "QTro");
12129 offset = strlen (target_buf);
12130 for (s = exec_bfd->sections; s; s = s->next)
12131 {
12132 char tmp1[40], tmp2[40];
12133 int sec_length;
12134
12135 if ((s->flags & SEC_LOAD) == 0 ||
12136 /* (s->flags & SEC_CODE) == 0 || */
12137 (s->flags & SEC_READONLY) == 0)
12138 continue;
12139
12140 anysecs = 1;
12141 vma = bfd_get_section_vma (abfd, s);
12142 size = bfd_get_section_size (s);
12143 sprintf_vma (tmp1, vma);
12144 sprintf_vma (tmp2, vma + size);
12145 sec_length = 1 + strlen (tmp1) + 1 + strlen (tmp2);
12146 if (offset + sec_length + 1 > target_buf_size)
12147 {
12148 if (packet_support (PACKET_qXfer_traceframe_info) != PACKET_ENABLE)
12149 warning (_("\
12150 Too many sections for read-only sections definition packet."));
12151 break;
12152 }
12153 xsnprintf (target_buf + offset, target_buf_size - offset, ":%s,%s",
12154 tmp1, tmp2);
12155 offset += sec_length;
12156 }
12157 if (anysecs)
12158 {
12159 putpkt (target_buf);
12160 getpkt (&target_buf, &target_buf_size, 0);
12161 }
12162 }
12163
12164 static void
12165 remote_trace_start (struct target_ops *self)
12166 {
12167 putpkt ("QTStart");
12168 remote_get_noisy_reply (&target_buf, &target_buf_size);
12169 if (*target_buf == '\0')
12170 error (_("Target does not support this command."));
12171 if (strcmp (target_buf, "OK") != 0)
12172 error (_("Bogus reply from target: %s"), target_buf);
12173 }
12174
12175 static int
12176 remote_get_trace_status (struct target_ops *self, struct trace_status *ts)
12177 {
12178 /* Initialize it just to avoid a GCC false warning. */
12179 char *p = NULL;
12180 /* FIXME we need to get register block size some other way. */
12181 extern int trace_regblock_size;
12182 enum packet_result result;
12183
12184 if (packet_support (PACKET_qTStatus) == PACKET_DISABLE)
12185 return -1;
12186
12187 trace_regblock_size = get_remote_arch_state ()->sizeof_g_packet;
12188
12189 putpkt ("qTStatus");
12190
12191 TRY
12192 {
12193 p = remote_get_noisy_reply (&target_buf, &target_buf_size);
12194 }
12195 CATCH (ex, RETURN_MASK_ERROR)
12196 {
12197 if (ex.error != TARGET_CLOSE_ERROR)
12198 {
12199 exception_fprintf (gdb_stderr, ex, "qTStatus: ");
12200 return -1;
12201 }
12202 throw_exception (ex);
12203 }
12204 END_CATCH
12205
12206 result = packet_ok (p, &remote_protocol_packets[PACKET_qTStatus]);
12207
12208 /* If the remote target doesn't do tracing, flag it. */
12209 if (result == PACKET_UNKNOWN)
12210 return -1;
12211
12212 /* We're working with a live target. */
12213 ts->filename = NULL;
12214
12215 if (*p++ != 'T')
12216 error (_("Bogus trace status reply from target: %s"), target_buf);
12217
12218 /* Function 'parse_trace_status' sets default value of each field of
12219 'ts' at first, so we don't have to do it here. */
12220 parse_trace_status (p, ts);
12221
12222 return ts->running;
12223 }
12224
12225 static void
12226 remote_get_tracepoint_status (struct target_ops *self, struct breakpoint *bp,
12227 struct uploaded_tp *utp)
12228 {
12229 struct remote_state *rs = get_remote_state ();
12230 char *reply;
12231 struct bp_location *loc;
12232 struct tracepoint *tp = (struct tracepoint *) bp;
12233 size_t size = get_remote_packet_size ();
12234
12235 if (tp)
12236 {
12237 tp->base.hit_count = 0;
12238 tp->traceframe_usage = 0;
12239 for (loc = tp->base.loc; loc; loc = loc->next)
12240 {
12241 /* If the tracepoint was never downloaded, don't go asking for
12242 any status. */
12243 if (tp->number_on_target == 0)
12244 continue;
12245 xsnprintf (rs->buf, size, "qTP:%x:%s", tp->number_on_target,
12246 phex_nz (loc->address, 0));
12247 putpkt (rs->buf);
12248 reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
12249 if (reply && *reply)
12250 {
12251 if (*reply == 'V')
12252 parse_tracepoint_status (reply + 1, bp, utp);
12253 }
12254 }
12255 }
12256 else if (utp)
12257 {
12258 utp->hit_count = 0;
12259 utp->traceframe_usage = 0;
12260 xsnprintf (rs->buf, size, "qTP:%x:%s", utp->number,
12261 phex_nz (utp->addr, 0));
12262 putpkt (rs->buf);
12263 reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
12264 if (reply && *reply)
12265 {
12266 if (*reply == 'V')
12267 parse_tracepoint_status (reply + 1, bp, utp);
12268 }
12269 }
12270 }
12271
12272 static void
12273 remote_trace_stop (struct target_ops *self)
12274 {
12275 putpkt ("QTStop");
12276 remote_get_noisy_reply (&target_buf, &target_buf_size);
12277 if (*target_buf == '\0')
12278 error (_("Target does not support this command."));
12279 if (strcmp (target_buf, "OK") != 0)
12280 error (_("Bogus reply from target: %s"), target_buf);
12281 }
12282
12283 static int
12284 remote_trace_find (struct target_ops *self,
12285 enum trace_find_type type, int num,
12286 CORE_ADDR addr1, CORE_ADDR addr2,
12287 int *tpp)
12288 {
12289 struct remote_state *rs = get_remote_state ();
12290 char *endbuf = rs->buf + get_remote_packet_size ();
12291 char *p, *reply;
12292 int target_frameno = -1, target_tracept = -1;
12293
12294 /* Lookups other than by absolute frame number depend on the current
12295 trace selected, so make sure it is correct on the remote end
12296 first. */
12297 if (type != tfind_number)
12298 set_remote_traceframe ();
12299
12300 p = rs->buf;
12301 strcpy (p, "QTFrame:");
12302 p = strchr (p, '\0');
12303 switch (type)
12304 {
12305 case tfind_number:
12306 xsnprintf (p, endbuf - p, "%x", num);
12307 break;
12308 case tfind_pc:
12309 xsnprintf (p, endbuf - p, "pc:%s", phex_nz (addr1, 0));
12310 break;
12311 case tfind_tp:
12312 xsnprintf (p, endbuf - p, "tdp:%x", num);
12313 break;
12314 case tfind_range:
12315 xsnprintf (p, endbuf - p, "range:%s:%s", phex_nz (addr1, 0),
12316 phex_nz (addr2, 0));
12317 break;
12318 case tfind_outside:
12319 xsnprintf (p, endbuf - p, "outside:%s:%s", phex_nz (addr1, 0),
12320 phex_nz (addr2, 0));
12321 break;
12322 default:
12323 error (_("Unknown trace find type %d"), type);
12324 }
12325
12326 putpkt (rs->buf);
12327 reply = remote_get_noisy_reply (&(rs->buf), &rs->buf_size);
12328 if (*reply == '\0')
12329 error (_("Target does not support this command."));
12330
12331 while (reply && *reply)
12332 switch (*reply)
12333 {
12334 case 'F':
12335 p = ++reply;
12336 target_frameno = (int) strtol (p, &reply, 16);
12337 if (reply == p)
12338 error (_("Unable to parse trace frame number"));
12339 /* Don't update our remote traceframe number cache on failure
12340 to select a remote traceframe. */
12341 if (target_frameno == -1)
12342 return -1;
12343 break;
12344 case 'T':
12345 p = ++reply;
12346 target_tracept = (int) strtol (p, &reply, 16);
12347 if (reply == p)
12348 error (_("Unable to parse tracepoint number"));
12349 break;
12350 case 'O': /* "OK"? */
12351 if (reply[1] == 'K' && reply[2] == '\0')
12352 reply += 2;
12353 else
12354 error (_("Bogus reply from target: %s"), reply);
12355 break;
12356 default:
12357 error (_("Bogus reply from target: %s"), reply);
12358 }
12359 if (tpp)
12360 *tpp = target_tracept;
12361
12362 rs->remote_traceframe_number = target_frameno;
12363 return target_frameno;
12364 }
12365
12366 static int
12367 remote_get_trace_state_variable_value (struct target_ops *self,
12368 int tsvnum, LONGEST *val)
12369 {
12370 struct remote_state *rs = get_remote_state ();
12371 char *reply;
12372 ULONGEST uval;
12373
12374 set_remote_traceframe ();
12375
12376 xsnprintf (rs->buf, get_remote_packet_size (), "qTV:%x", tsvnum);
12377 putpkt (rs->buf);
12378 reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
12379 if (reply && *reply)
12380 {
12381 if (*reply == 'V')
12382 {
12383 unpack_varlen_hex (reply + 1, &uval);
12384 *val = (LONGEST) uval;
12385 return 1;
12386 }
12387 }
12388 return 0;
12389 }
12390
12391 static int
12392 remote_save_trace_data (struct target_ops *self, const char *filename)
12393 {
12394 struct remote_state *rs = get_remote_state ();
12395 char *p, *reply;
12396
12397 p = rs->buf;
12398 strcpy (p, "QTSave:");
12399 p += strlen (p);
12400 if ((p - rs->buf) + strlen (filename) * 2 >= get_remote_packet_size ())
12401 error (_("Remote file name too long for trace save packet"));
12402 p += 2 * bin2hex ((gdb_byte *) filename, p, strlen (filename));
12403 *p++ = '\0';
12404 putpkt (rs->buf);
12405 reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
12406 if (*reply == '\0')
12407 error (_("Target does not support this command."));
12408 if (strcmp (reply, "OK") != 0)
12409 error (_("Bogus reply from target: %s"), reply);
12410 return 0;
12411 }
12412
12413 /* This is basically a memory transfer, but needs to be its own packet
12414 because we don't know how the target actually organizes its trace
12415 memory, plus we want to be able to ask for as much as possible, but
12416 not be unhappy if we don't get as much as we ask for. */
12417
12418 static LONGEST
12419 remote_get_raw_trace_data (struct target_ops *self,
12420 gdb_byte *buf, ULONGEST offset, LONGEST len)
12421 {
12422 struct remote_state *rs = get_remote_state ();
12423 char *reply;
12424 char *p;
12425 int rslt;
12426
12427 p = rs->buf;
12428 strcpy (p, "qTBuffer:");
12429 p += strlen (p);
12430 p += hexnumstr (p, offset);
12431 *p++ = ',';
12432 p += hexnumstr (p, len);
12433 *p++ = '\0';
12434
12435 putpkt (rs->buf);
12436 reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
12437 if (reply && *reply)
12438 {
12439 /* 'l' by itself means we're at the end of the buffer and
12440 there is nothing more to get. */
12441 if (*reply == 'l')
12442 return 0;
12443
12444 /* Convert the reply into binary. Limit the number of bytes to
12445 convert according to our passed-in buffer size, rather than
12446 what was returned in the packet; if the target is
12447 unexpectedly generous and gives us a bigger reply than we
12448 asked for, we don't want to crash. */
12449 rslt = hex2bin (target_buf, buf, len);
12450 return rslt;
12451 }
12452
12453 /* Something went wrong, flag as an error. */
12454 return -1;
12455 }
12456
12457 static void
12458 remote_set_disconnected_tracing (struct target_ops *self, int val)
12459 {
12460 struct remote_state *rs = get_remote_state ();
12461
12462 if (packet_support (PACKET_DisconnectedTracing_feature) == PACKET_ENABLE)
12463 {
12464 char *reply;
12465
12466 xsnprintf (rs->buf, get_remote_packet_size (), "QTDisconnected:%x", val);
12467 putpkt (rs->buf);
12468 reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
12469 if (*reply == '\0')
12470 error (_("Target does not support this command."));
12471 if (strcmp (reply, "OK") != 0)
12472 error (_("Bogus reply from target: %s"), reply);
12473 }
12474 else if (val)
12475 warning (_("Target does not support disconnected tracing."));
12476 }
12477
12478 static int
12479 remote_core_of_thread (struct target_ops *ops, ptid_t ptid)
12480 {
12481 struct thread_info *info = find_thread_ptid (ptid);
12482
12483 if (info && info->priv)
12484 return info->priv->core;
12485 return -1;
12486 }
12487
12488 static void
12489 remote_set_circular_trace_buffer (struct target_ops *self, int val)
12490 {
12491 struct remote_state *rs = get_remote_state ();
12492 char *reply;
12493
12494 xsnprintf (rs->buf, get_remote_packet_size (), "QTBuffer:circular:%x", val);
12495 putpkt (rs->buf);
12496 reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
12497 if (*reply == '\0')
12498 error (_("Target does not support this command."));
12499 if (strcmp (reply, "OK") != 0)
12500 error (_("Bogus reply from target: %s"), reply);
12501 }
12502
12503 static struct traceframe_info *
12504 remote_traceframe_info (struct target_ops *self)
12505 {
12506 char *text;
12507
12508 text = target_read_stralloc (&current_target,
12509 TARGET_OBJECT_TRACEFRAME_INFO, NULL);
12510 if (text != NULL)
12511 {
12512 struct traceframe_info *info;
12513 struct cleanup *back_to = make_cleanup (xfree, text);
12514
12515 info = parse_traceframe_info (text);
12516 do_cleanups (back_to);
12517 return info;
12518 }
12519
12520 return NULL;
12521 }
12522
12523 /* Handle the qTMinFTPILen packet. Returns the minimum length of
12524 instruction on which a fast tracepoint may be placed. Returns -1
12525 if the packet is not supported, and 0 if the minimum instruction
12526 length is unknown. */
12527
12528 static int
12529 remote_get_min_fast_tracepoint_insn_len (struct target_ops *self)
12530 {
12531 struct remote_state *rs = get_remote_state ();
12532 char *reply;
12533
12534 /* If we're not debugging a process yet, the IPA can't be
12535 loaded. */
12536 if (!target_has_execution)
12537 return 0;
12538
12539 /* Make sure the remote is pointing at the right process. */
12540 set_general_process ();
12541
12542 xsnprintf (rs->buf, get_remote_packet_size (), "qTMinFTPILen");
12543 putpkt (rs->buf);
12544 reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
12545 if (*reply == '\0')
12546 return -1;
12547 else
12548 {
12549 ULONGEST min_insn_len;
12550
12551 unpack_varlen_hex (reply, &min_insn_len);
12552
12553 return (int) min_insn_len;
12554 }
12555 }
12556
12557 static void
12558 remote_set_trace_buffer_size (struct target_ops *self, LONGEST val)
12559 {
12560 if (packet_support (PACKET_QTBuffer_size) != PACKET_DISABLE)
12561 {
12562 struct remote_state *rs = get_remote_state ();
12563 char *buf = rs->buf;
12564 char *endbuf = rs->buf + get_remote_packet_size ();
12565 enum packet_result result;
12566
12567 gdb_assert (val >= 0 || val == -1);
12568 buf += xsnprintf (buf, endbuf - buf, "QTBuffer:size:");
12569 /* Send -1 as literal "-1" to avoid host size dependency. */
12570 if (val < 0)
12571 {
12572 *buf++ = '-';
12573 buf += hexnumstr (buf, (ULONGEST) -val);
12574 }
12575 else
12576 buf += hexnumstr (buf, (ULONGEST) val);
12577
12578 putpkt (rs->buf);
12579 remote_get_noisy_reply (&rs->buf, &rs->buf_size);
12580 result = packet_ok (rs->buf,
12581 &remote_protocol_packets[PACKET_QTBuffer_size]);
12582
12583 if (result != PACKET_OK)
12584 warning (_("Bogus reply from target: %s"), rs->buf);
12585 }
12586 }
12587
12588 static int
12589 remote_set_trace_notes (struct target_ops *self,
12590 const char *user, const char *notes,
12591 const char *stop_notes)
12592 {
12593 struct remote_state *rs = get_remote_state ();
12594 char *reply;
12595 char *buf = rs->buf;
12596 char *endbuf = rs->buf + get_remote_packet_size ();
12597 int nbytes;
12598
12599 buf += xsnprintf (buf, endbuf - buf, "QTNotes:");
12600 if (user)
12601 {
12602 buf += xsnprintf (buf, endbuf - buf, "user:");
12603 nbytes = bin2hex ((gdb_byte *) user, buf, strlen (user));
12604 buf += 2 * nbytes;
12605 *buf++ = ';';
12606 }
12607 if (notes)
12608 {
12609 buf += xsnprintf (buf, endbuf - buf, "notes:");
12610 nbytes = bin2hex ((gdb_byte *) notes, buf, strlen (notes));
12611 buf += 2 * nbytes;
12612 *buf++ = ';';
12613 }
12614 if (stop_notes)
12615 {
12616 buf += xsnprintf (buf, endbuf - buf, "tstop:");
12617 nbytes = bin2hex ((gdb_byte *) stop_notes, buf, strlen (stop_notes));
12618 buf += 2 * nbytes;
12619 *buf++ = ';';
12620 }
12621 /* Ensure the buffer is terminated. */
12622 *buf = '\0';
12623
12624 putpkt (rs->buf);
12625 reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
12626 if (*reply == '\0')
12627 return 0;
12628
12629 if (strcmp (reply, "OK") != 0)
12630 error (_("Bogus reply from target: %s"), reply);
12631
12632 return 1;
12633 }
12634
12635 static int
12636 remote_use_agent (struct target_ops *self, int use)
12637 {
12638 if (packet_support (PACKET_QAgent) != PACKET_DISABLE)
12639 {
12640 struct remote_state *rs = get_remote_state ();
12641
12642 /* If the stub supports QAgent. */
12643 xsnprintf (rs->buf, get_remote_packet_size (), "QAgent:%d", use);
12644 putpkt (rs->buf);
12645 getpkt (&rs->buf, &rs->buf_size, 0);
12646
12647 if (strcmp (rs->buf, "OK") == 0)
12648 {
12649 use_agent = use;
12650 return 1;
12651 }
12652 }
12653
12654 return 0;
12655 }
12656
12657 static int
12658 remote_can_use_agent (struct target_ops *self)
12659 {
12660 return (packet_support (PACKET_QAgent) != PACKET_DISABLE);
12661 }
12662
12663 struct btrace_target_info
12664 {
12665 /* The ptid of the traced thread. */
12666 ptid_t ptid;
12667
12668 /* The obtained branch trace configuration. */
12669 struct btrace_config conf;
12670 };
12671
12672 /* Reset our idea of our target's btrace configuration. */
12673
12674 static void
12675 remote_btrace_reset (void)
12676 {
12677 struct remote_state *rs = get_remote_state ();
12678
12679 memset (&rs->btrace_config, 0, sizeof (rs->btrace_config));
12680 }
12681
12682 /* Check whether the target supports branch tracing. */
12683
12684 static int
12685 remote_supports_btrace (struct target_ops *self, enum btrace_format format)
12686 {
12687 if (packet_support (PACKET_Qbtrace_off) != PACKET_ENABLE)
12688 return 0;
12689 if (packet_support (PACKET_qXfer_btrace) != PACKET_ENABLE)
12690 return 0;
12691
12692 switch (format)
12693 {
12694 case BTRACE_FORMAT_NONE:
12695 return 0;
12696
12697 case BTRACE_FORMAT_BTS:
12698 return (packet_support (PACKET_Qbtrace_bts) == PACKET_ENABLE);
12699
12700 case BTRACE_FORMAT_PT:
12701 /* The trace is decoded on the host. Even if our target supports it,
12702 we still need to have libipt to decode the trace. */
12703 #if defined (HAVE_LIBIPT)
12704 return (packet_support (PACKET_Qbtrace_pt) == PACKET_ENABLE);
12705 #else /* !defined (HAVE_LIBIPT) */
12706 return 0;
12707 #endif /* !defined (HAVE_LIBIPT) */
12708 }
12709
12710 internal_error (__FILE__, __LINE__, _("Unknown branch trace format"));
12711 }
12712
12713 /* Synchronize the configuration with the target. */
12714
12715 static void
12716 btrace_sync_conf (const struct btrace_config *conf)
12717 {
12718 struct packet_config *packet;
12719 struct remote_state *rs;
12720 char *buf, *pos, *endbuf;
12721
12722 rs = get_remote_state ();
12723 buf = rs->buf;
12724 endbuf = buf + get_remote_packet_size ();
12725
12726 packet = &remote_protocol_packets[PACKET_Qbtrace_conf_bts_size];
12727 if (packet_config_support (packet) == PACKET_ENABLE
12728 && conf->bts.size != rs->btrace_config.bts.size)
12729 {
12730 pos = buf;
12731 pos += xsnprintf (pos, endbuf - pos, "%s=0x%x", packet->name,
12732 conf->bts.size);
12733
12734 putpkt (buf);
12735 getpkt (&buf, &rs->buf_size, 0);
12736
12737 if (packet_ok (buf, packet) == PACKET_ERROR)
12738 {
12739 if (buf[0] == 'E' && buf[1] == '.')
12740 error (_("Failed to configure the BTS buffer size: %s"), buf + 2);
12741 else
12742 error (_("Failed to configure the BTS buffer size."));
12743 }
12744
12745 rs->btrace_config.bts.size = conf->bts.size;
12746 }
12747
12748 packet = &remote_protocol_packets[PACKET_Qbtrace_conf_pt_size];
12749 if (packet_config_support (packet) == PACKET_ENABLE
12750 && conf->pt.size != rs->btrace_config.pt.size)
12751 {
12752 pos = buf;
12753 pos += xsnprintf (pos, endbuf - pos, "%s=0x%x", packet->name,
12754 conf->pt.size);
12755
12756 putpkt (buf);
12757 getpkt (&buf, &rs->buf_size, 0);
12758
12759 if (packet_ok (buf, packet) == PACKET_ERROR)
12760 {
12761 if (buf[0] == 'E' && buf[1] == '.')
12762 error (_("Failed to configure the trace buffer size: %s"), buf + 2);
12763 else
12764 error (_("Failed to configure the trace buffer size."));
12765 }
12766
12767 rs->btrace_config.pt.size = conf->pt.size;
12768 }
12769 }
12770
12771 /* Read the current thread's btrace configuration from the target and
12772 store it into CONF. */
12773
12774 static void
12775 btrace_read_config (struct btrace_config *conf)
12776 {
12777 char *xml;
12778
12779 xml = target_read_stralloc (&current_target,
12780 TARGET_OBJECT_BTRACE_CONF, "");
12781 if (xml != NULL)
12782 {
12783 struct cleanup *cleanup;
12784
12785 cleanup = make_cleanup (xfree, xml);
12786 parse_xml_btrace_conf (conf, xml);
12787 do_cleanups (cleanup);
12788 }
12789 }
12790
12791 /* Maybe reopen target btrace. */
12792
12793 static void
12794 remote_btrace_maybe_reopen (void)
12795 {
12796 struct remote_state *rs = get_remote_state ();
12797 struct cleanup *cleanup;
12798 struct thread_info *tp;
12799 int btrace_target_pushed = 0;
12800 int warned = 0;
12801
12802 cleanup = make_cleanup_restore_current_thread ();
12803 ALL_NON_EXITED_THREADS (tp)
12804 {
12805 set_general_thread (tp->ptid);
12806
12807 memset (&rs->btrace_config, 0x00, sizeof (struct btrace_config));
12808 btrace_read_config (&rs->btrace_config);
12809
12810 if (rs->btrace_config.format == BTRACE_FORMAT_NONE)
12811 continue;
12812
12813 #if !defined (HAVE_LIBIPT)
12814 if (rs->btrace_config.format == BTRACE_FORMAT_PT)
12815 {
12816 if (!warned)
12817 {
12818 warned = 1;
12819 warning (_("GDB does not support Intel Processor Trace. "
12820 "\"record\" will not work in this session."));
12821 }
12822
12823 continue;
12824 }
12825 #endif /* !defined (HAVE_LIBIPT) */
12826
12827 /* Push target, once, but before anything else happens. This way our
12828 changes to the threads will be cleaned up by unpushing the target
12829 in case btrace_read_config () throws. */
12830 if (!btrace_target_pushed)
12831 {
12832 btrace_target_pushed = 1;
12833 record_btrace_push_target ();
12834 printf_filtered (_("Target is recording using %s.\n"),
12835 btrace_format_string (rs->btrace_config.format));
12836 }
12837
12838 tp->btrace.target = XCNEW (struct btrace_target_info);
12839 tp->btrace.target->ptid = tp->ptid;
12840 tp->btrace.target->conf = rs->btrace_config;
12841 }
12842 do_cleanups (cleanup);
12843 }
12844
12845 /* Enable branch tracing. */
12846
12847 static struct btrace_target_info *
12848 remote_enable_btrace (struct target_ops *self, ptid_t ptid,
12849 const struct btrace_config *conf)
12850 {
12851 struct btrace_target_info *tinfo = NULL;
12852 struct packet_config *packet = NULL;
12853 struct remote_state *rs = get_remote_state ();
12854 char *buf = rs->buf;
12855 char *endbuf = rs->buf + get_remote_packet_size ();
12856
12857 switch (conf->format)
12858 {
12859 case BTRACE_FORMAT_BTS:
12860 packet = &remote_protocol_packets[PACKET_Qbtrace_bts];
12861 break;
12862
12863 case BTRACE_FORMAT_PT:
12864 packet = &remote_protocol_packets[PACKET_Qbtrace_pt];
12865 break;
12866 }
12867
12868 if (packet == NULL || packet_config_support (packet) != PACKET_ENABLE)
12869 error (_("Target does not support branch tracing."));
12870
12871 btrace_sync_conf (conf);
12872
12873 set_general_thread (ptid);
12874
12875 buf += xsnprintf (buf, endbuf - buf, "%s", packet->name);
12876 putpkt (rs->buf);
12877 getpkt (&rs->buf, &rs->buf_size, 0);
12878
12879 if (packet_ok (rs->buf, packet) == PACKET_ERROR)
12880 {
12881 if (rs->buf[0] == 'E' && rs->buf[1] == '.')
12882 error (_("Could not enable branch tracing for %s: %s"),
12883 target_pid_to_str (ptid), rs->buf + 2);
12884 else
12885 error (_("Could not enable branch tracing for %s."),
12886 target_pid_to_str (ptid));
12887 }
12888
12889 tinfo = XCNEW (struct btrace_target_info);
12890 tinfo->ptid = ptid;
12891
12892 /* If we fail to read the configuration, we lose some information, but the
12893 tracing itself is not impacted. */
12894 TRY
12895 {
12896 btrace_read_config (&tinfo->conf);
12897 }
12898 CATCH (err, RETURN_MASK_ERROR)
12899 {
12900 if (err.message != NULL)
12901 warning ("%s", err.message);
12902 }
12903 END_CATCH
12904
12905 return tinfo;
12906 }
12907
12908 /* Disable branch tracing. */
12909
12910 static void
12911 remote_disable_btrace (struct target_ops *self,
12912 struct btrace_target_info *tinfo)
12913 {
12914 struct packet_config *packet = &remote_protocol_packets[PACKET_Qbtrace_off];
12915 struct remote_state *rs = get_remote_state ();
12916 char *buf = rs->buf;
12917 char *endbuf = rs->buf + get_remote_packet_size ();
12918
12919 if (packet_config_support (packet) != PACKET_ENABLE)
12920 error (_("Target does not support branch tracing."));
12921
12922 set_general_thread (tinfo->ptid);
12923
12924 buf += xsnprintf (buf, endbuf - buf, "%s", packet->name);
12925 putpkt (rs->buf);
12926 getpkt (&rs->buf, &rs->buf_size, 0);
12927
12928 if (packet_ok (rs->buf, packet) == PACKET_ERROR)
12929 {
12930 if (rs->buf[0] == 'E' && rs->buf[1] == '.')
12931 error (_("Could not disable branch tracing for %s: %s"),
12932 target_pid_to_str (tinfo->ptid), rs->buf + 2);
12933 else
12934 error (_("Could not disable branch tracing for %s."),
12935 target_pid_to_str (tinfo->ptid));
12936 }
12937
12938 xfree (tinfo);
12939 }
12940
12941 /* Teardown branch tracing. */
12942
12943 static void
12944 remote_teardown_btrace (struct target_ops *self,
12945 struct btrace_target_info *tinfo)
12946 {
12947 /* We must not talk to the target during teardown. */
12948 xfree (tinfo);
12949 }
12950
12951 /* Read the branch trace. */
12952
12953 static enum btrace_error
12954 remote_read_btrace (struct target_ops *self,
12955 struct btrace_data *btrace,
12956 struct btrace_target_info *tinfo,
12957 enum btrace_read_type type)
12958 {
12959 struct packet_config *packet = &remote_protocol_packets[PACKET_qXfer_btrace];
12960 struct cleanup *cleanup;
12961 const char *annex;
12962 char *xml;
12963
12964 if (packet_config_support (packet) != PACKET_ENABLE)
12965 error (_("Target does not support branch tracing."));
12966
12967 #if !defined(HAVE_LIBEXPAT)
12968 error (_("Cannot process branch tracing result. XML parsing not supported."));
12969 #endif
12970
12971 switch (type)
12972 {
12973 case BTRACE_READ_ALL:
12974 annex = "all";
12975 break;
12976 case BTRACE_READ_NEW:
12977 annex = "new";
12978 break;
12979 case BTRACE_READ_DELTA:
12980 annex = "delta";
12981 break;
12982 default:
12983 internal_error (__FILE__, __LINE__,
12984 _("Bad branch tracing read type: %u."),
12985 (unsigned int) type);
12986 }
12987
12988 xml = target_read_stralloc (&current_target,
12989 TARGET_OBJECT_BTRACE, annex);
12990 if (xml == NULL)
12991 return BTRACE_ERR_UNKNOWN;
12992
12993 cleanup = make_cleanup (xfree, xml);
12994 parse_xml_btrace (btrace, xml);
12995 do_cleanups (cleanup);
12996
12997 return BTRACE_ERR_NONE;
12998 }
12999
13000 static const struct btrace_config *
13001 remote_btrace_conf (struct target_ops *self,
13002 const struct btrace_target_info *tinfo)
13003 {
13004 return &tinfo->conf;
13005 }
13006
13007 static int
13008 remote_augmented_libraries_svr4_read (struct target_ops *self)
13009 {
13010 return (packet_support (PACKET_augmented_libraries_svr4_read_feature)
13011 == PACKET_ENABLE);
13012 }
13013
13014 /* Implementation of to_load. */
13015
13016 static void
13017 remote_load (struct target_ops *self, const char *name, int from_tty)
13018 {
13019 generic_load (name, from_tty);
13020 }
13021
13022 /* Accepts an integer PID; returns a string representing a file that
13023 can be opened on the remote side to get the symbols for the child
13024 process. Returns NULL if the operation is not supported. */
13025
13026 static char *
13027 remote_pid_to_exec_file (struct target_ops *self, int pid)
13028 {
13029 static char *filename = NULL;
13030 struct inferior *inf;
13031 char *annex = NULL;
13032
13033 if (packet_support (PACKET_qXfer_exec_file) != PACKET_ENABLE)
13034 return NULL;
13035
13036 if (filename != NULL)
13037 xfree (filename);
13038
13039 inf = find_inferior_pid (pid);
13040 if (inf == NULL)
13041 internal_error (__FILE__, __LINE__,
13042 _("not currently attached to process %d"), pid);
13043
13044 if (!inf->fake_pid_p)
13045 {
13046 const int annex_size = 9;
13047
13048 annex = (char *) alloca (annex_size);
13049 xsnprintf (annex, annex_size, "%x", pid);
13050 }
13051
13052 filename = target_read_stralloc (&current_target,
13053 TARGET_OBJECT_EXEC_FILE, annex);
13054
13055 return filename;
13056 }
13057
13058 /* Implement the to_can_do_single_step target_ops method. */
13059
13060 static int
13061 remote_can_do_single_step (struct target_ops *ops)
13062 {
13063 /* We can only tell whether target supports single step or not by
13064 supported s and S vCont actions if the stub supports vContSupported
13065 feature. If the stub doesn't support vContSupported feature,
13066 we have conservatively to think target doesn't supports single
13067 step. */
13068 if (packet_support (PACKET_vContSupported) == PACKET_ENABLE)
13069 {
13070 struct remote_state *rs = get_remote_state ();
13071
13072 if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
13073 remote_vcont_probe (rs);
13074
13075 return rs->supports_vCont.s && rs->supports_vCont.S;
13076 }
13077 else
13078 return 0;
13079 }
13080
13081 /* Implementation of the to_execution_direction method for the remote
13082 target. */
13083
13084 static enum exec_direction_kind
13085 remote_execution_direction (struct target_ops *self)
13086 {
13087 struct remote_state *rs = get_remote_state ();
13088
13089 return rs->last_resume_exec_dir;
13090 }
13091
13092 static void
13093 init_remote_ops (void)
13094 {
13095 remote_ops.to_shortname = "remote";
13096 remote_ops.to_longname = "Remote serial target in gdb-specific protocol";
13097 remote_ops.to_doc =
13098 "Use a remote computer via a serial line, using a gdb-specific protocol.\n\
13099 Specify the serial device it is connected to\n\
13100 (e.g. /dev/ttyS0, /dev/ttya, COM1, etc.).";
13101 remote_ops.to_open = remote_open;
13102 remote_ops.to_close = remote_close;
13103 remote_ops.to_detach = remote_detach;
13104 remote_ops.to_disconnect = remote_disconnect;
13105 remote_ops.to_resume = remote_resume;
13106 remote_ops.to_wait = remote_wait;
13107 remote_ops.to_fetch_registers = remote_fetch_registers;
13108 remote_ops.to_store_registers = remote_store_registers;
13109 remote_ops.to_prepare_to_store = remote_prepare_to_store;
13110 remote_ops.to_files_info = remote_files_info;
13111 remote_ops.to_insert_breakpoint = remote_insert_breakpoint;
13112 remote_ops.to_remove_breakpoint = remote_remove_breakpoint;
13113 remote_ops.to_stopped_by_sw_breakpoint = remote_stopped_by_sw_breakpoint;
13114 remote_ops.to_supports_stopped_by_sw_breakpoint = remote_supports_stopped_by_sw_breakpoint;
13115 remote_ops.to_stopped_by_hw_breakpoint = remote_stopped_by_hw_breakpoint;
13116 remote_ops.to_supports_stopped_by_hw_breakpoint = remote_supports_stopped_by_hw_breakpoint;
13117 remote_ops.to_stopped_by_watchpoint = remote_stopped_by_watchpoint;
13118 remote_ops.to_stopped_data_address = remote_stopped_data_address;
13119 remote_ops.to_watchpoint_addr_within_range =
13120 remote_watchpoint_addr_within_range;
13121 remote_ops.to_can_use_hw_breakpoint = remote_check_watch_resources;
13122 remote_ops.to_insert_hw_breakpoint = remote_insert_hw_breakpoint;
13123 remote_ops.to_remove_hw_breakpoint = remote_remove_hw_breakpoint;
13124 remote_ops.to_region_ok_for_hw_watchpoint
13125 = remote_region_ok_for_hw_watchpoint;
13126 remote_ops.to_insert_watchpoint = remote_insert_watchpoint;
13127 remote_ops.to_remove_watchpoint = remote_remove_watchpoint;
13128 remote_ops.to_kill = remote_kill;
13129 remote_ops.to_load = remote_load;
13130 remote_ops.to_mourn_inferior = remote_mourn;
13131 remote_ops.to_pass_signals = remote_pass_signals;
13132 remote_ops.to_set_syscall_catchpoint = remote_set_syscall_catchpoint;
13133 remote_ops.to_program_signals = remote_program_signals;
13134 remote_ops.to_thread_alive = remote_thread_alive;
13135 remote_ops.to_thread_name = remote_thread_name;
13136 remote_ops.to_update_thread_list = remote_update_thread_list;
13137 remote_ops.to_pid_to_str = remote_pid_to_str;
13138 remote_ops.to_extra_thread_info = remote_threads_extra_info;
13139 remote_ops.to_get_ada_task_ptid = remote_get_ada_task_ptid;
13140 remote_ops.to_stop = remote_stop;
13141 remote_ops.to_interrupt = remote_interrupt;
13142 remote_ops.to_pass_ctrlc = remote_pass_ctrlc;
13143 remote_ops.to_xfer_partial = remote_xfer_partial;
13144 remote_ops.to_get_memory_xfer_limit = remote_get_memory_xfer_limit;
13145 remote_ops.to_rcmd = remote_rcmd;
13146 remote_ops.to_pid_to_exec_file = remote_pid_to_exec_file;
13147 remote_ops.to_log_command = serial_log_command;
13148 remote_ops.to_get_thread_local_address = remote_get_thread_local_address;
13149 remote_ops.to_stratum = process_stratum;
13150 remote_ops.to_has_all_memory = default_child_has_all_memory;
13151 remote_ops.to_has_memory = default_child_has_memory;
13152 remote_ops.to_has_stack = default_child_has_stack;
13153 remote_ops.to_has_registers = default_child_has_registers;
13154 remote_ops.to_has_execution = default_child_has_execution;
13155 remote_ops.to_has_thread_control = tc_schedlock; /* can lock scheduler */
13156 remote_ops.to_can_execute_reverse = remote_can_execute_reverse;
13157 remote_ops.to_magic = OPS_MAGIC;
13158 remote_ops.to_memory_map = remote_memory_map;
13159 remote_ops.to_flash_erase = remote_flash_erase;
13160 remote_ops.to_flash_done = remote_flash_done;
13161 remote_ops.to_read_description = remote_read_description;
13162 remote_ops.to_search_memory = remote_search_memory;
13163 remote_ops.to_can_async_p = remote_can_async_p;
13164 remote_ops.to_is_async_p = remote_is_async_p;
13165 remote_ops.to_async = remote_async;
13166 remote_ops.to_thread_events = remote_thread_events;
13167 remote_ops.to_can_do_single_step = remote_can_do_single_step;
13168 remote_ops.to_terminal_inferior = remote_terminal_inferior;
13169 remote_ops.to_terminal_ours = remote_terminal_ours;
13170 remote_ops.to_supports_non_stop = remote_supports_non_stop;
13171 remote_ops.to_supports_multi_process = remote_supports_multi_process;
13172 remote_ops.to_supports_disable_randomization
13173 = remote_supports_disable_randomization;
13174 remote_ops.to_filesystem_is_local = remote_filesystem_is_local;
13175 remote_ops.to_fileio_open = remote_hostio_open;
13176 remote_ops.to_fileio_pwrite = remote_hostio_pwrite;
13177 remote_ops.to_fileio_pread = remote_hostio_pread;
13178 remote_ops.to_fileio_fstat = remote_hostio_fstat;
13179 remote_ops.to_fileio_close = remote_hostio_close;
13180 remote_ops.to_fileio_unlink = remote_hostio_unlink;
13181 remote_ops.to_fileio_readlink = remote_hostio_readlink;
13182 remote_ops.to_supports_enable_disable_tracepoint = remote_supports_enable_disable_tracepoint;
13183 remote_ops.to_supports_string_tracing = remote_supports_string_tracing;
13184 remote_ops.to_supports_evaluation_of_breakpoint_conditions = remote_supports_cond_breakpoints;
13185 remote_ops.to_can_run_breakpoint_commands = remote_can_run_breakpoint_commands;
13186 remote_ops.to_trace_init = remote_trace_init;
13187 remote_ops.to_download_tracepoint = remote_download_tracepoint;
13188 remote_ops.to_can_download_tracepoint = remote_can_download_tracepoint;
13189 remote_ops.to_download_trace_state_variable
13190 = remote_download_trace_state_variable;
13191 remote_ops.to_enable_tracepoint = remote_enable_tracepoint;
13192 remote_ops.to_disable_tracepoint = remote_disable_tracepoint;
13193 remote_ops.to_trace_set_readonly_regions = remote_trace_set_readonly_regions;
13194 remote_ops.to_trace_start = remote_trace_start;
13195 remote_ops.to_get_trace_status = remote_get_trace_status;
13196 remote_ops.to_get_tracepoint_status = remote_get_tracepoint_status;
13197 remote_ops.to_trace_stop = remote_trace_stop;
13198 remote_ops.to_trace_find = remote_trace_find;
13199 remote_ops.to_get_trace_state_variable_value
13200 = remote_get_trace_state_variable_value;
13201 remote_ops.to_save_trace_data = remote_save_trace_data;
13202 remote_ops.to_upload_tracepoints = remote_upload_tracepoints;
13203 remote_ops.to_upload_trace_state_variables
13204 = remote_upload_trace_state_variables;
13205 remote_ops.to_get_raw_trace_data = remote_get_raw_trace_data;
13206 remote_ops.to_get_min_fast_tracepoint_insn_len = remote_get_min_fast_tracepoint_insn_len;
13207 remote_ops.to_set_disconnected_tracing = remote_set_disconnected_tracing;
13208 remote_ops.to_set_circular_trace_buffer = remote_set_circular_trace_buffer;
13209 remote_ops.to_set_trace_buffer_size = remote_set_trace_buffer_size;
13210 remote_ops.to_set_trace_notes = remote_set_trace_notes;
13211 remote_ops.to_core_of_thread = remote_core_of_thread;
13212 remote_ops.to_verify_memory = remote_verify_memory;
13213 remote_ops.to_get_tib_address = remote_get_tib_address;
13214 remote_ops.to_set_permissions = remote_set_permissions;
13215 remote_ops.to_static_tracepoint_marker_at
13216 = remote_static_tracepoint_marker_at;
13217 remote_ops.to_static_tracepoint_markers_by_strid
13218 = remote_static_tracepoint_markers_by_strid;
13219 remote_ops.to_traceframe_info = remote_traceframe_info;
13220 remote_ops.to_use_agent = remote_use_agent;
13221 remote_ops.to_can_use_agent = remote_can_use_agent;
13222 remote_ops.to_supports_btrace = remote_supports_btrace;
13223 remote_ops.to_enable_btrace = remote_enable_btrace;
13224 remote_ops.to_disable_btrace = remote_disable_btrace;
13225 remote_ops.to_teardown_btrace = remote_teardown_btrace;
13226 remote_ops.to_read_btrace = remote_read_btrace;
13227 remote_ops.to_btrace_conf = remote_btrace_conf;
13228 remote_ops.to_augmented_libraries_svr4_read =
13229 remote_augmented_libraries_svr4_read;
13230 remote_ops.to_follow_fork = remote_follow_fork;
13231 remote_ops.to_follow_exec = remote_follow_exec;
13232 remote_ops.to_insert_fork_catchpoint = remote_insert_fork_catchpoint;
13233 remote_ops.to_remove_fork_catchpoint = remote_remove_fork_catchpoint;
13234 remote_ops.to_insert_vfork_catchpoint = remote_insert_vfork_catchpoint;
13235 remote_ops.to_remove_vfork_catchpoint = remote_remove_vfork_catchpoint;
13236 remote_ops.to_insert_exec_catchpoint = remote_insert_exec_catchpoint;
13237 remote_ops.to_remove_exec_catchpoint = remote_remove_exec_catchpoint;
13238 remote_ops.to_execution_direction = remote_execution_direction;
13239 }
13240
13241 /* Set up the extended remote vector by making a copy of the standard
13242 remote vector and adding to it. */
13243
13244 static void
13245 init_extended_remote_ops (void)
13246 {
13247 extended_remote_ops = remote_ops;
13248
13249 extended_remote_ops.to_shortname = "extended-remote";
13250 extended_remote_ops.to_longname =
13251 "Extended remote serial target in gdb-specific protocol";
13252 extended_remote_ops.to_doc =
13253 "Use a remote computer via a serial line, using a gdb-specific protocol.\n\
13254 Specify the serial device it is connected to (e.g. /dev/ttya).";
13255 extended_remote_ops.to_open = extended_remote_open;
13256 extended_remote_ops.to_create_inferior = extended_remote_create_inferior;
13257 extended_remote_ops.to_detach = extended_remote_detach;
13258 extended_remote_ops.to_attach = extended_remote_attach;
13259 extended_remote_ops.to_post_attach = extended_remote_post_attach;
13260 extended_remote_ops.to_supports_disable_randomization
13261 = extended_remote_supports_disable_randomization;
13262 }
13263
13264 static int
13265 remote_can_async_p (struct target_ops *ops)
13266 {
13267 struct remote_state *rs = get_remote_state ();
13268
13269 if (!target_async_permitted)
13270 /* We only enable async when the user specifically asks for it. */
13271 return 0;
13272
13273 /* We're async whenever the serial device is. */
13274 return serial_can_async_p (rs->remote_desc);
13275 }
13276
13277 static int
13278 remote_is_async_p (struct target_ops *ops)
13279 {
13280 struct remote_state *rs = get_remote_state ();
13281
13282 if (!target_async_permitted)
13283 /* We only enable async when the user specifically asks for it. */
13284 return 0;
13285
13286 /* We're async whenever the serial device is. */
13287 return serial_is_async_p (rs->remote_desc);
13288 }
13289
13290 /* Pass the SERIAL event on and up to the client. One day this code
13291 will be able to delay notifying the client of an event until the
13292 point where an entire packet has been received. */
13293
13294 static serial_event_ftype remote_async_serial_handler;
13295
13296 static void
13297 remote_async_serial_handler (struct serial *scb, void *context)
13298 {
13299 /* Don't propogate error information up to the client. Instead let
13300 the client find out about the error by querying the target. */
13301 inferior_event_handler (INF_REG_EVENT, NULL);
13302 }
13303
13304 static void
13305 remote_async_inferior_event_handler (gdb_client_data data)
13306 {
13307 inferior_event_handler (INF_REG_EVENT, NULL);
13308 }
13309
13310 static void
13311 remote_async (struct target_ops *ops, int enable)
13312 {
13313 struct remote_state *rs = get_remote_state ();
13314
13315 if (enable)
13316 {
13317 serial_async (rs->remote_desc, remote_async_serial_handler, rs);
13318
13319 /* If there are pending events in the stop reply queue tell the
13320 event loop to process them. */
13321 if (!QUEUE_is_empty (stop_reply_p, stop_reply_queue))
13322 mark_async_event_handler (remote_async_inferior_event_token);
13323 /* For simplicity, below we clear the pending events token
13324 without remembering whether it is marked, so here we always
13325 mark it. If there's actually no pending notification to
13326 process, this ends up being a no-op (other than a spurious
13327 event-loop wakeup). */
13328 if (target_is_non_stop_p ())
13329 mark_async_event_handler (rs->notif_state->get_pending_events_token);
13330 }
13331 else
13332 {
13333 serial_async (rs->remote_desc, NULL, NULL);
13334 /* If the core is disabling async, it doesn't want to be
13335 disturbed with target events. Clear all async event sources
13336 too. */
13337 clear_async_event_handler (remote_async_inferior_event_token);
13338 if (target_is_non_stop_p ())
13339 clear_async_event_handler (rs->notif_state->get_pending_events_token);
13340 }
13341 }
13342
13343 /* Implementation of the to_thread_events method. */
13344
13345 static void
13346 remote_thread_events (struct target_ops *ops, int enable)
13347 {
13348 struct remote_state *rs = get_remote_state ();
13349 size_t size = get_remote_packet_size ();
13350
13351 if (packet_support (PACKET_QThreadEvents) == PACKET_DISABLE)
13352 return;
13353
13354 xsnprintf (rs->buf, size, "QThreadEvents:%x", enable ? 1 : 0);
13355 putpkt (rs->buf);
13356 getpkt (&rs->buf, &rs->buf_size, 0);
13357
13358 switch (packet_ok (rs->buf,
13359 &remote_protocol_packets[PACKET_QThreadEvents]))
13360 {
13361 case PACKET_OK:
13362 if (strcmp (rs->buf, "OK") != 0)
13363 error (_("Remote refused setting thread events: %s"), rs->buf);
13364 break;
13365 case PACKET_ERROR:
13366 warning (_("Remote failure reply: %s"), rs->buf);
13367 break;
13368 case PACKET_UNKNOWN:
13369 break;
13370 }
13371 }
13372
13373 static void
13374 set_remote_cmd (char *args, int from_tty)
13375 {
13376 help_list (remote_set_cmdlist, "set remote ", all_commands, gdb_stdout);
13377 }
13378
13379 static void
13380 show_remote_cmd (char *args, int from_tty)
13381 {
13382 /* We can't just use cmd_show_list here, because we want to skip
13383 the redundant "show remote Z-packet" and the legacy aliases. */
13384 struct cleanup *showlist_chain;
13385 struct cmd_list_element *list = remote_show_cmdlist;
13386 struct ui_out *uiout = current_uiout;
13387
13388 showlist_chain = make_cleanup_ui_out_tuple_begin_end (uiout, "showlist");
13389 for (; list != NULL; list = list->next)
13390 if (strcmp (list->name, "Z-packet") == 0)
13391 continue;
13392 else if (list->type == not_set_cmd)
13393 /* Alias commands are exactly like the original, except they
13394 don't have the normal type. */
13395 continue;
13396 else
13397 {
13398 struct cleanup *option_chain
13399 = make_cleanup_ui_out_tuple_begin_end (uiout, "option");
13400
13401 ui_out_field_string (uiout, "name", list->name);
13402 ui_out_text (uiout, ": ");
13403 if (list->type == show_cmd)
13404 do_show_command (NULL, from_tty, list);
13405 else
13406 cmd_func (list, NULL, from_tty);
13407 /* Close the tuple. */
13408 do_cleanups (option_chain);
13409 }
13410
13411 /* Close the tuple. */
13412 do_cleanups (showlist_chain);
13413 }
13414
13415
13416 /* Function to be called whenever a new objfile (shlib) is detected. */
13417 static void
13418 remote_new_objfile (struct objfile *objfile)
13419 {
13420 struct remote_state *rs = get_remote_state ();
13421
13422 if (rs->remote_desc != 0) /* Have a remote connection. */
13423 remote_check_symbols ();
13424 }
13425
13426 /* Pull all the tracepoints defined on the target and create local
13427 data structures representing them. We don't want to create real
13428 tracepoints yet, we don't want to mess up the user's existing
13429 collection. */
13430
13431 static int
13432 remote_upload_tracepoints (struct target_ops *self, struct uploaded_tp **utpp)
13433 {
13434 struct remote_state *rs = get_remote_state ();
13435 char *p;
13436
13437 /* Ask for a first packet of tracepoint definition. */
13438 putpkt ("qTfP");
13439 getpkt (&rs->buf, &rs->buf_size, 0);
13440 p = rs->buf;
13441 while (*p && *p != 'l')
13442 {
13443 parse_tracepoint_definition (p, utpp);
13444 /* Ask for another packet of tracepoint definition. */
13445 putpkt ("qTsP");
13446 getpkt (&rs->buf, &rs->buf_size, 0);
13447 p = rs->buf;
13448 }
13449 return 0;
13450 }
13451
13452 static int
13453 remote_upload_trace_state_variables (struct target_ops *self,
13454 struct uploaded_tsv **utsvp)
13455 {
13456 struct remote_state *rs = get_remote_state ();
13457 char *p;
13458
13459 /* Ask for a first packet of variable definition. */
13460 putpkt ("qTfV");
13461 getpkt (&rs->buf, &rs->buf_size, 0);
13462 p = rs->buf;
13463 while (*p && *p != 'l')
13464 {
13465 parse_tsv_definition (p, utsvp);
13466 /* Ask for another packet of variable definition. */
13467 putpkt ("qTsV");
13468 getpkt (&rs->buf, &rs->buf_size, 0);
13469 p = rs->buf;
13470 }
13471 return 0;
13472 }
13473
13474 /* The "set/show range-stepping" show hook. */
13475
13476 static void
13477 show_range_stepping (struct ui_file *file, int from_tty,
13478 struct cmd_list_element *c,
13479 const char *value)
13480 {
13481 fprintf_filtered (file,
13482 _("Debugger's willingness to use range stepping "
13483 "is %s.\n"), value);
13484 }
13485
13486 /* The "set/show range-stepping" set hook. */
13487
13488 static void
13489 set_range_stepping (char *ignore_args, int from_tty,
13490 struct cmd_list_element *c)
13491 {
13492 struct remote_state *rs = get_remote_state ();
13493
13494 /* Whene enabling, check whether range stepping is actually
13495 supported by the target, and warn if not. */
13496 if (use_range_stepping)
13497 {
13498 if (rs->remote_desc != NULL)
13499 {
13500 if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
13501 remote_vcont_probe (rs);
13502
13503 if (packet_support (PACKET_vCont) == PACKET_ENABLE
13504 && rs->supports_vCont.r)
13505 return;
13506 }
13507
13508 warning (_("Range stepping is not supported by the current target"));
13509 }
13510 }
13511
13512 void
13513 _initialize_remote (void)
13514 {
13515 struct cmd_list_element *cmd;
13516 const char *cmd_name;
13517
13518 /* architecture specific data */
13519 remote_gdbarch_data_handle =
13520 gdbarch_data_register_post_init (init_remote_state);
13521 remote_g_packet_data_handle =
13522 gdbarch_data_register_pre_init (remote_g_packet_data_init);
13523
13524 remote_pspace_data
13525 = register_program_space_data_with_cleanup (NULL,
13526 remote_pspace_data_cleanup);
13527
13528 /* Initialize the per-target state. At the moment there is only one
13529 of these, not one per target. Only one target is active at a
13530 time. */
13531 remote_state = new_remote_state ();
13532
13533 init_remote_ops ();
13534 add_target (&remote_ops);
13535
13536 init_extended_remote_ops ();
13537 add_target (&extended_remote_ops);
13538
13539 /* Hook into new objfile notification. */
13540 observer_attach_new_objfile (remote_new_objfile);
13541 /* We're no longer interested in notification events of an inferior
13542 when it exits. */
13543 observer_attach_inferior_exit (discard_pending_stop_replies);
13544
13545 #if 0
13546 init_remote_threadtests ();
13547 #endif
13548
13549 stop_reply_queue = QUEUE_alloc (stop_reply_p, stop_reply_xfree);
13550 /* set/show remote ... */
13551
13552 add_prefix_cmd ("remote", class_maintenance, set_remote_cmd, _("\
13553 Remote protocol specific variables\n\
13554 Configure various remote-protocol specific variables such as\n\
13555 the packets being used"),
13556 &remote_set_cmdlist, "set remote ",
13557 0 /* allow-unknown */, &setlist);
13558 add_prefix_cmd ("remote", class_maintenance, show_remote_cmd, _("\
13559 Remote protocol specific variables\n\
13560 Configure various remote-protocol specific variables such as\n\
13561 the packets being used"),
13562 &remote_show_cmdlist, "show remote ",
13563 0 /* allow-unknown */, &showlist);
13564
13565 add_cmd ("compare-sections", class_obscure, compare_sections_command, _("\
13566 Compare section data on target to the exec file.\n\
13567 Argument is a single section name (default: all loaded sections).\n\
13568 To compare only read-only loaded sections, specify the -r option."),
13569 &cmdlist);
13570
13571 add_cmd ("packet", class_maintenance, packet_command, _("\
13572 Send an arbitrary packet to a remote target.\n\
13573 maintenance packet TEXT\n\
13574 If GDB is talking to an inferior via the GDB serial protocol, then\n\
13575 this command sends the string TEXT to the inferior, and displays the\n\
13576 response packet. GDB supplies the initial `$' character, and the\n\
13577 terminating `#' character and checksum."),
13578 &maintenancelist);
13579
13580 add_setshow_boolean_cmd ("remotebreak", no_class, &remote_break, _("\
13581 Set whether to send break if interrupted."), _("\
13582 Show whether to send break if interrupted."), _("\
13583 If set, a break, instead of a cntrl-c, is sent to the remote target."),
13584 set_remotebreak, show_remotebreak,
13585 &setlist, &showlist);
13586 cmd_name = "remotebreak";
13587 cmd = lookup_cmd (&cmd_name, setlist, "", -1, 1);
13588 deprecate_cmd (cmd, "set remote interrupt-sequence");
13589 cmd_name = "remotebreak"; /* needed because lookup_cmd updates the pointer */
13590 cmd = lookup_cmd (&cmd_name, showlist, "", -1, 1);
13591 deprecate_cmd (cmd, "show remote interrupt-sequence");
13592
13593 add_setshow_enum_cmd ("interrupt-sequence", class_support,
13594 interrupt_sequence_modes, &interrupt_sequence_mode,
13595 _("\
13596 Set interrupt sequence to remote target."), _("\
13597 Show interrupt sequence to remote target."), _("\
13598 Valid value is \"Ctrl-C\", \"BREAK\" or \"BREAK-g\". The default is \"Ctrl-C\"."),
13599 NULL, show_interrupt_sequence,
13600 &remote_set_cmdlist,
13601 &remote_show_cmdlist);
13602
13603 add_setshow_boolean_cmd ("interrupt-on-connect", class_support,
13604 &interrupt_on_connect, _("\
13605 Set whether interrupt-sequence is sent to remote target when gdb connects to."), _(" \
13606 Show whether interrupt-sequence is sent to remote target when gdb connects to."), _(" \
13607 If set, interrupt sequence is sent to remote target."),
13608 NULL, NULL,
13609 &remote_set_cmdlist, &remote_show_cmdlist);
13610
13611 /* Install commands for configuring memory read/write packets. */
13612
13613 add_cmd ("remotewritesize", no_class, set_memory_write_packet_size, _("\
13614 Set the maximum number of bytes per memory write packet (deprecated)."),
13615 &setlist);
13616 add_cmd ("remotewritesize", no_class, show_memory_write_packet_size, _("\
13617 Show the maximum number of bytes per memory write packet (deprecated)."),
13618 &showlist);
13619 add_cmd ("memory-write-packet-size", no_class,
13620 set_memory_write_packet_size, _("\
13621 Set the maximum number of bytes per memory-write packet.\n\
13622 Specify the number of bytes in a packet or 0 (zero) for the\n\
13623 default packet size. The actual limit is further reduced\n\
13624 dependent on the target. Specify ``fixed'' to disable the\n\
13625 further restriction and ``limit'' to enable that restriction."),
13626 &remote_set_cmdlist);
13627 add_cmd ("memory-read-packet-size", no_class,
13628 set_memory_read_packet_size, _("\
13629 Set the maximum number of bytes per memory-read packet.\n\
13630 Specify the number of bytes in a packet or 0 (zero) for the\n\
13631 default packet size. The actual limit is further reduced\n\
13632 dependent on the target. Specify ``fixed'' to disable the\n\
13633 further restriction and ``limit'' to enable that restriction."),
13634 &remote_set_cmdlist);
13635 add_cmd ("memory-write-packet-size", no_class,
13636 show_memory_write_packet_size,
13637 _("Show the maximum number of bytes per memory-write packet."),
13638 &remote_show_cmdlist);
13639 add_cmd ("memory-read-packet-size", no_class,
13640 show_memory_read_packet_size,
13641 _("Show the maximum number of bytes per memory-read packet."),
13642 &remote_show_cmdlist);
13643
13644 add_setshow_zinteger_cmd ("hardware-watchpoint-limit", no_class,
13645 &remote_hw_watchpoint_limit, _("\
13646 Set the maximum number of target hardware watchpoints."), _("\
13647 Show the maximum number of target hardware watchpoints."), _("\
13648 Specify a negative limit for unlimited."),
13649 NULL, NULL, /* FIXME: i18n: The maximum
13650 number of target hardware
13651 watchpoints is %s. */
13652 &remote_set_cmdlist, &remote_show_cmdlist);
13653 add_setshow_zinteger_cmd ("hardware-watchpoint-length-limit", no_class,
13654 &remote_hw_watchpoint_length_limit, _("\
13655 Set the maximum length (in bytes) of a target hardware watchpoint."), _("\
13656 Show the maximum length (in bytes) of a target hardware watchpoint."), _("\
13657 Specify a negative limit for unlimited."),
13658 NULL, NULL, /* FIXME: i18n: The maximum
13659 length (in bytes) of a target
13660 hardware watchpoint is %s. */
13661 &remote_set_cmdlist, &remote_show_cmdlist);
13662 add_setshow_zinteger_cmd ("hardware-breakpoint-limit", no_class,
13663 &remote_hw_breakpoint_limit, _("\
13664 Set the maximum number of target hardware breakpoints."), _("\
13665 Show the maximum number of target hardware breakpoints."), _("\
13666 Specify a negative limit for unlimited."),
13667 NULL, NULL, /* FIXME: i18n: The maximum
13668 number of target hardware
13669 breakpoints is %s. */
13670 &remote_set_cmdlist, &remote_show_cmdlist);
13671
13672 add_setshow_zuinteger_cmd ("remoteaddresssize", class_obscure,
13673 &remote_address_size, _("\
13674 Set the maximum size of the address (in bits) in a memory packet."), _("\
13675 Show the maximum size of the address (in bits) in a memory packet."), NULL,
13676 NULL,
13677 NULL, /* FIXME: i18n: */
13678 &setlist, &showlist);
13679
13680 init_all_packet_configs ();
13681
13682 add_packet_config_cmd (&remote_protocol_packets[PACKET_X],
13683 "X", "binary-download", 1);
13684
13685 add_packet_config_cmd (&remote_protocol_packets[PACKET_vCont],
13686 "vCont", "verbose-resume", 0);
13687
13688 add_packet_config_cmd (&remote_protocol_packets[PACKET_QPassSignals],
13689 "QPassSignals", "pass-signals", 0);
13690
13691 add_packet_config_cmd (&remote_protocol_packets[PACKET_QCatchSyscalls],
13692 "QCatchSyscalls", "catch-syscalls", 0);
13693
13694 add_packet_config_cmd (&remote_protocol_packets[PACKET_QProgramSignals],
13695 "QProgramSignals", "program-signals", 0);
13696
13697 add_packet_config_cmd (&remote_protocol_packets[PACKET_qSymbol],
13698 "qSymbol", "symbol-lookup", 0);
13699
13700 add_packet_config_cmd (&remote_protocol_packets[PACKET_P],
13701 "P", "set-register", 1);
13702
13703 add_packet_config_cmd (&remote_protocol_packets[PACKET_p],
13704 "p", "fetch-register", 1);
13705
13706 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z0],
13707 "Z0", "software-breakpoint", 0);
13708
13709 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z1],
13710 "Z1", "hardware-breakpoint", 0);
13711
13712 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z2],
13713 "Z2", "write-watchpoint", 0);
13714
13715 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z3],
13716 "Z3", "read-watchpoint", 0);
13717
13718 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z4],
13719 "Z4", "access-watchpoint", 0);
13720
13721 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_auxv],
13722 "qXfer:auxv:read", "read-aux-vector", 0);
13723
13724 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_exec_file],
13725 "qXfer:exec-file:read", "pid-to-exec-file", 0);
13726
13727 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_features],
13728 "qXfer:features:read", "target-features", 0);
13729
13730 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_libraries],
13731 "qXfer:libraries:read", "library-info", 0);
13732
13733 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_libraries_svr4],
13734 "qXfer:libraries-svr4:read", "library-info-svr4", 0);
13735
13736 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_memory_map],
13737 "qXfer:memory-map:read", "memory-map", 0);
13738
13739 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_spu_read],
13740 "qXfer:spu:read", "read-spu-object", 0);
13741
13742 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_spu_write],
13743 "qXfer:spu:write", "write-spu-object", 0);
13744
13745 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_osdata],
13746 "qXfer:osdata:read", "osdata", 0);
13747
13748 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_threads],
13749 "qXfer:threads:read", "threads", 0);
13750
13751 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_siginfo_read],
13752 "qXfer:siginfo:read", "read-siginfo-object", 0);
13753
13754 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_siginfo_write],
13755 "qXfer:siginfo:write", "write-siginfo-object", 0);
13756
13757 add_packet_config_cmd
13758 (&remote_protocol_packets[PACKET_qXfer_traceframe_info],
13759 "qXfer:traceframe-info:read", "traceframe-info", 0);
13760
13761 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_uib],
13762 "qXfer:uib:read", "unwind-info-block", 0);
13763
13764 add_packet_config_cmd (&remote_protocol_packets[PACKET_qGetTLSAddr],
13765 "qGetTLSAddr", "get-thread-local-storage-address",
13766 0);
13767
13768 add_packet_config_cmd (&remote_protocol_packets[PACKET_qGetTIBAddr],
13769 "qGetTIBAddr", "get-thread-information-block-address",
13770 0);
13771
13772 add_packet_config_cmd (&remote_protocol_packets[PACKET_bc],
13773 "bc", "reverse-continue", 0);
13774
13775 add_packet_config_cmd (&remote_protocol_packets[PACKET_bs],
13776 "bs", "reverse-step", 0);
13777
13778 add_packet_config_cmd (&remote_protocol_packets[PACKET_qSupported],
13779 "qSupported", "supported-packets", 0);
13780
13781 add_packet_config_cmd (&remote_protocol_packets[PACKET_qSearch_memory],
13782 "qSearch:memory", "search-memory", 0);
13783
13784 add_packet_config_cmd (&remote_protocol_packets[PACKET_qTStatus],
13785 "qTStatus", "trace-status", 0);
13786
13787 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_setfs],
13788 "vFile:setfs", "hostio-setfs", 0);
13789
13790 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_open],
13791 "vFile:open", "hostio-open", 0);
13792
13793 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_pread],
13794 "vFile:pread", "hostio-pread", 0);
13795
13796 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_pwrite],
13797 "vFile:pwrite", "hostio-pwrite", 0);
13798
13799 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_close],
13800 "vFile:close", "hostio-close", 0);
13801
13802 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_unlink],
13803 "vFile:unlink", "hostio-unlink", 0);
13804
13805 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_readlink],
13806 "vFile:readlink", "hostio-readlink", 0);
13807
13808 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_fstat],
13809 "vFile:fstat", "hostio-fstat", 0);
13810
13811 add_packet_config_cmd (&remote_protocol_packets[PACKET_vAttach],
13812 "vAttach", "attach", 0);
13813
13814 add_packet_config_cmd (&remote_protocol_packets[PACKET_vRun],
13815 "vRun", "run", 0);
13816
13817 add_packet_config_cmd (&remote_protocol_packets[PACKET_QStartNoAckMode],
13818 "QStartNoAckMode", "noack", 0);
13819
13820 add_packet_config_cmd (&remote_protocol_packets[PACKET_vKill],
13821 "vKill", "kill", 0);
13822
13823 add_packet_config_cmd (&remote_protocol_packets[PACKET_qAttached],
13824 "qAttached", "query-attached", 0);
13825
13826 add_packet_config_cmd (&remote_protocol_packets[PACKET_ConditionalTracepoints],
13827 "ConditionalTracepoints",
13828 "conditional-tracepoints", 0);
13829
13830 add_packet_config_cmd (&remote_protocol_packets[PACKET_ConditionalBreakpoints],
13831 "ConditionalBreakpoints",
13832 "conditional-breakpoints", 0);
13833
13834 add_packet_config_cmd (&remote_protocol_packets[PACKET_BreakpointCommands],
13835 "BreakpointCommands",
13836 "breakpoint-commands", 0);
13837
13838 add_packet_config_cmd (&remote_protocol_packets[PACKET_FastTracepoints],
13839 "FastTracepoints", "fast-tracepoints", 0);
13840
13841 add_packet_config_cmd (&remote_protocol_packets[PACKET_TracepointSource],
13842 "TracepointSource", "TracepointSource", 0);
13843
13844 add_packet_config_cmd (&remote_protocol_packets[PACKET_QAllow],
13845 "QAllow", "allow", 0);
13846
13847 add_packet_config_cmd (&remote_protocol_packets[PACKET_StaticTracepoints],
13848 "StaticTracepoints", "static-tracepoints", 0);
13849
13850 add_packet_config_cmd (&remote_protocol_packets[PACKET_InstallInTrace],
13851 "InstallInTrace", "install-in-trace", 0);
13852
13853 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_statictrace_read],
13854 "qXfer:statictrace:read", "read-sdata-object", 0);
13855
13856 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_fdpic],
13857 "qXfer:fdpic:read", "read-fdpic-loadmap", 0);
13858
13859 add_packet_config_cmd (&remote_protocol_packets[PACKET_QDisableRandomization],
13860 "QDisableRandomization", "disable-randomization", 0);
13861
13862 add_packet_config_cmd (&remote_protocol_packets[PACKET_QAgent],
13863 "QAgent", "agent", 0);
13864
13865 add_packet_config_cmd (&remote_protocol_packets[PACKET_QTBuffer_size],
13866 "QTBuffer:size", "trace-buffer-size", 0);
13867
13868 add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_off],
13869 "Qbtrace:off", "disable-btrace", 0);
13870
13871 add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_bts],
13872 "Qbtrace:bts", "enable-btrace-bts", 0);
13873
13874 add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_pt],
13875 "Qbtrace:pt", "enable-btrace-pt", 0);
13876
13877 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_btrace],
13878 "qXfer:btrace", "read-btrace", 0);
13879
13880 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_btrace_conf],
13881 "qXfer:btrace-conf", "read-btrace-conf", 0);
13882
13883 add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_conf_bts_size],
13884 "Qbtrace-conf:bts:size", "btrace-conf-bts-size", 0);
13885
13886 add_packet_config_cmd (&remote_protocol_packets[PACKET_multiprocess_feature],
13887 "multiprocess-feature", "multiprocess-feature", 0);
13888
13889 add_packet_config_cmd (&remote_protocol_packets[PACKET_swbreak_feature],
13890 "swbreak-feature", "swbreak-feature", 0);
13891
13892 add_packet_config_cmd (&remote_protocol_packets[PACKET_hwbreak_feature],
13893 "hwbreak-feature", "hwbreak-feature", 0);
13894
13895 add_packet_config_cmd (&remote_protocol_packets[PACKET_fork_event_feature],
13896 "fork-event-feature", "fork-event-feature", 0);
13897
13898 add_packet_config_cmd (&remote_protocol_packets[PACKET_vfork_event_feature],
13899 "vfork-event-feature", "vfork-event-feature", 0);
13900
13901 add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_conf_pt_size],
13902 "Qbtrace-conf:pt:size", "btrace-conf-pt-size", 0);
13903
13904 add_packet_config_cmd (&remote_protocol_packets[PACKET_vContSupported],
13905 "vContSupported", "verbose-resume-supported", 0);
13906
13907 add_packet_config_cmd (&remote_protocol_packets[PACKET_exec_event_feature],
13908 "exec-event-feature", "exec-event-feature", 0);
13909
13910 add_packet_config_cmd (&remote_protocol_packets[PACKET_vCtrlC],
13911 "vCtrlC", "ctrl-c", 0);
13912
13913 add_packet_config_cmd (&remote_protocol_packets[PACKET_QThreadEvents],
13914 "QThreadEvents", "thread-events", 0);
13915
13916 add_packet_config_cmd (&remote_protocol_packets[PACKET_no_resumed],
13917 "N stop reply", "no-resumed-stop-reply", 0);
13918
13919 /* Assert that we've registered "set remote foo-packet" commands
13920 for all packet configs. */
13921 {
13922 int i;
13923
13924 for (i = 0; i < PACKET_MAX; i++)
13925 {
13926 /* Ideally all configs would have a command associated. Some
13927 still don't though. */
13928 int excepted;
13929
13930 switch (i)
13931 {
13932 case PACKET_QNonStop:
13933 case PACKET_EnableDisableTracepoints_feature:
13934 case PACKET_tracenz_feature:
13935 case PACKET_DisconnectedTracing_feature:
13936 case PACKET_augmented_libraries_svr4_read_feature:
13937 case PACKET_qCRC:
13938 /* Additions to this list need to be well justified:
13939 pre-existing packets are OK; new packets are not. */
13940 excepted = 1;
13941 break;
13942 default:
13943 excepted = 0;
13944 break;
13945 }
13946
13947 /* This catches both forgetting to add a config command, and
13948 forgetting to remove a packet from the exception list. */
13949 gdb_assert (excepted == (remote_protocol_packets[i].name == NULL));
13950 }
13951 }
13952
13953 /* Keep the old ``set remote Z-packet ...'' working. Each individual
13954 Z sub-packet has its own set and show commands, but users may
13955 have sets to this variable in their .gdbinit files (or in their
13956 documentation). */
13957 add_setshow_auto_boolean_cmd ("Z-packet", class_obscure,
13958 &remote_Z_packet_detect, _("\
13959 Set use of remote protocol `Z' packets"), _("\
13960 Show use of remote protocol `Z' packets "), _("\
13961 When set, GDB will attempt to use the remote breakpoint and watchpoint\n\
13962 packets."),
13963 set_remote_protocol_Z_packet_cmd,
13964 show_remote_protocol_Z_packet_cmd,
13965 /* FIXME: i18n: Use of remote protocol
13966 `Z' packets is %s. */
13967 &remote_set_cmdlist, &remote_show_cmdlist);
13968
13969 add_prefix_cmd ("remote", class_files, remote_command, _("\
13970 Manipulate files on the remote system\n\
13971 Transfer files to and from the remote target system."),
13972 &remote_cmdlist, "remote ",
13973 0 /* allow-unknown */, &cmdlist);
13974
13975 add_cmd ("put", class_files, remote_put_command,
13976 _("Copy a local file to the remote system."),
13977 &remote_cmdlist);
13978
13979 add_cmd ("get", class_files, remote_get_command,
13980 _("Copy a remote file to the local system."),
13981 &remote_cmdlist);
13982
13983 add_cmd ("delete", class_files, remote_delete_command,
13984 _("Delete a remote file."),
13985 &remote_cmdlist);
13986
13987 add_setshow_string_noescape_cmd ("exec-file", class_files,
13988 &remote_exec_file_var, _("\
13989 Set the remote pathname for \"run\""), _("\
13990 Show the remote pathname for \"run\""), NULL,
13991 set_remote_exec_file,
13992 show_remote_exec_file,
13993 &remote_set_cmdlist,
13994 &remote_show_cmdlist);
13995
13996 add_setshow_boolean_cmd ("range-stepping", class_run,
13997 &use_range_stepping, _("\
13998 Enable or disable range stepping."), _("\
13999 Show whether target-assisted range stepping is enabled."), _("\
14000 If on, and the target supports it, when stepping a source line, GDB\n\
14001 tells the target to step the corresponding range of addresses itself instead\n\
14002 of issuing multiple single-steps. This speeds up source level\n\
14003 stepping. If off, GDB always issues single-steps, even if range\n\
14004 stepping is supported by the target. The default is on."),
14005 set_range_stepping,
14006 show_range_stepping,
14007 &setlist,
14008 &showlist);
14009
14010 /* Eventually initialize fileio. See fileio.c */
14011 initialize_remote_fileio (remote_set_cmdlist, remote_show_cmdlist);
14012
14013 /* Take advantage of the fact that the TID field is not used, to tag
14014 special ptids with it set to != 0. */
14015 magic_null_ptid = ptid_build (42000, -1, 1);
14016 not_sent_ptid = ptid_build (42000, -2, 1);
14017 any_thread_ptid = ptid_build (42000, 0, 1);
14018
14019 target_buf_size = 2048;
14020 target_buf = (char *) xmalloc (target_buf_size);
14021 }
14022