Introduce and use ui_out_emit_table
[deliverable/binutils-gdb.git] / gdb / remote.c
CommitLineData
c906108c 1/* Remote target communications for serial-line targets in custom GDB protocol
8926118c 2
61baf725 3 Copyright (C) 1988-2017 Free Software Foundation, Inc.
c906108c 4
c5aa993b
JM
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
a9762ec7 9 the Free Software Foundation; either version 3 of the License, or
c5aa993b
JM
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
a9762ec7 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
c5aa993b 19
23860348 20/* See the GDB User Guide for details of the GDB remote protocol. */
c5aa993b 21
c906108c 22#include "defs.h"
c906108c
SS
23#include <ctype.h>
24#include <fcntl.h>
c906108c 25#include "inferior.h"
45741a9c 26#include "infrun.h"
c906108c
SS
27#include "bfd.h"
28#include "symfile.h"
29#include "target.h"
c5aa993b 30/*#include "terminal.h" */
c906108c
SS
31#include "gdbcmd.h"
32#include "objfiles.h"
33#include "gdb-stabs.h"
34#include "gdbthread.h"
c2c6d25f 35#include "remote.h"
722247f1 36#include "remote-notif.h"
4e052eda 37#include "regcache.h"
fd0407d6 38#include "value.h"
6867ae3e 39#include "observer.h"
a77053c2 40#include "solib.h"
37a105a1
DJ
41#include "cli/cli-decode.h"
42#include "cli/cli-setshow.h"
424163ea 43#include "target-descriptions.h"
a4453b7e 44#include "gdb_bfd.h"
614c279d 45#include "filestuff.h"
9c3d6531 46#include "rsp-low.h"
6b940e6a 47#include "disasm.h"
f00aae0f 48#include "location.h"
c906108c 49
438e1e42 50#include "gdb_sys_time.h"
c906108c 51
43ff13b4 52#include "event-loop.h"
c2c6d25f 53#include "event-top.h"
2acceee2 54#include "inf-loop.h"
43ff13b4 55
c906108c
SS
56#include <signal.h>
57#include "serial.h"
58
6240bebf
MS
59#include "gdbcore.h" /* for exec_bfd */
60
449092f6 61#include "remote-fileio.h"
a6b151f1 62#include "gdb/fileio.h"
53ce3c39 63#include <sys/stat.h>
dc146f7c 64#include "xml-support.h"
449092f6 65
fd79ecee
DJ
66#include "memory-map.h"
67
35b1e5cc
SS
68#include "tracepoint.h"
69#include "ax.h"
70#include "ax-gdb.h"
d1feda86 71#include "agent.h"
9accd112 72#include "btrace.h"
c0272db5 73#include "record-btrace.h"
325fac50 74#include <algorithm>
35b1e5cc 75
0df8b418 76/* Temp hacks for tracepoint encoding migration. */
35b1e5cc
SS
77static char *target_buf;
78static long target_buf_size;
35b1e5cc 79
94585166
DB
80/* Per-program-space data key. */
81static 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. */
87static char *remote_exec_file_var;
88
6765f3e5
DJ
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. */
99enum { REMOTE_ALIGN_WRITES = 16 };
100
23860348 101/* Prototypes for local functions. */
6d820c5c 102static int getpkt_sane (char **buf, long *sizeof_buf, int forever);
74531fed 103static int getpkt_or_notif_sane (char **buf, long *sizeof_buf,
fee9eda9 104 int forever, int *is_notif);
6426a772 105
a14ed312 106static void remote_files_info (struct target_ops *ignore);
c906108c 107
f32dbf8c
MM
108static void remote_prepare_to_store (struct target_ops *self,
109 struct regcache *regcache);
c906108c 110
014f9477
TT
111static void remote_open_1 (const char *, int, struct target_ops *,
112 int extended_p);
c906108c 113
de90e03d 114static void remote_close (struct target_ops *self);
c906108c 115
cbb8991c
DB
116struct remote_state;
117
118static int remote_vkill (int pid, struct remote_state *rs);
119
8020350c
DB
120static void remote_kill_k (void);
121
136d6dae 122static void remote_mourn (struct target_ops *ops);
c906108c 123
a14ed312 124static void extended_remote_restart (void);
c906108c 125
6d820c5c 126static void remote_send (char **buf, long *sizeof_buf_p);
c906108c 127
a14ed312 128static int readchar (int timeout);
c906108c 129
c33e31fd
PA
130static void remote_serial_write (const char *str, int len);
131
7d85a9c0 132static void remote_kill (struct target_ops *ops);
c906108c 133
6a109b6b 134static int remote_can_async_p (struct target_ops *);
75c99385 135
6a109b6b 136static int remote_is_async_p (struct target_ops *);
75c99385 137
6a3753b3 138static void remote_async (struct target_ops *ops, int enable);
75c99385 139
65706a29
PA
140static void remote_thread_events (struct target_ops *ops, int enable);
141
a14ed312 142static void interrupt_query (void);
c906108c 143
d62a8ae2
SM
144static void set_general_thread (ptid_t ptid);
145static void set_continue_thread (ptid_t ptid);
c906108c 146
a14ed312 147static void get_offsets (void);
c906108c 148
6d820c5c
DJ
149static void skip_frame (void);
150
151static long read_frame (char **buf_p, long *sizeof_buf);
c906108c 152
a14ed312 153static int hexnumlen (ULONGEST num);
c906108c 154
a14ed312 155static void init_remote_ops (void);
c906108c 156
a14ed312 157static void init_extended_remote_ops (void);
c906108c 158
1eab8a48 159static void remote_stop (struct target_ops *self, ptid_t);
c906108c 160
a14ed312 161static int stubhex (int ch);
c906108c 162
a14ed312 163static int hexnumstr (char *, ULONGEST);
c906108c 164
a14ed312 165static int hexnumnstr (char *, ULONGEST, int);
2df3850c 166
a14ed312 167static CORE_ADDR remote_address_masked (CORE_ADDR);
c906108c 168
baa336ce 169static void print_packet (const char *);
c906108c 170
a14ed312 171static void compare_sections_command (char *, int);
c906108c 172
a14ed312 173static void packet_command (char *, int);
c906108c 174
a14ed312 175static int stub_unpack_int (char *buff, int fieldlength);
c906108c 176
39f77062 177static ptid_t remote_current_thread (ptid_t oldptid);
c906108c 178
baa336ce 179static int putpkt_binary (const char *buf, int cnt);
c906108c 180
a14ed312 181static void check_binary_download (CORE_ADDR addr);
c906108c 182
5a2468f5 183struct packet_config;
5a2468f5 184
a14ed312 185static void show_packet_config_cmd (struct packet_config *config);
5a2468f5 186
bb572ddd
DJ
187static 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
82f73884
PA
192static char *write_ptid (char *buf, const char *endbuf, ptid_t ptid);
193static ptid_t read_ptid (char *buf, char **obuf);
194
c378d69d 195static void remote_set_permissions (struct target_ops *self);
d914c394 196
8bd200f1
TT
197static int remote_get_trace_status (struct target_ops *self,
198 struct trace_status *ts);
d5551862 199
ab6617cc
TT
200static int remote_upload_tracepoints (struct target_ops *self,
201 struct uploaded_tp **utpp);
00bf0b85 202
181e3713
TT
203static int remote_upload_trace_state_variables (struct target_ops *self,
204 struct uploaded_tsv **utsvp);
00bf0b85 205
c8d104ad
PA
206static void remote_query_supported (void);
207
36d25514 208static void remote_check_symbols (void);
c8d104ad 209
a14ed312 210void _initialize_remote (void);
c906108c 211
74531fed 212struct stop_reply;
74531fed 213static void stop_reply_xfree (struct stop_reply *);
722247f1 214static void remote_parse_stop_reply (char *, struct stop_reply *);
74531fed 215static void push_stop_reply (struct stop_reply *);
bcc75809 216static void discard_pending_stop_replies_in_queue (struct remote_state *);
74531fed
PA
217static int peek_stop_reply (ptid_t ptid);
218
cbb8991c
DB
219struct threads_listing_context;
220static void remove_new_fork_children (struct threads_listing_context *);
221
74531fed 222static void remote_async_inferior_event_handler (gdb_client_data);
74531fed 223
e3594fd1 224static void remote_terminal_ours (struct target_ops *self);
d3fd5342 225
d962ef82
DJ
226static int remote_read_description_p (struct target_ops *target);
227
176a6961 228static void remote_console_output (char *msg);
dde08ee1 229
efcc2da7 230static int remote_supports_cond_breakpoints (struct target_ops *self);
b775012e 231
78eff0ec 232static int remote_can_run_breakpoint_commands (struct target_ops *self);
d3ce09f5 233
f4abbc16
MM
234static void remote_btrace_reset (void);
235
c0272db5
TW
236static void remote_btrace_maybe_reopen (void);
237
221e1a37
PA
238static int stop_reply_queue_length (void);
239
80152258
PA
240static void readahead_cache_invalidate (void);
241
048094ac
PA
242static void remote_unpush_and_throw (void);
243
a6b151f1
DJ
244/* For "remote". */
245
246static struct cmd_list_element *remote_cmdlist;
247
bb572ddd
DJ
248/* For "set remote" and "show remote". */
249
250static struct cmd_list_element *remote_set_cmdlist;
251static struct cmd_list_element *remote_show_cmdlist;
252
d458bd84
PA
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
258struct vCont_action_support
259{
260 /* vCont;t */
261 int t;
c1e36e3e
PA
262
263 /* vCont;r */
264 int r;
750ce8d1
YQ
265
266 /* vCont;s */
267 int s;
268
269 /* vCont;S */
270 int S;
d458bd84
PA
271};
272
c1e36e3e
PA
273/* Controls whether GDB is willing to use range stepping. */
274
275static int use_range_stepping = 1;
276
0d031856
TT
277#define OPAQUETHREADBYTES 8
278
279/* a 64 bit opaque identifier */
280typedef unsigned char threadref[OPAQUETHREADBYTES];
281
282/* About this many threadisds fit in a packet. */
283
284#define MAXTHREADLISTRESULTS 32
285
6f8976bf
YQ
286/* The max number of chars in debug output. The rest of chars are
287 omitted. */
288
289#define REMOTE_DEBUG_MAX_CHAR 512
290
80152258
PA
291/* Data for the vFile:pread readahead cache. */
292
293struct readahead_cache
294{
295 /* The file descriptor for the file that is being cached. -1 if the
296 cache is invalid. */
297 int fd;
298
299 /* The offset into the file that the cache buffer corresponds
300 to. */
301 ULONGEST offset;
302
303 /* The buffer holding the cache contents. */
304 gdb_byte *buf;
305 /* The buffer's size. We try to read as much as fits into a packet
306 at a time. */
307 size_t bufsize;
308
309 /* Cache hit and miss counters. */
310 ULONGEST hit_count;
311 ULONGEST miss_count;
312};
313
ea9c271d
DJ
314/* Description of the remote protocol state for the currently
315 connected target. This is per-target state, and independent of the
316 selected architecture. */
317
318struct remote_state
319{
320 /* A buffer to use for incoming packets, and its current size. The
321 buffer is grown dynamically for larger incoming packets.
322 Outgoing packets may also be constructed in this buffer.
323 BUF_SIZE is always at least REMOTE_PACKET_SIZE;
324 REMOTE_PACKET_SIZE should be used to limit the length of outgoing
325 packets. */
326 char *buf;
327 long buf_size;
be2a5f71 328
1e51243a
PA
329 /* True if we're going through initial connection setup (finding out
330 about the remote side's threads, relocating symbols, etc.). */
331 int starting_up;
332
be2a5f71
DJ
333 /* If we negotiated packet size explicitly (and thus can bypass
334 heuristics for the largest packet size that will not overflow
335 a buffer in the stub), this will be set to that packet size.
336 Otherwise zero, meaning to use the guessed size. */
337 long explicit_packet_size;
2d717e4f
DJ
338
339 /* remote_wait is normally called when the target is running and
340 waits for a stop reply packet. But sometimes we need to call it
341 when the target is already stopped. We can send a "?" packet
342 and have remote_wait read the response. Or, if we already have
343 the response, we can stash it in BUF and tell remote_wait to
344 skip calling getpkt. This flag is set when BUF contains a
345 stop reply packet and the target is not waiting. */
346 int cached_wait_status;
a6f3e723
SL
347
348 /* True, if in no ack mode. That is, neither GDB nor the stub will
349 expect acks from each other. The connection is assumed to be
350 reliable. */
351 int noack_mode;
82f73884
PA
352
353 /* True if we're connected in extended remote mode. */
354 int extended;
355
e24a49d8
PA
356 /* True if we resumed the target and we're waiting for the target to
357 stop. In the mean time, we can't start another command/query.
358 The remote server wouldn't be ready to process it, so we'd
359 timeout waiting for a reply that would never come and eventually
360 we'd close the connection. This can happen in asynchronous mode
361 because we allow GDB commands while the target is running. */
362 int waiting_for_stop_reply;
74531fed 363
d458bd84
PA
364 /* The status of the stub support for the various vCont actions. */
365 struct vCont_action_support supports_vCont;
782b2b07 366
3a29589a
DJ
367 /* Nonzero if the user has pressed Ctrl-C, but the target hasn't
368 responded to that. */
369 int ctrlc_pending_p;
5d93a237 370
048094ac
PA
371 /* True if we saw a Ctrl-C while reading or writing from/to the
372 remote descriptor. At that point it is not safe to send a remote
373 interrupt packet, so we instead remember we saw the Ctrl-C and
374 process it once we're done with sending/receiving the current
375 packet, which should be shortly. If however that takes too long,
376 and the user presses Ctrl-C again, we offer to disconnect. */
377 int got_ctrlc_during_io;
378
5d93a237
TT
379 /* Descriptor for I/O to remote machine. Initialize it to NULL so that
380 remote_open knows that we don't have a file open when the program
381 starts. */
382 struct serial *remote_desc;
47f8a51d
TT
383
384 /* These are the threads which we last sent to the remote system. The
385 TID member will be -1 for all or -2 for not sent yet. */
386 ptid_t general_thread;
387 ptid_t continue_thread;
262e1174
TT
388
389 /* This is the traceframe which we last selected on the remote system.
390 It will be -1 if no traceframe is selected. */
391 int remote_traceframe_number;
747dc59d
TT
392
393 char *last_pass_packet;
5e4a05c4
TT
394
395 /* The last QProgramSignals packet sent to the target. We bypass
396 sending a new program signals list down to the target if the new
397 packet is exactly the same as the last we sent. IOW, we only let
398 the target know about program signals list changes. */
399 char *last_program_signals_packet;
b73be471
TT
400
401 enum gdb_signal last_sent_signal;
280ceea3
TT
402
403 int last_sent_step;
8e88304f 404
3a00c802
PA
405 /* The execution direction of the last resume we got. */
406 enum exec_direction_kind last_resume_exec_dir;
407
8e88304f
TT
408 char *finished_object;
409 char *finished_annex;
410 ULONGEST finished_offset;
b80fafe3
TT
411
412 /* Should we try the 'ThreadInfo' query packet?
413
414 This variable (NOT available to the user: auto-detect only!)
415 determines whether GDB will use the new, simpler "ThreadInfo"
416 query or the older, more complex syntax for thread queries.
417 This is an auto-detect variable (set to true at each connect,
418 and set to false when the target fails to recognize it). */
419 int use_threadinfo_query;
420 int use_threadextra_query;
88b496c3 421
0d031856
TT
422 threadref echo_nextthread;
423 threadref nextthread;
424 threadref resultthreadlist[MAXTHREADLISTRESULTS];
5965e028
YQ
425
426 /* The state of remote notification. */
427 struct remote_notif_state *notif_state;
f4abbc16
MM
428
429 /* The branch trace configuration. */
430 struct btrace_config btrace_config;
15a201c8
GB
431
432 /* The argument to the last "vFile:setfs:" packet we sent, used
433 to avoid sending repeated unnecessary "vFile:setfs:" packets.
434 Initialized to -1 to indicate that no "vFile:setfs:" packet
435 has yet been sent. */
436 int fs_pid;
80152258
PA
437
438 /* A readahead cache for vFile:pread. Often, reading a binary
439 involves a sequence of small reads. E.g., when parsing an ELF
440 file. A readahead cache helps mostly the case of remote
441 debugging on a connection with higher latency, due to the
442 request/reply nature of the RSP. We only cache data for a single
443 file descriptor at a time. */
444 struct readahead_cache readahead_cache;
ea9c271d
DJ
445};
446
dc146f7c
VP
447/* Private data that we'll store in (struct thread_info)->private. */
448struct private_thread_info
449{
450 char *extra;
79efa585 451 char *name;
dc146f7c 452 int core;
799a2abe
PA
453
454 /* Whether the target stopped for a breakpoint/watchpoint. */
455 enum target_stop_reason stop_reason;
456
457 /* This is set to the data address of the access causing the target
458 to stop for a watchpoint. */
459 CORE_ADDR watch_data_address;
85ad3aaf
PA
460
461 /* Fields used by the vCont action coalescing implemented in
462 remote_resume / remote_commit_resume. remote_resume stores each
463 thread's last resume request in these fields, so that a later
464 remote_commit_resume knows which is the proper action for this
465 thread to include in the vCont packet. */
466
467 /* True if the last target_resume call for this thread was a step
468 request, false if a continue request. */
469 int last_resume_step;
470
471 /* The signal specified in the last target_resume call for this
472 thread. */
473 enum gdb_signal last_resume_sig;
474
475 /* Whether this thread was already vCont-resumed on the remote
476 side. */
477 int vcont_resumed;
dc146f7c
VP
478};
479
480static void
481free_private_thread_info (struct private_thread_info *info)
482{
483 xfree (info->extra);
79efa585 484 xfree (info->name);
dc146f7c
VP
485 xfree (info);
486}
487
ea9c271d
DJ
488/* This data could be associated with a target, but we do not always
489 have access to the current target when we need it, so for now it is
490 static. This will be fine for as long as only one target is in use
491 at a time. */
cf792862 492static struct remote_state *remote_state;
ea9c271d
DJ
493
494static struct remote_state *
0b83947e 495get_remote_state_raw (void)
ea9c271d 496{
cf792862
TT
497 return remote_state;
498}
499
500/* Allocate a new struct remote_state with xmalloc, initialize it, and
501 return it. */
502
503static struct remote_state *
504new_remote_state (void)
505{
506 struct remote_state *result = XCNEW (struct remote_state);
507
508 /* The default buffer size is unimportant; it will be expanded
509 whenever a larger buffer is needed. */
510 result->buf_size = 400;
224c3ddb 511 result->buf = (char *) xmalloc (result->buf_size);
262e1174 512 result->remote_traceframe_number = -1;
b73be471 513 result->last_sent_signal = GDB_SIGNAL_0;
3a00c802 514 result->last_resume_exec_dir = EXEC_FORWARD;
15a201c8 515 result->fs_pid = -1;
cf792862
TT
516
517 return result;
ea9c271d
DJ
518}
519
520/* Description of the remote protocol for a given architecture. */
d01949b6 521
ad10f812
AC
522struct packet_reg
523{
524 long offset; /* Offset into G packet. */
525 long regnum; /* GDB's internal register number. */
526 LONGEST pnum; /* Remote protocol register number. */
b323314b 527 int in_g_packet; /* Always part of G packet. */
f5656ead 528 /* long size in bytes; == register_size (target_gdbarch (), regnum);
23860348 529 at present. */
f5656ead 530 /* char *name; == gdbarch_register_name (target_gdbarch (), regnum);
c9f4d572 531 at present. */
ad10f812
AC
532};
533
ea9c271d 534struct remote_arch_state
d01949b6 535{
ad10f812
AC
536 /* Description of the remote protocol registers. */
537 long sizeof_g_packet;
b323314b
AC
538
539 /* Description of the remote protocol registers indexed by REGNUM
f57d151a 540 (making an array gdbarch_num_regs in size). */
b323314b 541 struct packet_reg *regs;
ad10f812 542
d01949b6
AC
543 /* This is the size (in chars) of the first response to the ``g''
544 packet. It is used as a heuristic when determining the maximum
545 size of memory-read and memory-write packets. A target will
546 typically only reserve a buffer large enough to hold the ``g''
547 packet. The size does not include packet overhead (headers and
23860348 548 trailers). */
d01949b6
AC
549 long actual_register_packet_size;
550
551 /* This is the maximum size (in chars) of a non read/write packet.
23860348 552 It is also used as a cap on the size of read/write packets. */
d01949b6
AC
553 long remote_packet_size;
554};
555
35b1e5cc
SS
556/* Utility: generate error from an incoming stub packet. */
557static void
558trace_error (char *buf)
559{
560 if (*buf++ != 'E')
561 return; /* not an error msg */
562 switch (*buf)
563 {
564 case '1': /* malformed packet error */
565 if (*++buf == '0') /* general case: */
566 error (_("remote.c: error in outgoing packet."));
567 else
568 error (_("remote.c: error in outgoing packet at field #%ld."),
569 strtol (buf, NULL, 16));
35b1e5cc
SS
570 default:
571 error (_("Target returns error code '%s'."), buf);
572 }
573}
574
575/* Utility: wait for reply from stub, while accepting "O" packets. */
576static char *
577remote_get_noisy_reply (char **buf_p,
578 long *sizeof_buf)
579{
580 do /* Loop on reply from remote stub. */
581 {
582 char *buf;
a744cf53 583
0df8b418 584 QUIT; /* Allow user to bail out with ^C. */
35b1e5cc
SS
585 getpkt (buf_p, sizeof_buf, 0);
586 buf = *buf_p;
ad91cd99 587 if (buf[0] == 'E')
35b1e5cc 588 trace_error (buf);
61012eef 589 else if (startswith (buf, "qRelocInsn:"))
dde08ee1
PA
590 {
591 ULONGEST ul;
592 CORE_ADDR from, to, org_to;
593 char *p, *pp;
594 int adjusted_size = 0;
7556d4a4 595 int relocated = 0;
dde08ee1
PA
596
597 p = buf + strlen ("qRelocInsn:");
598 pp = unpack_varlen_hex (p, &ul);
599 if (*pp != ';')
cb91c06a 600 error (_("invalid qRelocInsn packet: %s"), buf);
dde08ee1
PA
601 from = ul;
602
603 p = pp + 1;
a9cbf802 604 unpack_varlen_hex (p, &ul);
dde08ee1
PA
605 to = ul;
606
607 org_to = to;
608
492d29ea 609 TRY
dde08ee1 610 {
f5656ead 611 gdbarch_relocate_instruction (target_gdbarch (), &to, from);
7556d4a4 612 relocated = 1;
dde08ee1 613 }
492d29ea 614 CATCH (ex, RETURN_MASK_ALL)
7556d4a4
PA
615 {
616 if (ex.error == MEMORY_ERROR)
617 {
618 /* Propagate memory errors silently back to the
619 target. The stub may have limited the range of
620 addresses we can write to, for example. */
621 }
622 else
623 {
624 /* Something unexpectedly bad happened. Be verbose
625 so we can tell what, and propagate the error back
626 to the stub, so it doesn't get stuck waiting for
627 a response. */
628 exception_fprintf (gdb_stderr, ex,
629 _("warning: relocating instruction: "));
630 }
631 putpkt ("E01");
632 }
492d29ea 633 END_CATCH
7556d4a4
PA
634
635 if (relocated)
dde08ee1
PA
636 {
637 adjusted_size = to - org_to;
638
bba74b36 639 xsnprintf (buf, *sizeof_buf, "qRelocInsn:%x", adjusted_size);
dde08ee1
PA
640 putpkt (buf);
641 }
dde08ee1 642 }
ad91cd99 643 else if (buf[0] == 'O' && buf[1] != 'K')
35b1e5cc
SS
644 remote_console_output (buf + 1); /* 'O' message from stub */
645 else
0df8b418 646 return buf; /* Here's the actual reply. */
35b1e5cc
SS
647 }
648 while (1);
649}
3c3bea1c 650
d01949b6
AC
651/* Handle for retreving the remote protocol data from gdbarch. */
652static struct gdbarch_data *remote_gdbarch_data_handle;
653
ea9c271d
DJ
654static struct remote_arch_state *
655get_remote_arch_state (void)
d01949b6 656{
17d8546e 657 gdb_assert (target_gdbarch () != NULL);
19ba03f4
SM
658 return ((struct remote_arch_state *)
659 gdbarch_data (target_gdbarch (), remote_gdbarch_data_handle));
d01949b6
AC
660}
661
0b83947e
DJ
662/* Fetch the global remote target state. */
663
664static struct remote_state *
665get_remote_state (void)
666{
667 /* Make sure that the remote architecture state has been
668 initialized, because doing so might reallocate rs->buf. Any
669 function which calls getpkt also needs to be mindful of changes
670 to rs->buf, but this call limits the number of places which run
671 into trouble. */
672 get_remote_arch_state ();
673
674 return get_remote_state_raw ();
675}
676
94585166
DB
677/* Cleanup routine for the remote module's pspace data. */
678
679static void
680remote_pspace_data_cleanup (struct program_space *pspace, void *arg)
681{
19ba03f4 682 char *remote_exec_file = (char *) arg;
94585166
DB
683
684 xfree (remote_exec_file);
685}
686
687/* Fetch the remote exec-file from the current program space. */
688
689static const char *
690get_remote_exec_file (void)
691{
692 char *remote_exec_file;
693
19ba03f4
SM
694 remote_exec_file
695 = (char *) program_space_data (current_program_space,
696 remote_pspace_data);
94585166
DB
697 if (remote_exec_file == NULL)
698 return "";
699
700 return remote_exec_file;
701}
702
703/* Set the remote exec file for PSPACE. */
704
705static void
706set_pspace_remote_exec_file (struct program_space *pspace,
707 char *remote_exec_file)
708{
19ba03f4 709 char *old_file = (char *) program_space_data (pspace, remote_pspace_data);
94585166
DB
710
711 xfree (old_file);
712 set_program_space_data (pspace, remote_pspace_data,
713 xstrdup (remote_exec_file));
714}
715
716/* The "set/show remote exec-file" set command hook. */
717
718static void
719set_remote_exec_file (char *ignored, int from_tty,
720 struct cmd_list_element *c)
721{
722 gdb_assert (remote_exec_file_var != NULL);
723 set_pspace_remote_exec_file (current_program_space, remote_exec_file_var);
724}
725
726/* The "set/show remote exec-file" show command hook. */
727
728static void
729show_remote_exec_file (struct ui_file *file, int from_tty,
730 struct cmd_list_element *cmd, const char *value)
731{
732 fprintf_filtered (file, "%s\n", remote_exec_file_var);
733}
734
74ca34ce
DJ
735static int
736compare_pnums (const void *lhs_, const void *rhs_)
737{
19ba03f4
SM
738 const struct packet_reg * const *lhs
739 = (const struct packet_reg * const *) lhs_;
740 const struct packet_reg * const *rhs
741 = (const struct packet_reg * const *) rhs_;
74ca34ce
DJ
742
743 if ((*lhs)->pnum < (*rhs)->pnum)
744 return -1;
745 else if ((*lhs)->pnum == (*rhs)->pnum)
746 return 0;
747 else
748 return 1;
749}
750
c21236dc
PA
751static int
752map_regcache_remote_table (struct gdbarch *gdbarch, struct packet_reg *regs)
d01949b6 753{
74ca34ce 754 int regnum, num_remote_regs, offset;
74ca34ce 755 struct packet_reg **remote_regs;
ea9c271d 756
4a22f64d 757 for (regnum = 0; regnum < gdbarch_num_regs (gdbarch); regnum++)
ad10f812 758 {
c21236dc 759 struct packet_reg *r = &regs[regnum];
baef701f 760
4a22f64d 761 if (register_size (gdbarch, regnum) == 0)
baef701f
DJ
762 /* Do not try to fetch zero-sized (placeholder) registers. */
763 r->pnum = -1;
764 else
765 r->pnum = gdbarch_remote_register_number (gdbarch, regnum);
766
b323314b 767 r->regnum = regnum;
74ca34ce
DJ
768 }
769
770 /* Define the g/G packet format as the contents of each register
771 with a remote protocol number, in order of ascending protocol
772 number. */
773
224c3ddb 774 remote_regs = XALLOCAVEC (struct packet_reg *, gdbarch_num_regs (gdbarch));
f57d151a 775 for (num_remote_regs = 0, regnum = 0;
4a22f64d 776 regnum < gdbarch_num_regs (gdbarch);
f57d151a 777 regnum++)
c21236dc
PA
778 if (regs[regnum].pnum != -1)
779 remote_regs[num_remote_regs++] = &regs[regnum];
7d58c67d 780
74ca34ce
DJ
781 qsort (remote_regs, num_remote_regs, sizeof (struct packet_reg *),
782 compare_pnums);
783
784 for (regnum = 0, offset = 0; regnum < num_remote_regs; regnum++)
785 {
786 remote_regs[regnum]->in_g_packet = 1;
787 remote_regs[regnum]->offset = offset;
4a22f64d 788 offset += register_size (gdbarch, remote_regs[regnum]->regnum);
ad10f812
AC
789 }
790
c21236dc
PA
791 return offset;
792}
793
794/* Given the architecture described by GDBARCH, return the remote
795 protocol register's number and the register's offset in the g/G
796 packets of GDB register REGNUM, in PNUM and POFFSET respectively.
797 If the target does not have a mapping for REGNUM, return false,
798 otherwise, return true. */
799
800int
801remote_register_number_and_offset (struct gdbarch *gdbarch, int regnum,
802 int *pnum, int *poffset)
803{
c21236dc
PA
804 struct packet_reg *regs;
805 struct cleanup *old_chain;
806
807 gdb_assert (regnum < gdbarch_num_regs (gdbarch));
808
224c3ddb 809 regs = XCNEWVEC (struct packet_reg, gdbarch_num_regs (gdbarch));
c21236dc
PA
810 old_chain = make_cleanup (xfree, regs);
811
54887903 812 map_regcache_remote_table (gdbarch, regs);
c21236dc
PA
813
814 *pnum = regs[regnum].pnum;
815 *poffset = regs[regnum].offset;
816
817 do_cleanups (old_chain);
818
819 return *pnum != -1;
820}
821
822static void *
823init_remote_state (struct gdbarch *gdbarch)
824{
825 struct remote_state *rs = get_remote_state_raw ();
826 struct remote_arch_state *rsa;
827
828 rsa = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct remote_arch_state);
829
830 /* Use the architecture to build a regnum<->pnum table, which will be
831 1:1 unless a feature set specifies otherwise. */
832 rsa->regs = GDBARCH_OBSTACK_CALLOC (gdbarch,
833 gdbarch_num_regs (gdbarch),
834 struct packet_reg);
835
74ca34ce
DJ
836 /* Record the maximum possible size of the g packet - it may turn out
837 to be smaller. */
c21236dc 838 rsa->sizeof_g_packet = map_regcache_remote_table (gdbarch, rsa->regs);
74ca34ce 839
0df8b418 840 /* Default maximum number of characters in a packet body. Many
d01949b6
AC
841 remote stubs have a hardwired buffer size of 400 bytes
842 (c.f. BUFMAX in m68k-stub.c and i386-stub.c). BUFMAX-1 is used
843 as the maximum packet-size to ensure that the packet and an extra
844 NUL character can always fit in the buffer. This stops GDB
845 trashing stubs that try to squeeze an extra NUL into what is
ea9c271d
DJ
846 already a full buffer (As of 1999-12-04 that was most stubs). */
847 rsa->remote_packet_size = 400 - 1;
d01949b6 848
ea9c271d
DJ
849 /* This one is filled in when a ``g'' packet is received. */
850 rsa->actual_register_packet_size = 0;
851
852 /* Should rsa->sizeof_g_packet needs more space than the
0df8b418
MS
853 default, adjust the size accordingly. Remember that each byte is
854 encoded as two characters. 32 is the overhead for the packet
855 header / footer. NOTE: cagney/1999-10-26: I suspect that 8
d01949b6 856 (``$NN:G...#NN'') is a better guess, the below has been padded a
23860348 857 little. */
ea9c271d
DJ
858 if (rsa->sizeof_g_packet > ((rsa->remote_packet_size - 32) / 2))
859 rsa->remote_packet_size = (rsa->sizeof_g_packet * 2 + 32);
802188a7 860
ea9c271d
DJ
861 /* Make sure that the packet buffer is plenty big enough for
862 this architecture. */
863 if (rs->buf_size < rsa->remote_packet_size)
864 {
865 rs->buf_size = 2 * rsa->remote_packet_size;
224c3ddb 866 rs->buf = (char *) xrealloc (rs->buf, rs->buf_size);
ea9c271d 867 }
6d820c5c 868
ea9c271d
DJ
869 return rsa;
870}
871
872/* Return the current allowed size of a remote packet. This is
873 inferred from the current architecture, and should be used to
874 limit the length of outgoing packets. */
875static long
876get_remote_packet_size (void)
877{
be2a5f71 878 struct remote_state *rs = get_remote_state ();
ea9c271d
DJ
879 struct remote_arch_state *rsa = get_remote_arch_state ();
880
be2a5f71
DJ
881 if (rs->explicit_packet_size)
882 return rs->explicit_packet_size;
883
ea9c271d 884 return rsa->remote_packet_size;
d01949b6
AC
885}
886
ad10f812 887static struct packet_reg *
ea9c271d 888packet_reg_from_regnum (struct remote_arch_state *rsa, long regnum)
ad10f812 889{
f5656ead 890 if (regnum < 0 && regnum >= gdbarch_num_regs (target_gdbarch ()))
b323314b
AC
891 return NULL;
892 else
ad10f812 893 {
ea9c271d 894 struct packet_reg *r = &rsa->regs[regnum];
a744cf53 895
b323314b
AC
896 gdb_assert (r->regnum == regnum);
897 return r;
ad10f812 898 }
ad10f812
AC
899}
900
901static struct packet_reg *
ea9c271d 902packet_reg_from_pnum (struct remote_arch_state *rsa, LONGEST pnum)
ad10f812 903{
b323314b 904 int i;
a744cf53 905
f5656ead 906 for (i = 0; i < gdbarch_num_regs (target_gdbarch ()); i++)
ad10f812 907 {
ea9c271d 908 struct packet_reg *r = &rsa->regs[i];
a744cf53 909
b323314b
AC
910 if (r->pnum == pnum)
911 return r;
ad10f812
AC
912 }
913 return NULL;
d01949b6
AC
914}
915
c906108c
SS
916static struct target_ops remote_ops;
917
918static struct target_ops extended_remote_ops;
919
6426a772
JM
920/* FIXME: cagney/1999-09-23: Even though getpkt was called with
921 ``forever'' still use the normal timeout mechanism. This is
922 currently used by the ASYNC code to guarentee that target reads
923 during the initial connect always time-out. Once getpkt has been
924 modified to return a timeout indication and, in turn
925 remote_wait()/wait_for_inferior() have gained a timeout parameter
23860348 926 this can go away. */
6426a772
JM
927static int wait_forever_enabled_p = 1;
928
9a7071a8
JB
929/* Allow the user to specify what sequence to send to the remote
930 when he requests a program interruption: Although ^C is usually
931 what remote systems expect (this is the default, here), it is
932 sometimes preferable to send a break. On other systems such
933 as the Linux kernel, a break followed by g, which is Magic SysRq g
934 is required in order to interrupt the execution. */
935const char interrupt_sequence_control_c[] = "Ctrl-C";
936const char interrupt_sequence_break[] = "BREAK";
937const char interrupt_sequence_break_g[] = "BREAK-g";
40478521 938static const char *const interrupt_sequence_modes[] =
9a7071a8
JB
939 {
940 interrupt_sequence_control_c,
941 interrupt_sequence_break,
942 interrupt_sequence_break_g,
943 NULL
944 };
945static const char *interrupt_sequence_mode = interrupt_sequence_control_c;
946
947static void
948show_interrupt_sequence (struct ui_file *file, int from_tty,
949 struct cmd_list_element *c,
950 const char *value)
951{
952 if (interrupt_sequence_mode == interrupt_sequence_control_c)
953 fprintf_filtered (file,
954 _("Send the ASCII ETX character (Ctrl-c) "
955 "to the remote target to interrupt the "
956 "execution of the program.\n"));
957 else if (interrupt_sequence_mode == interrupt_sequence_break)
958 fprintf_filtered (file,
959 _("send a break signal to the remote target "
960 "to interrupt the execution of the program.\n"));
961 else if (interrupt_sequence_mode == interrupt_sequence_break_g)
962 fprintf_filtered (file,
963 _("Send a break signal and 'g' a.k.a. Magic SysRq g to "
964 "the remote target to interrupt the execution "
965 "of Linux kernel.\n"));
966 else
967 internal_error (__FILE__, __LINE__,
968 _("Invalid value for interrupt_sequence_mode: %s."),
969 interrupt_sequence_mode);
970}
6426a772 971
9a7071a8
JB
972/* This boolean variable specifies whether interrupt_sequence is sent
973 to the remote target when gdb connects to it.
974 This is mostly needed when you debug the Linux kernel: The Linux kernel
975 expects BREAK g which is Magic SysRq g for connecting gdb. */
976static int interrupt_on_connect = 0;
c906108c 977
9a7071a8
JB
978/* This variable is used to implement the "set/show remotebreak" commands.
979 Since these commands are now deprecated in favor of "set/show remote
980 interrupt-sequence", it no longer has any effect on the code. */
c906108c
SS
981static int remote_break;
982
9a7071a8
JB
983static void
984set_remotebreak (char *args, int from_tty, struct cmd_list_element *c)
985{
986 if (remote_break)
987 interrupt_sequence_mode = interrupt_sequence_break;
988 else
989 interrupt_sequence_mode = interrupt_sequence_control_c;
990}
991
992static void
993show_remotebreak (struct ui_file *file, int from_tty,
994 struct cmd_list_element *c,
995 const char *value)
996{
997}
998
c906108c
SS
999/* This variable sets the number of bits in an address that are to be
1000 sent in a memory ("M" or "m") packet. Normally, after stripping
0df8b418 1001 leading zeros, the entire address would be sent. This variable
c906108c
SS
1002 restricts the address to REMOTE_ADDRESS_SIZE bits. HISTORY: The
1003 initial implementation of remote.c restricted the address sent in
1004 memory packets to ``host::sizeof long'' bytes - (typically 32
1005 bits). Consequently, for 64 bit targets, the upper 32 bits of an
1006 address was never sent. Since fixing this bug may cause a break in
1007 some remote targets this variable is principly provided to
23860348 1008 facilitate backward compatibility. */
c906108c 1009
883b9c6c 1010static unsigned int remote_address_size;
c906108c 1011
75c99385
PA
1012/* Temporary to track who currently owns the terminal. See
1013 remote_terminal_* for more details. */
6426a772
JM
1014
1015static int remote_async_terminal_ours_p;
1016
11cf8741 1017\f
11cf8741 1018/* User configurable variables for the number of characters in a
ea9c271d
DJ
1019 memory read/write packet. MIN (rsa->remote_packet_size,
1020 rsa->sizeof_g_packet) is the default. Some targets need smaller
24b06219 1021 values (fifo overruns, et.al.) and some users need larger values
ad10f812
AC
1022 (speed up transfers). The variables ``preferred_*'' (the user
1023 request), ``current_*'' (what was actually set) and ``forced_*''
23860348 1024 (Positive - a soft limit, negative - a hard limit). */
11cf8741
JM
1025
1026struct memory_packet_config
1027{
a121b7c1 1028 const char *name;
11cf8741
JM
1029 long size;
1030 int fixed_p;
1031};
1032
a5c0808e
PA
1033/* The default max memory-write-packet-size. The 16k is historical.
1034 (It came from older GDB's using alloca for buffers and the
1035 knowledge (folklore?) that some hosts don't cope very well with
1036 large alloca calls.) */
1037#define DEFAULT_MAX_MEMORY_PACKET_SIZE 16384
1038
1039/* The minimum remote packet size for memory transfers. Ensures we
1040 can write at least one byte. */
1041#define MIN_MEMORY_PACKET_SIZE 20
1042
11cf8741
JM
1043/* Compute the current size of a read/write packet. Since this makes
1044 use of ``actual_register_packet_size'' the computation is dynamic. */
1045
1046static long
1047get_memory_packet_size (struct memory_packet_config *config)
1048{
d01949b6 1049 struct remote_state *rs = get_remote_state ();
ea9c271d
DJ
1050 struct remote_arch_state *rsa = get_remote_arch_state ();
1051
11cf8741
JM
1052 long what_they_get;
1053 if (config->fixed_p)
1054 {
1055 if (config->size <= 0)
a5c0808e 1056 what_they_get = DEFAULT_MAX_MEMORY_PACKET_SIZE;
11cf8741
JM
1057 else
1058 what_they_get = config->size;
1059 }
1060 else
1061 {
ea9c271d 1062 what_they_get = get_remote_packet_size ();
23860348 1063 /* Limit the packet to the size specified by the user. */
11cf8741
JM
1064 if (config->size > 0
1065 && what_they_get > config->size)
1066 what_they_get = config->size;
be2a5f71
DJ
1067
1068 /* Limit it to the size of the targets ``g'' response unless we have
1069 permission from the stub to use a larger packet size. */
1070 if (rs->explicit_packet_size == 0
1071 && rsa->actual_register_packet_size > 0
1072 && what_they_get > rsa->actual_register_packet_size)
1073 what_they_get = rsa->actual_register_packet_size;
11cf8741 1074 }
a5c0808e
PA
1075 if (what_they_get < MIN_MEMORY_PACKET_SIZE)
1076 what_they_get = MIN_MEMORY_PACKET_SIZE;
6d820c5c
DJ
1077
1078 /* Make sure there is room in the global buffer for this packet
1079 (including its trailing NUL byte). */
1080 if (rs->buf_size < what_they_get + 1)
1081 {
1082 rs->buf_size = 2 * what_they_get;
224c3ddb 1083 rs->buf = (char *) xrealloc (rs->buf, 2 * what_they_get);
6d820c5c
DJ
1084 }
1085
11cf8741
JM
1086 return what_they_get;
1087}
1088
0df8b418 1089/* Update the size of a read/write packet. If they user wants
23860348 1090 something really big then do a sanity check. */
11cf8741
JM
1091
1092static void
1093set_memory_packet_size (char *args, struct memory_packet_config *config)
1094{
1095 int fixed_p = config->fixed_p;
1096 long size = config->size;
a744cf53 1097
11cf8741 1098 if (args == NULL)
8a3fe4f8 1099 error (_("Argument required (integer, `fixed' or `limited')."));
11cf8741
JM
1100 else if (strcmp (args, "hard") == 0
1101 || strcmp (args, "fixed") == 0)
1102 fixed_p = 1;
1103 else if (strcmp (args, "soft") == 0
1104 || strcmp (args, "limit") == 0)
1105 fixed_p = 0;
1106 else
1107 {
1108 char *end;
a744cf53 1109
11cf8741
JM
1110 size = strtoul (args, &end, 0);
1111 if (args == end)
8a3fe4f8 1112 error (_("Invalid %s (bad syntax)."), config->name);
a5c0808e
PA
1113
1114 /* Instead of explicitly capping the size of a packet to or
1115 disallowing it, the user is allowed to set the size to
1116 something arbitrarily large. */
11cf8741 1117 }
a5c0808e
PA
1118
1119 /* So that the query shows the correct value. */
1120 if (size <= 0)
1121 size = DEFAULT_MAX_MEMORY_PACKET_SIZE;
1122
23860348 1123 /* Extra checks? */
11cf8741
JM
1124 if (fixed_p && !config->fixed_p)
1125 {
e2e0b3e5
AC
1126 if (! query (_("The target may not be able to correctly handle a %s\n"
1127 "of %ld bytes. Change the packet size? "),
11cf8741 1128 config->name, size))
8a3fe4f8 1129 error (_("Packet size not changed."));
11cf8741 1130 }
23860348 1131 /* Update the config. */
11cf8741
JM
1132 config->fixed_p = fixed_p;
1133 config->size = size;
1134}
1135
1136static void
1137show_memory_packet_size (struct memory_packet_config *config)
1138{
a3f17187 1139 printf_filtered (_("The %s is %ld. "), config->name, config->size);
11cf8741 1140 if (config->fixed_p)
a3f17187 1141 printf_filtered (_("Packets are fixed at %ld bytes.\n"),
11cf8741
JM
1142 get_memory_packet_size (config));
1143 else
a3f17187 1144 printf_filtered (_("Packets are limited to %ld bytes.\n"),
11cf8741
JM
1145 get_memory_packet_size (config));
1146}
1147
1148static struct memory_packet_config memory_write_packet_config =
1149{
1150 "memory-write-packet-size",
1151};
1152
1153static void
1154set_memory_write_packet_size (char *args, int from_tty)
1155{
1156 set_memory_packet_size (args, &memory_write_packet_config);
1157}
1158
1159static void
1160show_memory_write_packet_size (char *args, int from_tty)
1161{
1162 show_memory_packet_size (&memory_write_packet_config);
1163}
1164
1165static long
1166get_memory_write_packet_size (void)
1167{
1168 return get_memory_packet_size (&memory_write_packet_config);
1169}
1170
1171static struct memory_packet_config memory_read_packet_config =
1172{
1173 "memory-read-packet-size",
1174};
1175
1176static void
1177set_memory_read_packet_size (char *args, int from_tty)
1178{
1179 set_memory_packet_size (args, &memory_read_packet_config);
1180}
1181
1182static void
1183show_memory_read_packet_size (char *args, int from_tty)
1184{
1185 show_memory_packet_size (&memory_read_packet_config);
1186}
1187
1188static long
1189get_memory_read_packet_size (void)
1190{
1191 long size = get_memory_packet_size (&memory_read_packet_config);
a744cf53 1192
11cf8741
JM
1193 /* FIXME: cagney/1999-11-07: Functions like getpkt() need to get an
1194 extra buffer size argument before the memory read size can be
ea9c271d
DJ
1195 increased beyond this. */
1196 if (size > get_remote_packet_size ())
1197 size = get_remote_packet_size ();
11cf8741
JM
1198 return size;
1199}
1200
11cf8741 1201\f
5a2468f5 1202/* Generic configuration support for packets the stub optionally
0df8b418 1203 supports. Allows the user to specify the use of the packet as well
23860348 1204 as allowing GDB to auto-detect support in the remote stub. */
5a2468f5
JM
1205
1206enum packet_support
1207 {
1208 PACKET_SUPPORT_UNKNOWN = 0,
1209 PACKET_ENABLE,
1210 PACKET_DISABLE
1211 };
1212
5a2468f5
JM
1213struct packet_config
1214 {
bb572ddd
DJ
1215 const char *name;
1216 const char *title;
4082afcc
PA
1217
1218 /* If auto, GDB auto-detects support for this packet or feature,
1219 either through qSupported, or by trying the packet and looking
1220 at the response. If true, GDB assumes the target supports this
ca4f7f8b
PA
1221 packet. If false, the packet is disabled. Configs that don't
1222 have an associated command always have this set to auto. */
7f19b9a2 1223 enum auto_boolean detect;
4082afcc
PA
1224
1225 /* Does the target support this packet? */
5a2468f5
JM
1226 enum packet_support support;
1227 };
1228
d471ea57 1229/* Analyze a packet's return value and update the packet config
23860348 1230 accordingly. */
d471ea57
AC
1231
1232enum packet_result
1233{
1234 PACKET_ERROR,
1235 PACKET_OK,
1236 PACKET_UNKNOWN
1237};
1238
4082afcc
PA
1239static enum packet_support packet_config_support (struct packet_config *config);
1240static enum packet_support packet_support (int packet);
5a2468f5
JM
1241
1242static void
fba45db2 1243show_packet_config_cmd (struct packet_config *config)
5a2468f5 1244{
a121b7c1 1245 const char *support = "internal-error";
a744cf53 1246
4082afcc 1247 switch (packet_config_support (config))
5a2468f5
JM
1248 {
1249 case PACKET_ENABLE:
1250 support = "enabled";
1251 break;
1252 case PACKET_DISABLE:
1253 support = "disabled";
1254 break;
1255 case PACKET_SUPPORT_UNKNOWN:
1256 support = "unknown";
1257 break;
1258 }
1259 switch (config->detect)
1260 {
7f19b9a2 1261 case AUTO_BOOLEAN_AUTO:
3e43a32a
MS
1262 printf_filtered (_("Support for the `%s' packet "
1263 "is auto-detected, currently %s.\n"),
37a105a1 1264 config->name, support);
5a2468f5 1265 break;
7f19b9a2
AC
1266 case AUTO_BOOLEAN_TRUE:
1267 case AUTO_BOOLEAN_FALSE:
37a105a1
DJ
1268 printf_filtered (_("Support for the `%s' packet is currently %s.\n"),
1269 config->name, support);
8e248173 1270 break;
5a2468f5
JM
1271 }
1272}
1273
1274static void
bb572ddd
DJ
1275add_packet_config_cmd (struct packet_config *config, const char *name,
1276 const char *title, int legacy)
d471ea57 1277{
5a2468f5
JM
1278 char *set_doc;
1279 char *show_doc;
d471ea57 1280 char *cmd_name;
3ed07be4 1281
5a2468f5
JM
1282 config->name = name;
1283 config->title = title;
b435e160
AC
1284 set_doc = xstrprintf ("Set use of remote protocol `%s' (%s) packet",
1285 name, title);
3e43a32a
MS
1286 show_doc = xstrprintf ("Show current use of remote "
1287 "protocol `%s' (%s) packet",
b435e160 1288 name, title);
d471ea57 1289 /* set/show TITLE-packet {auto,on,off} */
b435e160 1290 cmd_name = xstrprintf ("%s-packet", title);
e9e68a56 1291 add_setshow_auto_boolean_cmd (cmd_name, class_obscure,
3e43a32a
MS
1292 &config->detect, set_doc,
1293 show_doc, NULL, /* help_doc */
4082afcc 1294 NULL,
bb572ddd
DJ
1295 show_remote_protocol_packet_cmd,
1296 &remote_set_cmdlist, &remote_show_cmdlist);
1eefb858
TT
1297 /* The command code copies the documentation strings. */
1298 xfree (set_doc);
1299 xfree (show_doc);
23860348 1300 /* set/show remote NAME-packet {auto,on,off} -- legacy. */
d471ea57
AC
1301 if (legacy)
1302 {
1303 char *legacy_name;
a744cf53 1304
b435e160 1305 legacy_name = xstrprintf ("%s-packet", name);
d471ea57 1306 add_alias_cmd (legacy_name, cmd_name, class_obscure, 0,
bb572ddd 1307 &remote_set_cmdlist);
d471ea57 1308 add_alias_cmd (legacy_name, cmd_name, class_obscure, 0,
bb572ddd 1309 &remote_show_cmdlist);
d471ea57 1310 }
5a2468f5
JM
1311}
1312
d471ea57 1313static enum packet_result
a76d924d 1314packet_check_result (const char *buf)
5a2468f5 1315{
d471ea57 1316 if (buf[0] != '\0')
5a2468f5 1317 {
d471ea57 1318 /* The stub recognized the packet request. Check that the
23860348 1319 operation succeeded. */
a76d924d
DJ
1320 if (buf[0] == 'E'
1321 && isxdigit (buf[1]) && isxdigit (buf[2])
1322 && buf[3] == '\0')
1323 /* "Enn" - definitly an error. */
1324 return PACKET_ERROR;
1325
1326 /* Always treat "E." as an error. This will be used for
1327 more verbose error messages, such as E.memtypes. */
1328 if (buf[0] == 'E' && buf[1] == '.')
1329 return PACKET_ERROR;
1330
1331 /* The packet may or may not be OK. Just assume it is. */
1332 return PACKET_OK;
1333 }
1334 else
1335 /* The stub does not support the packet. */
1336 return PACKET_UNKNOWN;
1337}
1338
1339static enum packet_result
1340packet_ok (const char *buf, struct packet_config *config)
1341{
1342 enum packet_result result;
1343
4082afcc
PA
1344 if (config->detect != AUTO_BOOLEAN_TRUE
1345 && config->support == PACKET_DISABLE)
1346 internal_error (__FILE__, __LINE__,
1347 _("packet_ok: attempt to use a disabled packet"));
1348
a76d924d
DJ
1349 result = packet_check_result (buf);
1350 switch (result)
1351 {
1352 case PACKET_OK:
1353 case PACKET_ERROR:
1354 /* The stub recognized the packet request. */
4082afcc 1355 if (config->support == PACKET_SUPPORT_UNKNOWN)
d471ea57 1356 {
d471ea57
AC
1357 if (remote_debug)
1358 fprintf_unfiltered (gdb_stdlog,
4082afcc
PA
1359 "Packet %s (%s) is supported\n",
1360 config->name, config->title);
d471ea57 1361 config->support = PACKET_ENABLE;
d471ea57 1362 }
a76d924d
DJ
1363 break;
1364 case PACKET_UNKNOWN:
23860348 1365 /* The stub does not support the packet. */
4082afcc
PA
1366 if (config->detect == AUTO_BOOLEAN_AUTO
1367 && config->support == PACKET_ENABLE)
d471ea57 1368 {
4082afcc
PA
1369 /* If the stub previously indicated that the packet was
1370 supported then there is a protocol error. */
1371 error (_("Protocol error: %s (%s) conflicting enabled responses."),
1372 config->name, config->title);
1373 }
1374 else if (config->detect == AUTO_BOOLEAN_TRUE)
1375 {
1376 /* The user set it wrong. */
1377 error (_("Enabled packet %s (%s) not recognized by stub"),
1378 config->name, config->title);
d471ea57 1379 }
4082afcc
PA
1380
1381 if (remote_debug)
1382 fprintf_unfiltered (gdb_stdlog,
1383 "Packet %s (%s) is NOT supported\n",
1384 config->name, config->title);
1385 config->support = PACKET_DISABLE;
a76d924d 1386 break;
5a2468f5 1387 }
a76d924d
DJ
1388
1389 return result;
5a2468f5
JM
1390}
1391
444abaca
DJ
1392enum {
1393 PACKET_vCont = 0,
1394 PACKET_X,
1395 PACKET_qSymbol,
1396 PACKET_P,
1397 PACKET_p,
1398 PACKET_Z0,
1399 PACKET_Z1,
1400 PACKET_Z2,
1401 PACKET_Z3,
1402 PACKET_Z4,
15a201c8 1403 PACKET_vFile_setfs,
a6b151f1
DJ
1404 PACKET_vFile_open,
1405 PACKET_vFile_pread,
1406 PACKET_vFile_pwrite,
1407 PACKET_vFile_close,
1408 PACKET_vFile_unlink,
b9e7b9c3 1409 PACKET_vFile_readlink,
0a93529c 1410 PACKET_vFile_fstat,
0876f84a 1411 PACKET_qXfer_auxv,
23181151 1412 PACKET_qXfer_features,
c78fa86a 1413 PACKET_qXfer_exec_file,
cfa9d6d9 1414 PACKET_qXfer_libraries,
2268b414 1415 PACKET_qXfer_libraries_svr4,
fd79ecee 1416 PACKET_qXfer_memory_map,
0e7f50da
UW
1417 PACKET_qXfer_spu_read,
1418 PACKET_qXfer_spu_write,
07e059b5 1419 PACKET_qXfer_osdata,
dc146f7c 1420 PACKET_qXfer_threads,
0fb4aa4b 1421 PACKET_qXfer_statictrace_read,
b3b9301e 1422 PACKET_qXfer_traceframe_info,
169081d0 1423 PACKET_qXfer_uib,
711e434b 1424 PACKET_qGetTIBAddr,
444abaca 1425 PACKET_qGetTLSAddr,
be2a5f71 1426 PACKET_qSupported,
bd3eecc3 1427 PACKET_qTStatus,
89be2091 1428 PACKET_QPassSignals,
82075af2 1429 PACKET_QCatchSyscalls,
9b224c5e 1430 PACKET_QProgramSignals,
aefd8b33 1431 PACKET_QStartupWithShell,
936d2992 1432 PACKET_qCRC,
08388c79 1433 PACKET_qSearch_memory,
2d717e4f
DJ
1434 PACKET_vAttach,
1435 PACKET_vRun,
a6f3e723 1436 PACKET_QStartNoAckMode,
82f73884 1437 PACKET_vKill,
4aa995e1
PA
1438 PACKET_qXfer_siginfo_read,
1439 PACKET_qXfer_siginfo_write,
0b16c5cf 1440 PACKET_qAttached,
4082afcc
PA
1441
1442 /* Support for conditional tracepoints. */
782b2b07 1443 PACKET_ConditionalTracepoints,
4082afcc
PA
1444
1445 /* Support for target-side breakpoint conditions. */
3788aec7 1446 PACKET_ConditionalBreakpoints,
4082afcc
PA
1447
1448 /* Support for target-side breakpoint commands. */
d3ce09f5 1449 PACKET_BreakpointCommands,
4082afcc
PA
1450
1451 /* Support for fast tracepoints. */
7a697b8d 1452 PACKET_FastTracepoints,
4082afcc
PA
1453
1454 /* Support for static tracepoints. */
0fb4aa4b 1455 PACKET_StaticTracepoints,
4082afcc
PA
1456
1457 /* Support for installing tracepoints while a trace experiment is
1458 running. */
1e4d1764 1459 PACKET_InstallInTrace,
4082afcc 1460
40ab02ce
MS
1461 PACKET_bc,
1462 PACKET_bs,
409873ef 1463 PACKET_TracepointSource,
d914c394 1464 PACKET_QAllow,
78d85199 1465 PACKET_qXfer_fdpic,
03583c20 1466 PACKET_QDisableRandomization,
d1feda86 1467 PACKET_QAgent,
f6f899bf 1468 PACKET_QTBuffer_size,
9accd112
MM
1469 PACKET_Qbtrace_off,
1470 PACKET_Qbtrace_bts,
b20a6524 1471 PACKET_Qbtrace_pt,
9accd112 1472 PACKET_qXfer_btrace,
4082afcc
PA
1473
1474 /* Support for the QNonStop packet. */
1475 PACKET_QNonStop,
1476
65706a29
PA
1477 /* Support for the QThreadEvents packet. */
1478 PACKET_QThreadEvents,
1479
4082afcc
PA
1480 /* Support for multi-process extensions. */
1481 PACKET_multiprocess_feature,
1482
1483 /* Support for enabling and disabling tracepoints while a trace
1484 experiment is running. */
1485 PACKET_EnableDisableTracepoints_feature,
1486
1487 /* Support for collecting strings using the tracenz bytecode. */
1488 PACKET_tracenz_feature,
1489
1490 /* Support for continuing to run a trace experiment while GDB is
1491 disconnected. */
1492 PACKET_DisconnectedTracing_feature,
1493
1494 /* Support for qXfer:libraries-svr4:read with a non-empty annex. */
1495 PACKET_augmented_libraries_svr4_read_feature,
1496
f4abbc16
MM
1497 /* Support for the qXfer:btrace-conf:read packet. */
1498 PACKET_qXfer_btrace_conf,
1499
d33501a5
MM
1500 /* Support for the Qbtrace-conf:bts:size packet. */
1501 PACKET_Qbtrace_conf_bts_size,
1502
f7e6eed5
PA
1503 /* Support for swbreak+ feature. */
1504 PACKET_swbreak_feature,
1505
1506 /* Support for hwbreak+ feature. */
1507 PACKET_hwbreak_feature,
1508
89245bc0
DB
1509 /* Support for fork events. */
1510 PACKET_fork_event_feature,
1511
1512 /* Support for vfork events. */
1513 PACKET_vfork_event_feature,
1514
b20a6524
MM
1515 /* Support for the Qbtrace-conf:pt:size packet. */
1516 PACKET_Qbtrace_conf_pt_size,
1517
94585166
DB
1518 /* Support for exec events. */
1519 PACKET_exec_event_feature,
1520
750ce8d1
YQ
1521 /* Support for query supported vCont actions. */
1522 PACKET_vContSupported,
1523
de979965
PA
1524 /* Support remote CTRL-C. */
1525 PACKET_vCtrlC,
1526
f2faf941
PA
1527 /* Support TARGET_WAITKIND_NO_RESUMED. */
1528 PACKET_no_resumed,
1529
444abaca
DJ
1530 PACKET_MAX
1531};
506fb367 1532
444abaca 1533static struct packet_config remote_protocol_packets[PACKET_MAX];
dc8acb97 1534
f7e6eed5
PA
1535/* Returns the packet's corresponding "set remote foo-packet" command
1536 state. See struct packet_config for more details. */
1537
1538static enum auto_boolean
1539packet_set_cmd_state (int packet)
1540{
1541 return remote_protocol_packets[packet].detect;
1542}
1543
4082afcc
PA
1544/* Returns whether a given packet or feature is supported. This takes
1545 into account the state of the corresponding "set remote foo-packet"
1546 command, which may be used to bypass auto-detection. */
dc8acb97 1547
4082afcc
PA
1548static enum packet_support
1549packet_config_support (struct packet_config *config)
1550{
1551 switch (config->detect)
444abaca 1552 {
4082afcc
PA
1553 case AUTO_BOOLEAN_TRUE:
1554 return PACKET_ENABLE;
1555 case AUTO_BOOLEAN_FALSE:
1556 return PACKET_DISABLE;
1557 case AUTO_BOOLEAN_AUTO:
1558 return config->support;
1559 default:
1560 gdb_assert_not_reached (_("bad switch"));
444abaca 1561 }
4082afcc
PA
1562}
1563
1564/* Same as packet_config_support, but takes the packet's enum value as
1565 argument. */
1566
1567static enum packet_support
1568packet_support (int packet)
1569{
1570 struct packet_config *config = &remote_protocol_packets[packet];
1571
1572 return packet_config_support (config);
dc8acb97
MS
1573}
1574
5a2468f5 1575static void
444abaca
DJ
1576show_remote_protocol_packet_cmd (struct ui_file *file, int from_tty,
1577 struct cmd_list_element *c,
1578 const char *value)
5a2468f5 1579{
444abaca 1580 struct packet_config *packet;
5a2468f5 1581
444abaca
DJ
1582 for (packet = remote_protocol_packets;
1583 packet < &remote_protocol_packets[PACKET_MAX];
1584 packet++)
1585 {
1586 if (&packet->detect == c->var)
1587 {
1588 show_packet_config_cmd (packet);
1589 return;
1590 }
1591 }
9b20d036 1592 internal_error (__FILE__, __LINE__, _("Could not find config for %s"),
444abaca 1593 c->name);
5a2468f5
JM
1594}
1595
d471ea57
AC
1596/* Should we try one of the 'Z' requests? */
1597
1598enum Z_packet_type
1599{
1600 Z_PACKET_SOFTWARE_BP,
1601 Z_PACKET_HARDWARE_BP,
1602 Z_PACKET_WRITE_WP,
1603 Z_PACKET_READ_WP,
1604 Z_PACKET_ACCESS_WP,
1605 NR_Z_PACKET_TYPES
1606};
96baa820 1607
d471ea57 1608/* For compatibility with older distributions. Provide a ``set remote
23860348 1609 Z-packet ...'' command that updates all the Z packet types. */
d471ea57 1610
7f19b9a2 1611static enum auto_boolean remote_Z_packet_detect;
96baa820
JM
1612
1613static void
fba45db2
KB
1614set_remote_protocol_Z_packet_cmd (char *args, int from_tty,
1615 struct cmd_list_element *c)
96baa820 1616{
d471ea57 1617 int i;
a744cf53 1618
d471ea57 1619 for (i = 0; i < NR_Z_PACKET_TYPES; i++)
4082afcc 1620 remote_protocol_packets[PACKET_Z0 + i].detect = remote_Z_packet_detect;
96baa820
JM
1621}
1622
1623static void
08546159
AC
1624show_remote_protocol_Z_packet_cmd (struct ui_file *file, int from_tty,
1625 struct cmd_list_element *c,
1626 const char *value)
96baa820 1627{
d471ea57 1628 int i;
a744cf53 1629
d471ea57
AC
1630 for (i = 0; i < NR_Z_PACKET_TYPES; i++)
1631 {
444abaca 1632 show_packet_config_cmd (&remote_protocol_packets[PACKET_Z0 + i]);
d471ea57 1633 }
96baa820
JM
1634}
1635
4082afcc
PA
1636/* Returns true if the multi-process extensions are in effect. */
1637
1638static int
1639remote_multi_process_p (struct remote_state *rs)
1640{
1641 return packet_support (PACKET_multiprocess_feature) == PACKET_ENABLE;
1642}
1643
de0d863e
DB
1644/* Returns true if fork events are supported. */
1645
1646static int
1647remote_fork_event_p (struct remote_state *rs)
1648{
1649 return packet_support (PACKET_fork_event_feature) == PACKET_ENABLE;
1650}
1651
c269dbdb
DB
1652/* Returns true if vfork events are supported. */
1653
1654static int
1655remote_vfork_event_p (struct remote_state *rs)
1656{
1657 return packet_support (PACKET_vfork_event_feature) == PACKET_ENABLE;
1658}
1659
d46addbb
DB
1660/* Returns true if exec events are supported. */
1661
1662static int
1663remote_exec_event_p (struct remote_state *rs)
1664{
1665 return packet_support (PACKET_exec_event_feature) == PACKET_ENABLE;
1666}
1667
cbb8991c
DB
1668/* Insert fork catchpoint target routine. If fork events are enabled
1669 then return success, nothing more to do. */
1670
1671static int
1672remote_insert_fork_catchpoint (struct target_ops *ops, int pid)
1673{
1674 struct remote_state *rs = get_remote_state ();
1675
1676 return !remote_fork_event_p (rs);
1677}
1678
1679/* Remove fork catchpoint target routine. Nothing to do, just
1680 return success. */
1681
1682static int
1683remote_remove_fork_catchpoint (struct target_ops *ops, int pid)
1684{
1685 return 0;
1686}
1687
1688/* Insert vfork catchpoint target routine. If vfork events are enabled
1689 then return success, nothing more to do. */
1690
1691static int
1692remote_insert_vfork_catchpoint (struct target_ops *ops, int pid)
1693{
1694 struct remote_state *rs = get_remote_state ();
1695
1696 return !remote_vfork_event_p (rs);
1697}
1698
1699/* Remove vfork catchpoint target routine. Nothing to do, just
1700 return success. */
1701
1702static int
1703remote_remove_vfork_catchpoint (struct target_ops *ops, int pid)
1704{
1705 return 0;
1706}
1707
d46addbb
DB
1708/* Insert exec catchpoint target routine. If exec events are
1709 enabled, just return success. */
1710
1711static int
1712remote_insert_exec_catchpoint (struct target_ops *ops, int pid)
1713{
1714 struct remote_state *rs = get_remote_state ();
1715
1716 return !remote_exec_event_p (rs);
1717}
1718
1719/* Remove exec catchpoint target routine. Nothing to do, just
1720 return success. */
1721
1722static int
1723remote_remove_exec_catchpoint (struct target_ops *ops, int pid)
1724{
1725 return 0;
1726}
1727
74531fed
PA
1728\f
1729/* Asynchronous signal handle registered as event loop source for
1730 when we have pending events ready to be passed to the core. */
1731
1732static struct async_event_handler *remote_async_inferior_event_token;
1733
c906108c
SS
1734\f
1735
79d7f229
PA
1736static ptid_t magic_null_ptid;
1737static ptid_t not_sent_ptid;
1738static ptid_t any_thread_ptid;
1739
0b16c5cf
PA
1740/* Find out if the stub attached to PID (and hence GDB should offer to
1741 detach instead of killing it when bailing out). */
1742
1743static int
1744remote_query_attached (int pid)
1745{
1746 struct remote_state *rs = get_remote_state ();
bba74b36 1747 size_t size = get_remote_packet_size ();
0b16c5cf 1748
4082afcc 1749 if (packet_support (PACKET_qAttached) == PACKET_DISABLE)
0b16c5cf
PA
1750 return 0;
1751
1752 if (remote_multi_process_p (rs))
bba74b36 1753 xsnprintf (rs->buf, size, "qAttached:%x", pid);
0b16c5cf 1754 else
bba74b36 1755 xsnprintf (rs->buf, size, "qAttached");
0b16c5cf
PA
1756
1757 putpkt (rs->buf);
1758 getpkt (&rs->buf, &rs->buf_size, 0);
1759
1760 switch (packet_ok (rs->buf,
1554e9be 1761 &remote_protocol_packets[PACKET_qAttached]))
0b16c5cf
PA
1762 {
1763 case PACKET_OK:
1764 if (strcmp (rs->buf, "1") == 0)
1765 return 1;
1766 break;
1767 case PACKET_ERROR:
1768 warning (_("Remote failure reply: %s"), rs->buf);
1769 break;
1770 case PACKET_UNKNOWN:
1771 break;
1772 }
1773
1774 return 0;
1775}
1776
49c62f2e
PA
1777/* Add PID to GDB's inferior table. If FAKE_PID_P is true, then PID
1778 has been invented by GDB, instead of reported by the target. Since
1779 we can be connected to a remote system before before knowing about
1780 any inferior, mark the target with execution when we find the first
1781 inferior. If ATTACHED is 1, then we had just attached to this
1782 inferior. If it is 0, then we just created this inferior. If it
1783 is -1, then try querying the remote stub to find out if it had
1b6e6f5c
GB
1784 attached to the inferior or not. If TRY_OPEN_EXEC is true then
1785 attempt to open this inferior's executable as the main executable
1786 if no main executable is open already. */
1941c569
PA
1787
1788static struct inferior *
1b6e6f5c
GB
1789remote_add_inferior (int fake_pid_p, int pid, int attached,
1790 int try_open_exec)
1941c569 1791{
1941c569
PA
1792 struct inferior *inf;
1793
0b16c5cf
PA
1794 /* Check whether this process we're learning about is to be
1795 considered attached, or if is to be considered to have been
1796 spawned by the stub. */
1797 if (attached == -1)
1798 attached = remote_query_attached (pid);
1799
f5656ead 1800 if (gdbarch_has_global_solist (target_gdbarch ()))
6c95b8df
PA
1801 {
1802 /* If the target shares code across all inferiors, then every
1803 attach adds a new inferior. */
1804 inf = add_inferior (pid);
1805
1806 /* ... and every inferior is bound to the same program space.
1807 However, each inferior may still have its own address
1808 space. */
1809 inf->aspace = maybe_new_address_space ();
1810 inf->pspace = current_program_space;
1811 }
1812 else
1813 {
1814 /* In the traditional debugging scenario, there's a 1-1 match
1815 between program/address spaces. We simply bind the inferior
1816 to the program space's address space. */
1817 inf = current_inferior ();
1818 inferior_appeared (inf, pid);
1819 }
1941c569 1820
0b16c5cf 1821 inf->attach_flag = attached;
49c62f2e 1822 inf->fake_pid_p = fake_pid_p;
0b16c5cf 1823
1b6e6f5c
GB
1824 /* If no main executable is currently open then attempt to
1825 open the file that was executed to create this inferior. */
835205d0 1826 if (try_open_exec && get_exec_file (0) == NULL)
bb805577 1827 exec_file_locate_attach (pid, 0, 1);
1b6e6f5c 1828
1941c569
PA
1829 return inf;
1830}
1831
85ad3aaf
PA
1832static struct private_thread_info *
1833 get_private_info_thread (struct thread_info *info);
1834
1941c569
PA
1835/* Add thread PTID to GDB's thread list. Tag it as executing/running
1836 according to RUNNING. */
1837
c906108c 1838static void
0d5b594f 1839remote_add_thread (ptid_t ptid, int running, int executing)
c906108c 1840{
b7ea362b 1841 struct remote_state *rs = get_remote_state ();
85ad3aaf 1842 struct thread_info *thread;
b7ea362b
PA
1843
1844 /* GDB historically didn't pull threads in the initial connection
1845 setup. If the remote target doesn't even have a concept of
1846 threads (e.g., a bare-metal target), even if internally we
1847 consider that a single-threaded target, mentioning a new thread
1848 might be confusing to the user. Be silent then, preserving the
1849 age old behavior. */
1850 if (rs->starting_up)
85ad3aaf 1851 thread = add_thread_silent (ptid);
b7ea362b 1852 else
85ad3aaf 1853 thread = add_thread (ptid);
1941c569 1854
85ad3aaf 1855 get_private_info_thread (thread)->vcont_resumed = executing;
0d5b594f 1856 set_executing (ptid, executing);
1941c569
PA
1857 set_running (ptid, running);
1858}
1859
1860/* Come here when we learn about a thread id from the remote target.
1861 It may be the first time we hear about such thread, so take the
1862 opportunity to add it to GDB's thread list. In case this is the
1863 first time we're noticing its corresponding inferior, add it to
0d5b594f
PA
1864 GDB's inferior list as well. EXECUTING indicates whether the
1865 thread is (internally) executing or stopped. */
1941c569
PA
1866
1867static void
0d5b594f 1868remote_notice_new_inferior (ptid_t currthread, int executing)
1941c569 1869{
0d5b594f
PA
1870 /* In non-stop mode, we assume new found threads are (externally)
1871 running until proven otherwise with a stop reply. In all-stop,
1872 we can only get here if all threads are stopped. */
1873 int running = target_is_non_stop_p () ? 1 : 0;
1874
c906108c
SS
1875 /* If this is a new thread, add it to GDB's thread list.
1876 If we leave it up to WFI to do this, bad things will happen. */
82f73884
PA
1877
1878 if (in_thread_list (currthread) && is_exited (currthread))
1879 {
1880 /* We're seeing an event on a thread id we knew had exited.
1881 This has to be a new thread reusing the old id. Add it. */
0d5b594f 1882 remote_add_thread (currthread, running, executing);
82f73884
PA
1883 return;
1884 }
1885
79d7f229 1886 if (!in_thread_list (currthread))
c0a2216e 1887 {
1941c569 1888 struct inferior *inf = NULL;
bad34192 1889 int pid = ptid_get_pid (currthread);
1941c569 1890
bad34192
PA
1891 if (ptid_is_pid (inferior_ptid)
1892 && pid == ptid_get_pid (inferior_ptid))
c0a2216e
PA
1893 {
1894 /* inferior_ptid has no thread member yet. This can happen
1895 with the vAttach -> remote_wait,"TAAthread:" path if the
1896 stub doesn't support qC. This is the first stop reported
1897 after an attach, so this is the main thread. Update the
1898 ptid in the thread list. */
bad34192
PA
1899 if (in_thread_list (pid_to_ptid (pid)))
1900 thread_change_ptid (inferior_ptid, currthread);
1901 else
1902 {
0d5b594f 1903 remote_add_thread (currthread, running, executing);
bad34192
PA
1904 inferior_ptid = currthread;
1905 }
dc146f7c 1906 return;
c0a2216e 1907 }
82f73884
PA
1908
1909 if (ptid_equal (magic_null_ptid, inferior_ptid))
c0a2216e
PA
1910 {
1911 /* inferior_ptid is not set yet. This can happen with the
1912 vRun -> remote_wait,"TAAthread:" path if the stub
1913 doesn't support qC. This is the first stop reported
1914 after an attach, so this is the main thread. Update the
1915 ptid in the thread list. */
dc146f7c 1916 thread_change_ptid (inferior_ptid, currthread);
82f73884 1917 return;
c0a2216e 1918 }
82f73884 1919
29c87f7f
PA
1920 /* When connecting to a target remote, or to a target
1921 extended-remote which already was debugging an inferior, we
1922 may not know about it yet. Add it before adding its child
1923 thread, so notifications are emitted in a sensible order. */
1924 if (!in_inferior_list (ptid_get_pid (currthread)))
49c62f2e
PA
1925 {
1926 struct remote_state *rs = get_remote_state ();
1927 int fake_pid_p = !remote_multi_process_p (rs);
1928
1929 inf = remote_add_inferior (fake_pid_p,
1b6e6f5c 1930 ptid_get_pid (currthread), -1, 1);
49c62f2e 1931 }
29c87f7f 1932
82f73884 1933 /* This is really a new thread. Add it. */
0d5b594f 1934 remote_add_thread (currthread, running, executing);
1941c569
PA
1935
1936 /* If we found a new inferior, let the common code do whatever
1937 it needs to with it (e.g., read shared libraries, insert
b7ea362b
PA
1938 breakpoints), unless we're just setting up an all-stop
1939 connection. */
1941c569 1940 if (inf != NULL)
b7ea362b
PA
1941 {
1942 struct remote_state *rs = get_remote_state ();
1943
6efcd9a8 1944 if (!rs->starting_up)
0d5b594f 1945 notice_new_inferior (currthread, executing, 0);
b7ea362b 1946 }
c0a2216e 1947 }
c906108c
SS
1948}
1949
85ad3aaf 1950/* Return THREAD's private thread data, creating it if necessary. */
dc146f7c 1951
70221824 1952static struct private_thread_info *
85ad3aaf 1953get_private_info_thread (struct thread_info *thread)
dc146f7c 1954{
85ad3aaf 1955 gdb_assert (thread != NULL);
dc146f7c 1956
85ad3aaf 1957 if (thread->priv == NULL)
dc146f7c 1958 {
85ad3aaf
PA
1959 struct private_thread_info *priv = XNEW (struct private_thread_info);
1960
1961 thread->private_dtor = free_private_thread_info;
1962 thread->priv = priv;
1963
1964 priv->core = -1;
1965 priv->extra = NULL;
1966 priv->name = NULL;
1967 priv->name = NULL;
1968 priv->last_resume_step = 0;
1969 priv->last_resume_sig = GDB_SIGNAL_0;
1970 priv->vcont_resumed = 0;
dc146f7c
VP
1971 }
1972
85ad3aaf
PA
1973 return thread->priv;
1974}
1975
1976/* Return PTID's private thread data, creating it if necessary. */
1977
1978static struct private_thread_info *
1979get_private_info_ptid (ptid_t ptid)
1980{
1981 struct thread_info *info = find_thread_ptid (ptid);
1982
1983 return get_private_info_thread (info);
dc146f7c
VP
1984}
1985
74531fed
PA
1986/* Call this function as a result of
1987 1) A halt indication (T packet) containing a thread id
1988 2) A direct query of currthread
0df8b418 1989 3) Successful execution of set thread */
74531fed
PA
1990
1991static void
47f8a51d 1992record_currthread (struct remote_state *rs, ptid_t currthread)
74531fed 1993{
47f8a51d 1994 rs->general_thread = currthread;
74531fed
PA
1995}
1996
89be2091
DJ
1997/* If 'QPassSignals' is supported, tell the remote stub what signals
1998 it can simply pass through to the inferior without reporting. */
1999
2000static void
94bedb42
TT
2001remote_pass_signals (struct target_ops *self,
2002 int numsigs, unsigned char *pass_signals)
89be2091 2003{
4082afcc 2004 if (packet_support (PACKET_QPassSignals) != PACKET_DISABLE)
89be2091
DJ
2005 {
2006 char *pass_packet, *p;
89be2091 2007 int count = 0, i;
747dc59d 2008 struct remote_state *rs = get_remote_state ();
89be2091
DJ
2009
2010 gdb_assert (numsigs < 256);
2011 for (i = 0; i < numsigs; i++)
2012 {
2455069d 2013 if (pass_signals[i])
89be2091
DJ
2014 count++;
2015 }
224c3ddb 2016 pass_packet = (char *) xmalloc (count * 3 + strlen ("QPassSignals:") + 1);
89be2091
DJ
2017 strcpy (pass_packet, "QPassSignals:");
2018 p = pass_packet + strlen (pass_packet);
2019 for (i = 0; i < numsigs; i++)
2020 {
2455069d 2021 if (pass_signals[i])
89be2091
DJ
2022 {
2023 if (i >= 16)
2024 *p++ = tohex (i >> 4);
2025 *p++ = tohex (i & 15);
2026 if (count)
2027 *p++ = ';';
2028 else
2029 break;
2030 count--;
2031 }
2032 }
2033 *p = 0;
747dc59d 2034 if (!rs->last_pass_packet || strcmp (rs->last_pass_packet, pass_packet))
89be2091 2035 {
89be2091
DJ
2036 putpkt (pass_packet);
2037 getpkt (&rs->buf, &rs->buf_size, 0);
8dc5b319 2038 packet_ok (rs->buf, &remote_protocol_packets[PACKET_QPassSignals]);
747dc59d
TT
2039 if (rs->last_pass_packet)
2040 xfree (rs->last_pass_packet);
2041 rs->last_pass_packet = pass_packet;
89be2091
DJ
2042 }
2043 else
2044 xfree (pass_packet);
2045 }
2046}
2047
82075af2
JS
2048/* If 'QCatchSyscalls' is supported, tell the remote stub
2049 to report syscalls to GDB. */
2050
2051static int
2052remote_set_syscall_catchpoint (struct target_ops *self,
2053 int pid, int needed, int any_count,
2054 int table_size, int *table)
2055{
2056 char *catch_packet;
2057 enum packet_result result;
2058 int n_sysno = 0;
2059
2060 if (packet_support (PACKET_QCatchSyscalls) == PACKET_DISABLE)
2061 {
2062 /* Not supported. */
2063 return 1;
2064 }
2065
2066 if (needed && !any_count)
2067 {
2068 int i;
2069
2070 /* Count how many syscalls are to be caught (table[sysno] != 0). */
2071 for (i = 0; i < table_size; i++)
2072 {
2073 if (table[i] != 0)
2074 n_sysno++;
2075 }
2076 }
2077
2078 if (remote_debug)
2079 {
2080 fprintf_unfiltered (gdb_stdlog,
2081 "remote_set_syscall_catchpoint "
2082 "pid %d needed %d any_count %d n_sysno %d\n",
2083 pid, needed, any_count, n_sysno);
2084 }
2085
2086 if (needed)
2087 {
2088 /* Prepare a packet with the sysno list, assuming max 8+1
2089 characters for a sysno. If the resulting packet size is too
2090 big, fallback on the non-selective packet. */
2091 const int maxpktsz = strlen ("QCatchSyscalls:1") + n_sysno * 9 + 1;
2092
c0518081 2093 catch_packet = (char *) xmalloc (maxpktsz);
82075af2
JS
2094 strcpy (catch_packet, "QCatchSyscalls:1");
2095 if (!any_count)
2096 {
2097 int i;
2098 char *p;
2099
2100 p = catch_packet;
2101 p += strlen (p);
2102
2103 /* Add in catch_packet each syscall to be caught (table[i] != 0). */
2104 for (i = 0; i < table_size; i++)
2105 {
2106 if (table[i] != 0)
2107 p += xsnprintf (p, catch_packet + maxpktsz - p, ";%x", i);
2108 }
2109 }
2110 if (strlen (catch_packet) > get_remote_packet_size ())
2111 {
2112 /* catch_packet too big. Fallback to less efficient
2113 non selective mode, with GDB doing the filtering. */
2114 catch_packet[sizeof ("QCatchSyscalls:1") - 1] = 0;
2115 }
2116 }
2117 else
2118 catch_packet = xstrdup ("QCatchSyscalls:0");
2119
2120 {
2121 struct cleanup *old_chain = make_cleanup (xfree, catch_packet);
2122 struct remote_state *rs = get_remote_state ();
2123
2124 putpkt (catch_packet);
2125 getpkt (&rs->buf, &rs->buf_size, 0);
2126 result = packet_ok (rs->buf, &remote_protocol_packets[PACKET_QCatchSyscalls]);
2127 do_cleanups (old_chain);
2128 if (result == PACKET_OK)
2129 return 0;
2130 else
2131 return -1;
2132 }
2133}
2134
9b224c5e
PA
2135/* If 'QProgramSignals' is supported, tell the remote stub what
2136 signals it should pass through to the inferior when detaching. */
2137
2138static void
daf5e9b6
TT
2139remote_program_signals (struct target_ops *self,
2140 int numsigs, unsigned char *signals)
9b224c5e 2141{
4082afcc 2142 if (packet_support (PACKET_QProgramSignals) != PACKET_DISABLE)
9b224c5e
PA
2143 {
2144 char *packet, *p;
2145 int count = 0, i;
5e4a05c4 2146 struct remote_state *rs = get_remote_state ();
9b224c5e
PA
2147
2148 gdb_assert (numsigs < 256);
2149 for (i = 0; i < numsigs; i++)
2150 {
2151 if (signals[i])
2152 count++;
2153 }
224c3ddb 2154 packet = (char *) xmalloc (count * 3 + strlen ("QProgramSignals:") + 1);
9b224c5e
PA
2155 strcpy (packet, "QProgramSignals:");
2156 p = packet + strlen (packet);
2157 for (i = 0; i < numsigs; i++)
2158 {
2159 if (signal_pass_state (i))
2160 {
2161 if (i >= 16)
2162 *p++ = tohex (i >> 4);
2163 *p++ = tohex (i & 15);
2164 if (count)
2165 *p++ = ';';
2166 else
2167 break;
2168 count--;
2169 }
2170 }
2171 *p = 0;
5e4a05c4
TT
2172 if (!rs->last_program_signals_packet
2173 || strcmp (rs->last_program_signals_packet, packet) != 0)
9b224c5e 2174 {
9b224c5e
PA
2175 putpkt (packet);
2176 getpkt (&rs->buf, &rs->buf_size, 0);
8dc5b319 2177 packet_ok (rs->buf, &remote_protocol_packets[PACKET_QProgramSignals]);
5e4a05c4
TT
2178 xfree (rs->last_program_signals_packet);
2179 rs->last_program_signals_packet = packet;
9b224c5e
PA
2180 }
2181 else
2182 xfree (packet);
2183 }
2184}
2185
79d7f229
PA
2186/* If PTID is MAGIC_NULL_PTID, don't set any thread. If PTID is
2187 MINUS_ONE_PTID, set the thread to -1, so the stub returns the
2188 thread. If GEN is set, set the general thread, if not, then set
2189 the step/continue thread. */
c906108c 2190static void
d62a8ae2 2191set_thread (ptid_t ptid, int gen)
c906108c 2192{
d01949b6 2193 struct remote_state *rs = get_remote_state ();
47f8a51d 2194 ptid_t state = gen ? rs->general_thread : rs->continue_thread;
6d820c5c 2195 char *buf = rs->buf;
79d7f229 2196 char *endbuf = rs->buf + get_remote_packet_size ();
c906108c 2197
79d7f229 2198 if (ptid_equal (state, ptid))
c906108c
SS
2199 return;
2200
79d7f229
PA
2201 *buf++ = 'H';
2202 *buf++ = gen ? 'g' : 'c';
2203 if (ptid_equal (ptid, magic_null_ptid))
2204 xsnprintf (buf, endbuf - buf, "0");
2205 else if (ptid_equal (ptid, any_thread_ptid))
2206 xsnprintf (buf, endbuf - buf, "0");
2207 else if (ptid_equal (ptid, minus_one_ptid))
2208 xsnprintf (buf, endbuf - buf, "-1");
2209 else
82f73884 2210 write_ptid (buf, endbuf, ptid);
79d7f229 2211 putpkt (rs->buf);
6d820c5c 2212 getpkt (&rs->buf, &rs->buf_size, 0);
c906108c 2213 if (gen)
47f8a51d 2214 rs->general_thread = ptid;
c906108c 2215 else
47f8a51d 2216 rs->continue_thread = ptid;
c906108c 2217}
79d7f229
PA
2218
2219static void
d62a8ae2 2220set_general_thread (ptid_t ptid)
79d7f229
PA
2221{
2222 set_thread (ptid, 1);
2223}
2224
2225static void
d62a8ae2 2226set_continue_thread (ptid_t ptid)
79d7f229
PA
2227{
2228 set_thread (ptid, 0);
2229}
2230
3c9c4b83
PA
2231/* Change the remote current process. Which thread within the process
2232 ends up selected isn't important, as long as it is the same process
2233 as what INFERIOR_PTID points to.
2234
2235 This comes from that fact that there is no explicit notion of
2236 "selected process" in the protocol. The selected process for
2237 general operations is the process the selected general thread
2238 belongs to. */
2239
2240static void
2241set_general_process (void)
2242{
2243 struct remote_state *rs = get_remote_state ();
2244
2245 /* If the remote can't handle multiple processes, don't bother. */
8020350c 2246 if (!remote_multi_process_p (rs))
3c9c4b83
PA
2247 return;
2248
2249 /* We only need to change the remote current thread if it's pointing
2250 at some other process. */
47f8a51d 2251 if (ptid_get_pid (rs->general_thread) != ptid_get_pid (inferior_ptid))
3c9c4b83
PA
2252 set_general_thread (inferior_ptid);
2253}
2254
c906108c 2255\f
7d1a114c
PA
2256/* Return nonzero if this is the main thread that we made up ourselves
2257 to model non-threaded targets as single-threaded. */
c906108c
SS
2258
2259static int
7d1a114c 2260remote_thread_always_alive (struct target_ops *ops, ptid_t ptid)
c906108c 2261{
c0a2216e
PA
2262 if (ptid_equal (ptid, magic_null_ptid))
2263 /* The main thread is always alive. */
2264 return 1;
2265
ba348170 2266 if (ptid_get_pid (ptid) != 0 && ptid_get_lwp (ptid) == 0)
c0a2216e
PA
2267 /* The main thread is always alive. This can happen after a
2268 vAttach, if the remote side doesn't support
2269 multi-threading. */
2270 return 1;
2271
7d1a114c
PA
2272 return 0;
2273}
2274
2275/* Return nonzero if the thread PTID is still alive on the remote
2276 system. */
2277
2278static int
2279remote_thread_alive (struct target_ops *ops, ptid_t ptid)
2280{
2281 struct remote_state *rs = get_remote_state ();
2282 char *p, *endp;
2283
2284 /* Check if this is a thread that we made up ourselves to model
2285 non-threaded targets as single-threaded. */
2286 if (remote_thread_always_alive (ops, ptid))
2287 return 1;
2288
82f73884
PA
2289 p = rs->buf;
2290 endp = rs->buf + get_remote_packet_size ();
2291
2292 *p++ = 'T';
2293 write_ptid (p, endp, ptid);
2294
2e9f7625 2295 putpkt (rs->buf);
6d820c5c 2296 getpkt (&rs->buf, &rs->buf_size, 0);
2e9f7625 2297 return (rs->buf[0] == 'O' && rs->buf[1] == 'K');
c906108c
SS
2298}
2299
79efa585
SM
2300/* Return a pointer to a thread name if we know it and NULL otherwise.
2301 The thread_info object owns the memory for the name. */
2302
2303static const char *
2304remote_thread_name (struct target_ops *ops, struct thread_info *info)
2305{
2306 if (info->priv != NULL)
2307 return info->priv->name;
2308
2309 return NULL;
2310}
2311
c906108c
SS
2312/* About these extended threadlist and threadinfo packets. They are
2313 variable length packets but, the fields within them are often fixed
2314 length. They are redundent enough to send over UDP as is the
2315 remote protocol in general. There is a matching unit test module
2316 in libstub. */
2317
23860348 2318/* WARNING: This threadref data structure comes from the remote O.S.,
0df8b418 2319 libstub protocol encoding, and remote.c. It is not particularly
23860348 2320 changable. */
cce74817
JM
2321
2322/* Right now, the internal structure is int. We want it to be bigger.
0df8b418 2323 Plan to fix this. */
cce74817 2324
23860348 2325typedef int gdb_threadref; /* Internal GDB thread reference. */
cce74817 2326
9d1f7ab2 2327/* gdb_ext_thread_info is an internal GDB data structure which is
cfde0993 2328 equivalent to the reply of the remote threadinfo packet. */
cce74817
JM
2329
2330struct gdb_ext_thread_info
c5aa993b 2331 {
23860348 2332 threadref threadid; /* External form of thread reference. */
2bc416ba 2333 int active; /* Has state interesting to GDB?
23860348 2334 regs, stack. */
2bc416ba 2335 char display[256]; /* Brief state display, name,
cedea757 2336 blocked/suspended. */
23860348 2337 char shortname[32]; /* To be used to name threads. */
2bc416ba 2338 char more_display[256]; /* Long info, statistics, queue depth,
23860348 2339 whatever. */
c5aa993b 2340 };
cce74817
JM
2341
2342/* The volume of remote transfers can be limited by submitting
2343 a mask containing bits specifying the desired information.
2344 Use a union of these values as the 'selection' parameter to
0df8b418 2345 get_thread_info. FIXME: Make these TAG names more thread specific. */
cce74817
JM
2346
2347#define TAG_THREADID 1
2348#define TAG_EXISTS 2
2349#define TAG_DISPLAY 4
2350#define TAG_THREADNAME 8
c5aa993b 2351#define TAG_MOREDISPLAY 16
cce74817 2352
23860348 2353#define BUF_THREAD_ID_SIZE (OPAQUETHREADBYTES * 2)
c906108c 2354
a14ed312 2355static char *unpack_nibble (char *buf, int *val);
cce74817 2356
a14ed312 2357static char *unpack_byte (char *buf, int *value);
cce74817 2358
a14ed312 2359static char *pack_int (char *buf, int value);
cce74817 2360
a14ed312 2361static char *unpack_int (char *buf, int *value);
cce74817 2362
a14ed312 2363static char *unpack_string (char *src, char *dest, int length);
cce74817 2364
23860348 2365static char *pack_threadid (char *pkt, threadref *id);
cce74817 2366
23860348 2367static char *unpack_threadid (char *inbuf, threadref *id);
cce74817 2368
23860348 2369void int_to_threadref (threadref *id, int value);
cce74817 2370
23860348 2371static int threadref_to_int (threadref *ref);
cce74817 2372
23860348 2373static void copy_threadref (threadref *dest, threadref *src);
cce74817 2374
23860348 2375static int threadmatch (threadref *dest, threadref *src);
cce74817 2376
2bc416ba 2377static char *pack_threadinfo_request (char *pkt, int mode,
23860348 2378 threadref *id);
cce74817 2379
a14ed312 2380static int remote_unpack_thread_info_response (char *pkt,
23860348 2381 threadref *expectedref,
a14ed312
KB
2382 struct gdb_ext_thread_info
2383 *info);
cce74817
JM
2384
2385
2bc416ba 2386static int remote_get_threadinfo (threadref *threadid,
23860348 2387 int fieldset, /*TAG mask */
a14ed312 2388 struct gdb_ext_thread_info *info);
cce74817 2389
a14ed312
KB
2390static char *pack_threadlist_request (char *pkt, int startflag,
2391 int threadcount,
23860348 2392 threadref *nextthread);
cce74817 2393
a14ed312
KB
2394static int parse_threadlist_response (char *pkt,
2395 int result_limit,
23860348 2396 threadref *original_echo,
2bc416ba 2397 threadref *resultlist,
23860348 2398 int *doneflag);
cce74817 2399
a14ed312 2400static int remote_get_threadlist (int startflag,
23860348 2401 threadref *nextthread,
a14ed312
KB
2402 int result_limit,
2403 int *done,
2bc416ba 2404 int *result_count,
23860348 2405 threadref *threadlist);
cce74817 2406
23860348 2407typedef int (*rmt_thread_action) (threadref *ref, void *context);
cce74817 2408
a14ed312
KB
2409static int remote_threadlist_iterator (rmt_thread_action stepfunction,
2410 void *context, int looplimit);
cce74817 2411
23860348 2412static int remote_newthread_step (threadref *ref, void *context);
cce74817 2413
82f73884
PA
2414
2415/* Write a PTID to BUF. ENDBUF points to one-passed-the-end of the
2416 buffer we're allowed to write to. Returns
2417 BUF+CHARACTERS_WRITTEN. */
2418
2419static char *
2420write_ptid (char *buf, const char *endbuf, ptid_t ptid)
2421{
2422 int pid, tid;
2423 struct remote_state *rs = get_remote_state ();
2424
2425 if (remote_multi_process_p (rs))
2426 {
2427 pid = ptid_get_pid (ptid);
2428 if (pid < 0)
2429 buf += xsnprintf (buf, endbuf - buf, "p-%x.", -pid);
2430 else
2431 buf += xsnprintf (buf, endbuf - buf, "p%x.", pid);
2432 }
ba348170 2433 tid = ptid_get_lwp (ptid);
82f73884
PA
2434 if (tid < 0)
2435 buf += xsnprintf (buf, endbuf - buf, "-%x", -tid);
2436 else
2437 buf += xsnprintf (buf, endbuf - buf, "%x", tid);
2438
2439 return buf;
2440}
2441
2442/* Extract a PTID from BUF. If non-null, OBUF is set to the to one
2443 passed the last parsed char. Returns null_ptid on error. */
2444
2445static ptid_t
2446read_ptid (char *buf, char **obuf)
2447{
2448 char *p = buf;
2449 char *pp;
2450 ULONGEST pid = 0, tid = 0;
82f73884
PA
2451
2452 if (*p == 'p')
2453 {
2454 /* Multi-process ptid. */
2455 pp = unpack_varlen_hex (p + 1, &pid);
2456 if (*pp != '.')
b37520b6 2457 error (_("invalid remote ptid: %s"), p);
82f73884
PA
2458
2459 p = pp;
2460 pp = unpack_varlen_hex (p + 1, &tid);
2461 if (obuf)
2462 *obuf = pp;
ba348170 2463 return ptid_build (pid, tid, 0);
82f73884
PA
2464 }
2465
2466 /* No multi-process. Just a tid. */
2467 pp = unpack_varlen_hex (p, &tid);
2468
c9f35b34
KB
2469 /* Return null_ptid when no thread id is found. */
2470 if (p == pp)
2471 {
2472 if (obuf)
2473 *obuf = pp;
2474 return null_ptid;
2475 }
2476
82f73884 2477 /* Since the stub is not sending a process id, then default to
ca19bf23
PA
2478 what's in inferior_ptid, unless it's null at this point. If so,
2479 then since there's no way to know the pid of the reported
2480 threads, use the magic number. */
2481 if (ptid_equal (inferior_ptid, null_ptid))
2482 pid = ptid_get_pid (magic_null_ptid);
2483 else
2484 pid = ptid_get_pid (inferior_ptid);
82f73884
PA
2485
2486 if (obuf)
2487 *obuf = pp;
ba348170 2488 return ptid_build (pid, tid, 0);
82f73884
PA
2489}
2490
c906108c 2491static int
fba45db2 2492stubhex (int ch)
c906108c
SS
2493{
2494 if (ch >= 'a' && ch <= 'f')
2495 return ch - 'a' + 10;
2496 if (ch >= '0' && ch <= '9')
2497 return ch - '0';
2498 if (ch >= 'A' && ch <= 'F')
2499 return ch - 'A' + 10;
2500 return -1;
2501}
2502
2503static int
fba45db2 2504stub_unpack_int (char *buff, int fieldlength)
c906108c
SS
2505{
2506 int nibble;
2507 int retval = 0;
2508
2509 while (fieldlength)
2510 {
2511 nibble = stubhex (*buff++);
2512 retval |= nibble;
2513 fieldlength--;
2514 if (fieldlength)
2515 retval = retval << 4;
2516 }
2517 return retval;
2518}
2519
c906108c 2520static char *
fba45db2 2521unpack_nibble (char *buf, int *val)
c906108c 2522{
b7589f7d 2523 *val = fromhex (*buf++);
c906108c
SS
2524 return buf;
2525}
2526
c906108c 2527static char *
fba45db2 2528unpack_byte (char *buf, int *value)
c906108c
SS
2529{
2530 *value = stub_unpack_int (buf, 2);
2531 return buf + 2;
2532}
2533
2534static char *
fba45db2 2535pack_int (char *buf, int value)
c906108c
SS
2536{
2537 buf = pack_hex_byte (buf, (value >> 24) & 0xff);
2538 buf = pack_hex_byte (buf, (value >> 16) & 0xff);
2539 buf = pack_hex_byte (buf, (value >> 8) & 0x0ff);
2540 buf = pack_hex_byte (buf, (value & 0xff));
2541 return buf;
2542}
2543
2544static char *
fba45db2 2545unpack_int (char *buf, int *value)
c906108c
SS
2546{
2547 *value = stub_unpack_int (buf, 8);
2548 return buf + 8;
2549}
2550
23860348 2551#if 0 /* Currently unused, uncomment when needed. */
a14ed312 2552static char *pack_string (char *pkt, char *string);
c906108c
SS
2553
2554static char *
fba45db2 2555pack_string (char *pkt, char *string)
c906108c
SS
2556{
2557 char ch;
2558 int len;
2559
2560 len = strlen (string);
2561 if (len > 200)
23860348 2562 len = 200; /* Bigger than most GDB packets, junk??? */
c906108c
SS
2563 pkt = pack_hex_byte (pkt, len);
2564 while (len-- > 0)
2565 {
2566 ch = *string++;
2567 if ((ch == '\0') || (ch == '#'))
23860348 2568 ch = '*'; /* Protect encapsulation. */
c906108c
SS
2569 *pkt++ = ch;
2570 }
2571 return pkt;
2572}
2573#endif /* 0 (unused) */
2574
2575static char *
fba45db2 2576unpack_string (char *src, char *dest, int length)
c906108c
SS
2577{
2578 while (length--)
2579 *dest++ = *src++;
2580 *dest = '\0';
2581 return src;
2582}
2583
2584static char *
fba45db2 2585pack_threadid (char *pkt, threadref *id)
c906108c
SS
2586{
2587 char *limit;
2588 unsigned char *altid;
2589
2590 altid = (unsigned char *) id;
2591 limit = pkt + BUF_THREAD_ID_SIZE;
2592 while (pkt < limit)
2593 pkt = pack_hex_byte (pkt, *altid++);
2594 return pkt;
2595}
2596
2597
2598static char *
fba45db2 2599unpack_threadid (char *inbuf, threadref *id)
c906108c
SS
2600{
2601 char *altref;
2602 char *limit = inbuf + BUF_THREAD_ID_SIZE;
2603 int x, y;
2604
2605 altref = (char *) id;
2606
2607 while (inbuf < limit)
2608 {
2609 x = stubhex (*inbuf++);
2610 y = stubhex (*inbuf++);
2611 *altref++ = (x << 4) | y;
2612 }
2613 return inbuf;
2614}
2615
2616/* Externally, threadrefs are 64 bits but internally, they are still
0df8b418 2617 ints. This is due to a mismatch of specifications. We would like
c906108c
SS
2618 to use 64bit thread references internally. This is an adapter
2619 function. */
2620
2621void
fba45db2 2622int_to_threadref (threadref *id, int value)
c906108c
SS
2623{
2624 unsigned char *scan;
2625
2626 scan = (unsigned char *) id;
2627 {
2628 int i = 4;
2629 while (i--)
2630 *scan++ = 0;
2631 }
2632 *scan++ = (value >> 24) & 0xff;
2633 *scan++ = (value >> 16) & 0xff;
2634 *scan++ = (value >> 8) & 0xff;
2635 *scan++ = (value & 0xff);
2636}
2637
2638static int
fba45db2 2639threadref_to_int (threadref *ref)
c906108c
SS
2640{
2641 int i, value = 0;
2642 unsigned char *scan;
2643
cfd77fa1 2644 scan = *ref;
c906108c
SS
2645 scan += 4;
2646 i = 4;
2647 while (i-- > 0)
2648 value = (value << 8) | ((*scan++) & 0xff);
2649 return value;
2650}
2651
2652static void
fba45db2 2653copy_threadref (threadref *dest, threadref *src)
c906108c
SS
2654{
2655 int i;
2656 unsigned char *csrc, *cdest;
2657
2658 csrc = (unsigned char *) src;
2659 cdest = (unsigned char *) dest;
2660 i = 8;
2661 while (i--)
2662 *cdest++ = *csrc++;
2663}
2664
2665static int
fba45db2 2666threadmatch (threadref *dest, threadref *src)
c906108c 2667{
23860348 2668 /* Things are broken right now, so just assume we got a match. */
c906108c
SS
2669#if 0
2670 unsigned char *srcp, *destp;
2671 int i, result;
2672 srcp = (char *) src;
2673 destp = (char *) dest;
2674
2675 result = 1;
2676 while (i-- > 0)
2677 result &= (*srcp++ == *destp++) ? 1 : 0;
2678 return result;
2679#endif
2680 return 1;
2681}
2682
2683/*
c5aa993b
JM
2684 threadid:1, # always request threadid
2685 context_exists:2,
2686 display:4,
2687 unique_name:8,
2688 more_display:16
2689 */
c906108c
SS
2690
2691/* Encoding: 'Q':8,'P':8,mask:32,threadid:64 */
2692
2693static char *
fba45db2 2694pack_threadinfo_request (char *pkt, int mode, threadref *id)
c906108c 2695{
23860348
MS
2696 *pkt++ = 'q'; /* Info Query */
2697 *pkt++ = 'P'; /* process or thread info */
2698 pkt = pack_int (pkt, mode); /* mode */
c906108c 2699 pkt = pack_threadid (pkt, id); /* threadid */
23860348 2700 *pkt = '\0'; /* terminate */
c906108c
SS
2701 return pkt;
2702}
2703
23860348 2704/* These values tag the fields in a thread info response packet. */
c906108c 2705/* Tagging the fields allows us to request specific fields and to
23860348 2706 add more fields as time goes by. */
c906108c 2707
23860348 2708#define TAG_THREADID 1 /* Echo the thread identifier. */
c5aa993b 2709#define TAG_EXISTS 2 /* Is this process defined enough to
23860348 2710 fetch registers and its stack? */
c5aa993b 2711#define TAG_DISPLAY 4 /* A short thing maybe to put on a window */
23860348 2712#define TAG_THREADNAME 8 /* string, maps 1-to-1 with a thread is. */
802188a7 2713#define TAG_MOREDISPLAY 16 /* Whatever the kernel wants to say about
23860348 2714 the process. */
c906108c
SS
2715
2716static int
fba45db2
KB
2717remote_unpack_thread_info_response (char *pkt, threadref *expectedref,
2718 struct gdb_ext_thread_info *info)
c906108c 2719{
d01949b6 2720 struct remote_state *rs = get_remote_state ();
c906108c 2721 int mask, length;
cfd77fa1 2722 int tag;
c906108c 2723 threadref ref;
6d820c5c 2724 char *limit = pkt + rs->buf_size; /* Plausible parsing limit. */
c906108c
SS
2725 int retval = 1;
2726
23860348 2727 /* info->threadid = 0; FIXME: implement zero_threadref. */
c906108c
SS
2728 info->active = 0;
2729 info->display[0] = '\0';
2730 info->shortname[0] = '\0';
2731 info->more_display[0] = '\0';
2732
23860348
MS
2733 /* Assume the characters indicating the packet type have been
2734 stripped. */
c906108c
SS
2735 pkt = unpack_int (pkt, &mask); /* arg mask */
2736 pkt = unpack_threadid (pkt, &ref);
2737
2738 if (mask == 0)
8a3fe4f8 2739 warning (_("Incomplete response to threadinfo request."));
c906108c 2740 if (!threadmatch (&ref, expectedref))
23860348 2741 { /* This is an answer to a different request. */
8a3fe4f8 2742 warning (_("ERROR RMT Thread info mismatch."));
c906108c
SS
2743 return 0;
2744 }
2745 copy_threadref (&info->threadid, &ref);
2746
23860348 2747 /* Loop on tagged fields , try to bail if somthing goes wrong. */
c906108c 2748
23860348
MS
2749 /* Packets are terminated with nulls. */
2750 while ((pkt < limit) && mask && *pkt)
c906108c
SS
2751 {
2752 pkt = unpack_int (pkt, &tag); /* tag */
23860348
MS
2753 pkt = unpack_byte (pkt, &length); /* length */
2754 if (!(tag & mask)) /* Tags out of synch with mask. */
c906108c 2755 {
8a3fe4f8 2756 warning (_("ERROR RMT: threadinfo tag mismatch."));
c906108c
SS
2757 retval = 0;
2758 break;
2759 }
2760 if (tag == TAG_THREADID)
2761 {
2762 if (length != 16)
2763 {
8a3fe4f8 2764 warning (_("ERROR RMT: length of threadid is not 16."));
c906108c
SS
2765 retval = 0;
2766 break;
2767 }
2768 pkt = unpack_threadid (pkt, &ref);
2769 mask = mask & ~TAG_THREADID;
2770 continue;
2771 }
2772 if (tag == TAG_EXISTS)
2773 {
2774 info->active = stub_unpack_int (pkt, length);
2775 pkt += length;
2776 mask = mask & ~(TAG_EXISTS);
2777 if (length > 8)
2778 {
8a3fe4f8 2779 warning (_("ERROR RMT: 'exists' length too long."));
c906108c
SS
2780 retval = 0;
2781 break;
2782 }
2783 continue;
2784 }
2785 if (tag == TAG_THREADNAME)
2786 {
2787 pkt = unpack_string (pkt, &info->shortname[0], length);
2788 mask = mask & ~TAG_THREADNAME;
2789 continue;
2790 }
2791 if (tag == TAG_DISPLAY)
2792 {
2793 pkt = unpack_string (pkt, &info->display[0], length);
2794 mask = mask & ~TAG_DISPLAY;
2795 continue;
2796 }
2797 if (tag == TAG_MOREDISPLAY)
2798 {
2799 pkt = unpack_string (pkt, &info->more_display[0], length);
2800 mask = mask & ~TAG_MOREDISPLAY;
2801 continue;
2802 }
8a3fe4f8 2803 warning (_("ERROR RMT: unknown thread info tag."));
23860348 2804 break; /* Not a tag we know about. */
c906108c
SS
2805 }
2806 return retval;
2807}
2808
2809static int
fba45db2
KB
2810remote_get_threadinfo (threadref *threadid, int fieldset, /* TAG mask */
2811 struct gdb_ext_thread_info *info)
c906108c 2812{
d01949b6 2813 struct remote_state *rs = get_remote_state ();
c906108c 2814 int result;
c906108c 2815
2e9f7625
DJ
2816 pack_threadinfo_request (rs->buf, fieldset, threadid);
2817 putpkt (rs->buf);
6d820c5c 2818 getpkt (&rs->buf, &rs->buf_size, 0);
3084dd77
PA
2819
2820 if (rs->buf[0] == '\0')
2821 return 0;
2822
2e9f7625 2823 result = remote_unpack_thread_info_response (rs->buf + 2,
23860348 2824 threadid, info);
c906108c
SS
2825 return result;
2826}
2827
c906108c
SS
2828/* Format: i'Q':8,i"L":8,initflag:8,batchsize:16,lastthreadid:32 */
2829
2830static char *
fba45db2
KB
2831pack_threadlist_request (char *pkt, int startflag, int threadcount,
2832 threadref *nextthread)
c906108c
SS
2833{
2834 *pkt++ = 'q'; /* info query packet */
2835 *pkt++ = 'L'; /* Process LIST or threadLIST request */
23860348 2836 pkt = pack_nibble (pkt, startflag); /* initflag 1 bytes */
c906108c
SS
2837 pkt = pack_hex_byte (pkt, threadcount); /* threadcount 2 bytes */
2838 pkt = pack_threadid (pkt, nextthread); /* 64 bit thread identifier */
2839 *pkt = '\0';
2840 return pkt;
2841}
2842
2843/* Encoding: 'q':8,'M':8,count:16,done:8,argthreadid:64,(threadid:64)* */
2844
2845static int
fba45db2
KB
2846parse_threadlist_response (char *pkt, int result_limit,
2847 threadref *original_echo, threadref *resultlist,
2848 int *doneflag)
c906108c 2849{
d01949b6 2850 struct remote_state *rs = get_remote_state ();
c906108c
SS
2851 char *limit;
2852 int count, resultcount, done;
2853
2854 resultcount = 0;
2855 /* Assume the 'q' and 'M chars have been stripped. */
6d820c5c 2856 limit = pkt + (rs->buf_size - BUF_THREAD_ID_SIZE);
23860348 2857 /* done parse past here */
c906108c
SS
2858 pkt = unpack_byte (pkt, &count); /* count field */
2859 pkt = unpack_nibble (pkt, &done);
2860 /* The first threadid is the argument threadid. */
2861 pkt = unpack_threadid (pkt, original_echo); /* should match query packet */
2862 while ((count-- > 0) && (pkt < limit))
2863 {
2864 pkt = unpack_threadid (pkt, resultlist++);
2865 if (resultcount++ >= result_limit)
2866 break;
2867 }
2868 if (doneflag)
2869 *doneflag = done;
2870 return resultcount;
2871}
2872
6dc54d91
PA
2873/* Fetch the next batch of threads from the remote. Returns -1 if the
2874 qL packet is not supported, 0 on error and 1 on success. */
2875
c906108c 2876static int
fba45db2
KB
2877remote_get_threadlist (int startflag, threadref *nextthread, int result_limit,
2878 int *done, int *result_count, threadref *threadlist)
c906108c 2879{
d01949b6 2880 struct remote_state *rs = get_remote_state ();
c906108c
SS
2881 int result = 1;
2882
23860348 2883 /* Trancate result limit to be smaller than the packet size. */
3e43a32a
MS
2884 if ((((result_limit + 1) * BUF_THREAD_ID_SIZE) + 10)
2885 >= get_remote_packet_size ())
ea9c271d 2886 result_limit = (get_remote_packet_size () / BUF_THREAD_ID_SIZE) - 2;
c906108c 2887
6d820c5c
DJ
2888 pack_threadlist_request (rs->buf, startflag, result_limit, nextthread);
2889 putpkt (rs->buf);
2890 getpkt (&rs->buf, &rs->buf_size, 0);
d8f2712d 2891 if (*rs->buf == '\0')
6dc54d91
PA
2892 {
2893 /* Packet not supported. */
2894 return -1;
2895 }
2896
2897 *result_count =
2898 parse_threadlist_response (rs->buf + 2, result_limit,
2899 &rs->echo_nextthread, threadlist, done);
c906108c 2900
0d031856 2901 if (!threadmatch (&rs->echo_nextthread, nextthread))
c906108c 2902 {
23860348
MS
2903 /* FIXME: This is a good reason to drop the packet. */
2904 /* Possably, there is a duplicate response. */
c906108c
SS
2905 /* Possabilities :
2906 retransmit immediatly - race conditions
2907 retransmit after timeout - yes
2908 exit
2909 wait for packet, then exit
2910 */
8a3fe4f8 2911 warning (_("HMM: threadlist did not echo arg thread, dropping it."));
23860348 2912 return 0; /* I choose simply exiting. */
c906108c
SS
2913 }
2914 if (*result_count <= 0)
2915 {
2916 if (*done != 1)
2917 {
8a3fe4f8 2918 warning (_("RMT ERROR : failed to get remote thread list."));
c906108c
SS
2919 result = 0;
2920 }
2921 return result; /* break; */
2922 }
2923 if (*result_count > result_limit)
2924 {
2925 *result_count = 0;
8a3fe4f8 2926 warning (_("RMT ERROR: threadlist response longer than requested."));
c906108c
SS
2927 return 0;
2928 }
2929 return result;
2930}
2931
6dc54d91
PA
2932/* Fetch the list of remote threads, with the qL packet, and call
2933 STEPFUNCTION for each thread found. Stops iterating and returns 1
2934 if STEPFUNCTION returns true. Stops iterating and returns 0 if the
2935 STEPFUNCTION returns false. If the packet is not supported,
2936 returns -1. */
c906108c 2937
c906108c 2938static int
fba45db2
KB
2939remote_threadlist_iterator (rmt_thread_action stepfunction, void *context,
2940 int looplimit)
c906108c 2941{
0d031856 2942 struct remote_state *rs = get_remote_state ();
c906108c
SS
2943 int done, i, result_count;
2944 int startflag = 1;
2945 int result = 1;
2946 int loopcount = 0;
c906108c
SS
2947
2948 done = 0;
2949 while (!done)
2950 {
2951 if (loopcount++ > looplimit)
2952 {
2953 result = 0;
8a3fe4f8 2954 warning (_("Remote fetch threadlist -infinite loop-."));
c906108c
SS
2955 break;
2956 }
6dc54d91
PA
2957 result = remote_get_threadlist (startflag, &rs->nextthread,
2958 MAXTHREADLISTRESULTS,
2959 &done, &result_count,
2960 rs->resultthreadlist);
2961 if (result <= 0)
2962 break;
23860348 2963 /* Clear for later iterations. */
c906108c
SS
2964 startflag = 0;
2965 /* Setup to resume next batch of thread references, set nextthread. */
2966 if (result_count >= 1)
0d031856
TT
2967 copy_threadref (&rs->nextthread,
2968 &rs->resultthreadlist[result_count - 1]);
c906108c
SS
2969 i = 0;
2970 while (result_count--)
6dc54d91
PA
2971 {
2972 if (!(*stepfunction) (&rs->resultthreadlist[i++], context))
2973 {
2974 result = 0;
2975 break;
2976 }
2977 }
c906108c
SS
2978 }
2979 return result;
2980}
2981
6dc54d91
PA
2982/* A thread found on the remote target. */
2983
2984typedef struct thread_item
2985{
2986 /* The thread's PTID. */
2987 ptid_t ptid;
2988
2989 /* The thread's extra info. May be NULL. */
2990 char *extra;
2991
79efa585
SM
2992 /* The thread's name. May be NULL. */
2993 char *name;
2994
6dc54d91
PA
2995 /* The core the thread was running on. -1 if not known. */
2996 int core;
2997} thread_item_t;
2998DEF_VEC_O(thread_item_t);
2999
3000/* Context passed around to the various methods listing remote
3001 threads. As new threads are found, they're added to the ITEMS
3002 vector. */
3003
3004struct threads_listing_context
3005{
3006 /* The threads found on the remote target. */
3007 VEC (thread_item_t) *items;
3008};
3009
80134cf5
PA
3010/* Discard the contents of the constructed thread listing context. */
3011
3012static void
3013clear_threads_listing_context (void *p)
3014{
19ba03f4
SM
3015 struct threads_listing_context *context
3016 = (struct threads_listing_context *) p;
80134cf5
PA
3017 int i;
3018 struct thread_item *item;
3019
3020 for (i = 0; VEC_iterate (thread_item_t, context->items, i, item); ++i)
79efa585
SM
3021 {
3022 xfree (item->extra);
3023 xfree (item->name);
3024 }
80134cf5
PA
3025
3026 VEC_free (thread_item_t, context->items);
3027}
3028
cbb8991c
DB
3029/* Remove the thread specified as the related_pid field of WS
3030 from the CONTEXT list. */
3031
3032static void
3033threads_listing_context_remove (struct target_waitstatus *ws,
3034 struct threads_listing_context *context)
3035{
3036 struct thread_item *item;
3037 int i;
3038 ptid_t child_ptid = ws->value.related_pid;
3039
3040 for (i = 0; VEC_iterate (thread_item_t, context->items, i, item); ++i)
3041 {
3042 if (ptid_equal (item->ptid, child_ptid))
3043 {
3044 VEC_ordered_remove (thread_item_t, context->items, i);
3045 break;
3046 }
3047 }
3048}
3049
c906108c 3050static int
6dc54d91 3051remote_newthread_step (threadref *ref, void *data)
c906108c 3052{
19ba03f4
SM
3053 struct threads_listing_context *context
3054 = (struct threads_listing_context *) data;
6dc54d91 3055 struct thread_item item;
79d7f229 3056 int pid = ptid_get_pid (inferior_ptid);
39f77062 3057
6dc54d91
PA
3058 item.ptid = ptid_build (pid, threadref_to_int (ref), 0);
3059 item.core = -1;
2e3b657e 3060 item.name = NULL;
6dc54d91
PA
3061 item.extra = NULL;
3062
3063 VEC_safe_push (thread_item_t, context->items, &item);
3064
c906108c
SS
3065 return 1; /* continue iterator */
3066}
3067
3068#define CRAZY_MAX_THREADS 1000
3069
39f77062
KB
3070static ptid_t
3071remote_current_thread (ptid_t oldpid)
c906108c 3072{
d01949b6 3073 struct remote_state *rs = get_remote_state ();
c906108c
SS
3074
3075 putpkt ("qC");
6d820c5c 3076 getpkt (&rs->buf, &rs->buf_size, 0);
2e9f7625 3077 if (rs->buf[0] == 'Q' && rs->buf[1] == 'C')
c9f35b34
KB
3078 {
3079 char *obuf;
3080 ptid_t result;
3081
3082 result = read_ptid (&rs->buf[2], &obuf);
3083 if (*obuf != '\0' && remote_debug)
3084 fprintf_unfiltered (gdb_stdlog,
3085 "warning: garbage in qC reply\n");
3086
3087 return result;
3088 }
c906108c
SS
3089 else
3090 return oldpid;
3091}
3092
6dc54d91 3093/* List remote threads using the deprecated qL packet. */
cce74817 3094
6dc54d91
PA
3095static int
3096remote_get_threads_with_ql (struct target_ops *ops,
3097 struct threads_listing_context *context)
c906108c 3098{
6dc54d91
PA
3099 if (remote_threadlist_iterator (remote_newthread_step, context,
3100 CRAZY_MAX_THREADS) >= 0)
3101 return 1;
3102
3103 return 0;
c906108c
SS
3104}
3105
dc146f7c
VP
3106#if defined(HAVE_LIBEXPAT)
3107
dc146f7c
VP
3108static void
3109start_thread (struct gdb_xml_parser *parser,
3110 const struct gdb_xml_element *element,
3111 void *user_data, VEC(gdb_xml_value_s) *attributes)
3112{
19ba03f4
SM
3113 struct threads_listing_context *data
3114 = (struct threads_listing_context *) user_data;
dc146f7c
VP
3115
3116 struct thread_item item;
3117 char *id;
3d2c1d41 3118 struct gdb_xml_value *attr;
dc146f7c 3119
19ba03f4 3120 id = (char *) xml_find_attribute (attributes, "id")->value;
dc146f7c
VP
3121 item.ptid = read_ptid (id, NULL);
3122
3d2c1d41
PA
3123 attr = xml_find_attribute (attributes, "core");
3124 if (attr != NULL)
3125 item.core = *(ULONGEST *) attr->value;
dc146f7c
VP
3126 else
3127 item.core = -1;
3128
79efa585 3129 attr = xml_find_attribute (attributes, "name");
e1961661 3130 item.name = attr != NULL ? xstrdup ((const char *) attr->value) : NULL;
79efa585 3131
dc146f7c
VP
3132 item.extra = 0;
3133
3134 VEC_safe_push (thread_item_t, data->items, &item);
3135}
3136
3137static void
3138end_thread (struct gdb_xml_parser *parser,
3139 const struct gdb_xml_element *element,
3140 void *user_data, const char *body_text)
3141{
19ba03f4
SM
3142 struct threads_listing_context *data
3143 = (struct threads_listing_context *) user_data;
dc146f7c
VP
3144
3145 if (body_text && *body_text)
2ae2a0b7 3146 VEC_last (thread_item_t, data->items)->extra = xstrdup (body_text);
dc146f7c
VP
3147}
3148
3149const struct gdb_xml_attribute thread_attributes[] = {
3150 { "id", GDB_XML_AF_NONE, NULL, NULL },
3151 { "core", GDB_XML_AF_OPTIONAL, gdb_xml_parse_attr_ulongest, NULL },
79efa585 3152 { "name", GDB_XML_AF_OPTIONAL, NULL, NULL },
dc146f7c
VP
3153 { NULL, GDB_XML_AF_NONE, NULL, NULL }
3154};
3155
3156const struct gdb_xml_element thread_children[] = {
3157 { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
3158};
3159
3160const struct gdb_xml_element threads_children[] = {
3161 { "thread", thread_attributes, thread_children,
3162 GDB_XML_EF_REPEATABLE | GDB_XML_EF_OPTIONAL,
3163 start_thread, end_thread },
3164 { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
3165};
3166
3167const struct gdb_xml_element threads_elements[] = {
3168 { "threads", NULL, threads_children,
3169 GDB_XML_EF_NONE, NULL, NULL },
3170 { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
3171};
3172
3173#endif
3174
6dc54d91 3175/* List remote threads using qXfer:threads:read. */
9d1f7ab2 3176
6dc54d91
PA
3177static int
3178remote_get_threads_with_qxfer (struct target_ops *ops,
3179 struct threads_listing_context *context)
0f71a2f6 3180{
dc146f7c 3181#if defined(HAVE_LIBEXPAT)
4082afcc 3182 if (packet_support (PACKET_qXfer_threads) == PACKET_ENABLE)
dc146f7c 3183 {
6dc54d91 3184 char *xml = target_read_stralloc (ops, TARGET_OBJECT_THREADS, NULL);
dc146f7c 3185 struct cleanup *back_to = make_cleanup (xfree, xml);
efc0eabd 3186
6dc54d91 3187 if (xml != NULL && *xml != '\0')
dc146f7c 3188 {
6dc54d91
PA
3189 gdb_xml_parse_quick (_("threads"), "threads.dtd",
3190 threads_elements, xml, context);
dc146f7c
VP
3191 }
3192
3193 do_cleanups (back_to);
6dc54d91 3194 return 1;
dc146f7c
VP
3195 }
3196#endif
3197
6dc54d91
PA
3198 return 0;
3199}
3200
3201/* List remote threads using qfThreadInfo/qsThreadInfo. */
3202
3203static int
3204remote_get_threads_with_qthreadinfo (struct target_ops *ops,
3205 struct threads_listing_context *context)
3206{
3207 struct remote_state *rs = get_remote_state ();
3208
b80fafe3 3209 if (rs->use_threadinfo_query)
9d1f7ab2 3210 {
6dc54d91
PA
3211 char *bufp;
3212
9d1f7ab2 3213 putpkt ("qfThreadInfo");
6d820c5c 3214 getpkt (&rs->buf, &rs->buf_size, 0);
2e9f7625 3215 bufp = rs->buf;
9d1f7ab2 3216 if (bufp[0] != '\0') /* q packet recognized */
802188a7 3217 {
9d1f7ab2
MS
3218 while (*bufp++ == 'm') /* reply contains one or more TID */
3219 {
3220 do
3221 {
6dc54d91
PA
3222 struct thread_item item;
3223
3224 item.ptid = read_ptid (bufp, &bufp);
3225 item.core = -1;
2e3b657e 3226 item.name = NULL;
6dc54d91
PA
3227 item.extra = NULL;
3228
3229 VEC_safe_push (thread_item_t, context->items, &item);
9d1f7ab2
MS
3230 }
3231 while (*bufp++ == ','); /* comma-separated list */
3232 putpkt ("qsThreadInfo");
6d820c5c 3233 getpkt (&rs->buf, &rs->buf_size, 0);
6dc54d91 3234 bufp = rs->buf;
9d1f7ab2 3235 }
6dc54d91
PA
3236 return 1;
3237 }
3238 else
3239 {
3240 /* Packet not recognized. */
3241 rs->use_threadinfo_query = 0;
9d1f7ab2
MS
3242 }
3243 }
3244
6dc54d91
PA
3245 return 0;
3246}
3247
e8032dde 3248/* Implement the to_update_thread_list function for the remote
6dc54d91
PA
3249 targets. */
3250
3251static void
e8032dde 3252remote_update_thread_list (struct target_ops *ops)
6dc54d91 3253{
6dc54d91
PA
3254 struct threads_listing_context context;
3255 struct cleanup *old_chain;
ab970af1 3256 int got_list = 0;
e8032dde 3257
6dc54d91
PA
3258 context.items = NULL;
3259 old_chain = make_cleanup (clear_threads_listing_context, &context);
3260
3261 /* We have a few different mechanisms to fetch the thread list. Try
3262 them all, starting with the most preferred one first, falling
3263 back to older methods. */
3264 if (remote_get_threads_with_qxfer (ops, &context)
3265 || remote_get_threads_with_qthreadinfo (ops, &context)
3266 || remote_get_threads_with_ql (ops, &context))
3267 {
3268 int i;
3269 struct thread_item *item;
ab970af1
PA
3270 struct thread_info *tp, *tmp;
3271
3272 got_list = 1;
3273
7d1a114c
PA
3274 if (VEC_empty (thread_item_t, context.items)
3275 && remote_thread_always_alive (ops, inferior_ptid))
3276 {
3277 /* Some targets don't really support threads, but still
3278 reply an (empty) thread list in response to the thread
3279 listing packets, instead of replying "packet not
3280 supported". Exit early so we don't delete the main
3281 thread. */
3282 do_cleanups (old_chain);
3283 return;
3284 }
3285
ab970af1
PA
3286 /* CONTEXT now holds the current thread list on the remote
3287 target end. Delete GDB-side threads no longer found on the
3288 target. */
8a06aea7 3289 ALL_THREADS_SAFE (tp, tmp)
cbb8991c 3290 {
ab970af1
PA
3291 for (i = 0;
3292 VEC_iterate (thread_item_t, context.items, i, item);
3293 ++i)
3294 {
3295 if (ptid_equal (item->ptid, tp->ptid))
3296 break;
3297 }
3298
3299 if (i == VEC_length (thread_item_t, context.items))
3300 {
3301 /* Not found. */
3302 delete_thread (tp->ptid);
3303 }
cbb8991c
DB
3304 }
3305
3306 /* Remove any unreported fork child threads from CONTEXT so
3307 that we don't interfere with follow fork, which is where
3308 creation of such threads is handled. */
3309 remove_new_fork_children (&context);
74531fed 3310
ab970af1 3311 /* And now add threads we don't know about yet to our list. */
6dc54d91
PA
3312 for (i = 0;
3313 VEC_iterate (thread_item_t, context.items, i, item);
3314 ++i)
3315 {
3316 if (!ptid_equal (item->ptid, null_ptid))
3317 {
3318 struct private_thread_info *info;
3319 /* In non-stop mode, we assume new found threads are
0d5b594f
PA
3320 executing until proven otherwise with a stop reply.
3321 In all-stop, we can only get here if all threads are
6dc54d91 3322 stopped. */
0d5b594f 3323 int executing = target_is_non_stop_p () ? 1 : 0;
6dc54d91 3324
0d5b594f 3325 remote_notice_new_inferior (item->ptid, executing);
6dc54d91 3326
85ad3aaf 3327 info = get_private_info_ptid (item->ptid);
6dc54d91
PA
3328 info->core = item->core;
3329 info->extra = item->extra;
3330 item->extra = NULL;
79efa585
SM
3331 info->name = item->name;
3332 item->name = NULL;
6dc54d91
PA
3333 }
3334 }
3335 }
3336
ab970af1
PA
3337 if (!got_list)
3338 {
3339 /* If no thread listing method is supported, then query whether
3340 each known thread is alive, one by one, with the T packet.
3341 If the target doesn't support threads at all, then this is a
3342 no-op. See remote_thread_alive. */
3343 prune_threads ();
3344 }
3345
6dc54d91 3346 do_cleanups (old_chain);
9d1f7ab2
MS
3347}
3348
802188a7 3349/*
9d1f7ab2
MS
3350 * Collect a descriptive string about the given thread.
3351 * The target may say anything it wants to about the thread
3352 * (typically info about its blocked / runnable state, name, etc.).
3353 * This string will appear in the info threads display.
802188a7 3354 *
9d1f7ab2
MS
3355 * Optional: targets are not required to implement this function.
3356 */
3357
7a114964 3358static const char *
c15906d8 3359remote_threads_extra_info (struct target_ops *self, struct thread_info *tp)
9d1f7ab2 3360{
d01949b6 3361 struct remote_state *rs = get_remote_state ();
9d1f7ab2
MS
3362 int result;
3363 int set;
3364 threadref id;
3365 struct gdb_ext_thread_info threadinfo;
23860348 3366 static char display_buf[100]; /* arbitrary... */
9d1f7ab2
MS
3367 int n = 0; /* position in display_buf */
3368
5d93a237 3369 if (rs->remote_desc == 0) /* paranoia */
8e65ff28 3370 internal_error (__FILE__, __LINE__,
e2e0b3e5 3371 _("remote_threads_extra_info"));
9d1f7ab2 3372
60e569b9 3373 if (ptid_equal (tp->ptid, magic_null_ptid)
ba348170 3374 || (ptid_get_pid (tp->ptid) != 0 && ptid_get_lwp (tp->ptid) == 0))
60e569b9
PA
3375 /* This is the main thread which was added by GDB. The remote
3376 server doesn't know about it. */
3377 return NULL;
3378
4082afcc 3379 if (packet_support (PACKET_qXfer_threads) == PACKET_ENABLE)
dc146f7c
VP
3380 {
3381 struct thread_info *info = find_thread_ptid (tp->ptid);
a744cf53 3382
fe978cb0
PA
3383 if (info && info->priv)
3384 return info->priv->extra;
dc146f7c
VP
3385 else
3386 return NULL;
3387 }
3388
b80fafe3 3389 if (rs->use_threadextra_query)
9d1f7ab2 3390 {
82f73884
PA
3391 char *b = rs->buf;
3392 char *endb = rs->buf + get_remote_packet_size ();
3393
3394 xsnprintf (b, endb - b, "qThreadExtraInfo,");
3395 b += strlen (b);
3396 write_ptid (b, endb, tp->ptid);
3397
2e9f7625 3398 putpkt (rs->buf);
6d820c5c 3399 getpkt (&rs->buf, &rs->buf_size, 0);
2e9f7625 3400 if (rs->buf[0] != 0)
9d1f7ab2 3401 {
325fac50 3402 n = std::min (strlen (rs->buf) / 2, sizeof (display_buf));
2e9f7625 3403 result = hex2bin (rs->buf, (gdb_byte *) display_buf, n);
30559e10 3404 display_buf [result] = '\0';
9d1f7ab2
MS
3405 return display_buf;
3406 }
0f71a2f6 3407 }
9d1f7ab2
MS
3408
3409 /* If the above query fails, fall back to the old method. */
b80fafe3 3410 rs->use_threadextra_query = 0;
9d1f7ab2
MS
3411 set = TAG_THREADID | TAG_EXISTS | TAG_THREADNAME
3412 | TAG_MOREDISPLAY | TAG_DISPLAY;
ba348170 3413 int_to_threadref (&id, ptid_get_lwp (tp->ptid));
9d1f7ab2
MS
3414 if (remote_get_threadinfo (&id, set, &threadinfo))
3415 if (threadinfo.active)
0f71a2f6 3416 {
9d1f7ab2 3417 if (*threadinfo.shortname)
2bc416ba 3418 n += xsnprintf (&display_buf[0], sizeof (display_buf) - n,
ecbc58df 3419 " Name: %s,", threadinfo.shortname);
9d1f7ab2 3420 if (*threadinfo.display)
2bc416ba 3421 n += xsnprintf (&display_buf[n], sizeof (display_buf) - n,
ecbc58df 3422 " State: %s,", threadinfo.display);
9d1f7ab2 3423 if (*threadinfo.more_display)
2bc416ba 3424 n += xsnprintf (&display_buf[n], sizeof (display_buf) - n,
ecbc58df 3425 " Priority: %s", threadinfo.more_display);
9d1f7ab2
MS
3426
3427 if (n > 0)
c5aa993b 3428 {
23860348 3429 /* For purely cosmetic reasons, clear up trailing commas. */
9d1f7ab2
MS
3430 if (',' == display_buf[n-1])
3431 display_buf[n-1] = ' ';
3432 return display_buf;
c5aa993b 3433 }
0f71a2f6 3434 }
9d1f7ab2 3435 return NULL;
0f71a2f6 3436}
c906108c 3437\f
c5aa993b 3438
0fb4aa4b 3439static int
61fc905d 3440remote_static_tracepoint_marker_at (struct target_ops *self, CORE_ADDR addr,
0fb4aa4b
PA
3441 struct static_tracepoint_marker *marker)
3442{
3443 struct remote_state *rs = get_remote_state ();
3444 char *p = rs->buf;
3445
bba74b36 3446 xsnprintf (p, get_remote_packet_size (), "qTSTMat:");
0fb4aa4b
PA
3447 p += strlen (p);
3448 p += hexnumstr (p, addr);
3449 putpkt (rs->buf);
3450 getpkt (&rs->buf, &rs->buf_size, 0);
3451 p = rs->buf;
3452
3453 if (*p == 'E')
3454 error (_("Remote failure reply: %s"), p);
3455
3456 if (*p++ == 'm')
3457 {
3458 parse_static_tracepoint_marker_definition (p, &p, marker);
3459 return 1;
3460 }
3461
3462 return 0;
3463}
3464
0fb4aa4b 3465static VEC(static_tracepoint_marker_p) *
c686c57f
TT
3466remote_static_tracepoint_markers_by_strid (struct target_ops *self,
3467 const char *strid)
0fb4aa4b
PA
3468{
3469 struct remote_state *rs = get_remote_state ();
3470 VEC(static_tracepoint_marker_p) *markers = NULL;
3471 struct static_tracepoint_marker *marker = NULL;
3472 struct cleanup *old_chain;
3473 char *p;
3474
3475 /* Ask for a first packet of static tracepoint marker
3476 definition. */
3477 putpkt ("qTfSTM");
3478 getpkt (&rs->buf, &rs->buf_size, 0);
3479 p = rs->buf;
3480 if (*p == 'E')
3481 error (_("Remote failure reply: %s"), p);
3482
3483 old_chain = make_cleanup (free_current_marker, &marker);
3484
3485 while (*p++ == 'm')
3486 {
3487 if (marker == NULL)
3488 marker = XCNEW (struct static_tracepoint_marker);
3489
3490 do
3491 {
3492 parse_static_tracepoint_marker_definition (p, &p, marker);
3493
3494 if (strid == NULL || strcmp (strid, marker->str_id) == 0)
3495 {
3496 VEC_safe_push (static_tracepoint_marker_p,
3497 markers, marker);
3498 marker = NULL;
3499 }
3500 else
3501 {
3502 release_static_tracepoint_marker (marker);
3503 memset (marker, 0, sizeof (*marker));
3504 }
3505 }
3506 while (*p++ == ','); /* comma-separated list */
3507 /* Ask for another packet of static tracepoint definition. */
3508 putpkt ("qTsSTM");
3509 getpkt (&rs->buf, &rs->buf_size, 0);
3510 p = rs->buf;
3511 }
3512
3513 do_cleanups (old_chain);
3514 return markers;
3515}
3516
3517\f
10760264
JB
3518/* Implement the to_get_ada_task_ptid function for the remote targets. */
3519
3520static ptid_t
1e6b91a4 3521remote_get_ada_task_ptid (struct target_ops *self, long lwp, long thread)
10760264 3522{
ba348170 3523 return ptid_build (ptid_get_pid (inferior_ptid), lwp, 0);
10760264
JB
3524}
3525\f
3526
24b06219 3527/* Restart the remote side; this is an extended protocol operation. */
c906108c
SS
3528
3529static void
fba45db2 3530extended_remote_restart (void)
c906108c 3531{
d01949b6 3532 struct remote_state *rs = get_remote_state ();
c906108c
SS
3533
3534 /* Send the restart command; for reasons I don't understand the
3535 remote side really expects a number after the "R". */
ea9c271d 3536 xsnprintf (rs->buf, get_remote_packet_size (), "R%x", 0);
6d820c5c 3537 putpkt (rs->buf);
c906108c 3538
ad9a8f3f 3539 remote_fileio_reset ();
c906108c
SS
3540}
3541\f
3542/* Clean up connection to a remote debugger. */
3543
c906108c 3544static void
de90e03d 3545remote_close (struct target_ops *self)
c906108c 3546{
5d93a237
TT
3547 struct remote_state *rs = get_remote_state ();
3548
3549 if (rs->remote_desc == NULL)
d3fd5342
PA
3550 return; /* already closed */
3551
048094ac 3552 /* Make sure we leave stdin registered in the event loop. */
e3594fd1 3553 remote_terminal_ours (self);
ce5ce7ed 3554
5d93a237
TT
3555 serial_close (rs->remote_desc);
3556 rs->remote_desc = NULL;
ce5ce7ed
PA
3557
3558 /* We don't have a connection to the remote stub anymore. Get rid
f67fd822
PM
3559 of all the inferiors and their threads we were controlling.
3560 Reset inferior_ptid to null_ptid first, as otherwise has_stack_frame
3561 will be unable to find the thread corresponding to (pid, 0, 0). */
0f2caa1b 3562 inferior_ptid = null_ptid;
f67fd822 3563 discard_all_inferiors ();
ce5ce7ed 3564
f48ff2a7
YQ
3565 /* We are closing the remote target, so we should discard
3566 everything of this target. */
bcc75809 3567 discard_pending_stop_replies_in_queue (rs);
74531fed
PA
3568
3569 if (remote_async_inferior_event_token)
3570 delete_async_event_handler (&remote_async_inferior_event_token);
722247f1 3571
5965e028 3572 remote_notif_state_xfree (rs->notif_state);
aef525cb
YQ
3573
3574 trace_reset_local_state ();
c906108c
SS
3575}
3576
23860348 3577/* Query the remote side for the text, data and bss offsets. */
c906108c
SS
3578
3579static void
fba45db2 3580get_offsets (void)
c906108c 3581{
d01949b6 3582 struct remote_state *rs = get_remote_state ();
2e9f7625 3583 char *buf;
085dd6e6 3584 char *ptr;
31d99776
DJ
3585 int lose, num_segments = 0, do_sections, do_segments;
3586 CORE_ADDR text_addr, data_addr, bss_addr, segments[2];
c906108c 3587 struct section_offsets *offs;
31d99776
DJ
3588 struct symfile_segment_data *data;
3589
3590 if (symfile_objfile == NULL)
3591 return;
c906108c
SS
3592
3593 putpkt ("qOffsets");
6d820c5c 3594 getpkt (&rs->buf, &rs->buf_size, 0);
2e9f7625 3595 buf = rs->buf;
c906108c
SS
3596
3597 if (buf[0] == '\000')
3598 return; /* Return silently. Stub doesn't support
23860348 3599 this command. */
c906108c
SS
3600 if (buf[0] == 'E')
3601 {
8a3fe4f8 3602 warning (_("Remote failure reply: %s"), buf);
c906108c
SS
3603 return;
3604 }
3605
3606 /* Pick up each field in turn. This used to be done with scanf, but
3607 scanf will make trouble if CORE_ADDR size doesn't match
3608 conversion directives correctly. The following code will work
3609 with any size of CORE_ADDR. */
3610 text_addr = data_addr = bss_addr = 0;
3611 ptr = buf;
3612 lose = 0;
3613
61012eef 3614 if (startswith (ptr, "Text="))
c906108c
SS
3615 {
3616 ptr += 5;
3617 /* Don't use strtol, could lose on big values. */
3618 while (*ptr && *ptr != ';')
3619 text_addr = (text_addr << 4) + fromhex (*ptr++);
c906108c 3620
61012eef 3621 if (startswith (ptr, ";Data="))
31d99776
DJ
3622 {
3623 ptr += 6;
3624 while (*ptr && *ptr != ';')
3625 data_addr = (data_addr << 4) + fromhex (*ptr++);
3626 }
3627 else
3628 lose = 1;
3629
61012eef 3630 if (!lose && startswith (ptr, ";Bss="))
31d99776
DJ
3631 {
3632 ptr += 5;
3633 while (*ptr && *ptr != ';')
3634 bss_addr = (bss_addr << 4) + fromhex (*ptr++);
c906108c 3635
31d99776
DJ
3636 if (bss_addr != data_addr)
3637 warning (_("Target reported unsupported offsets: %s"), buf);
3638 }
3639 else
3640 lose = 1;
3641 }
61012eef 3642 else if (startswith (ptr, "TextSeg="))
c906108c 3643 {
31d99776
DJ
3644 ptr += 8;
3645 /* Don't use strtol, could lose on big values. */
c906108c 3646 while (*ptr && *ptr != ';')
31d99776
DJ
3647 text_addr = (text_addr << 4) + fromhex (*ptr++);
3648 num_segments = 1;
3649
61012eef 3650 if (startswith (ptr, ";DataSeg="))
31d99776
DJ
3651 {
3652 ptr += 9;
3653 while (*ptr && *ptr != ';')
3654 data_addr = (data_addr << 4) + fromhex (*ptr++);
3655 num_segments++;
3656 }
c906108c
SS
3657 }
3658 else
3659 lose = 1;
3660
3661 if (lose)
8a3fe4f8 3662 error (_("Malformed response to offset query, %s"), buf);
31d99776
DJ
3663 else if (*ptr != '\0')
3664 warning (_("Target reported unsupported offsets: %s"), buf);
c906108c 3665
802188a7 3666 offs = ((struct section_offsets *)
a39a16c4 3667 alloca (SIZEOF_N_SECTION_OFFSETS (symfile_objfile->num_sections)));
802188a7 3668 memcpy (offs, symfile_objfile->section_offsets,
a39a16c4 3669 SIZEOF_N_SECTION_OFFSETS (symfile_objfile->num_sections));
c906108c 3670
31d99776
DJ
3671 data = get_symfile_segment_data (symfile_objfile->obfd);
3672 do_segments = (data != NULL);
3673 do_sections = num_segments == 0;
c906108c 3674
28c32713 3675 if (num_segments > 0)
31d99776 3676 {
31d99776
DJ
3677 segments[0] = text_addr;
3678 segments[1] = data_addr;
3679 }
28c32713
JB
3680 /* If we have two segments, we can still try to relocate everything
3681 by assuming that the .text and .data offsets apply to the whole
3682 text and data segments. Convert the offsets given in the packet
3683 to base addresses for symfile_map_offsets_to_segments. */
3684 else if (data && data->num_segments == 2)
3685 {
3686 segments[0] = data->segment_bases[0] + text_addr;
3687 segments[1] = data->segment_bases[1] + data_addr;
3688 num_segments = 2;
3689 }
8d385431
DJ
3690 /* If the object file has only one segment, assume that it is text
3691 rather than data; main programs with no writable data are rare,
3692 but programs with no code are useless. Of course the code might
3693 have ended up in the data segment... to detect that we would need
3694 the permissions here. */
3695 else if (data && data->num_segments == 1)
3696 {
3697 segments[0] = data->segment_bases[0] + text_addr;
3698 num_segments = 1;
3699 }
28c32713
JB
3700 /* There's no way to relocate by segment. */
3701 else
3702 do_segments = 0;
31d99776
DJ
3703
3704 if (do_segments)
3705 {
3706 int ret = symfile_map_offsets_to_segments (symfile_objfile->obfd, data,
3707 offs, num_segments, segments);
3708
3709 if (ret == 0 && !do_sections)
3e43a32a
MS
3710 error (_("Can not handle qOffsets TextSeg "
3711 "response with this symbol file"));
31d99776
DJ
3712
3713 if (ret > 0)
3714 do_sections = 0;
3715 }
c906108c 3716
9ef895d6
DJ
3717 if (data)
3718 free_symfile_segment_data (data);
31d99776
DJ
3719
3720 if (do_sections)
3721 {
3722 offs->offsets[SECT_OFF_TEXT (symfile_objfile)] = text_addr;
3723
3e43a32a
MS
3724 /* This is a temporary kludge to force data and bss to use the
3725 same offsets because that's what nlmconv does now. The real
3726 solution requires changes to the stub and remote.c that I
3727 don't have time to do right now. */
31d99776
DJ
3728
3729 offs->offsets[SECT_OFF_DATA (symfile_objfile)] = data_addr;
3730 offs->offsets[SECT_OFF_BSS (symfile_objfile)] = data_addr;
3731 }
c906108c
SS
3732
3733 objfile_relocate (symfile_objfile, offs);
3734}
3735
9a7071a8
JB
3736/* Send interrupt_sequence to remote target. */
3737static void
eeae04df 3738send_interrupt_sequence (void)
9a7071a8 3739{
5d93a237
TT
3740 struct remote_state *rs = get_remote_state ();
3741
9a7071a8 3742 if (interrupt_sequence_mode == interrupt_sequence_control_c)
c33e31fd 3743 remote_serial_write ("\x03", 1);
9a7071a8 3744 else if (interrupt_sequence_mode == interrupt_sequence_break)
5d93a237 3745 serial_send_break (rs->remote_desc);
9a7071a8
JB
3746 else if (interrupt_sequence_mode == interrupt_sequence_break_g)
3747 {
5d93a237 3748 serial_send_break (rs->remote_desc);
c33e31fd 3749 remote_serial_write ("g", 1);
9a7071a8
JB
3750 }
3751 else
3752 internal_error (__FILE__, __LINE__,
3753 _("Invalid value for interrupt_sequence_mode: %s."),
3754 interrupt_sequence_mode);
3755}
3756
3405876a
PA
3757
3758/* If STOP_REPLY is a T stop reply, look for the "thread" register,
3759 and extract the PTID. Returns NULL_PTID if not found. */
3760
3761static ptid_t
3762stop_reply_extract_thread (char *stop_reply)
3763{
3764 if (stop_reply[0] == 'T' && strlen (stop_reply) > 3)
3765 {
3766 char *p;
3767
3768 /* Txx r:val ; r:val (...) */
3769 p = &stop_reply[3];
3770
3771 /* Look for "register" named "thread". */
3772 while (*p != '\0')
3773 {
3774 char *p1;
3775
3776 p1 = strchr (p, ':');
3777 if (p1 == NULL)
3778 return null_ptid;
3779
3780 if (strncmp (p, "thread", p1 - p) == 0)
3781 return read_ptid (++p1, &p);
3782
3783 p1 = strchr (p, ';');
3784 if (p1 == NULL)
3785 return null_ptid;
3786 p1++;
3787
3788 p = p1;
3789 }
3790 }
3791
3792 return null_ptid;
3793}
3794
b7ea362b
PA
3795/* Determine the remote side's current thread. If we have a stop
3796 reply handy (in WAIT_STATUS), maybe it's a T stop reply with a
3797 "thread" register we can extract the current thread from. If not,
3798 ask the remote which is the current thread with qC. The former
3799 method avoids a roundtrip. */
3800
3801static ptid_t
3802get_current_thread (char *wait_status)
3803{
6a49a997 3804 ptid_t ptid = null_ptid;
b7ea362b
PA
3805
3806 /* Note we don't use remote_parse_stop_reply as that makes use of
3807 the target architecture, which we haven't yet fully determined at
3808 this point. */
3809 if (wait_status != NULL)
3810 ptid = stop_reply_extract_thread (wait_status);
3811 if (ptid_equal (ptid, null_ptid))
3812 ptid = remote_current_thread (inferior_ptid);
3813
3814 return ptid;
3815}
3816
49c62f2e
PA
3817/* Query the remote target for which is the current thread/process,
3818 add it to our tables, and update INFERIOR_PTID. The caller is
3819 responsible for setting the state such that the remote end is ready
3405876a
PA
3820 to return the current thread.
3821
3822 This function is called after handling the '?' or 'vRun' packets,
3823 whose response is a stop reply from which we can also try
3824 extracting the thread. If the target doesn't support the explicit
3825 qC query, we infer the current thread from that stop reply, passed
3826 in in WAIT_STATUS, which may be NULL. */
49c62f2e
PA
3827
3828static void
3405876a 3829add_current_inferior_and_thread (char *wait_status)
49c62f2e
PA
3830{
3831 struct remote_state *rs = get_remote_state ();
3832 int fake_pid_p = 0;
6a49a997 3833 ptid_t ptid;
49c62f2e
PA
3834
3835 inferior_ptid = null_ptid;
3836
b7ea362b
PA
3837 /* Now, if we have thread information, update inferior_ptid. */
3838 ptid = get_current_thread (wait_status);
3405876a 3839
49c62f2e
PA
3840 if (!ptid_equal (ptid, null_ptid))
3841 {
3842 if (!remote_multi_process_p (rs))
3843 fake_pid_p = 1;
3844
3845 inferior_ptid = ptid;
3846 }
3847 else
3848 {
3849 /* Without this, some commands which require an active target
3850 (such as kill) won't work. This variable serves (at least)
3851 double duty as both the pid of the target process (if it has
3852 such), and as a flag indicating that a target is active. */
3853 inferior_ptid = magic_null_ptid;
3854 fake_pid_p = 1;
3855 }
3856
1b6e6f5c 3857 remote_add_inferior (fake_pid_p, ptid_get_pid (inferior_ptid), -1, 1);
49c62f2e
PA
3858
3859 /* Add the main thread. */
3860 add_thread_silent (inferior_ptid);
3861}
3862
6efcd9a8
PA
3863/* Print info about a thread that was found already stopped on
3864 connection. */
3865
3866static void
3867print_one_stopped_thread (struct thread_info *thread)
3868{
3869 struct target_waitstatus *ws = &thread->suspend.waitstatus;
3870
3871 switch_to_thread (thread->ptid);
3872 stop_pc = get_frame_pc (get_current_frame ());
3873 set_current_sal_from_frame (get_current_frame ());
3874
3875 thread->suspend.waitstatus_pending_p = 0;
3876
3877 if (ws->kind == TARGET_WAITKIND_STOPPED)
3878 {
3879 enum gdb_signal sig = ws->value.sig;
3880
3881 if (signal_print_state (sig))
3882 observer_notify_signal_received (sig);
3883 }
3884 observer_notify_normal_stop (NULL, 1);
3885}
3886
221e1a37
PA
3887/* Process all initial stop replies the remote side sent in response
3888 to the ? packet. These indicate threads that were already stopped
3889 on initial connection. We mark these threads as stopped and print
3890 their current frame before giving the user the prompt. */
3891
3892static void
6efcd9a8 3893process_initial_stop_replies (int from_tty)
221e1a37
PA
3894{
3895 int pending_stop_replies = stop_reply_queue_length ();
6efcd9a8
PA
3896 struct inferior *inf;
3897 struct thread_info *thread;
3898 struct thread_info *selected = NULL;
3899 struct thread_info *lowest_stopped = NULL;
3900 struct thread_info *first = NULL;
221e1a37
PA
3901
3902 /* Consume the initial pending events. */
3903 while (pending_stop_replies-- > 0)
3904 {
3905 ptid_t waiton_ptid = minus_one_ptid;
3906 ptid_t event_ptid;
3907 struct target_waitstatus ws;
3908 int ignore_event = 0;
6efcd9a8 3909 struct thread_info *thread;
221e1a37
PA
3910
3911 memset (&ws, 0, sizeof (ws));
3912 event_ptid = target_wait (waiton_ptid, &ws, TARGET_WNOHANG);
3913 if (remote_debug)
3914 print_target_wait_results (waiton_ptid, event_ptid, &ws);
3915
3916 switch (ws.kind)
3917 {
3918 case TARGET_WAITKIND_IGNORE:
3919 case TARGET_WAITKIND_NO_RESUMED:
3920 case TARGET_WAITKIND_SIGNALLED:
3921 case TARGET_WAITKIND_EXITED:
3922 /* We shouldn't see these, but if we do, just ignore. */
3923 if (remote_debug)
3924 fprintf_unfiltered (gdb_stdlog, "remote: event ignored\n");
3925 ignore_event = 1;
3926 break;
3927
3928 case TARGET_WAITKIND_EXECD:
3929 xfree (ws.value.execd_pathname);
3930 break;
3931 default:
3932 break;
3933 }
3934
3935 if (ignore_event)
3936 continue;
3937
6efcd9a8 3938 thread = find_thread_ptid (event_ptid);
221e1a37
PA
3939
3940 if (ws.kind == TARGET_WAITKIND_STOPPED)
3941 {
3942 enum gdb_signal sig = ws.value.sig;
3943
3944 /* Stubs traditionally report SIGTRAP as initial signal,
3945 instead of signal 0. Suppress it. */
3946 if (sig == GDB_SIGNAL_TRAP)
3947 sig = GDB_SIGNAL_0;
6efcd9a8
PA
3948 thread->suspend.stop_signal = sig;
3949 ws.value.sig = sig;
3950 }
221e1a37 3951
6efcd9a8
PA
3952 thread->suspend.waitstatus = ws;
3953
3954 if (ws.kind != TARGET_WAITKIND_STOPPED
3955 || ws.value.sig != GDB_SIGNAL_0)
3956 thread->suspend.waitstatus_pending_p = 1;
3957
3958 set_executing (event_ptid, 0);
3959 set_running (event_ptid, 0);
85ad3aaf 3960 thread->priv->vcont_resumed = 0;
6efcd9a8
PA
3961 }
3962
3963 /* "Notice" the new inferiors before anything related to
3964 registers/memory. */
3965 ALL_INFERIORS (inf)
3966 {
3967 if (inf->pid == 0)
3968 continue;
3969
3970 inf->needs_setup = 1;
3971
3972 if (non_stop)
3973 {
3974 thread = any_live_thread_of_process (inf->pid);
3975 notice_new_inferior (thread->ptid,
3976 thread->state == THREAD_RUNNING,
3977 from_tty);
3978 }
3979 }
3980
3981 /* If all-stop on top of non-stop, pause all threads. Note this
3982 records the threads' stop pc, so must be done after "noticing"
3983 the inferiors. */
3984 if (!non_stop)
3985 {
3986 stop_all_threads ();
3987
3988 /* If all threads of an inferior were already stopped, we
3989 haven't setup the inferior yet. */
3990 ALL_INFERIORS (inf)
3991 {
3992 if (inf->pid == 0)
3993 continue;
221e1a37 3994
6efcd9a8
PA
3995 if (inf->needs_setup)
3996 {
3997 thread = any_live_thread_of_process (inf->pid);
3998 switch_to_thread_no_regs (thread);
3999 setup_inferior (0);
4000 }
4001 }
221e1a37 4002 }
6efcd9a8
PA
4003
4004 /* Now go over all threads that are stopped, and print their current
4005 frame. If all-stop, then if there's a signalled thread, pick
4006 that as current. */
4007 ALL_NON_EXITED_THREADS (thread)
4008 {
6efcd9a8
PA
4009 if (first == NULL)
4010 first = thread;
4011
4012 if (!non_stop)
4013 set_running (thread->ptid, 0);
4014 else if (thread->state != THREAD_STOPPED)
4015 continue;
4016
6efcd9a8
PA
4017 if (selected == NULL
4018 && thread->suspend.waitstatus_pending_p)
4019 selected = thread;
4020
5d5658a1
PA
4021 if (lowest_stopped == NULL
4022 || thread->inf->num < lowest_stopped->inf->num
4023 || thread->per_inf_num < lowest_stopped->per_inf_num)
6efcd9a8
PA
4024 lowest_stopped = thread;
4025
4026 if (non_stop)
4027 print_one_stopped_thread (thread);
4028 }
4029
4030 /* In all-stop, we only print the status of one thread, and leave
4031 others with their status pending. */
4032 if (!non_stop)
4033 {
4034 thread = selected;
4035 if (thread == NULL)
4036 thread = lowest_stopped;
4037 if (thread == NULL)
4038 thread = first;
4039
4040 print_one_stopped_thread (thread);
4041 }
4042
4043 /* For "info program". */
4044 thread = inferior_thread ();
4045 if (thread->state == THREAD_STOPPED)
4046 set_last_target_status (inferior_ptid, thread->suspend.waitstatus);
221e1a37
PA
4047}
4048
048094ac
PA
4049/* Start the remote connection and sync state. */
4050
9cbc821d 4051static void
04bd08de 4052remote_start_remote (int from_tty, struct target_ops *target, int extended_p)
c906108c 4053{
c8d104ad
PA
4054 struct remote_state *rs = get_remote_state ();
4055 struct packet_config *noack_config;
2d717e4f 4056 char *wait_status = NULL;
8621d6a9 4057
048094ac
PA
4058 /* Signal other parts that we're going through the initial setup,
4059 and so things may not be stable yet. E.g., we don't try to
4060 install tracepoints until we've relocated symbols. Also, a
4061 Ctrl-C before we're connected and synced up can't interrupt the
4062 target. Instead, it offers to drop the (potentially wedged)
4063 connection. */
4064 rs->starting_up = 1;
4065
522002f9 4066 QUIT;
c906108c 4067
9a7071a8
JB
4068 if (interrupt_on_connect)
4069 send_interrupt_sequence ();
4070
57e12211 4071 /* Ack any packet which the remote side has already sent. */
048094ac 4072 remote_serial_write ("+", 1);
1e51243a 4073
c8d104ad
PA
4074 /* The first packet we send to the target is the optional "supported
4075 packets" request. If the target can answer this, it will tell us
4076 which later probes to skip. */
4077 remote_query_supported ();
4078
d914c394 4079 /* If the stub wants to get a QAllow, compose one and send it. */
4082afcc 4080 if (packet_support (PACKET_QAllow) != PACKET_DISABLE)
c378d69d 4081 remote_set_permissions (target);
d914c394 4082
57809e5e
JK
4083 /* gdbserver < 7.7 (before its fix from 2013-12-11) did reply to any
4084 unknown 'v' packet with string "OK". "OK" gets interpreted by GDB
4085 as a reply to known packet. For packet "vFile:setfs:" it is an
4086 invalid reply and GDB would return error in
4087 remote_hostio_set_filesystem, making remote files access impossible.
4088 Disable "vFile:setfs:" in such case. Do not disable other 'v' packets as
4089 other "vFile" packets get correctly detected even on gdbserver < 7.7. */
4090 {
4091 const char v_mustreplyempty[] = "vMustReplyEmpty";
4092
4093 putpkt (v_mustreplyempty);
4094 getpkt (&rs->buf, &rs->buf_size, 0);
4095 if (strcmp (rs->buf, "OK") == 0)
4096 remote_protocol_packets[PACKET_vFile_setfs].support = PACKET_DISABLE;
4097 else if (strcmp (rs->buf, "") != 0)
4098 error (_("Remote replied unexpectedly to '%s': %s"), v_mustreplyempty,
4099 rs->buf);
4100 }
4101
c8d104ad
PA
4102 /* Next, we possibly activate noack mode.
4103
4104 If the QStartNoAckMode packet configuration is set to AUTO,
4105 enable noack mode if the stub reported a wish for it with
4106 qSupported.
4107
4108 If set to TRUE, then enable noack mode even if the stub didn't
4109 report it in qSupported. If the stub doesn't reply OK, the
4110 session ends with an error.
4111
4112 If FALSE, then don't activate noack mode, regardless of what the
4113 stub claimed should be the default with qSupported. */
4114
4115 noack_config = &remote_protocol_packets[PACKET_QStartNoAckMode];
4082afcc 4116 if (packet_config_support (noack_config) != PACKET_DISABLE)
c8d104ad
PA
4117 {
4118 putpkt ("QStartNoAckMode");
4119 getpkt (&rs->buf, &rs->buf_size, 0);
4120 if (packet_ok (rs->buf, noack_config) == PACKET_OK)
4121 rs->noack_mode = 1;
4122 }
4123
04bd08de 4124 if (extended_p)
5fe04517
PA
4125 {
4126 /* Tell the remote that we are using the extended protocol. */
4127 putpkt ("!");
4128 getpkt (&rs->buf, &rs->buf_size, 0);
4129 }
4130
9b224c5e
PA
4131 /* Let the target know which signals it is allowed to pass down to
4132 the program. */
4133 update_signals_program_target ();
4134
d962ef82
DJ
4135 /* Next, if the target can specify a description, read it. We do
4136 this before anything involving memory or registers. */
4137 target_find_description ();
4138
6c95b8df
PA
4139 /* Next, now that we know something about the target, update the
4140 address spaces in the program spaces. */
4141 update_address_spaces ();
4142
50c71eaf
PA
4143 /* On OSs where the list of libraries is global to all
4144 processes, we fetch them early. */
f5656ead 4145 if (gdbarch_has_global_solist (target_gdbarch ()))
e696b3ad 4146 solib_add (NULL, from_tty, auto_solib_add);
50c71eaf 4147
6efcd9a8 4148 if (target_is_non_stop_p ())
74531fed 4149 {
4082afcc 4150 if (packet_support (PACKET_QNonStop) != PACKET_ENABLE)
3e43a32a
MS
4151 error (_("Non-stop mode requested, but remote "
4152 "does not support non-stop"));
74531fed
PA
4153
4154 putpkt ("QNonStop:1");
4155 getpkt (&rs->buf, &rs->buf_size, 0);
4156
4157 if (strcmp (rs->buf, "OK") != 0)
9b20d036 4158 error (_("Remote refused setting non-stop mode with: %s"), rs->buf);
74531fed
PA
4159
4160 /* Find about threads and processes the stub is already
4161 controlling. We default to adding them in the running state.
4162 The '?' query below will then tell us about which threads are
4163 stopped. */
e8032dde 4164 remote_update_thread_list (target);
74531fed 4165 }
4082afcc 4166 else if (packet_support (PACKET_QNonStop) == PACKET_ENABLE)
74531fed
PA
4167 {
4168 /* Don't assume that the stub can operate in all-stop mode.
e6f3fa52 4169 Request it explicitly. */
74531fed
PA
4170 putpkt ("QNonStop:0");
4171 getpkt (&rs->buf, &rs->buf_size, 0);
4172
4173 if (strcmp (rs->buf, "OK") != 0)
9b20d036 4174 error (_("Remote refused setting all-stop mode with: %s"), rs->buf);
74531fed
PA
4175 }
4176
a0743c90
YQ
4177 /* Upload TSVs regardless of whether the target is running or not. The
4178 remote stub, such as GDBserver, may have some predefined or builtin
4179 TSVs, even if the target is not running. */
8bd200f1 4180 if (remote_get_trace_status (target, current_trace_status ()) != -1)
a0743c90
YQ
4181 {
4182 struct uploaded_tsv *uploaded_tsvs = NULL;
4183
181e3713 4184 remote_upload_trace_state_variables (target, &uploaded_tsvs);
a0743c90
YQ
4185 merge_uploaded_trace_state_variables (&uploaded_tsvs);
4186 }
4187
2d717e4f
DJ
4188 /* Check whether the target is running now. */
4189 putpkt ("?");
4190 getpkt (&rs->buf, &rs->buf_size, 0);
4191
6efcd9a8 4192 if (!target_is_non_stop_p ())
2d717e4f 4193 {
74531fed 4194 if (rs->buf[0] == 'W' || rs->buf[0] == 'X')
2d717e4f 4195 {
04bd08de 4196 if (!extended_p)
74531fed 4197 error (_("The target is not running (try extended-remote?)"));
c35b1492
PA
4198
4199 /* We're connected, but not running. Drop out before we
4200 call start_remote. */
e278ad5b 4201 rs->starting_up = 0;
c35b1492 4202 return;
2d717e4f
DJ
4203 }
4204 else
74531fed 4205 {
74531fed 4206 /* Save the reply for later. */
224c3ddb 4207 wait_status = (char *) alloca (strlen (rs->buf) + 1);
74531fed
PA
4208 strcpy (wait_status, rs->buf);
4209 }
4210
b7ea362b 4211 /* Fetch thread list. */
e8032dde 4212 target_update_thread_list ();
b7ea362b 4213
74531fed
PA
4214 /* Let the stub know that we want it to return the thread. */
4215 set_continue_thread (minus_one_ptid);
4216
b7ea362b
PA
4217 if (thread_count () == 0)
4218 {
4219 /* Target has no concept of threads at all. GDB treats
4220 non-threaded target as single-threaded; add a main
4221 thread. */
4222 add_current_inferior_and_thread (wait_status);
4223 }
4224 else
4225 {
4226 /* We have thread information; select the thread the target
4227 says should be current. If we're reconnecting to a
4228 multi-threaded program, this will ideally be the thread
4229 that last reported an event before GDB disconnected. */
4230 inferior_ptid = get_current_thread (wait_status);
4231 if (ptid_equal (inferior_ptid, null_ptid))
4232 {
4233 /* Odd... The target was able to list threads, but not
4234 tell us which thread was current (no "thread"
4235 register in T stop reply?). Just pick the first
4236 thread in the thread list then. */
c9f35b34
KB
4237
4238 if (remote_debug)
4239 fprintf_unfiltered (gdb_stdlog,
4240 "warning: couldn't determine remote "
4241 "current thread; picking first in list.\n");
4242
b7ea362b
PA
4243 inferior_ptid = thread_list->ptid;
4244 }
4245 }
74531fed 4246
6e586cc5
YQ
4247 /* init_wait_for_inferior should be called before get_offsets in order
4248 to manage `inserted' flag in bp loc in a correct state.
4249 breakpoint_init_inferior, called from init_wait_for_inferior, set
4250 `inserted' flag to 0, while before breakpoint_re_set, called from
4251 start_remote, set `inserted' flag to 1. In the initialization of
4252 inferior, breakpoint_init_inferior should be called first, and then
4253 breakpoint_re_set can be called. If this order is broken, state of
4254 `inserted' flag is wrong, and cause some problems on breakpoint
4255 manipulation. */
4256 init_wait_for_inferior ();
4257
74531fed
PA
4258 get_offsets (); /* Get text, data & bss offsets. */
4259
d962ef82
DJ
4260 /* If we could not find a description using qXfer, and we know
4261 how to do it some other way, try again. This is not
4262 supported for non-stop; it could be, but it is tricky if
4263 there are no stopped threads when we connect. */
04bd08de 4264 if (remote_read_description_p (target)
f5656ead 4265 && gdbarch_target_desc (target_gdbarch ()) == NULL)
d962ef82
DJ
4266 {
4267 target_clear_description ();
4268 target_find_description ();
4269 }
4270
74531fed
PA
4271 /* Use the previously fetched status. */
4272 gdb_assert (wait_status != NULL);
4273 strcpy (rs->buf, wait_status);
4274 rs->cached_wait_status = 1;
4275
04bd08de 4276 start_remote (from_tty); /* Initialize gdb process mechanisms. */
2d717e4f
DJ
4277 }
4278 else
4279 {
68c97600
PA
4280 /* Clear WFI global state. Do this before finding about new
4281 threads and inferiors, and setting the current inferior.
4282 Otherwise we would clear the proceed status of the current
4283 inferior when we want its stop_soon state to be preserved
4284 (see notice_new_inferior). */
4285 init_wait_for_inferior ();
4286
74531fed
PA
4287 /* In non-stop, we will either get an "OK", meaning that there
4288 are no stopped threads at this time; or, a regular stop
4289 reply. In the latter case, there may be more than one thread
4290 stopped --- we pull them all out using the vStopped
4291 mechanism. */
4292 if (strcmp (rs->buf, "OK") != 0)
4293 {
722247f1 4294 struct notif_client *notif = &notif_client_stop;
2d717e4f 4295
722247f1
YQ
4296 /* remote_notif_get_pending_replies acks this one, and gets
4297 the rest out. */
f48ff2a7 4298 rs->notif_state->pending_event[notif_client_stop.id]
722247f1
YQ
4299 = remote_notif_parse (notif, rs->buf);
4300 remote_notif_get_pending_events (notif);
74531fed 4301 }
2d717e4f 4302
74531fed
PA
4303 if (thread_count () == 0)
4304 {
04bd08de 4305 if (!extended_p)
74531fed 4306 error (_("The target is not running (try extended-remote?)"));
82f73884 4307
c35b1492
PA
4308 /* We're connected, but not running. Drop out before we
4309 call start_remote. */
e278ad5b 4310 rs->starting_up = 0;
c35b1492
PA
4311 return;
4312 }
74531fed 4313
74531fed
PA
4314 /* In non-stop mode, any cached wait status will be stored in
4315 the stop reply queue. */
4316 gdb_assert (wait_status == NULL);
f0223081 4317
2455069d 4318 /* Report all signals during attach/startup. */
94bedb42 4319 remote_pass_signals (target, 0, NULL);
221e1a37
PA
4320
4321 /* If there are already stopped threads, mark them stopped and
4322 report their stops before giving the prompt to the user. */
6efcd9a8 4323 process_initial_stop_replies (from_tty);
221e1a37
PA
4324
4325 if (target_can_async_p ())
4326 target_async (1);
74531fed 4327 }
c8d104ad 4328
c8d104ad
PA
4329 /* If we connected to a live target, do some additional setup. */
4330 if (target_has_execution)
4331 {
f4ccffad 4332 if (symfile_objfile) /* No use without a symbol-file. */
36d25514 4333 remote_check_symbols ();
c8d104ad 4334 }
50c71eaf 4335
d5551862
SS
4336 /* Possibly the target has been engaged in a trace run started
4337 previously; find out where things are at. */
8bd200f1 4338 if (remote_get_trace_status (target, current_trace_status ()) != -1)
d5551862 4339 {
00bf0b85 4340 struct uploaded_tp *uploaded_tps = NULL;
00bf0b85 4341
00bf0b85
SS
4342 if (current_trace_status ()->running)
4343 printf_filtered (_("Trace is already running on the target.\n"));
4344
ab6617cc 4345 remote_upload_tracepoints (target, &uploaded_tps);
00bf0b85
SS
4346
4347 merge_uploaded_tracepoints (&uploaded_tps);
d5551862
SS
4348 }
4349
c0272db5
TW
4350 /* Possibly the target has been engaged in a btrace record started
4351 previously; find out where things are at. */
4352 remote_btrace_maybe_reopen ();
4353
1e51243a
PA
4354 /* The thread and inferior lists are now synchronized with the
4355 target, our symbols have been relocated, and we're merged the
4356 target's tracepoints with ours. We're done with basic start
4357 up. */
4358 rs->starting_up = 0;
4359
a25a5a45
PA
4360 /* Maybe breakpoints are global and need to be inserted now. */
4361 if (breakpoints_should_be_inserted_now ())
50c71eaf 4362 insert_breakpoints ();
c906108c
SS
4363}
4364
4365/* Open a connection to a remote debugger.
4366 NAME is the filename used for communication. */
4367
4368static void
014f9477 4369remote_open (const char *name, int from_tty)
c906108c 4370{
75c99385 4371 remote_open_1 (name, from_tty, &remote_ops, 0);
43ff13b4
JM
4372}
4373
c906108c
SS
4374/* Open a connection to a remote debugger using the extended
4375 remote gdb protocol. NAME is the filename used for communication. */
4376
4377static void
014f9477 4378extended_remote_open (const char *name, int from_tty)
c906108c 4379{
75c99385 4380 remote_open_1 (name, from_tty, &extended_remote_ops, 1 /*extended_p */);
43ff13b4
JM
4381}
4382
ca4f7f8b
PA
4383/* Reset all packets back to "unknown support". Called when opening a
4384 new connection to a remote target. */
c906108c 4385
d471ea57 4386static void
ca4f7f8b 4387reset_all_packet_configs_support (void)
d471ea57
AC
4388{
4389 int i;
a744cf53 4390
444abaca 4391 for (i = 0; i < PACKET_MAX; i++)
4082afcc 4392 remote_protocol_packets[i].support = PACKET_SUPPORT_UNKNOWN;
d471ea57
AC
4393}
4394
ca4f7f8b
PA
4395/* Initialize all packet configs. */
4396
4397static void
4398init_all_packet_configs (void)
4399{
4400 int i;
4401
4402 for (i = 0; i < PACKET_MAX; i++)
4403 {
4404 remote_protocol_packets[i].detect = AUTO_BOOLEAN_AUTO;
4405 remote_protocol_packets[i].support = PACKET_SUPPORT_UNKNOWN;
4406 }
4407}
4408
23860348 4409/* Symbol look-up. */
dc8acb97
MS
4410
4411static void
36d25514 4412remote_check_symbols (void)
dc8acb97 4413{
d01949b6 4414 struct remote_state *rs = get_remote_state ();
dc8acb97 4415 char *msg, *reply, *tmp;
dc8acb97 4416 int end;
28170b88 4417 long reply_size;
a5c0808e 4418 struct cleanup *old_chain;
dc8acb97 4419
63154eca
PA
4420 /* The remote side has no concept of inferiors that aren't running
4421 yet, it only knows about running processes. If we're connected
4422 but our current inferior is not running, we should not invite the
4423 remote target to request symbol lookups related to its
4424 (unrelated) current process. */
4425 if (!target_has_execution)
4426 return;
4427
4082afcc 4428 if (packet_support (PACKET_qSymbol) == PACKET_DISABLE)
dc8acb97
MS
4429 return;
4430
63154eca
PA
4431 /* Make sure the remote is pointing at the right process. Note
4432 there's no way to select "no process". */
3c9c4b83
PA
4433 set_general_process ();
4434
6d820c5c
DJ
4435 /* Allocate a message buffer. We can't reuse the input buffer in RS,
4436 because we need both at the same time. */
224c3ddb 4437 msg = (char *) xmalloc (get_remote_packet_size ());
a5c0808e 4438 old_chain = make_cleanup (xfree, msg);
28170b88
MK
4439 reply = (char *) xmalloc (get_remote_packet_size ());
4440 make_cleanup (free_current_contents, &reply);
4441 reply_size = get_remote_packet_size ();
6d820c5c 4442
23860348 4443 /* Invite target to request symbol lookups. */
dc8acb97
MS
4444
4445 putpkt ("qSymbol::");
28170b88
MK
4446 getpkt (&reply, &reply_size, 0);
4447 packet_ok (reply, &remote_protocol_packets[PACKET_qSymbol]);
dc8acb97 4448
61012eef 4449 while (startswith (reply, "qSymbol:"))
dc8acb97 4450 {
77e371c0
TT
4451 struct bound_minimal_symbol sym;
4452
dc8acb97 4453 tmp = &reply[8];
cfd77fa1 4454 end = hex2bin (tmp, (gdb_byte *) msg, strlen (tmp) / 2);
dc8acb97
MS
4455 msg[end] = '\0';
4456 sym = lookup_minimal_symbol (msg, NULL, NULL);
3b7344d5 4457 if (sym.minsym == NULL)
ea9c271d 4458 xsnprintf (msg, get_remote_packet_size (), "qSymbol::%s", &reply[8]);
dc8acb97 4459 else
2bbe3cc1 4460 {
f5656ead 4461 int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
77e371c0 4462 CORE_ADDR sym_addr = BMSYMBOL_VALUE_ADDRESS (sym);
2bbe3cc1
DJ
4463
4464 /* If this is a function address, return the start of code
4465 instead of any data function descriptor. */
f5656ead 4466 sym_addr = gdbarch_convert_from_func_ptr_addr (target_gdbarch (),
2bbe3cc1
DJ
4467 sym_addr,
4468 &current_target);
4469
4470 xsnprintf (msg, get_remote_packet_size (), "qSymbol:%s:%s",
5af949e3 4471 phex_nz (sym_addr, addr_size), &reply[8]);
2bbe3cc1
DJ
4472 }
4473
dc8acb97 4474 putpkt (msg);
28170b88 4475 getpkt (&reply, &reply_size, 0);
dc8acb97 4476 }
a5c0808e
PA
4477
4478 do_cleanups (old_chain);
dc8acb97
MS
4479}
4480
9db8d71f 4481static struct serial *
baa336ce 4482remote_serial_open (const char *name)
9db8d71f
DJ
4483{
4484 static int udp_warning = 0;
4485
4486 /* FIXME: Parsing NAME here is a hack. But we want to warn here instead
4487 of in ser-tcp.c, because it is the remote protocol assuming that the
4488 serial connection is reliable and not the serial connection promising
4489 to be. */
61012eef 4490 if (!udp_warning && startswith (name, "udp:"))
9db8d71f 4491 {
3e43a32a
MS
4492 warning (_("The remote protocol may be unreliable over UDP.\n"
4493 "Some events may be lost, rendering further debugging "
4494 "impossible."));
9db8d71f
DJ
4495 udp_warning = 1;
4496 }
4497
4498 return serial_open (name);
4499}
4500
d914c394
SS
4501/* Inform the target of our permission settings. The permission flags
4502 work without this, but if the target knows the settings, it can do
4503 a couple things. First, it can add its own check, to catch cases
4504 that somehow manage to get by the permissions checks in target
4505 methods. Second, if the target is wired to disallow particular
4506 settings (for instance, a system in the field that is not set up to
4507 be able to stop at a breakpoint), it can object to any unavailable
4508 permissions. */
4509
4510void
c378d69d 4511remote_set_permissions (struct target_ops *self)
d914c394
SS
4512{
4513 struct remote_state *rs = get_remote_state ();
4514
bba74b36
YQ
4515 xsnprintf (rs->buf, get_remote_packet_size (), "QAllow:"
4516 "WriteReg:%x;WriteMem:%x;"
4517 "InsertBreak:%x;InsertTrace:%x;"
4518 "InsertFastTrace:%x;Stop:%x",
4519 may_write_registers, may_write_memory,
4520 may_insert_breakpoints, may_insert_tracepoints,
4521 may_insert_fast_tracepoints, may_stop);
d914c394
SS
4522 putpkt (rs->buf);
4523 getpkt (&rs->buf, &rs->buf_size, 0);
4524
4525 /* If the target didn't like the packet, warn the user. Do not try
4526 to undo the user's settings, that would just be maddening. */
4527 if (strcmp (rs->buf, "OK") != 0)
7ea6d463 4528 warning (_("Remote refused setting permissions with: %s"), rs->buf);
d914c394
SS
4529}
4530
be2a5f71
DJ
4531/* This type describes each known response to the qSupported
4532 packet. */
4533struct protocol_feature
4534{
4535 /* The name of this protocol feature. */
4536 const char *name;
4537
4538 /* The default for this protocol feature. */
4539 enum packet_support default_support;
4540
4541 /* The function to call when this feature is reported, or after
4542 qSupported processing if the feature is not supported.
4543 The first argument points to this structure. The second
4544 argument indicates whether the packet requested support be
4545 enabled, disabled, or probed (or the default, if this function
4546 is being called at the end of processing and this feature was
4547 not reported). The third argument may be NULL; if not NULL, it
4548 is a NUL-terminated string taken from the packet following
4549 this feature's name and an equals sign. */
4550 void (*func) (const struct protocol_feature *, enum packet_support,
4551 const char *);
4552
4553 /* The corresponding packet for this feature. Only used if
4554 FUNC is remote_supported_packet. */
4555 int packet;
4556};
4557
be2a5f71
DJ
4558static void
4559remote_supported_packet (const struct protocol_feature *feature,
4560 enum packet_support support,
4561 const char *argument)
4562{
4563 if (argument)
4564 {
4565 warning (_("Remote qSupported response supplied an unexpected value for"
4566 " \"%s\"."), feature->name);
4567 return;
4568 }
4569
4082afcc 4570 remote_protocol_packets[feature->packet].support = support;
be2a5f71 4571}
be2a5f71
DJ
4572
4573static void
4574remote_packet_size (const struct protocol_feature *feature,
4575 enum packet_support support, const char *value)
4576{
4577 struct remote_state *rs = get_remote_state ();
4578
4579 int packet_size;
4580 char *value_end;
4581
4582 if (support != PACKET_ENABLE)
4583 return;
4584
4585 if (value == NULL || *value == '\0')
4586 {
4587 warning (_("Remote target reported \"%s\" without a size."),
4588 feature->name);
4589 return;
4590 }
4591
4592 errno = 0;
4593 packet_size = strtol (value, &value_end, 16);
4594 if (errno != 0 || *value_end != '\0' || packet_size < 0)
4595 {
4596 warning (_("Remote target reported \"%s\" with a bad size: \"%s\"."),
4597 feature->name, value);
4598 return;
4599 }
4600
be2a5f71
DJ
4601 /* Record the new maximum packet size. */
4602 rs->explicit_packet_size = packet_size;
4603}
4604
dc473cfb 4605static const struct protocol_feature remote_protocol_features[] = {
0876f84a 4606 { "PacketSize", PACKET_DISABLE, remote_packet_size, -1 },
40e57cf2 4607 { "qXfer:auxv:read", PACKET_DISABLE, remote_supported_packet,
fd79ecee 4608 PACKET_qXfer_auxv },
c78fa86a
GB
4609 { "qXfer:exec-file:read", PACKET_DISABLE, remote_supported_packet,
4610 PACKET_qXfer_exec_file },
23181151
DJ
4611 { "qXfer:features:read", PACKET_DISABLE, remote_supported_packet,
4612 PACKET_qXfer_features },
cfa9d6d9
DJ
4613 { "qXfer:libraries:read", PACKET_DISABLE, remote_supported_packet,
4614 PACKET_qXfer_libraries },
2268b414
JK
4615 { "qXfer:libraries-svr4:read", PACKET_DISABLE, remote_supported_packet,
4616 PACKET_qXfer_libraries_svr4 },
ced63ec0 4617 { "augmented-libraries-svr4-read", PACKET_DISABLE,
4082afcc 4618 remote_supported_packet, PACKET_augmented_libraries_svr4_read_feature },
fd79ecee 4619 { "qXfer:memory-map:read", PACKET_DISABLE, remote_supported_packet,
89be2091 4620 PACKET_qXfer_memory_map },
4de6483e
UW
4621 { "qXfer:spu:read", PACKET_DISABLE, remote_supported_packet,
4622 PACKET_qXfer_spu_read },
4623 { "qXfer:spu:write", PACKET_DISABLE, remote_supported_packet,
4624 PACKET_qXfer_spu_write },
07e059b5
VP
4625 { "qXfer:osdata:read", PACKET_DISABLE, remote_supported_packet,
4626 PACKET_qXfer_osdata },
dc146f7c
VP
4627 { "qXfer:threads:read", PACKET_DISABLE, remote_supported_packet,
4628 PACKET_qXfer_threads },
b3b9301e
PA
4629 { "qXfer:traceframe-info:read", PACKET_DISABLE, remote_supported_packet,
4630 PACKET_qXfer_traceframe_info },
89be2091
DJ
4631 { "QPassSignals", PACKET_DISABLE, remote_supported_packet,
4632 PACKET_QPassSignals },
82075af2
JS
4633 { "QCatchSyscalls", PACKET_DISABLE, remote_supported_packet,
4634 PACKET_QCatchSyscalls },
9b224c5e
PA
4635 { "QProgramSignals", PACKET_DISABLE, remote_supported_packet,
4636 PACKET_QProgramSignals },
aefd8b33
SDJ
4637 { "QStartupWithShell", PACKET_DISABLE, remote_supported_packet,
4638 PACKET_QStartupWithShell },
a6f3e723
SL
4639 { "QStartNoAckMode", PACKET_DISABLE, remote_supported_packet,
4640 PACKET_QStartNoAckMode },
4082afcc
PA
4641 { "multiprocess", PACKET_DISABLE, remote_supported_packet,
4642 PACKET_multiprocess_feature },
4643 { "QNonStop", PACKET_DISABLE, remote_supported_packet, PACKET_QNonStop },
4aa995e1
PA
4644 { "qXfer:siginfo:read", PACKET_DISABLE, remote_supported_packet,
4645 PACKET_qXfer_siginfo_read },
4646 { "qXfer:siginfo:write", PACKET_DISABLE, remote_supported_packet,
4647 PACKET_qXfer_siginfo_write },
4082afcc 4648 { "ConditionalTracepoints", PACKET_DISABLE, remote_supported_packet,
782b2b07 4649 PACKET_ConditionalTracepoints },
4082afcc 4650 { "ConditionalBreakpoints", PACKET_DISABLE, remote_supported_packet,
3788aec7 4651 PACKET_ConditionalBreakpoints },
4082afcc 4652 { "BreakpointCommands", PACKET_DISABLE, remote_supported_packet,
d3ce09f5 4653 PACKET_BreakpointCommands },
4082afcc 4654 { "FastTracepoints", PACKET_DISABLE, remote_supported_packet,
7a697b8d 4655 PACKET_FastTracepoints },
4082afcc 4656 { "StaticTracepoints", PACKET_DISABLE, remote_supported_packet,
0fb4aa4b 4657 PACKET_StaticTracepoints },
4082afcc 4658 {"InstallInTrace", PACKET_DISABLE, remote_supported_packet,
1e4d1764 4659 PACKET_InstallInTrace},
4082afcc
PA
4660 { "DisconnectedTracing", PACKET_DISABLE, remote_supported_packet,
4661 PACKET_DisconnectedTracing_feature },
40ab02ce
MS
4662 { "ReverseContinue", PACKET_DISABLE, remote_supported_packet,
4663 PACKET_bc },
4664 { "ReverseStep", PACKET_DISABLE, remote_supported_packet,
4665 PACKET_bs },
409873ef
SS
4666 { "TracepointSource", PACKET_DISABLE, remote_supported_packet,
4667 PACKET_TracepointSource },
d914c394
SS
4668 { "QAllow", PACKET_DISABLE, remote_supported_packet,
4669 PACKET_QAllow },
4082afcc
PA
4670 { "EnableDisableTracepoints", PACKET_DISABLE, remote_supported_packet,
4671 PACKET_EnableDisableTracepoints_feature },
78d85199
YQ
4672 { "qXfer:fdpic:read", PACKET_DISABLE, remote_supported_packet,
4673 PACKET_qXfer_fdpic },
169081d0
TG
4674 { "qXfer:uib:read", PACKET_DISABLE, remote_supported_packet,
4675 PACKET_qXfer_uib },
03583c20
UW
4676 { "QDisableRandomization", PACKET_DISABLE, remote_supported_packet,
4677 PACKET_QDisableRandomization },
d1feda86 4678 { "QAgent", PACKET_DISABLE, remote_supported_packet, PACKET_QAgent},
f6f899bf
HAQ
4679 { "QTBuffer:size", PACKET_DISABLE,
4680 remote_supported_packet, PACKET_QTBuffer_size},
4082afcc 4681 { "tracenz", PACKET_DISABLE, remote_supported_packet, PACKET_tracenz_feature },
9accd112
MM
4682 { "Qbtrace:off", PACKET_DISABLE, remote_supported_packet, PACKET_Qbtrace_off },
4683 { "Qbtrace:bts", PACKET_DISABLE, remote_supported_packet, PACKET_Qbtrace_bts },
b20a6524 4684 { "Qbtrace:pt", PACKET_DISABLE, remote_supported_packet, PACKET_Qbtrace_pt },
9accd112 4685 { "qXfer:btrace:read", PACKET_DISABLE, remote_supported_packet,
f4abbc16
MM
4686 PACKET_qXfer_btrace },
4687 { "qXfer:btrace-conf:read", PACKET_DISABLE, remote_supported_packet,
d33501a5
MM
4688 PACKET_qXfer_btrace_conf },
4689 { "Qbtrace-conf:bts:size", PACKET_DISABLE, remote_supported_packet,
f7e6eed5
PA
4690 PACKET_Qbtrace_conf_bts_size },
4691 { "swbreak", PACKET_DISABLE, remote_supported_packet, PACKET_swbreak_feature },
0a93529c 4692 { "hwbreak", PACKET_DISABLE, remote_supported_packet, PACKET_hwbreak_feature },
89245bc0
DB
4693 { "fork-events", PACKET_DISABLE, remote_supported_packet,
4694 PACKET_fork_event_feature },
4695 { "vfork-events", PACKET_DISABLE, remote_supported_packet,
4696 PACKET_vfork_event_feature },
94585166
DB
4697 { "exec-events", PACKET_DISABLE, remote_supported_packet,
4698 PACKET_exec_event_feature },
b20a6524 4699 { "Qbtrace-conf:pt:size", PACKET_DISABLE, remote_supported_packet,
750ce8d1 4700 PACKET_Qbtrace_conf_pt_size },
65706a29
PA
4701 { "vContSupported", PACKET_DISABLE, remote_supported_packet, PACKET_vContSupported },
4702 { "QThreadEvents", PACKET_DISABLE, remote_supported_packet, PACKET_QThreadEvents },
f2faf941 4703 { "no-resumed", PACKET_DISABLE, remote_supported_packet, PACKET_no_resumed },
be2a5f71
DJ
4704};
4705
c8d5aac9
L
4706static char *remote_support_xml;
4707
4708/* Register string appended to "xmlRegisters=" in qSupported query. */
4709
4710void
6e39997a 4711register_remote_support_xml (const char *xml)
c8d5aac9
L
4712{
4713#if defined(HAVE_LIBEXPAT)
4714 if (remote_support_xml == NULL)
c4f7c687 4715 remote_support_xml = concat ("xmlRegisters=", xml, (char *) NULL);
c8d5aac9
L
4716 else
4717 {
4718 char *copy = xstrdup (remote_support_xml + 13);
4719 char *p = strtok (copy, ",");
4720
4721 do
4722 {
4723 if (strcmp (p, xml) == 0)
4724 {
4725 /* already there */
4726 xfree (copy);
4727 return;
4728 }
4729 }
4730 while ((p = strtok (NULL, ",")) != NULL);
4731 xfree (copy);
4732
94b0dee1
PA
4733 remote_support_xml = reconcat (remote_support_xml,
4734 remote_support_xml, ",", xml,
4735 (char *) NULL);
c8d5aac9
L
4736 }
4737#endif
4738}
4739
4740static char *
4741remote_query_supported_append (char *msg, const char *append)
4742{
4743 if (msg)
94b0dee1 4744 return reconcat (msg, msg, ";", append, (char *) NULL);
c8d5aac9
L
4745 else
4746 return xstrdup (append);
4747}
4748
be2a5f71
DJ
4749static void
4750remote_query_supported (void)
4751{
4752 struct remote_state *rs = get_remote_state ();
4753 char *next;
4754 int i;
4755 unsigned char seen [ARRAY_SIZE (remote_protocol_features)];
4756
4757 /* The packet support flags are handled differently for this packet
4758 than for most others. We treat an error, a disabled packet, and
4759 an empty response identically: any features which must be reported
4760 to be used will be automatically disabled. An empty buffer
4761 accomplishes this, since that is also the representation for a list
4762 containing no features. */
4763
4764 rs->buf[0] = 0;
4082afcc 4765 if (packet_support (PACKET_qSupported) != PACKET_DISABLE)
be2a5f71 4766 {
c8d5aac9 4767 char *q = NULL;
94b0dee1 4768 struct cleanup *old_chain = make_cleanup (free_current_contents, &q);
c8d5aac9 4769
73b8c1fd
PA
4770 if (packet_set_cmd_state (PACKET_multiprocess_feature) != AUTO_BOOLEAN_FALSE)
4771 q = remote_query_supported_append (q, "multiprocess+");
c8d5aac9 4772
f7e6eed5
PA
4773 if (packet_set_cmd_state (PACKET_swbreak_feature) != AUTO_BOOLEAN_FALSE)
4774 q = remote_query_supported_append (q, "swbreak+");
4775 if (packet_set_cmd_state (PACKET_hwbreak_feature) != AUTO_BOOLEAN_FALSE)
4776 q = remote_query_supported_append (q, "hwbreak+");
4777
dde08ee1
PA
4778 q = remote_query_supported_append (q, "qRelocInsn+");
4779
8020350c
DB
4780 if (packet_set_cmd_state (PACKET_fork_event_feature)
4781 != AUTO_BOOLEAN_FALSE)
4782 q = remote_query_supported_append (q, "fork-events+");
4783 if (packet_set_cmd_state (PACKET_vfork_event_feature)
4784 != AUTO_BOOLEAN_FALSE)
4785 q = remote_query_supported_append (q, "vfork-events+");
4786 if (packet_set_cmd_state (PACKET_exec_event_feature)
4787 != AUTO_BOOLEAN_FALSE)
4788 q = remote_query_supported_append (q, "exec-events+");
89245bc0 4789
750ce8d1
YQ
4790 if (packet_set_cmd_state (PACKET_vContSupported) != AUTO_BOOLEAN_FALSE)
4791 q = remote_query_supported_append (q, "vContSupported+");
4792
65706a29
PA
4793 if (packet_set_cmd_state (PACKET_QThreadEvents) != AUTO_BOOLEAN_FALSE)
4794 q = remote_query_supported_append (q, "QThreadEvents+");
4795
f2faf941
PA
4796 if (packet_set_cmd_state (PACKET_no_resumed) != AUTO_BOOLEAN_FALSE)
4797 q = remote_query_supported_append (q, "no-resumed+");
4798
b35d5edb
PA
4799 /* Keep this one last to work around a gdbserver <= 7.10 bug in
4800 the qSupported:xmlRegisters=i386 handling. */
4801 if (remote_support_xml != NULL)
4802 q = remote_query_supported_append (q, remote_support_xml);
4803
dde08ee1
PA
4804 q = reconcat (q, "qSupported:", q, (char *) NULL);
4805 putpkt (q);
82f73884 4806
94b0dee1
PA
4807 do_cleanups (old_chain);
4808
be2a5f71
DJ
4809 getpkt (&rs->buf, &rs->buf_size, 0);
4810
4811 /* If an error occured, warn, but do not return - just reset the
4812 buffer to empty and go on to disable features. */
4813 if (packet_ok (rs->buf, &remote_protocol_packets[PACKET_qSupported])
4814 == PACKET_ERROR)
4815 {
4816 warning (_("Remote failure reply: %s"), rs->buf);
4817 rs->buf[0] = 0;
4818 }
4819 }
4820
4821 memset (seen, 0, sizeof (seen));
4822
4823 next = rs->buf;
4824 while (*next)
4825 {
4826 enum packet_support is_supported;
4827 char *p, *end, *name_end, *value;
4828
4829 /* First separate out this item from the rest of the packet. If
4830 there's another item after this, we overwrite the separator
4831 (terminated strings are much easier to work with). */
4832 p = next;
4833 end = strchr (p, ';');
4834 if (end == NULL)
4835 {
4836 end = p + strlen (p);
4837 next = end;
4838 }
4839 else
4840 {
89be2091
DJ
4841 *end = '\0';
4842 next = end + 1;
4843
be2a5f71
DJ
4844 if (end == p)
4845 {
4846 warning (_("empty item in \"qSupported\" response"));
4847 continue;
4848 }
be2a5f71
DJ
4849 }
4850
4851 name_end = strchr (p, '=');
4852 if (name_end)
4853 {
4854 /* This is a name=value entry. */
4855 is_supported = PACKET_ENABLE;
4856 value = name_end + 1;
4857 *name_end = '\0';
4858 }
4859 else
4860 {
4861 value = NULL;
4862 switch (end[-1])
4863 {
4864 case '+':
4865 is_supported = PACKET_ENABLE;
4866 break;
4867
4868 case '-':
4869 is_supported = PACKET_DISABLE;
4870 break;
4871
4872 case '?':
4873 is_supported = PACKET_SUPPORT_UNKNOWN;
4874 break;
4875
4876 default:
3e43a32a
MS
4877 warning (_("unrecognized item \"%s\" "
4878 "in \"qSupported\" response"), p);
be2a5f71
DJ
4879 continue;
4880 }
4881 end[-1] = '\0';
4882 }
4883
4884 for (i = 0; i < ARRAY_SIZE (remote_protocol_features); i++)
4885 if (strcmp (remote_protocol_features[i].name, p) == 0)
4886 {
4887 const struct protocol_feature *feature;
4888
4889 seen[i] = 1;
4890 feature = &remote_protocol_features[i];
4891 feature->func (feature, is_supported, value);
4892 break;
4893 }
4894 }
4895
4896 /* If we increased the packet size, make sure to increase the global
4897 buffer size also. We delay this until after parsing the entire
4898 qSupported packet, because this is the same buffer we were
4899 parsing. */
4900 if (rs->buf_size < rs->explicit_packet_size)
4901 {
4902 rs->buf_size = rs->explicit_packet_size;
224c3ddb 4903 rs->buf = (char *) xrealloc (rs->buf, rs->buf_size);
be2a5f71
DJ
4904 }
4905
4906 /* Handle the defaults for unmentioned features. */
4907 for (i = 0; i < ARRAY_SIZE (remote_protocol_features); i++)
4908 if (!seen[i])
4909 {
4910 const struct protocol_feature *feature;
4911
4912 feature = &remote_protocol_features[i];
4913 feature->func (feature, feature->default_support, NULL);
4914 }
4915}
4916
048094ac
PA
4917/* Serial QUIT handler for the remote serial descriptor.
4918
4919 Defers handling a Ctrl-C until we're done with the current
4920 command/response packet sequence, unless:
4921
4922 - We're setting up the connection. Don't send a remote interrupt
4923 request, as we're not fully synced yet. Quit immediately
4924 instead.
4925
4926 - The target has been resumed in the foreground
4927 (target_terminal_is_ours is false) with a synchronous resume
4928 packet, and we're blocked waiting for the stop reply, thus a
4929 Ctrl-C should be immediately sent to the target.
4930
4931 - We get a second Ctrl-C while still within the same serial read or
4932 write. In that case the serial is seemingly wedged --- offer to
4933 quit/disconnect.
4934
4935 - We see a second Ctrl-C without target response, after having
4936 previously interrupted the target. In that case the target/stub
4937 is probably wedged --- offer to quit/disconnect.
4938*/
4939
4940static void
4941remote_serial_quit_handler (void)
4942{
4943 struct remote_state *rs = get_remote_state ();
4944
4945 if (check_quit_flag ())
4946 {
4947 /* If we're starting up, we're not fully synced yet. Quit
4948 immediately. */
4949 if (rs->starting_up)
4950 quit ();
4951 else if (rs->got_ctrlc_during_io)
4952 {
4953 if (query (_("The target is not responding to GDB commands.\n"
4954 "Stop debugging it? ")))
4955 remote_unpush_and_throw ();
4956 }
4957 /* If ^C has already been sent once, offer to disconnect. */
4958 else if (!target_terminal_is_ours () && rs->ctrlc_pending_p)
4959 interrupt_query ();
4960 /* All-stop protocol, and blocked waiting for stop reply. Send
4961 an interrupt request. */
4962 else if (!target_terminal_is_ours () && rs->waiting_for_stop_reply)
4963 target_interrupt (inferior_ptid);
4964 else
4965 rs->got_ctrlc_during_io = 1;
4966 }
4967}
4968
78a095c3
JK
4969/* Remove any of the remote.c targets from target stack. Upper targets depend
4970 on it so remove them first. */
4971
4972static void
4973remote_unpush_target (void)
4974{
915ef8b1 4975 pop_all_targets_at_and_above (process_stratum);
78a095c3 4976}
be2a5f71 4977
048094ac
PA
4978static void
4979remote_unpush_and_throw (void)
4980{
4981 remote_unpush_target ();
4982 throw_error (TARGET_CLOSE_ERROR, _("Disconnected from target."));
4983}
4984
c906108c 4985static void
014f9477 4986remote_open_1 (const char *name, int from_tty,
3e43a32a 4987 struct target_ops *target, int extended_p)
c906108c 4988{
d01949b6 4989 struct remote_state *rs = get_remote_state ();
a6f3e723 4990
c906108c 4991 if (name == 0)
8a3fe4f8 4992 error (_("To open a remote debug connection, you need to specify what\n"
22e04375 4993 "serial device is attached to the remote system\n"
8a3fe4f8 4994 "(e.g. /dev/ttyS0, /dev/ttya, COM1, etc.)."));
c906108c 4995
23860348 4996 /* See FIXME above. */
c6ebd6cf 4997 if (!target_async_permitted)
92d1e331 4998 wait_forever_enabled_p = 1;
6426a772 4999
2d717e4f 5000 /* If we're connected to a running target, target_preopen will kill it.
78a095c3
JK
5001 Ask this question first, before target_preopen has a chance to kill
5002 anything. */
5d93a237 5003 if (rs->remote_desc != NULL && !have_inferiors ())
2d717e4f 5004 {
78a095c3
JK
5005 if (from_tty
5006 && !query (_("Already connected to a remote target. Disconnect? ")))
2d717e4f
DJ
5007 error (_("Still connected."));
5008 }
5009
78a095c3 5010 /* Here the possibly existing remote target gets unpushed. */
c906108c
SS
5011 target_preopen (from_tty);
5012
89be2091 5013 /* Make sure we send the passed signals list the next time we resume. */
747dc59d
TT
5014 xfree (rs->last_pass_packet);
5015 rs->last_pass_packet = NULL;
89be2091 5016
9b224c5e
PA
5017 /* Make sure we send the program signals list the next time we
5018 resume. */
5e4a05c4
TT
5019 xfree (rs->last_program_signals_packet);
5020 rs->last_program_signals_packet = NULL;
9b224c5e 5021
ad9a8f3f 5022 remote_fileio_reset ();
1dd41f16
NS
5023 reopen_exec_file ();
5024 reread_symbols ();
5025
5d93a237
TT
5026 rs->remote_desc = remote_serial_open (name);
5027 if (!rs->remote_desc)
c906108c
SS
5028 perror_with_name (name);
5029
5030 if (baud_rate != -1)
5031 {
5d93a237 5032 if (serial_setbaudrate (rs->remote_desc, baud_rate))
c906108c 5033 {
9b74d5d3
KB
5034 /* The requested speed could not be set. Error out to
5035 top level after closing remote_desc. Take care to
5036 set remote_desc to NULL to avoid closing remote_desc
5037 more than once. */
5d93a237
TT
5038 serial_close (rs->remote_desc);
5039 rs->remote_desc = NULL;
c906108c
SS
5040 perror_with_name (name);
5041 }
5042 }
5043
236af5e3 5044 serial_setparity (rs->remote_desc, serial_parity);
5d93a237 5045 serial_raw (rs->remote_desc);
c906108c
SS
5046
5047 /* If there is something sitting in the buffer we might take it as a
5048 response to a command, which would be bad. */
5d93a237 5049 serial_flush_input (rs->remote_desc);
c906108c
SS
5050
5051 if (from_tty)
5052 {
5053 puts_filtered ("Remote debugging using ");
5054 puts_filtered (name);
5055 puts_filtered ("\n");
5056 }
23860348 5057 push_target (target); /* Switch to using remote target now. */
c906108c 5058
74531fed
PA
5059 /* Register extra event sources in the event loop. */
5060 remote_async_inferior_event_token
5061 = create_async_event_handler (remote_async_inferior_event_handler,
5062 NULL);
5965e028 5063 rs->notif_state = remote_notif_state_allocate ();
74531fed 5064
be2a5f71
DJ
5065 /* Reset the target state; these things will be queried either by
5066 remote_query_supported or as they are needed. */
ca4f7f8b 5067 reset_all_packet_configs_support ();
74531fed 5068 rs->cached_wait_status = 0;
be2a5f71 5069 rs->explicit_packet_size = 0;
a6f3e723 5070 rs->noack_mode = 0;
82f73884 5071 rs->extended = extended_p;
e24a49d8 5072 rs->waiting_for_stop_reply = 0;
3a29589a 5073 rs->ctrlc_pending_p = 0;
048094ac 5074 rs->got_ctrlc_during_io = 0;
802188a7 5075
47f8a51d
TT
5076 rs->general_thread = not_sent_ptid;
5077 rs->continue_thread = not_sent_ptid;
262e1174 5078 rs->remote_traceframe_number = -1;
c906108c 5079
3a00c802
PA
5080 rs->last_resume_exec_dir = EXEC_FORWARD;
5081
9d1f7ab2 5082 /* Probe for ability to use "ThreadInfo" query, as required. */
b80fafe3
TT
5083 rs->use_threadinfo_query = 1;
5084 rs->use_threadextra_query = 1;
9d1f7ab2 5085
80152258
PA
5086 readahead_cache_invalidate ();
5087
048094ac
PA
5088 /* Start out by owning the terminal. */
5089 remote_async_terminal_ours_p = 1;
5090
c6ebd6cf 5091 if (target_async_permitted)
92d1e331 5092 {
92d1e331
DJ
5093 /* FIXME: cagney/1999-09-23: During the initial connection it is
5094 assumed that the target is already ready and able to respond to
0df8b418 5095 requests. Unfortunately remote_start_remote() eventually calls
92d1e331 5096 wait_for_inferior() with no timeout. wait_forever_enabled_p gets
0df8b418 5097 around this. Eventually a mechanism that allows
92d1e331 5098 wait_for_inferior() to expect/get timeouts will be
23860348 5099 implemented. */
92d1e331
DJ
5100 wait_forever_enabled_p = 0;
5101 }
5102
23860348 5103 /* First delete any symbols previously loaded from shared libraries. */
f78f6cf1 5104 no_shared_libraries (NULL, 0);
f78f6cf1 5105
74531fed
PA
5106 /* Start afresh. */
5107 init_thread_list ();
5108
36918e70 5109 /* Start the remote connection. If error() or QUIT, discard this
165b8e33
AC
5110 target (we'd otherwise be in an inconsistent state) and then
5111 propogate the error on up the exception chain. This ensures that
5112 the caller doesn't stumble along blindly assuming that the
5113 function succeeded. The CLI doesn't have this problem but other
5114 UI's, such as MI do.
36918e70
AC
5115
5116 FIXME: cagney/2002-05-19: Instead of re-throwing the exception,
5117 this function should return an error indication letting the
ce2826aa 5118 caller restore the previous state. Unfortunately the command
36918e70
AC
5119 ``target remote'' is directly wired to this function making that
5120 impossible. On a positive note, the CLI side of this problem has
5121 been fixed - the function set_cmd_context() makes it possible for
5122 all the ``target ....'' commands to share a common callback
5123 function. See cli-dump.c. */
109c3e39 5124 {
2d717e4f 5125
492d29ea 5126 TRY
04bd08de
TT
5127 {
5128 remote_start_remote (from_tty, target, extended_p);
5129 }
492d29ea 5130 CATCH (ex, RETURN_MASK_ALL)
109c3e39 5131 {
c8d104ad
PA
5132 /* Pop the partially set up target - unless something else did
5133 already before throwing the exception. */
5d93a237 5134 if (rs->remote_desc != NULL)
78a095c3 5135 remote_unpush_target ();
c6ebd6cf 5136 if (target_async_permitted)
109c3e39
AC
5137 wait_forever_enabled_p = 1;
5138 throw_exception (ex);
5139 }
492d29ea 5140 END_CATCH
109c3e39 5141 }
c906108c 5142
f4abbc16
MM
5143 remote_btrace_reset ();
5144
c6ebd6cf 5145 if (target_async_permitted)
92d1e331 5146 wait_forever_enabled_p = 1;
43ff13b4
JM
5147}
5148
de0d863e
DB
5149/* Detach the specified process. */
5150
5151static void
5152remote_detach_pid (int pid)
5153{
5154 struct remote_state *rs = get_remote_state ();
5155
5156 if (remote_multi_process_p (rs))
5157 xsnprintf (rs->buf, get_remote_packet_size (), "D;%x", pid);
5158 else
5159 strcpy (rs->buf, "D");
5160
5161 putpkt (rs->buf);
5162 getpkt (&rs->buf, &rs->buf_size, 0);
5163
5164 if (rs->buf[0] == 'O' && rs->buf[1] == 'K')
5165 ;
5166 else if (rs->buf[0] == '\0')
5167 error (_("Remote doesn't know how to detach"));
5168 else
5169 error (_("Can't detach process."));
5170}
5171
5172/* This detaches a program to which we previously attached, using
5173 inferior_ptid to identify the process. After this is done, GDB
5174 can be used to debug some other program. We better not have left
5175 any breakpoints in the target program or it'll die when it hits
5176 one. */
c906108c
SS
5177
5178static void
de0d863e 5179remote_detach_1 (const char *args, int from_tty)
c906108c 5180{
82f73884 5181 int pid = ptid_get_pid (inferior_ptid);
d01949b6 5182 struct remote_state *rs = get_remote_state ();
de0d863e
DB
5183 struct thread_info *tp = find_thread_ptid (inferior_ptid);
5184 int is_fork_parent;
c906108c
SS
5185
5186 if (args)
8a3fe4f8 5187 error (_("Argument given to \"detach\" when remotely debugging."));
c906108c 5188
2d717e4f
DJ
5189 if (!target_has_execution)
5190 error (_("No process to detach from."));
5191
0f48b757 5192 target_announce_detach (from_tty);
7cee1e54 5193
c906108c 5194 /* Tell the remote target to detach. */
de0d863e 5195 remote_detach_pid (pid);
82f73884 5196
8020350c
DB
5197 /* Exit only if this is the only active inferior. */
5198 if (from_tty && !rs->extended && number_of_live_inferiors () == 1)
7cee1e54 5199 puts_filtered (_("Ending remote debugging.\n"));
82f73884 5200
de0d863e
DB
5201 /* Check to see if we are detaching a fork parent. Note that if we
5202 are detaching a fork child, tp == NULL. */
5203 is_fork_parent = (tp != NULL
5204 && tp->pending_follow.kind == TARGET_WAITKIND_FORKED);
5205
5206 /* If doing detach-on-fork, we don't mourn, because that will delete
5207 breakpoints that should be available for the followed inferior. */
5208 if (!is_fork_parent)
bc1e6c81 5209 target_mourn_inferior (inferior_ptid);
de0d863e
DB
5210 else
5211 {
5212 inferior_ptid = null_ptid;
5213 detach_inferior (pid);
5214 }
2d717e4f
DJ
5215}
5216
5217static void
52554a0e 5218remote_detach (struct target_ops *ops, const char *args, int from_tty)
2d717e4f 5219{
de0d863e 5220 remote_detach_1 (args, from_tty);
2d717e4f
DJ
5221}
5222
5223static void
52554a0e 5224extended_remote_detach (struct target_ops *ops, const char *args, int from_tty)
2d717e4f 5225{
de0d863e
DB
5226 remote_detach_1 (args, from_tty);
5227}
5228
5229/* Target follow-fork function for remote targets. On entry, and
5230 at return, the current inferior is the fork parent.
5231
5232 Note that although this is currently only used for extended-remote,
5233 it is named remote_follow_fork in anticipation of using it for the
5234 remote target as well. */
5235
5236static int
5237remote_follow_fork (struct target_ops *ops, int follow_child,
5238 int detach_fork)
5239{
5240 struct remote_state *rs = get_remote_state ();
c269dbdb 5241 enum target_waitkind kind = inferior_thread ()->pending_follow.kind;
de0d863e 5242
c269dbdb
DB
5243 if ((kind == TARGET_WAITKIND_FORKED && remote_fork_event_p (rs))
5244 || (kind == TARGET_WAITKIND_VFORKED && remote_vfork_event_p (rs)))
de0d863e
DB
5245 {
5246 /* When following the parent and detaching the child, we detach
5247 the child here. For the case of following the child and
5248 detaching the parent, the detach is done in the target-
5249 independent follow fork code in infrun.c. We can't use
5250 target_detach when detaching an unfollowed child because
5251 the client side doesn't know anything about the child. */
5252 if (detach_fork && !follow_child)
5253 {
5254 /* Detach the fork child. */
5255 ptid_t child_ptid;
5256 pid_t child_pid;
5257
5258 child_ptid = inferior_thread ()->pending_follow.value.related_pid;
5259 child_pid = ptid_get_pid (child_ptid);
5260
5261 remote_detach_pid (child_pid);
5262 detach_inferior (child_pid);
5263 }
5264 }
5265 return 0;
c906108c
SS
5266}
5267
94585166
DB
5268/* Target follow-exec function for remote targets. Save EXECD_PATHNAME
5269 in the program space of the new inferior. On entry and at return the
5270 current inferior is the exec'ing inferior. INF is the new exec'd
5271 inferior, which may be the same as the exec'ing inferior unless
5272 follow-exec-mode is "new". */
5273
5274static void
5275remote_follow_exec (struct target_ops *ops,
5276 struct inferior *inf, char *execd_pathname)
5277{
5278 /* We know that this is a target file name, so if it has the "target:"
5279 prefix we strip it off before saving it in the program space. */
5280 if (is_target_filename (execd_pathname))
5281 execd_pathname += strlen (TARGET_SYSROOT_PREFIX);
5282
5283 set_pspace_remote_exec_file (inf->pspace, execd_pathname);
5284}
5285
6ad8ae5c
DJ
5286/* Same as remote_detach, but don't send the "D" packet; just disconnect. */
5287
43ff13b4 5288static void
fee354ee 5289remote_disconnect (struct target_ops *target, const char *args, int from_tty)
43ff13b4 5290{
43ff13b4 5291 if (args)
2d717e4f 5292 error (_("Argument given to \"disconnect\" when remotely debugging."));
43ff13b4 5293
8020350c
DB
5294 /* Make sure we unpush even the extended remote targets. Calling
5295 target_mourn_inferior won't unpush, and remote_mourn won't
5296 unpush if there is more than one inferior left. */
5297 unpush_target (target);
5298 generic_mourn_inferior ();
2d717e4f 5299
43ff13b4
JM
5300 if (from_tty)
5301 puts_filtered ("Ending remote debugging.\n");
5302}
5303
2d717e4f
DJ
5304/* Attach to the process specified by ARGS. If FROM_TTY is non-zero,
5305 be chatty about it. */
5306
5307static void
20f796c9
GB
5308extended_remote_attach (struct target_ops *target, const char *args,
5309 int from_tty)
2d717e4f
DJ
5310{
5311 struct remote_state *rs = get_remote_state ();
be86555c 5312 int pid;
96ef3384 5313 char *wait_status = NULL;
2d717e4f 5314
74164c56 5315 pid = parse_pid_to_attach (args);
2d717e4f 5316
74164c56
JK
5317 /* Remote PID can be freely equal to getpid, do not check it here the same
5318 way as in other targets. */
2d717e4f 5319
4082afcc 5320 if (packet_support (PACKET_vAttach) == PACKET_DISABLE)
2d717e4f
DJ
5321 error (_("This target does not support attaching to a process"));
5322
7cee1e54
PA
5323 if (from_tty)
5324 {
5325 char *exec_file = get_exec_file (0);
5326
5327 if (exec_file)
5328 printf_unfiltered (_("Attaching to program: %s, %s\n"), exec_file,
5329 target_pid_to_str (pid_to_ptid (pid)));
5330 else
5331 printf_unfiltered (_("Attaching to %s\n"),
5332 target_pid_to_str (pid_to_ptid (pid)));
5333
5334 gdb_flush (gdb_stdout);
5335 }
5336
bba74b36 5337 xsnprintf (rs->buf, get_remote_packet_size (), "vAttach;%x", pid);
2d717e4f
DJ
5338 putpkt (rs->buf);
5339 getpkt (&rs->buf, &rs->buf_size, 0);
5340
4082afcc
PA
5341 switch (packet_ok (rs->buf,
5342 &remote_protocol_packets[PACKET_vAttach]))
2d717e4f 5343 {
4082afcc 5344 case PACKET_OK:
6efcd9a8 5345 if (!target_is_non_stop_p ())
74531fed
PA
5346 {
5347 /* Save the reply for later. */
224c3ddb 5348 wait_status = (char *) alloca (strlen (rs->buf) + 1);
74531fed
PA
5349 strcpy (wait_status, rs->buf);
5350 }
5351 else if (strcmp (rs->buf, "OK") != 0)
5352 error (_("Attaching to %s failed with: %s"),
5353 target_pid_to_str (pid_to_ptid (pid)),
5354 rs->buf);
4082afcc
PA
5355 break;
5356 case PACKET_UNKNOWN:
5357 error (_("This target does not support attaching to a process"));
5358 default:
5359 error (_("Attaching to %s failed"),
5360 target_pid_to_str (pid_to_ptid (pid)));
2d717e4f 5361 }
2d717e4f 5362
1b6e6f5c 5363 set_current_inferior (remote_add_inferior (0, pid, 1, 0));
bad34192 5364
2d717e4f 5365 inferior_ptid = pid_to_ptid (pid);
79d7f229 5366
6efcd9a8 5367 if (target_is_non_stop_p ())
bad34192
PA
5368 {
5369 struct thread_info *thread;
79d7f229 5370
bad34192 5371 /* Get list of threads. */
e8032dde 5372 remote_update_thread_list (target);
82f73884 5373
bad34192
PA
5374 thread = first_thread_of_process (pid);
5375 if (thread)
5376 inferior_ptid = thread->ptid;
5377 else
5378 inferior_ptid = pid_to_ptid (pid);
5379
5380 /* Invalidate our notion of the remote current thread. */
47f8a51d 5381 record_currthread (rs, minus_one_ptid);
bad34192 5382 }
74531fed 5383 else
bad34192
PA
5384 {
5385 /* Now, if we have thread information, update inferior_ptid. */
5386 inferior_ptid = remote_current_thread (inferior_ptid);
5387
5388 /* Add the main thread to the thread list. */
5389 add_thread_silent (inferior_ptid);
5390 }
c0a2216e 5391
96ef3384
UW
5392 /* Next, if the target can specify a description, read it. We do
5393 this before anything involving memory or registers. */
5394 target_find_description ();
5395
6efcd9a8 5396 if (!target_is_non_stop_p ())
74531fed
PA
5397 {
5398 /* Use the previously fetched status. */
5399 gdb_assert (wait_status != NULL);
5400
5401 if (target_can_async_p ())
5402 {
722247f1
YQ
5403 struct notif_event *reply
5404 = remote_notif_parse (&notif_client_stop, wait_status);
74531fed 5405
722247f1 5406 push_stop_reply ((struct stop_reply *) reply);
74531fed 5407
6a3753b3 5408 target_async (1);
74531fed
PA
5409 }
5410 else
5411 {
5412 gdb_assert (wait_status != NULL);
5413 strcpy (rs->buf, wait_status);
5414 rs->cached_wait_status = 1;
5415 }
5416 }
5417 else
5418 gdb_assert (wait_status == NULL);
2d717e4f
DJ
5419}
5420
b9c1d481
AS
5421/* Implementation of the to_post_attach method. */
5422
5423static void
5424extended_remote_post_attach (struct target_ops *ops, int pid)
5425{
6efcd9a8
PA
5426 /* Get text, data & bss offsets. */
5427 get_offsets ();
5428
b9c1d481
AS
5429 /* In certain cases GDB might not have had the chance to start
5430 symbol lookup up until now. This could happen if the debugged
5431 binary is not using shared libraries, the vsyscall page is not
5432 present (on Linux) and the binary itself hadn't changed since the
5433 debugging process was started. */
5434 if (symfile_objfile != NULL)
5435 remote_check_symbols();
5436}
5437
c906108c 5438\f
506fb367
DJ
5439/* Check for the availability of vCont. This function should also check
5440 the response. */
c906108c
SS
5441
5442static void
6d820c5c 5443remote_vcont_probe (struct remote_state *rs)
c906108c 5444{
2e9f7625 5445 char *buf;
6d820c5c 5446
2e9f7625
DJ
5447 strcpy (rs->buf, "vCont?");
5448 putpkt (rs->buf);
6d820c5c 5449 getpkt (&rs->buf, &rs->buf_size, 0);
2e9f7625 5450 buf = rs->buf;
c906108c 5451
506fb367 5452 /* Make sure that the features we assume are supported. */
61012eef 5453 if (startswith (buf, "vCont"))
506fb367
DJ
5454 {
5455 char *p = &buf[5];
750ce8d1 5456 int support_c, support_C;
506fb367 5457
750ce8d1
YQ
5458 rs->supports_vCont.s = 0;
5459 rs->supports_vCont.S = 0;
506fb367
DJ
5460 support_c = 0;
5461 support_C = 0;
d458bd84 5462 rs->supports_vCont.t = 0;
c1e36e3e 5463 rs->supports_vCont.r = 0;
506fb367
DJ
5464 while (p && *p == ';')
5465 {
5466 p++;
5467 if (*p == 's' && (*(p + 1) == ';' || *(p + 1) == 0))
750ce8d1 5468 rs->supports_vCont.s = 1;
506fb367 5469 else if (*p == 'S' && (*(p + 1) == ';' || *(p + 1) == 0))
750ce8d1 5470 rs->supports_vCont.S = 1;
506fb367
DJ
5471 else if (*p == 'c' && (*(p + 1) == ';' || *(p + 1) == 0))
5472 support_c = 1;
5473 else if (*p == 'C' && (*(p + 1) == ';' || *(p + 1) == 0))
5474 support_C = 1;
74531fed 5475 else if (*p == 't' && (*(p + 1) == ';' || *(p + 1) == 0))
d458bd84 5476 rs->supports_vCont.t = 1;
c1e36e3e
PA
5477 else if (*p == 'r' && (*(p + 1) == ';' || *(p + 1) == 0))
5478 rs->supports_vCont.r = 1;
506fb367
DJ
5479
5480 p = strchr (p, ';');
5481 }
c906108c 5482
750ce8d1
YQ
5483 /* If c, and C are not all supported, we can't use vCont. Clearing
5484 BUF will make packet_ok disable the packet. */
5485 if (!support_c || !support_C)
506fb367
DJ
5486 buf[0] = 0;
5487 }
c906108c 5488
444abaca 5489 packet_ok (buf, &remote_protocol_packets[PACKET_vCont]);
506fb367 5490}
c906108c 5491
0d8f58ca
PA
5492/* Helper function for building "vCont" resumptions. Write a
5493 resumption to P. ENDP points to one-passed-the-end of the buffer
5494 we're allowed to write to. Returns BUF+CHARACTERS_WRITTEN. The
5495 thread to be resumed is PTID; STEP and SIGGNAL indicate whether the
5496 resumed thread should be single-stepped and/or signalled. If PTID
5497 equals minus_one_ptid, then all threads are resumed; if PTID
5498 represents a process, then all threads of the process are resumed;
5499 the thread to be stepped and/or signalled is given in the global
5500 INFERIOR_PTID. */
5501
5502static char *
5503append_resumption (char *p, char *endp,
2ea28649 5504 ptid_t ptid, int step, enum gdb_signal siggnal)
0d8f58ca
PA
5505{
5506 struct remote_state *rs = get_remote_state ();
5507
a493e3e2 5508 if (step && siggnal != GDB_SIGNAL_0)
0d8f58ca 5509 p += xsnprintf (p, endp - p, ";S%02x", siggnal);
c1e36e3e
PA
5510 else if (step
5511 /* GDB is willing to range step. */
5512 && use_range_stepping
5513 /* Target supports range stepping. */
5514 && rs->supports_vCont.r
5515 /* We don't currently support range stepping multiple
5516 threads with a wildcard (though the protocol allows it,
5517 so stubs shouldn't make an active effort to forbid
5518 it). */
5519 && !(remote_multi_process_p (rs) && ptid_is_pid (ptid)))
5520 {
5521 struct thread_info *tp;
5522
5523 if (ptid_equal (ptid, minus_one_ptid))
5524 {
5525 /* If we don't know about the target thread's tid, then
5526 we're resuming magic_null_ptid (see caller). */
5527 tp = find_thread_ptid (magic_null_ptid);
5528 }
5529 else
5530 tp = find_thread_ptid (ptid);
5531 gdb_assert (tp != NULL);
5532
5533 if (tp->control.may_range_step)
5534 {
5535 int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
5536
5537 p += xsnprintf (p, endp - p, ";r%s,%s",
5538 phex_nz (tp->control.step_range_start,
5539 addr_size),
5540 phex_nz (tp->control.step_range_end,
5541 addr_size));
5542 }
5543 else
5544 p += xsnprintf (p, endp - p, ";s");
5545 }
0d8f58ca
PA
5546 else if (step)
5547 p += xsnprintf (p, endp - p, ";s");
a493e3e2 5548 else if (siggnal != GDB_SIGNAL_0)
0d8f58ca
PA
5549 p += xsnprintf (p, endp - p, ";C%02x", siggnal);
5550 else
5551 p += xsnprintf (p, endp - p, ";c");
5552
5553 if (remote_multi_process_p (rs) && ptid_is_pid (ptid))
5554 {
5555 ptid_t nptid;
5556
5557 /* All (-1) threads of process. */
ba348170 5558 nptid = ptid_build (ptid_get_pid (ptid), -1, 0);
0d8f58ca
PA
5559
5560 p += xsnprintf (p, endp - p, ":");
5561 p = write_ptid (p, endp, nptid);
5562 }
5563 else if (!ptid_equal (ptid, minus_one_ptid))
5564 {
5565 p += xsnprintf (p, endp - p, ":");
5566 p = write_ptid (p, endp, ptid);
5567 }
5568
5569 return p;
5570}
5571
799a2abe
PA
5572/* Clear the thread's private info on resume. */
5573
5574static void
5575resume_clear_thread_private_info (struct thread_info *thread)
5576{
5577 if (thread->priv != NULL)
5578 {
5579 thread->priv->stop_reason = TARGET_STOPPED_BY_NO_REASON;
5580 thread->priv->watch_data_address = 0;
5581 }
5582}
5583
e5ef252a
PA
5584/* Append a vCont continue-with-signal action for threads that have a
5585 non-zero stop signal. */
5586
5587static char *
5588append_pending_thread_resumptions (char *p, char *endp, ptid_t ptid)
5589{
5590 struct thread_info *thread;
5591
034f788c 5592 ALL_NON_EXITED_THREADS (thread)
e5ef252a
PA
5593 if (ptid_match (thread->ptid, ptid)
5594 && !ptid_equal (inferior_ptid, thread->ptid)
70509625 5595 && thread->suspend.stop_signal != GDB_SIGNAL_0)
e5ef252a
PA
5596 {
5597 p = append_resumption (p, endp, thread->ptid,
5598 0, thread->suspend.stop_signal);
5599 thread->suspend.stop_signal = GDB_SIGNAL_0;
799a2abe 5600 resume_clear_thread_private_info (thread);
e5ef252a
PA
5601 }
5602
5603 return p;
5604}
5605
7b68ffbb
PA
5606/* Set the target running, using the packets that use Hc
5607 (c/s/C/S). */
5608
5609static void
5610remote_resume_with_hc (struct target_ops *ops,
5611 ptid_t ptid, int step, enum gdb_signal siggnal)
5612{
5613 struct remote_state *rs = get_remote_state ();
5614 struct thread_info *thread;
5615 char *buf;
5616
5617 rs->last_sent_signal = siggnal;
5618 rs->last_sent_step = step;
5619
5620 /* The c/s/C/S resume packets use Hc, so set the continue
5621 thread. */
5622 if (ptid_equal (ptid, minus_one_ptid))
5623 set_continue_thread (any_thread_ptid);
5624 else
5625 set_continue_thread (ptid);
5626
5627 ALL_NON_EXITED_THREADS (thread)
5628 resume_clear_thread_private_info (thread);
5629
5630 buf = rs->buf;
5631 if (execution_direction == EXEC_REVERSE)
5632 {
5633 /* We don't pass signals to the target in reverse exec mode. */
5634 if (info_verbose && siggnal != GDB_SIGNAL_0)
5635 warning (_(" - Can't pass signal %d to target in reverse: ignored."),
5636 siggnal);
5637
5638 if (step && packet_support (PACKET_bs) == PACKET_DISABLE)
5639 error (_("Remote reverse-step not supported."));
5640 if (!step && packet_support (PACKET_bc) == PACKET_DISABLE)
5641 error (_("Remote reverse-continue not supported."));
5642
5643 strcpy (buf, step ? "bs" : "bc");
5644 }
5645 else if (siggnal != GDB_SIGNAL_0)
5646 {
5647 buf[0] = step ? 'S' : 'C';
5648 buf[1] = tohex (((int) siggnal >> 4) & 0xf);
5649 buf[2] = tohex (((int) siggnal) & 0xf);
5650 buf[3] = '\0';
5651 }
5652 else
5653 strcpy (buf, step ? "s" : "c");
5654
5655 putpkt (buf);
5656}
5657
506fb367
DJ
5658/* Resume the remote inferior by using a "vCont" packet. The thread
5659 to be resumed is PTID; STEP and SIGGNAL indicate whether the
79d7f229
PA
5660 resumed thread should be single-stepped and/or signalled. If PTID
5661 equals minus_one_ptid, then all threads are resumed; the thread to
5662 be stepped and/or signalled is given in the global INFERIOR_PTID.
5663 This function returns non-zero iff it resumes the inferior.
44eaed12 5664
7b68ffbb
PA
5665 This function issues a strict subset of all possible vCont commands
5666 at the moment. */
44eaed12 5667
506fb367 5668static int
7b68ffbb 5669remote_resume_with_vcont (ptid_t ptid, int step, enum gdb_signal siggnal)
506fb367
DJ
5670{
5671 struct remote_state *rs = get_remote_state ();
82f73884
PA
5672 char *p;
5673 char *endp;
44eaed12 5674
7b68ffbb
PA
5675 /* No reverse execution actions defined for vCont. */
5676 if (execution_direction == EXEC_REVERSE)
5677 return 0;
5678
4082afcc 5679 if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
6d820c5c 5680 remote_vcont_probe (rs);
44eaed12 5681
4082afcc 5682 if (packet_support (PACKET_vCont) == PACKET_DISABLE)
6d820c5c 5683 return 0;
44eaed12 5684
82f73884
PA
5685 p = rs->buf;
5686 endp = rs->buf + get_remote_packet_size ();
5687
506fb367
DJ
5688 /* If we could generate a wider range of packets, we'd have to worry
5689 about overflowing BUF. Should there be a generic
5690 "multi-part-packet" packet? */
5691
0d8f58ca
PA
5692 p += xsnprintf (p, endp - p, "vCont");
5693
79d7f229 5694 if (ptid_equal (ptid, magic_null_ptid))
c906108c 5695 {
79d7f229
PA
5696 /* MAGIC_NULL_PTID means that we don't have any active threads,
5697 so we don't have any TID numbers the inferior will
5698 understand. Make sure to only send forms that do not specify
5699 a TID. */
a9cbf802 5700 append_resumption (p, endp, minus_one_ptid, step, siggnal);
506fb367 5701 }
0d8f58ca 5702 else if (ptid_equal (ptid, minus_one_ptid) || ptid_is_pid (ptid))
506fb367 5703 {
0d8f58ca
PA
5704 /* Resume all threads (of all processes, or of a single
5705 process), with preference for INFERIOR_PTID. This assumes
5706 inferior_ptid belongs to the set of all threads we are about
5707 to resume. */
a493e3e2 5708 if (step || siggnal != GDB_SIGNAL_0)
82f73884 5709 {
0d8f58ca
PA
5710 /* Step inferior_ptid, with or without signal. */
5711 p = append_resumption (p, endp, inferior_ptid, step, siggnal);
82f73884 5712 }
0d8f58ca 5713
e5ef252a
PA
5714 /* Also pass down any pending signaled resumption for other
5715 threads not the current. */
5716 p = append_pending_thread_resumptions (p, endp, ptid);
5717
0d8f58ca 5718 /* And continue others without a signal. */
a493e3e2 5719 append_resumption (p, endp, ptid, /*step=*/ 0, GDB_SIGNAL_0);
c906108c
SS
5720 }
5721 else
506fb367
DJ
5722 {
5723 /* Scheduler locking; resume only PTID. */
a9cbf802 5724 append_resumption (p, endp, ptid, step, siggnal);
506fb367 5725 }
c906108c 5726
82f73884
PA
5727 gdb_assert (strlen (rs->buf) < get_remote_packet_size ());
5728 putpkt (rs->buf);
506fb367 5729
6efcd9a8 5730 if (target_is_non_stop_p ())
74531fed
PA
5731 {
5732 /* In non-stop, the stub replies to vCont with "OK". The stop
5733 reply will be reported asynchronously by means of a `%Stop'
5734 notification. */
5735 getpkt (&rs->buf, &rs->buf_size, 0);
5736 if (strcmp (rs->buf, "OK") != 0)
5737 error (_("Unexpected vCont reply in non-stop mode: %s"), rs->buf);
5738 }
5739
506fb367 5740 return 1;
c906108c 5741}
43ff13b4 5742
506fb367
DJ
5743/* Tell the remote machine to resume. */
5744
43ff13b4 5745static void
28439f5e 5746remote_resume (struct target_ops *ops,
2ea28649 5747 ptid_t ptid, int step, enum gdb_signal siggnal)
43ff13b4 5748{
d01949b6 5749 struct remote_state *rs = get_remote_state ();
43ff13b4 5750
85ad3aaf
PA
5751 /* When connected in non-stop mode, the core resumes threads
5752 individually. Resuming remote threads directly in target_resume
5753 would thus result in sending one packet per thread. Instead, to
5754 minimize roundtrip latency, here we just store the resume
5755 request; the actual remote resumption will be done in
5756 target_commit_resume / remote_commit_resume, where we'll be able
5757 to do vCont action coalescing. */
5758 if (target_is_non_stop_p () && execution_direction != EXEC_REVERSE)
5759 {
5760 struct private_thread_info *remote_thr;
5761
5762 if (ptid_equal (minus_one_ptid, ptid) || ptid_is_pid (ptid))
5763 remote_thr = get_private_info_ptid (inferior_ptid);
5764 else
5765 remote_thr = get_private_info_ptid (ptid);
5766 remote_thr->last_resume_step = step;
5767 remote_thr->last_resume_sig = siggnal;
5768 return;
5769 }
5770
722247f1
YQ
5771 /* In all-stop, we can't mark REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN
5772 (explained in remote-notif.c:handle_notification) so
5773 remote_notif_process is not called. We need find a place where
5774 it is safe to start a 'vNotif' sequence. It is good to do it
5775 before resuming inferior, because inferior was stopped and no RSP
5776 traffic at that moment. */
6efcd9a8 5777 if (!target_is_non_stop_p ())
5965e028 5778 remote_notif_process (rs->notif_state, &notif_client_stop);
722247f1 5779
3a00c802
PA
5780 rs->last_resume_exec_dir = execution_direction;
5781
7b68ffbb
PA
5782 /* Prefer vCont, and fallback to s/c/S/C, which use Hc. */
5783 if (!remote_resume_with_vcont (ptid, step, siggnal))
5784 remote_resume_with_hc (ops, ptid, step, siggnal);
43ff13b4 5785
2acceee2 5786 /* We are about to start executing the inferior, let's register it
0df8b418
MS
5787 with the event loop. NOTE: this is the one place where all the
5788 execution commands end up. We could alternatively do this in each
23860348 5789 of the execution commands in infcmd.c. */
2acceee2
JM
5790 /* FIXME: ezannoni 1999-09-28: We may need to move this out of here
5791 into infcmd.c in order to allow inferior function calls to work
23860348 5792 NOT asynchronously. */
362646f5 5793 if (target_can_async_p ())
6a3753b3 5794 target_async (1);
e24a49d8
PA
5795
5796 /* We've just told the target to resume. The remote server will
5797 wait for the inferior to stop, and then send a stop reply. In
5798 the mean time, we can't start another command/query ourselves
74531fed
PA
5799 because the stub wouldn't be ready to process it. This applies
5800 only to the base all-stop protocol, however. In non-stop (which
5801 only supports vCont), the stub replies with an "OK", and is
5802 immediate able to process further serial input. */
6efcd9a8 5803 if (!target_is_non_stop_p ())
74531fed 5804 rs->waiting_for_stop_reply = 1;
43ff13b4 5805}
85ad3aaf
PA
5806
5807static void check_pending_events_prevent_wildcard_vcont
5808 (int *may_global_wildcard_vcont);
5809static int is_pending_fork_parent_thread (struct thread_info *thread);
5810
5811/* Private per-inferior info for target remote processes. */
5812
5813struct private_inferior
5814{
5815 /* Whether we can send a wildcard vCont for this process. */
5816 int may_wildcard_vcont;
5817};
5818
5819/* Structure used to track the construction of a vCont packet in the
5820 outgoing packet buffer. This is used to send multiple vCont
5821 packets if we have more actions than would fit a single packet. */
5822
5823struct vcont_builder
5824{
5825 /* Pointer to the first action. P points here if no action has been
5826 appended yet. */
5827 char *first_action;
5828
5829 /* Where the next action will be appended. */
5830 char *p;
5831
5832 /* The end of the buffer. Must never write past this. */
5833 char *endp;
5834};
5835
5836/* Prepare the outgoing buffer for a new vCont packet. */
5837
5838static void
5839vcont_builder_restart (struct vcont_builder *builder)
5840{
5841 struct remote_state *rs = get_remote_state ();
5842
5843 builder->p = rs->buf;
5844 builder->endp = rs->buf + get_remote_packet_size ();
5845 builder->p += xsnprintf (builder->p, builder->endp - builder->p, "vCont");
5846 builder->first_action = builder->p;
5847}
5848
5849/* If the vCont packet being built has any action, send it to the
5850 remote end. */
5851
5852static void
5853vcont_builder_flush (struct vcont_builder *builder)
5854{
5855 struct remote_state *rs;
5856
5857 if (builder->p == builder->first_action)
5858 return;
5859
5860 rs = get_remote_state ();
5861 putpkt (rs->buf);
5862 getpkt (&rs->buf, &rs->buf_size, 0);
5863 if (strcmp (rs->buf, "OK") != 0)
5864 error (_("Unexpected vCont reply in non-stop mode: %s"), rs->buf);
5865}
5866
5867/* The largest action is range-stepping, with its two addresses. This
5868 is more than sufficient. If a new, bigger action is created, it'll
5869 quickly trigger a failed assertion in append_resumption (and we'll
5870 just bump this). */
5871#define MAX_ACTION_SIZE 200
5872
5873/* Append a new vCont action in the outgoing packet being built. If
5874 the action doesn't fit the packet along with previous actions, push
5875 what we've got so far to the remote end and start over a new vCont
5876 packet (with the new action). */
5877
5878static void
5879vcont_builder_push_action (struct vcont_builder *builder,
5880 ptid_t ptid, int step, enum gdb_signal siggnal)
5881{
5882 char buf[MAX_ACTION_SIZE + 1];
5883 char *endp;
5884 size_t rsize;
5885
5886 endp = append_resumption (buf, buf + sizeof (buf),
5887 ptid, step, siggnal);
5888
5889 /* Check whether this new action would fit in the vCont packet along
5890 with previous actions. If not, send what we've got so far and
5891 start a new vCont packet. */
5892 rsize = endp - buf;
5893 if (rsize > builder->endp - builder->p)
5894 {
5895 vcont_builder_flush (builder);
5896 vcont_builder_restart (builder);
5897
5898 /* Should now fit. */
5899 gdb_assert (rsize <= builder->endp - builder->p);
5900 }
5901
5902 memcpy (builder->p, buf, rsize);
5903 builder->p += rsize;
5904 *builder->p = '\0';
5905}
5906
5907/* to_commit_resume implementation. */
5908
5909static void
5910remote_commit_resume (struct target_ops *ops)
5911{
5912 struct remote_state *rs = get_remote_state ();
5913 struct inferior *inf;
5914 struct thread_info *tp;
5915 int any_process_wildcard;
5916 int may_global_wildcard_vcont;
5917 struct vcont_builder vcont_builder;
5918
5919 /* If connected in all-stop mode, we'd send the remote resume
5920 request directly from remote_resume. Likewise if
5921 reverse-debugging, as there are no defined vCont actions for
5922 reverse execution. */
5923 if (!target_is_non_stop_p () || execution_direction == EXEC_REVERSE)
5924 return;
5925
5926 /* Try to send wildcard actions ("vCont;c" or "vCont;c:pPID.-1")
5927 instead of resuming all threads of each process individually.
5928 However, if any thread of a process must remain halted, we can't
5929 send wildcard resumes and must send one action per thread.
5930
5931 Care must be taken to not resume threads/processes the server
5932 side already told us are stopped, but the core doesn't know about
5933 yet, because the events are still in the vStopped notification
5934 queue. For example:
5935
5936 #1 => vCont s:p1.1;c
5937 #2 <= OK
5938 #3 <= %Stopped T05 p1.1
5939 #4 => vStopped
5940 #5 <= T05 p1.2
5941 #6 => vStopped
5942 #7 <= OK
5943 #8 (infrun handles the stop for p1.1 and continues stepping)
5944 #9 => vCont s:p1.1;c
5945
5946 The last vCont above would resume thread p1.2 by mistake, because
5947 the server has no idea that the event for p1.2 had not been
5948 handled yet.
5949
5950 The server side must similarly ignore resume actions for the
5951 thread that has a pending %Stopped notification (and any other
5952 threads with events pending), until GDB acks the notification
5953 with vStopped. Otherwise, e.g., the following case is
5954 mishandled:
5955
5956 #1 => g (or any other packet)
5957 #2 <= [registers]
5958 #3 <= %Stopped T05 p1.2
5959 #4 => vCont s:p1.1;c
5960 #5 <= OK
5961
5962 Above, the server must not resume thread p1.2. GDB can't know
5963 that p1.2 stopped until it acks the %Stopped notification, and
5964 since from GDB's perspective all threads should be running, it
5965 sends a "c" action.
5966
5967 Finally, special care must also be given to handling fork/vfork
5968 events. A (v)fork event actually tells us that two processes
5969 stopped -- the parent and the child. Until we follow the fork,
5970 we must not resume the child. Therefore, if we have a pending
5971 fork follow, we must not send a global wildcard resume action
5972 (vCont;c). We can still send process-wide wildcards though. */
5973
5974 /* Start by assuming a global wildcard (vCont;c) is possible. */
5975 may_global_wildcard_vcont = 1;
5976
5977 /* And assume every process is individually wildcard-able too. */
5978 ALL_NON_EXITED_INFERIORS (inf)
5979 {
5980 if (inf->priv == NULL)
5981 inf->priv = XNEW (struct private_inferior);
5982 inf->priv->may_wildcard_vcont = 1;
5983 }
5984
5985 /* Check for any pending events (not reported or processed yet) and
5986 disable process and global wildcard resumes appropriately. */
5987 check_pending_events_prevent_wildcard_vcont (&may_global_wildcard_vcont);
5988
5989 ALL_NON_EXITED_THREADS (tp)
5990 {
5991 /* If a thread of a process is not meant to be resumed, then we
5992 can't wildcard that process. */
5993 if (!tp->executing)
5994 {
5995 tp->inf->priv->may_wildcard_vcont = 0;
5996
5997 /* And if we can't wildcard a process, we can't wildcard
5998 everything either. */
5999 may_global_wildcard_vcont = 0;
6000 continue;
6001 }
6002
6003 /* If a thread is the parent of an unfollowed fork, then we
6004 can't do a global wildcard, as that would resume the fork
6005 child. */
6006 if (is_pending_fork_parent_thread (tp))
6007 may_global_wildcard_vcont = 0;
6008 }
6009
6010 /* Now let's build the vCont packet(s). Actions must be appended
6011 from narrower to wider scopes (thread -> process -> global). If
6012 we end up with too many actions for a single packet vcont_builder
6013 flushes the current vCont packet to the remote side and starts a
6014 new one. */
6015 vcont_builder_restart (&vcont_builder);
6016
6017 /* Threads first. */
6018 ALL_NON_EXITED_THREADS (tp)
6019 {
6020 struct private_thread_info *remote_thr = tp->priv;
6021
6022 if (!tp->executing || remote_thr->vcont_resumed)
6023 continue;
6024
6025 gdb_assert (!thread_is_in_step_over_chain (tp));
6026
6027 if (!remote_thr->last_resume_step
6028 && remote_thr->last_resume_sig == GDB_SIGNAL_0
6029 && tp->inf->priv->may_wildcard_vcont)
6030 {
6031 /* We'll send a wildcard resume instead. */
6032 remote_thr->vcont_resumed = 1;
6033 continue;
6034 }
6035
6036 vcont_builder_push_action (&vcont_builder, tp->ptid,
6037 remote_thr->last_resume_step,
6038 remote_thr->last_resume_sig);
6039 remote_thr->vcont_resumed = 1;
6040 }
6041
6042 /* Now check whether we can send any process-wide wildcard. This is
6043 to avoid sending a global wildcard in the case nothing is
6044 supposed to be resumed. */
6045 any_process_wildcard = 0;
6046
6047 ALL_NON_EXITED_INFERIORS (inf)
6048 {
6049 if (inf->priv->may_wildcard_vcont)
6050 {
6051 any_process_wildcard = 1;
6052 break;
6053 }
6054 }
6055
6056 if (any_process_wildcard)
6057 {
6058 /* If all processes are wildcard-able, then send a single "c"
6059 action, otherwise, send an "all (-1) threads of process"
6060 continue action for each running process, if any. */
6061 if (may_global_wildcard_vcont)
6062 {
6063 vcont_builder_push_action (&vcont_builder, minus_one_ptid,
6064 0, GDB_SIGNAL_0);
6065 }
6066 else
6067 {
6068 ALL_NON_EXITED_INFERIORS (inf)
6069 {
6070 if (inf->priv->may_wildcard_vcont)
6071 {
6072 vcont_builder_push_action (&vcont_builder,
6073 pid_to_ptid (inf->pid),
6074 0, GDB_SIGNAL_0);
6075 }
6076 }
6077 }
6078 }
6079
6080 vcont_builder_flush (&vcont_builder);
6081}
6082
c906108c 6083\f
43ff13b4 6084
74531fed
PA
6085/* Non-stop version of target_stop. Uses `vCont;t' to stop a remote
6086 thread, all threads of a remote process, or all threads of all
6087 processes. */
6088
6089static void
6090remote_stop_ns (ptid_t ptid)
6091{
6092 struct remote_state *rs = get_remote_state ();
6093 char *p = rs->buf;
6094 char *endp = rs->buf + get_remote_packet_size ();
74531fed 6095
4082afcc 6096 if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
74531fed
PA
6097 remote_vcont_probe (rs);
6098
d458bd84 6099 if (!rs->supports_vCont.t)
74531fed
PA
6100 error (_("Remote server does not support stopping threads"));
6101
f91d3df5
PA
6102 if (ptid_equal (ptid, minus_one_ptid)
6103 || (!remote_multi_process_p (rs) && ptid_is_pid (ptid)))
74531fed
PA
6104 p += xsnprintf (p, endp - p, "vCont;t");
6105 else
6106 {
6107 ptid_t nptid;
6108
74531fed
PA
6109 p += xsnprintf (p, endp - p, "vCont;t:");
6110
6111 if (ptid_is_pid (ptid))
6112 /* All (-1) threads of process. */
ba348170 6113 nptid = ptid_build (ptid_get_pid (ptid), -1, 0);
74531fed
PA
6114 else
6115 {
6116 /* Small optimization: if we already have a stop reply for
6117 this thread, no use in telling the stub we want this
6118 stopped. */
6119 if (peek_stop_reply (ptid))
6120 return;
6121
6122 nptid = ptid;
6123 }
6124
a9cbf802 6125 write_ptid (p, endp, nptid);
74531fed
PA
6126 }
6127
6128 /* In non-stop, we get an immediate OK reply. The stop reply will
6129 come in asynchronously by notification. */
6130 putpkt (rs->buf);
6131 getpkt (&rs->buf, &rs->buf_size, 0);
6132 if (strcmp (rs->buf, "OK") != 0)
6133 error (_("Stopping %s failed: %s"), target_pid_to_str (ptid), rs->buf);
6134}
6135
bfedc46a
PA
6136/* All-stop version of target_interrupt. Sends a break or a ^C to
6137 interrupt the remote target. It is undefined which thread of which
6138 process reports the interrupt. */
74531fed
PA
6139
6140static void
de979965 6141remote_interrupt_as (void)
74531fed
PA
6142{
6143 struct remote_state *rs = get_remote_state ();
6144
3a29589a
DJ
6145 rs->ctrlc_pending_p = 1;
6146
74531fed
PA
6147 /* If the inferior is stopped already, but the core didn't know
6148 about it yet, just ignore the request. The cached wait status
6149 will be collected in remote_wait. */
6150 if (rs->cached_wait_status)
6151 return;
6152
9a7071a8
JB
6153 /* Send interrupt_sequence to remote target. */
6154 send_interrupt_sequence ();
74531fed
PA
6155}
6156
de979965
PA
6157/* Non-stop version of target_interrupt. Uses `vCtrlC' to interrupt
6158 the remote target. It is undefined which thread of which process
e42de8c7
PA
6159 reports the interrupt. Throws an error if the packet is not
6160 supported by the server. */
de979965 6161
e42de8c7 6162static void
de979965
PA
6163remote_interrupt_ns (void)
6164{
6165 struct remote_state *rs = get_remote_state ();
6166 char *p = rs->buf;
6167 char *endp = rs->buf + get_remote_packet_size ();
6168
6169 xsnprintf (p, endp - p, "vCtrlC");
6170
6171 /* In non-stop, we get an immediate OK reply. The stop reply will
6172 come in asynchronously by notification. */
6173 putpkt (rs->buf);
6174 getpkt (&rs->buf, &rs->buf_size, 0);
6175
6176 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_vCtrlC]))
6177 {
6178 case PACKET_OK:
6179 break;
6180 case PACKET_UNKNOWN:
e42de8c7 6181 error (_("No support for interrupting the remote target."));
de979965
PA
6182 case PACKET_ERROR:
6183 error (_("Interrupting target failed: %s"), rs->buf);
6184 }
de979965
PA
6185}
6186
bfedc46a 6187/* Implement the to_stop function for the remote targets. */
74531fed 6188
c906108c 6189static void
1eab8a48 6190remote_stop (struct target_ops *self, ptid_t ptid)
c906108c 6191{
7a292a7a 6192 if (remote_debug)
0f71a2f6 6193 fprintf_unfiltered (gdb_stdlog, "remote_stop called\n");
c906108c 6194
6efcd9a8 6195 if (target_is_non_stop_p ())
74531fed 6196 remote_stop_ns (ptid);
c906108c 6197 else
bfedc46a
PA
6198 {
6199 /* We don't currently have a way to transparently pause the
6200 remote target in all-stop mode. Interrupt it instead. */
de979965 6201 remote_interrupt_as ();
bfedc46a
PA
6202 }
6203}
6204
6205/* Implement the to_interrupt function for the remote targets. */
6206
6207static void
6208remote_interrupt (struct target_ops *self, ptid_t ptid)
6209{
e42de8c7
PA
6210 struct remote_state *rs = get_remote_state ();
6211
bfedc46a
PA
6212 if (remote_debug)
6213 fprintf_unfiltered (gdb_stdlog, "remote_interrupt called\n");
6214
e42de8c7
PA
6215 if (target_is_non_stop_p ())
6216 remote_interrupt_ns ();
bfedc46a 6217 else
e42de8c7 6218 remote_interrupt_as ();
c906108c
SS
6219}
6220
93692b58
PA
6221/* Implement the to_pass_ctrlc function for the remote targets. */
6222
6223static void
6224remote_pass_ctrlc (struct target_ops *self)
6225{
6226 struct remote_state *rs = get_remote_state ();
6227
6228 if (remote_debug)
6229 fprintf_unfiltered (gdb_stdlog, "remote_pass_ctrlc called\n");
6230
6231 /* If we're starting up, we're not fully synced yet. Quit
6232 immediately. */
6233 if (rs->starting_up)
6234 quit ();
6235 /* If ^C has already been sent once, offer to disconnect. */
6236 else if (rs->ctrlc_pending_p)
6237 interrupt_query ();
6238 else
6239 target_interrupt (inferior_ptid);
6240}
6241
c906108c
SS
6242/* Ask the user what to do when an interrupt is received. */
6243
6244static void
fba45db2 6245interrupt_query (void)
c906108c 6246{
abc56d60 6247 struct remote_state *rs = get_remote_state ();
c906108c 6248
abc56d60 6249 if (rs->waiting_for_stop_reply && rs->ctrlc_pending_p)
74531fed 6250 {
abc56d60
PA
6251 if (query (_("The target is not responding to interrupt requests.\n"
6252 "Stop debugging it? ")))
74531fed 6253 {
78a095c3 6254 remote_unpush_target ();
abc56d60 6255 throw_error (TARGET_CLOSE_ERROR, _("Disconnected from target."));
74531fed
PA
6256 }
6257 }
abc56d60
PA
6258 else
6259 {
6260 if (query (_("Interrupted while waiting for the program.\n"
6261 "Give up waiting? ")))
6262 quit ();
6263 }
c906108c
SS
6264}
6265
6426a772
JM
6266/* Enable/disable target terminal ownership. Most targets can use
6267 terminal groups to control terminal ownership. Remote targets are
6268 different in that explicit transfer of ownership to/from GDB/target
23860348 6269 is required. */
6426a772
JM
6270
6271static void
d2f640d4 6272remote_terminal_inferior (struct target_ops *self)
6426a772 6273{
d9d2d8b6
PA
6274 /* FIXME: cagney/1999-09-27: Make calls to target_terminal_*()
6275 idempotent. The event-loop GDB talking to an asynchronous target
6276 with a synchronous command calls this function from both
6277 event-top.c and infrun.c/infcmd.c. Once GDB stops trying to
6278 transfer the terminal to the target when it shouldn't this guard
6279 can go away. */
6426a772
JM
6280 if (!remote_async_terminal_ours_p)
6281 return;
6426a772 6282 remote_async_terminal_ours_p = 0;
6426a772
JM
6283 /* NOTE: At this point we could also register our selves as the
6284 recipient of all input. Any characters typed could then be
23860348 6285 passed on down to the target. */
6426a772
JM
6286}
6287
6288static void
e3594fd1 6289remote_terminal_ours (struct target_ops *self)
6426a772 6290{
75c99385 6291 /* See FIXME in remote_terminal_inferior. */
6426a772
JM
6292 if (remote_async_terminal_ours_p)
6293 return;
6426a772
JM
6294 remote_async_terminal_ours_p = 1;
6295}
6296
176a6961 6297static void
917317f4 6298remote_console_output (char *msg)
c906108c
SS
6299{
6300 char *p;
6301
c5aa993b 6302 for (p = msg; p[0] && p[1]; p += 2)
c906108c
SS
6303 {
6304 char tb[2];
6305 char c = fromhex (p[0]) * 16 + fromhex (p[1]);
a744cf53 6306
c906108c
SS
6307 tb[0] = c;
6308 tb[1] = 0;
43ff13b4 6309 fputs_unfiltered (tb, gdb_stdtarg);
c906108c 6310 }
00db5b94
PA
6311 gdb_flush (gdb_stdtarg);
6312}
74531fed 6313
74531fed
PA
6314DEF_VEC_O(cached_reg_t);
6315
722247f1 6316typedef struct stop_reply
74531fed 6317{
722247f1 6318 struct notif_event base;
74531fed 6319
722247f1 6320 /* The identifier of the thread about this event */
74531fed
PA
6321 ptid_t ptid;
6322
340e3c99 6323 /* The remote state this event is associated with. When the remote
bcc75809
YQ
6324 connection, represented by a remote_state object, is closed,
6325 all the associated stop_reply events should be released. */
6326 struct remote_state *rs;
6327
74531fed
PA
6328 struct target_waitstatus ws;
6329
15148d6a
PA
6330 /* Expedited registers. This makes remote debugging a bit more
6331 efficient for those targets that provide critical registers as
6332 part of their normal status mechanism (as another roundtrip to
6333 fetch them is avoided). */
74531fed
PA
6334 VEC(cached_reg_t) *regcache;
6335
f7e6eed5
PA
6336 enum target_stop_reason stop_reason;
6337
74531fed
PA
6338 CORE_ADDR watch_data_address;
6339
dc146f7c 6340 int core;
722247f1 6341} *stop_reply_p;
a744cf53 6342
722247f1
YQ
6343DECLARE_QUEUE_P (stop_reply_p);
6344DEFINE_QUEUE_P (stop_reply_p);
6345/* The list of already fetched and acknowledged stop events. This
6346 queue is used for notification Stop, and other notifications
6347 don't need queue for their events, because the notification events
6348 of Stop can't be consumed immediately, so that events should be
6349 queued first, and be consumed by remote_wait_{ns,as} one per
6350 time. Other notifications can consume their events immediately,
6351 so queue is not needed for them. */
6352static QUEUE (stop_reply_p) *stop_reply_queue;
74531fed
PA
6353
6354static void
6355stop_reply_xfree (struct stop_reply *r)
6356{
f48ff2a7 6357 notif_event_xfree ((struct notif_event *) r);
c906108c
SS
6358}
6359
221e1a37
PA
6360/* Return the length of the stop reply queue. */
6361
6362static int
6363stop_reply_queue_length (void)
6364{
6365 return QUEUE_length (stop_reply_p, stop_reply_queue);
6366}
6367
722247f1
YQ
6368static void
6369remote_notif_stop_parse (struct notif_client *self, char *buf,
6370 struct notif_event *event)
6371{
6372 remote_parse_stop_reply (buf, (struct stop_reply *) event);
6373}
6374
6375static void
6376remote_notif_stop_ack (struct notif_client *self, char *buf,
6377 struct notif_event *event)
6378{
6379 struct stop_reply *stop_reply = (struct stop_reply *) event;
6380
6381 /* acknowledge */
f5c4fcd9 6382 putpkt (self->ack_command);
722247f1
YQ
6383
6384 if (stop_reply->ws.kind == TARGET_WAITKIND_IGNORE)
6385 /* We got an unknown stop reply. */
6386 error (_("Unknown stop reply"));
6387
6388 push_stop_reply (stop_reply);
6389}
6390
6391static int
6392remote_notif_stop_can_get_pending_events (struct notif_client *self)
6393{
6394 /* We can't get pending events in remote_notif_process for
6395 notification stop, and we have to do this in remote_wait_ns
6396 instead. If we fetch all queued events from stub, remote stub
6397 may exit and we have no chance to process them back in
6398 remote_wait_ns. */
6399 mark_async_event_handler (remote_async_inferior_event_token);
6400 return 0;
6401}
6402
6403static void
6404stop_reply_dtr (struct notif_event *event)
6405{
6406 struct stop_reply *r = (struct stop_reply *) event;
d1dff226
AH
6407 cached_reg_t *reg;
6408 int ix;
6409
6410 for (ix = 0;
6411 VEC_iterate (cached_reg_t, r->regcache, ix, reg);
6412 ix++)
6413 xfree (reg->data);
722247f1
YQ
6414
6415 VEC_free (cached_reg_t, r->regcache);
6416}
6417
6418static struct notif_event *
6419remote_notif_stop_alloc_reply (void)
6420{
8d749320
SM
6421 /* We cast to a pointer to the "base class". */
6422 struct notif_event *r = (struct notif_event *) XNEW (struct stop_reply);
722247f1
YQ
6423
6424 r->dtr = stop_reply_dtr;
6425
6426 return r;
6427}
6428
6429/* A client of notification Stop. */
6430
6431struct notif_client notif_client_stop =
6432{
6433 "Stop",
6434 "vStopped",
6435 remote_notif_stop_parse,
6436 remote_notif_stop_ack,
6437 remote_notif_stop_can_get_pending_events,
6438 remote_notif_stop_alloc_reply,
f48ff2a7 6439 REMOTE_NOTIF_STOP,
722247f1
YQ
6440};
6441
6442/* A parameter to pass data in and out. */
6443
6444struct queue_iter_param
6445{
6446 void *input;
6447 struct stop_reply *output;
6448};
6449
85ad3aaf 6450/* Determine if THREAD_PTID is a pending fork parent thread. ARG contains
cbb8991c
DB
6451 the pid of the process that owns the threads we want to check, or
6452 -1 if we want to check all threads. */
6453
6454static int
6455is_pending_fork_parent (struct target_waitstatus *ws, int event_pid,
6456 ptid_t thread_ptid)
6457{
6458 if (ws->kind == TARGET_WAITKIND_FORKED
6459 || ws->kind == TARGET_WAITKIND_VFORKED)
6460 {
6461 if (event_pid == -1 || event_pid == ptid_get_pid (thread_ptid))
6462 return 1;
6463 }
6464
6465 return 0;
6466}
6467
85ad3aaf
PA
6468/* Return the thread's pending status used to determine whether the
6469 thread is a fork parent stopped at a fork event. */
6470
6471static struct target_waitstatus *
6472thread_pending_fork_status (struct thread_info *thread)
6473{
6474 if (thread->suspend.waitstatus_pending_p)
6475 return &thread->suspend.waitstatus;
6476 else
6477 return &thread->pending_follow;
6478}
6479
6480/* Determine if THREAD is a pending fork parent thread. */
6481
6482static int
6483is_pending_fork_parent_thread (struct thread_info *thread)
6484{
6485 struct target_waitstatus *ws = thread_pending_fork_status (thread);
6486 int pid = -1;
6487
6488 return is_pending_fork_parent (ws, pid, thread->ptid);
6489}
6490
cbb8991c
DB
6491/* Check whether EVENT is a fork event, and if it is, remove the
6492 fork child from the context list passed in DATA. */
6493
6494static int
6495remove_child_of_pending_fork (QUEUE (stop_reply_p) *q,
6496 QUEUE_ITER (stop_reply_p) *iter,
6497 stop_reply_p event,
6498 void *data)
6499{
19ba03f4
SM
6500 struct queue_iter_param *param = (struct queue_iter_param *) data;
6501 struct threads_listing_context *context
6502 = (struct threads_listing_context *) param->input;
cbb8991c
DB
6503
6504 if (event->ws.kind == TARGET_WAITKIND_FORKED
65706a29
PA
6505 || event->ws.kind == TARGET_WAITKIND_VFORKED
6506 || event->ws.kind == TARGET_WAITKIND_THREAD_EXITED)
6507 threads_listing_context_remove (&event->ws, context);
cbb8991c
DB
6508
6509 return 1;
6510}
6511
6512/* If CONTEXT contains any fork child threads that have not been
6513 reported yet, remove them from the CONTEXT list. If such a
6514 thread exists it is because we are stopped at a fork catchpoint
6515 and have not yet called follow_fork, which will set up the
6516 host-side data structures for the new process. */
6517
6518static void
6519remove_new_fork_children (struct threads_listing_context *context)
6520{
6521 struct thread_info * thread;
6522 int pid = -1;
6523 struct notif_client *notif = &notif_client_stop;
6524 struct queue_iter_param param;
6525
6526 /* For any threads stopped at a fork event, remove the corresponding
6527 fork child threads from the CONTEXT list. */
6528 ALL_NON_EXITED_THREADS (thread)
6529 {
85ad3aaf 6530 struct target_waitstatus *ws = thread_pending_fork_status (thread);
cbb8991c
DB
6531
6532 if (is_pending_fork_parent (ws, pid, thread->ptid))
6533 {
6534 threads_listing_context_remove (ws, context);
6535 }
6536 }
6537
6538 /* Check for any pending fork events (not reported or processed yet)
6539 in process PID and remove those fork child threads from the
6540 CONTEXT list as well. */
6541 remote_notif_get_pending_events (notif);
6542 param.input = context;
6543 param.output = NULL;
6544 QUEUE_iterate (stop_reply_p, stop_reply_queue,
6545 remove_child_of_pending_fork, &param);
6546}
6547
85ad3aaf
PA
6548/* Check whether EVENT would prevent a global or process wildcard
6549 vCont action. */
6550
6551static int
6552check_pending_event_prevents_wildcard_vcont_callback
6553 (QUEUE (stop_reply_p) *q,
6554 QUEUE_ITER (stop_reply_p) *iter,
6555 stop_reply_p event,
6556 void *data)
6557{
6558 struct inferior *inf;
6559 int *may_global_wildcard_vcont = (int *) data;
6560
6561 if (event->ws.kind == TARGET_WAITKIND_NO_RESUMED
6562 || event->ws.kind == TARGET_WAITKIND_NO_HISTORY)
6563 return 1;
6564
6565 if (event->ws.kind == TARGET_WAITKIND_FORKED
6566 || event->ws.kind == TARGET_WAITKIND_VFORKED)
6567 *may_global_wildcard_vcont = 0;
6568
6569 inf = find_inferior_ptid (event->ptid);
6570
6571 /* This may be the first time we heard about this process.
6572 Regardless, we must not do a global wildcard resume, otherwise
6573 we'd resume this process too. */
6574 *may_global_wildcard_vcont = 0;
6575 if (inf != NULL)
6576 inf->priv->may_wildcard_vcont = 0;
6577
6578 return 1;
6579}
6580
6581/* Check whether any event pending in the vStopped queue would prevent
6582 a global or process wildcard vCont action. Clear
6583 *may_global_wildcard if we can't do a global wildcard (vCont;c),
6584 and clear the event inferior's may_wildcard_vcont flag if we can't
6585 do a process-wide wildcard resume (vCont;c:pPID.-1). */
6586
6587static void
6588check_pending_events_prevent_wildcard_vcont (int *may_global_wildcard)
6589{
6590 struct notif_client *notif = &notif_client_stop;
6591
6592 remote_notif_get_pending_events (notif);
6593 QUEUE_iterate (stop_reply_p, stop_reply_queue,
6594 check_pending_event_prevents_wildcard_vcont_callback,
6595 may_global_wildcard);
6596}
6597
f48ff2a7
YQ
6598/* Remove stop replies in the queue if its pid is equal to the given
6599 inferior's pid. */
722247f1
YQ
6600
6601static int
f48ff2a7
YQ
6602remove_stop_reply_for_inferior (QUEUE (stop_reply_p) *q,
6603 QUEUE_ITER (stop_reply_p) *iter,
6604 stop_reply_p event,
6605 void *data)
722247f1 6606{
19ba03f4
SM
6607 struct queue_iter_param *param = (struct queue_iter_param *) data;
6608 struct inferior *inf = (struct inferior *) param->input;
722247f1 6609
f48ff2a7 6610 if (ptid_get_pid (event->ptid) == inf->pid)
722247f1
YQ
6611 {
6612 stop_reply_xfree (event);
6613 QUEUE_remove_elem (stop_reply_p, q, iter);
6614 }
6615
6616 return 1;
6617}
6618
f48ff2a7 6619/* Discard all pending stop replies of inferior INF. */
c906108c 6620
74531fed 6621static void
5f4cf0bb 6622discard_pending_stop_replies (struct inferior *inf)
c906108c 6623{
722247f1 6624 struct queue_iter_param param;
f48ff2a7
YQ
6625 struct stop_reply *reply;
6626 struct remote_state *rs = get_remote_state ();
6627 struct remote_notif_state *rns = rs->notif_state;
6628
6629 /* This function can be notified when an inferior exists. When the
6630 target is not remote, the notification state is NULL. */
6631 if (rs->remote_desc == NULL)
6632 return;
6633
6634 reply = (struct stop_reply *) rns->pending_event[notif_client_stop.id];
c906108c 6635
74531fed 6636 /* Discard the in-flight notification. */
f48ff2a7 6637 if (reply != NULL && ptid_get_pid (reply->ptid) == inf->pid)
74531fed 6638 {
722247f1 6639 stop_reply_xfree (reply);
f48ff2a7 6640 rns->pending_event[notif_client_stop.id] = NULL;
74531fed 6641 }
c906108c 6642
722247f1
YQ
6643 param.input = inf;
6644 param.output = NULL;
74531fed
PA
6645 /* Discard the stop replies we have already pulled with
6646 vStopped. */
722247f1 6647 QUEUE_iterate (stop_reply_p, stop_reply_queue,
f48ff2a7
YQ
6648 remove_stop_reply_for_inferior, &param);
6649}
6650
bcc75809
YQ
6651/* If its remote state is equal to the given remote state,
6652 remove EVENT from the stop reply queue. */
6653
6654static int
6655remove_stop_reply_of_remote_state (QUEUE (stop_reply_p) *q,
6656 QUEUE_ITER (stop_reply_p) *iter,
6657 stop_reply_p event,
6658 void *data)
6659{
19ba03f4
SM
6660 struct queue_iter_param *param = (struct queue_iter_param *) data;
6661 struct remote_state *rs = (struct remote_state *) param->input;
bcc75809
YQ
6662
6663 if (event->rs == rs)
6664 {
6665 stop_reply_xfree (event);
6666 QUEUE_remove_elem (stop_reply_p, q, iter);
6667 }
6668
6669 return 1;
6670}
6671
6672/* Discard the stop replies for RS in stop_reply_queue. */
f48ff2a7
YQ
6673
6674static void
bcc75809 6675discard_pending_stop_replies_in_queue (struct remote_state *rs)
f48ff2a7
YQ
6676{
6677 struct queue_iter_param param;
6678
bcc75809 6679 param.input = rs;
f48ff2a7
YQ
6680 param.output = NULL;
6681 /* Discard the stop replies we have already pulled with
6682 vStopped. */
6683 QUEUE_iterate (stop_reply_p, stop_reply_queue,
bcc75809 6684 remove_stop_reply_of_remote_state, &param);
722247f1 6685}
74531fed 6686
722247f1
YQ
6687/* A parameter to pass data in and out. */
6688
6689static int
6690remote_notif_remove_once_on_match (QUEUE (stop_reply_p) *q,
6691 QUEUE_ITER (stop_reply_p) *iter,
6692 stop_reply_p event,
6693 void *data)
6694{
19ba03f4
SM
6695 struct queue_iter_param *param = (struct queue_iter_param *) data;
6696 ptid_t *ptid = (ptid_t *) param->input;
722247f1
YQ
6697
6698 if (ptid_match (event->ptid, *ptid))
6699 {
6700 param->output = event;
6701 QUEUE_remove_elem (stop_reply_p, q, iter);
6702 return 0;
c8e38a49 6703 }
722247f1
YQ
6704
6705 return 1;
74531fed 6706}
43ff13b4 6707
722247f1
YQ
6708/* Remove the first reply in 'stop_reply_queue' which matches
6709 PTID. */
2e9f7625 6710
722247f1
YQ
6711static struct stop_reply *
6712remote_notif_remove_queued_reply (ptid_t ptid)
74531fed 6713{
722247f1
YQ
6714 struct queue_iter_param param;
6715
6716 param.input = &ptid;
6717 param.output = NULL;
6718
6719 QUEUE_iterate (stop_reply_p, stop_reply_queue,
6720 remote_notif_remove_once_on_match, &param);
6721 if (notif_debug)
6722 fprintf_unfiltered (gdb_stdlog,
6723 "notif: discard queued event: 'Stop' in %s\n",
6724 target_pid_to_str (ptid));
a744cf53 6725
722247f1 6726 return param.output;
74531fed 6727}
75c99385 6728
74531fed
PA
6729/* Look for a queued stop reply belonging to PTID. If one is found,
6730 remove it from the queue, and return it. Returns NULL if none is
6731 found. If there are still queued events left to process, tell the
6732 event loop to get back to target_wait soon. */
e24a49d8 6733
74531fed
PA
6734static struct stop_reply *
6735queued_stop_reply (ptid_t ptid)
6736{
722247f1 6737 struct stop_reply *r = remote_notif_remove_queued_reply (ptid);
74531fed 6738
722247f1 6739 if (!QUEUE_is_empty (stop_reply_p, stop_reply_queue))
74531fed
PA
6740 /* There's still at least an event left. */
6741 mark_async_event_handler (remote_async_inferior_event_token);
6742
722247f1 6743 return r;
74531fed
PA
6744}
6745
6746/* Push a fully parsed stop reply in the stop reply queue. Since we
6747 know that we now have at least one queued event left to pass to the
6748 core side, tell the event loop to get back to target_wait soon. */
6749
6750static void
6751push_stop_reply (struct stop_reply *new_event)
6752{
722247f1 6753 QUEUE_enque (stop_reply_p, stop_reply_queue, new_event);
74531fed 6754
722247f1
YQ
6755 if (notif_debug)
6756 fprintf_unfiltered (gdb_stdlog,
6757 "notif: push 'Stop' %s to queue %d\n",
6758 target_pid_to_str (new_event->ptid),
6759 QUEUE_length (stop_reply_p,
6760 stop_reply_queue));
74531fed
PA
6761
6762 mark_async_event_handler (remote_async_inferior_event_token);
6763}
6764
722247f1
YQ
6765static int
6766stop_reply_match_ptid_and_ws (QUEUE (stop_reply_p) *q,
6767 QUEUE_ITER (stop_reply_p) *iter,
6768 struct stop_reply *event,
6769 void *data)
6770{
19ba03f4 6771 ptid_t *ptid = (ptid_t *) data;
722247f1
YQ
6772
6773 return !(ptid_equal (*ptid, event->ptid)
6774 && event->ws.kind == TARGET_WAITKIND_STOPPED);
6775}
6776
74531fed
PA
6777/* Returns true if we have a stop reply for PTID. */
6778
6779static int
6780peek_stop_reply (ptid_t ptid)
6781{
722247f1
YQ
6782 return !QUEUE_iterate (stop_reply_p, stop_reply_queue,
6783 stop_reply_match_ptid_and_ws, &ptid);
74531fed
PA
6784}
6785
26d56a93
SL
6786/* Helper for remote_parse_stop_reply. Return nonzero if the substring
6787 starting with P and ending with PEND matches PREFIX. */
6788
6789static int
6790strprefix (const char *p, const char *pend, const char *prefix)
6791{
6792 for ( ; p < pend; p++, prefix++)
6793 if (*p != *prefix)
6794 return 0;
6795 return *prefix == '\0';
6796}
6797
74531fed
PA
6798/* Parse the stop reply in BUF. Either the function succeeds, and the
6799 result is stored in EVENT, or throws an error. */
6800
6801static void
6802remote_parse_stop_reply (char *buf, struct stop_reply *event)
6803{
6804 struct remote_arch_state *rsa = get_remote_arch_state ();
6805 ULONGEST addr;
6806 char *p;
94585166 6807 int skipregs = 0;
74531fed
PA
6808
6809 event->ptid = null_ptid;
bcc75809 6810 event->rs = get_remote_state ();
74531fed
PA
6811 event->ws.kind = TARGET_WAITKIND_IGNORE;
6812 event->ws.value.integer = 0;
f7e6eed5 6813 event->stop_reason = TARGET_STOPPED_BY_NO_REASON;
74531fed 6814 event->regcache = NULL;
dc146f7c 6815 event->core = -1;
74531fed
PA
6816
6817 switch (buf[0])
6818 {
6819 case 'T': /* Status with PC, SP, FP, ... */
cea39f65
MS
6820 /* Expedited reply, containing Signal, {regno, reg} repeat. */
6821 /* format is: 'Tssn...:r...;n...:r...;n...:r...;#cc', where
6822 ss = signal number
6823 n... = register number
6824 r... = register contents
6825 */
6826
6827 p = &buf[3]; /* after Txx */
6828 while (*p)
6829 {
6830 char *p1;
cea39f65 6831 int fieldsize;
43ff13b4 6832
1f10ba14
PA
6833 p1 = strchr (p, ':');
6834 if (p1 == NULL)
6835 error (_("Malformed packet(a) (missing colon): %s\n\
6836Packet: '%s'\n"),
6837 p, buf);
6838 if (p == p1)
6839 error (_("Malformed packet(a) (missing register number): %s\n\
6840Packet: '%s'\n"),
6841 p, buf);
3c3bea1c 6842
1f10ba14
PA
6843 /* Some "registers" are actually extended stop information.
6844 Note if you're adding a new entry here: GDB 7.9 and
6845 earlier assume that all register "numbers" that start
6846 with an hex digit are real register numbers. Make sure
6847 the server only sends such a packet if it knows the
6848 client understands it. */
c8e38a49 6849
26d56a93 6850 if (strprefix (p, p1, "thread"))
1f10ba14 6851 event->ptid = read_ptid (++p1, &p);
82075af2
JS
6852 else if (strprefix (p, p1, "syscall_entry"))
6853 {
6854 ULONGEST sysno;
6855
6856 event->ws.kind = TARGET_WAITKIND_SYSCALL_ENTRY;
6857 p = unpack_varlen_hex (++p1, &sysno);
6858 event->ws.value.syscall_number = (int) sysno;
6859 }
6860 else if (strprefix (p, p1, "syscall_return"))
6861 {
6862 ULONGEST sysno;
6863
6864 event->ws.kind = TARGET_WAITKIND_SYSCALL_RETURN;
6865 p = unpack_varlen_hex (++p1, &sysno);
6866 event->ws.value.syscall_number = (int) sysno;
6867 }
26d56a93
SL
6868 else if (strprefix (p, p1, "watch")
6869 || strprefix (p, p1, "rwatch")
6870 || strprefix (p, p1, "awatch"))
cea39f65 6871 {
f7e6eed5 6872 event->stop_reason = TARGET_STOPPED_BY_WATCHPOINT;
1f10ba14
PA
6873 p = unpack_varlen_hex (++p1, &addr);
6874 event->watch_data_address = (CORE_ADDR) addr;
cea39f65 6875 }
26d56a93 6876 else if (strprefix (p, p1, "swbreak"))
f7e6eed5
PA
6877 {
6878 event->stop_reason = TARGET_STOPPED_BY_SW_BREAKPOINT;
6879
6880 /* Make sure the stub doesn't forget to indicate support
6881 with qSupported. */
6882 if (packet_support (PACKET_swbreak_feature) != PACKET_ENABLE)
6883 error (_("Unexpected swbreak stop reason"));
6884
6885 /* The value part is documented as "must be empty",
6886 though we ignore it, in case we ever decide to make
6887 use of it in a backward compatible way. */
8424cc97 6888 p = strchrnul (p1 + 1, ';');
f7e6eed5 6889 }
26d56a93 6890 else if (strprefix (p, p1, "hwbreak"))
f7e6eed5
PA
6891 {
6892 event->stop_reason = TARGET_STOPPED_BY_HW_BREAKPOINT;
6893
6894 /* Make sure the stub doesn't forget to indicate support
6895 with qSupported. */
6896 if (packet_support (PACKET_hwbreak_feature) != PACKET_ENABLE)
6897 error (_("Unexpected hwbreak stop reason"));
6898
6899 /* See above. */
8424cc97 6900 p = strchrnul (p1 + 1, ';');
f7e6eed5 6901 }
26d56a93 6902 else if (strprefix (p, p1, "library"))
cea39f65 6903 {
1f10ba14 6904 event->ws.kind = TARGET_WAITKIND_LOADED;
8424cc97 6905 p = strchrnul (p1 + 1, ';');
1f10ba14 6906 }
26d56a93 6907 else if (strprefix (p, p1, "replaylog"))
1f10ba14
PA
6908 {
6909 event->ws.kind = TARGET_WAITKIND_NO_HISTORY;
6910 /* p1 will indicate "begin" or "end", but it makes
6911 no difference for now, so ignore it. */
8424cc97 6912 p = strchrnul (p1 + 1, ';');
1f10ba14 6913 }
26d56a93 6914 else if (strprefix (p, p1, "core"))
1f10ba14
PA
6915 {
6916 ULONGEST c;
a744cf53 6917
1f10ba14
PA
6918 p = unpack_varlen_hex (++p1, &c);
6919 event->core = c;
cea39f65 6920 }
26d56a93 6921 else if (strprefix (p, p1, "fork"))
de0d863e
DB
6922 {
6923 event->ws.value.related_pid = read_ptid (++p1, &p);
6924 event->ws.kind = TARGET_WAITKIND_FORKED;
6925 }
26d56a93 6926 else if (strprefix (p, p1, "vfork"))
c269dbdb
DB
6927 {
6928 event->ws.value.related_pid = read_ptid (++p1, &p);
6929 event->ws.kind = TARGET_WAITKIND_VFORKED;
6930 }
26d56a93 6931 else if (strprefix (p, p1, "vforkdone"))
c269dbdb
DB
6932 {
6933 event->ws.kind = TARGET_WAITKIND_VFORK_DONE;
8424cc97 6934 p = strchrnul (p1 + 1, ';');
c269dbdb 6935 }
6ab24463 6936 else if (strprefix (p, p1, "exec"))
94585166
DB
6937 {
6938 ULONGEST ignored;
6939 char pathname[PATH_MAX];
6940 int pathlen;
6941
6942 /* Determine the length of the execd pathname. */
6943 p = unpack_varlen_hex (++p1, &ignored);
6944 pathlen = (p - p1) / 2;
6945
6946 /* Save the pathname for event reporting and for
6947 the next run command. */
6948 hex2bin (p1, (gdb_byte *) pathname, pathlen);
6949 pathname[pathlen] = '\0';
6950
6951 /* This is freed during event handling. */
6952 event->ws.value.execd_pathname = xstrdup (pathname);
6953 event->ws.kind = TARGET_WAITKIND_EXECD;
6954
6955 /* Skip the registers included in this packet, since
6956 they may be for an architecture different from the
6957 one used by the original program. */
6958 skipregs = 1;
6959 }
65706a29
PA
6960 else if (strprefix (p, p1, "create"))
6961 {
6962 event->ws.kind = TARGET_WAITKIND_THREAD_CREATED;
8424cc97 6963 p = strchrnul (p1 + 1, ';');
65706a29 6964 }
cea39f65
MS
6965 else
6966 {
1f10ba14
PA
6967 ULONGEST pnum;
6968 char *p_temp;
6969
94585166
DB
6970 if (skipregs)
6971 {
8424cc97 6972 p = strchrnul (p1 + 1, ';');
94585166
DB
6973 p++;
6974 continue;
6975 }
6976
1f10ba14
PA
6977 /* Maybe a real ``P'' register number. */
6978 p_temp = unpack_varlen_hex (p, &pnum);
6979 /* If the first invalid character is the colon, we got a
6980 register number. Otherwise, it's an unknown stop
6981 reason. */
6982 if (p_temp == p1)
6983 {
6984 struct packet_reg *reg = packet_reg_from_pnum (rsa, pnum);
6985 cached_reg_t cached_reg;
d1dff226 6986 struct gdbarch *gdbarch = target_gdbarch ();
43ff13b4 6987
1f10ba14
PA
6988 if (reg == NULL)
6989 error (_("Remote sent bad register number %s: %s\n\
8a3fe4f8 6990Packet: '%s'\n"),
1f10ba14 6991 hex_string (pnum), p, buf);
c8e38a49 6992
1f10ba14 6993 cached_reg.num = reg->regnum;
d1dff226
AH
6994 cached_reg.data = (gdb_byte *)
6995 xmalloc (register_size (gdbarch, reg->regnum));
4100683b 6996
1f10ba14
PA
6997 p = p1 + 1;
6998 fieldsize = hex2bin (p, cached_reg.data,
d1dff226 6999 register_size (gdbarch, reg->regnum));
1f10ba14 7000 p += 2 * fieldsize;
d1dff226 7001 if (fieldsize < register_size (gdbarch, reg->regnum))
1f10ba14 7002 warning (_("Remote reply is too short: %s"), buf);
74531fed 7003
1f10ba14
PA
7004 VEC_safe_push (cached_reg_t, event->regcache, &cached_reg);
7005 }
7006 else
7007 {
7008 /* Not a number. Silently skip unknown optional
7009 info. */
8424cc97 7010 p = strchrnul (p1 + 1, ';');
1f10ba14 7011 }
cea39f65 7012 }
c8e38a49 7013
cea39f65
MS
7014 if (*p != ';')
7015 error (_("Remote register badly formatted: %s\nhere: %s"),
7016 buf, p);
7017 ++p;
7018 }
5b5596ff
PA
7019
7020 if (event->ws.kind != TARGET_WAITKIND_IGNORE)
7021 break;
7022
c8e38a49
PA
7023 /* fall through */
7024 case 'S': /* Old style status, just signal only. */
3a09da41
PA
7025 {
7026 int sig;
7027
7028 event->ws.kind = TARGET_WAITKIND_STOPPED;
7029 sig = (fromhex (buf[1]) << 4) + fromhex (buf[2]);
7030 if (GDB_SIGNAL_FIRST <= sig && sig < GDB_SIGNAL_LAST)
7031 event->ws.value.sig = (enum gdb_signal) sig;
7032 else
7033 event->ws.value.sig = GDB_SIGNAL_UNKNOWN;
7034 }
c8e38a49 7035 break;
65706a29
PA
7036 case 'w': /* Thread exited. */
7037 {
7038 char *p;
7039 ULONGEST value;
7040
7041 event->ws.kind = TARGET_WAITKIND_THREAD_EXITED;
7042 p = unpack_varlen_hex (&buf[1], &value);
7043 event->ws.value.integer = value;
7044 if (*p != ';')
7045 error (_("stop reply packet badly formatted: %s"), buf);
974eac9d 7046 event->ptid = read_ptid (++p, NULL);
65706a29
PA
7047 break;
7048 }
c8e38a49
PA
7049 case 'W': /* Target exited. */
7050 case 'X':
7051 {
7052 char *p;
7053 int pid;
7054 ULONGEST value;
82f73884 7055
c8e38a49
PA
7056 /* GDB used to accept only 2 hex chars here. Stubs should
7057 only send more if they detect GDB supports multi-process
7058 support. */
7059 p = unpack_varlen_hex (&buf[1], &value);
82f73884 7060
c8e38a49
PA
7061 if (buf[0] == 'W')
7062 {
7063 /* The remote process exited. */
74531fed
PA
7064 event->ws.kind = TARGET_WAITKIND_EXITED;
7065 event->ws.value.integer = value;
c8e38a49
PA
7066 }
7067 else
7068 {
7069 /* The remote process exited with a signal. */
74531fed 7070 event->ws.kind = TARGET_WAITKIND_SIGNALLED;
3a09da41
PA
7071 if (GDB_SIGNAL_FIRST <= value && value < GDB_SIGNAL_LAST)
7072 event->ws.value.sig = (enum gdb_signal) value;
7073 else
7074 event->ws.value.sig = GDB_SIGNAL_UNKNOWN;
c8e38a49 7075 }
82f73884 7076
c8e38a49
PA
7077 /* If no process is specified, assume inferior_ptid. */
7078 pid = ptid_get_pid (inferior_ptid);
7079 if (*p == '\0')
7080 ;
7081 else if (*p == ';')
7082 {
7083 p++;
7084
0b24eb2d 7085 if (*p == '\0')
82f73884 7086 ;
61012eef 7087 else if (startswith (p, "process:"))
82f73884 7088 {
c8e38a49 7089 ULONGEST upid;
a744cf53 7090
c8e38a49
PA
7091 p += sizeof ("process:") - 1;
7092 unpack_varlen_hex (p, &upid);
7093 pid = upid;
82f73884
PA
7094 }
7095 else
7096 error (_("unknown stop reply packet: %s"), buf);
43ff13b4 7097 }
c8e38a49
PA
7098 else
7099 error (_("unknown stop reply packet: %s"), buf);
74531fed
PA
7100 event->ptid = pid_to_ptid (pid);
7101 }
7102 break;
f2faf941
PA
7103 case 'N':
7104 event->ws.kind = TARGET_WAITKIND_NO_RESUMED;
7105 event->ptid = minus_one_ptid;
7106 break;
74531fed
PA
7107 }
7108
6efcd9a8 7109 if (target_is_non_stop_p () && ptid_equal (event->ptid, null_ptid))
74531fed
PA
7110 error (_("No process or thread specified in stop reply: %s"), buf);
7111}
7112
722247f1
YQ
7113/* When the stub wants to tell GDB about a new notification reply, it
7114 sends a notification (%Stop, for example). Those can come it at
7115 any time, hence, we have to make sure that any pending
7116 putpkt/getpkt sequence we're making is finished, before querying
7117 the stub for more events with the corresponding ack command
7118 (vStopped, for example). E.g., if we started a vStopped sequence
7119 immediately upon receiving the notification, something like this
7120 could happen:
74531fed
PA
7121
7122 1.1) --> Hg 1
7123 1.2) <-- OK
7124 1.3) --> g
7125 1.4) <-- %Stop
7126 1.5) --> vStopped
7127 1.6) <-- (registers reply to step #1.3)
7128
7129 Obviously, the reply in step #1.6 would be unexpected to a vStopped
7130 query.
7131
796cb314 7132 To solve this, whenever we parse a %Stop notification successfully,
74531fed
PA
7133 we mark the REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN, and carry on
7134 doing whatever we were doing:
7135
7136 2.1) --> Hg 1
7137 2.2) <-- OK
7138 2.3) --> g
7139 2.4) <-- %Stop
7140 <GDB marks the REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN>
7141 2.5) <-- (registers reply to step #2.3)
7142
7143 Eventualy after step #2.5, we return to the event loop, which
7144 notices there's an event on the
7145 REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN event and calls the
7146 associated callback --- the function below. At this point, we're
7147 always safe to start a vStopped sequence. :
7148
7149 2.6) --> vStopped
7150 2.7) <-- T05 thread:2
7151 2.8) --> vStopped
7152 2.9) --> OK
7153*/
7154
722247f1
YQ
7155void
7156remote_notif_get_pending_events (struct notif_client *nc)
74531fed
PA
7157{
7158 struct remote_state *rs = get_remote_state ();
74531fed 7159
f48ff2a7 7160 if (rs->notif_state->pending_event[nc->id] != NULL)
74531fed 7161 {
722247f1
YQ
7162 if (notif_debug)
7163 fprintf_unfiltered (gdb_stdlog,
7164 "notif: process: '%s' ack pending event\n",
7165 nc->name);
74531fed 7166
722247f1 7167 /* acknowledge */
f48ff2a7
YQ
7168 nc->ack (nc, rs->buf, rs->notif_state->pending_event[nc->id]);
7169 rs->notif_state->pending_event[nc->id] = NULL;
74531fed
PA
7170
7171 while (1)
7172 {
7173 getpkt (&rs->buf, &rs->buf_size, 0);
7174 if (strcmp (rs->buf, "OK") == 0)
7175 break;
7176 else
722247f1 7177 remote_notif_ack (nc, rs->buf);
74531fed
PA
7178 }
7179 }
722247f1
YQ
7180 else
7181 {
7182 if (notif_debug)
7183 fprintf_unfiltered (gdb_stdlog,
7184 "notif: process: '%s' no pending reply\n",
7185 nc->name);
7186 }
74531fed
PA
7187}
7188
74531fed
PA
7189/* Called when it is decided that STOP_REPLY holds the info of the
7190 event that is to be returned to the core. This function always
7191 destroys STOP_REPLY. */
7192
7193static ptid_t
7194process_stop_reply (struct stop_reply *stop_reply,
7195 struct target_waitstatus *status)
7196{
7197 ptid_t ptid;
7198
7199 *status = stop_reply->ws;
7200 ptid = stop_reply->ptid;
7201
7202 /* If no thread/process was reported by the stub, assume the current
7203 inferior. */
7204 if (ptid_equal (ptid, null_ptid))
7205 ptid = inferior_ptid;
7206
5f3563ea 7207 if (status->kind != TARGET_WAITKIND_EXITED
f2faf941
PA
7208 && status->kind != TARGET_WAITKIND_SIGNALLED
7209 && status->kind != TARGET_WAITKIND_NO_RESUMED)
74531fed 7210 {
799a2abe 7211 struct private_thread_info *remote_thr;
ee154bee 7212
5f3563ea
PA
7213 /* Expedited registers. */
7214 if (stop_reply->regcache)
7215 {
217f1f79 7216 struct regcache *regcache
f5656ead 7217 = get_thread_arch_regcache (ptid, target_gdbarch ());
5f3563ea
PA
7218 cached_reg_t *reg;
7219 int ix;
7220
7221 for (ix = 0;
d1dff226 7222 VEC_iterate (cached_reg_t, stop_reply->regcache, ix, reg);
5f3563ea 7223 ix++)
d1dff226 7224 {
217f1f79 7225 regcache_raw_supply (regcache, reg->num, reg->data);
d1dff226
AH
7226 xfree (reg->data);
7227 }
7228
5f3563ea
PA
7229 VEC_free (cached_reg_t, stop_reply->regcache);
7230 }
74531fed 7231
1941c569 7232 remote_notice_new_inferior (ptid, 0);
85ad3aaf 7233 remote_thr = get_private_info_ptid (ptid);
799a2abe
PA
7234 remote_thr->core = stop_reply->core;
7235 remote_thr->stop_reason = stop_reply->stop_reason;
7236 remote_thr->watch_data_address = stop_reply->watch_data_address;
85ad3aaf 7237 remote_thr->vcont_resumed = 0;
74531fed
PA
7238 }
7239
74531fed
PA
7240 stop_reply_xfree (stop_reply);
7241 return ptid;
7242}
7243
7244/* The non-stop mode version of target_wait. */
7245
7246static ptid_t
47608cb1 7247remote_wait_ns (ptid_t ptid, struct target_waitstatus *status, int options)
74531fed
PA
7248{
7249 struct remote_state *rs = get_remote_state ();
74531fed
PA
7250 struct stop_reply *stop_reply;
7251 int ret;
fee9eda9 7252 int is_notif = 0;
74531fed
PA
7253
7254 /* If in non-stop mode, get out of getpkt even if a
7255 notification is received. */
7256
7257 ret = getpkt_or_notif_sane (&rs->buf, &rs->buf_size,
fee9eda9 7258 0 /* forever */, &is_notif);
74531fed
PA
7259 while (1)
7260 {
fee9eda9 7261 if (ret != -1 && !is_notif)
74531fed
PA
7262 switch (rs->buf[0])
7263 {
7264 case 'E': /* Error of some sort. */
7265 /* We're out of sync with the target now. Did it continue
7266 or not? We can't tell which thread it was in non-stop,
7267 so just ignore this. */
7268 warning (_("Remote failure reply: %s"), rs->buf);
7269 break;
7270 case 'O': /* Console output. */
7271 remote_console_output (rs->buf + 1);
7272 break;
7273 default:
7274 warning (_("Invalid remote reply: %s"), rs->buf);
7275 break;
7276 }
7277
7278 /* Acknowledge a pending stop reply that may have arrived in the
7279 mean time. */
f48ff2a7 7280 if (rs->notif_state->pending_event[notif_client_stop.id] != NULL)
722247f1 7281 remote_notif_get_pending_events (&notif_client_stop);
74531fed
PA
7282
7283 /* If indeed we noticed a stop reply, we're done. */
7284 stop_reply = queued_stop_reply (ptid);
7285 if (stop_reply != NULL)
7286 return process_stop_reply (stop_reply, status);
7287
47608cb1 7288 /* Still no event. If we're just polling for an event, then
74531fed 7289 return to the event loop. */
47608cb1 7290 if (options & TARGET_WNOHANG)
74531fed
PA
7291 {
7292 status->kind = TARGET_WAITKIND_IGNORE;
7293 return minus_one_ptid;
7294 }
7295
47608cb1 7296 /* Otherwise do a blocking wait. */
74531fed 7297 ret = getpkt_or_notif_sane (&rs->buf, &rs->buf_size,
fee9eda9 7298 1 /* forever */, &is_notif);
74531fed
PA
7299 }
7300}
7301
7302/* Wait until the remote machine stops, then return, storing status in
7303 STATUS just as `wait' would. */
7304
7305static ptid_t
47608cb1 7306remote_wait_as (ptid_t ptid, struct target_waitstatus *status, int options)
74531fed
PA
7307{
7308 struct remote_state *rs = get_remote_state ();
74531fed 7309 ptid_t event_ptid = null_ptid;
cea39f65 7310 char *buf;
74531fed
PA
7311 struct stop_reply *stop_reply;
7312
47608cb1
PA
7313 again:
7314
74531fed
PA
7315 status->kind = TARGET_WAITKIND_IGNORE;
7316 status->value.integer = 0;
7317
7318 stop_reply = queued_stop_reply (ptid);
7319 if (stop_reply != NULL)
7320 return process_stop_reply (stop_reply, status);
7321
7322 if (rs->cached_wait_status)
7323 /* Use the cached wait status, but only once. */
7324 rs->cached_wait_status = 0;
7325 else
7326 {
7327 int ret;
722247f1 7328 int is_notif;
567420d1
PA
7329 int forever = ((options & TARGET_WNOHANG) == 0
7330 && wait_forever_enabled_p);
7331
7332 if (!rs->waiting_for_stop_reply)
7333 {
7334 status->kind = TARGET_WAITKIND_NO_RESUMED;
7335 return minus_one_ptid;
7336 }
74531fed 7337
74531fed
PA
7338 /* FIXME: cagney/1999-09-27: If we're in async mode we should
7339 _never_ wait for ever -> test on target_is_async_p().
7340 However, before we do that we need to ensure that the caller
7341 knows how to take the target into/out of async mode. */
722247f1 7342 ret = getpkt_or_notif_sane (&rs->buf, &rs->buf_size,
567420d1 7343 forever, &is_notif);
722247f1
YQ
7344
7345 /* GDB gets a notification. Return to core as this event is
7346 not interesting. */
7347 if (ret != -1 && is_notif)
7348 return minus_one_ptid;
567420d1
PA
7349
7350 if (ret == -1 && (options & TARGET_WNOHANG) != 0)
7351 return minus_one_ptid;
74531fed
PA
7352 }
7353
7354 buf = rs->buf;
7355
3a29589a
DJ
7356 /* Assume that the target has acknowledged Ctrl-C unless we receive
7357 an 'F' or 'O' packet. */
7358 if (buf[0] != 'F' && buf[0] != 'O')
7359 rs->ctrlc_pending_p = 0;
7360
74531fed
PA
7361 switch (buf[0])
7362 {
7363 case 'E': /* Error of some sort. */
7364 /* We're out of sync with the target now. Did it continue or
7365 not? Not is more likely, so report a stop. */
29090fb6
LM
7366 rs->waiting_for_stop_reply = 0;
7367
74531fed
PA
7368 warning (_("Remote failure reply: %s"), buf);
7369 status->kind = TARGET_WAITKIND_STOPPED;
a493e3e2 7370 status->value.sig = GDB_SIGNAL_0;
74531fed
PA
7371 break;
7372 case 'F': /* File-I/O request. */
e42e5352
YQ
7373 /* GDB may access the inferior memory while handling the File-I/O
7374 request, but we don't want GDB accessing memory while waiting
7375 for a stop reply. See the comments in putpkt_binary. Set
7376 waiting_for_stop_reply to 0 temporarily. */
7377 rs->waiting_for_stop_reply = 0;
3a29589a
DJ
7378 remote_fileio_request (buf, rs->ctrlc_pending_p);
7379 rs->ctrlc_pending_p = 0;
e42e5352
YQ
7380 /* GDB handled the File-I/O request, and the target is running
7381 again. Keep waiting for events. */
7382 rs->waiting_for_stop_reply = 1;
74531fed 7383 break;
f2faf941 7384 case 'N': case 'T': case 'S': case 'X': case 'W':
74531fed 7385 {
29090fb6
LM
7386 struct stop_reply *stop_reply;
7387
7388 /* There is a stop reply to handle. */
7389 rs->waiting_for_stop_reply = 0;
7390
7391 stop_reply
722247f1
YQ
7392 = (struct stop_reply *) remote_notif_parse (&notif_client_stop,
7393 rs->buf);
74531fed 7394
74531fed 7395 event_ptid = process_stop_reply (stop_reply, status);
c8e38a49
PA
7396 break;
7397 }
7398 case 'O': /* Console output. */
7399 remote_console_output (buf + 1);
c8e38a49
PA
7400 break;
7401 case '\0':
b73be471 7402 if (rs->last_sent_signal != GDB_SIGNAL_0)
c8e38a49
PA
7403 {
7404 /* Zero length reply means that we tried 'S' or 'C' and the
7405 remote system doesn't support it. */
7406 target_terminal_ours_for_output ();
7407 printf_filtered
7408 ("Can't send signals to this remote system. %s not sent.\n",
b73be471
TT
7409 gdb_signal_to_name (rs->last_sent_signal));
7410 rs->last_sent_signal = GDB_SIGNAL_0;
c8e38a49
PA
7411 target_terminal_inferior ();
7412
f5c4fcd9
TT
7413 strcpy (buf, rs->last_sent_step ? "s" : "c");
7414 putpkt (buf);
c8e38a49 7415 break;
43ff13b4 7416 }
c8e38a49
PA
7417 /* else fallthrough */
7418 default:
7419 warning (_("Invalid remote reply: %s"), buf);
c8e38a49 7420 break;
43ff13b4 7421 }
c8e38a49 7422
f2faf941
PA
7423 if (status->kind == TARGET_WAITKIND_NO_RESUMED)
7424 return minus_one_ptid;
7425 else if (status->kind == TARGET_WAITKIND_IGNORE)
47608cb1
PA
7426 {
7427 /* Nothing interesting happened. If we're doing a non-blocking
7428 poll, we're done. Otherwise, go back to waiting. */
7429 if (options & TARGET_WNOHANG)
7430 return minus_one_ptid;
7431 else
7432 goto again;
7433 }
74531fed
PA
7434 else if (status->kind != TARGET_WAITKIND_EXITED
7435 && status->kind != TARGET_WAITKIND_SIGNALLED)
82f73884
PA
7436 {
7437 if (!ptid_equal (event_ptid, null_ptid))
47f8a51d 7438 record_currthread (rs, event_ptid);
82f73884
PA
7439 else
7440 event_ptid = inferior_ptid;
43ff13b4 7441 }
74531fed
PA
7442 else
7443 /* A process exit. Invalidate our notion of current thread. */
47f8a51d 7444 record_currthread (rs, minus_one_ptid);
79d7f229 7445
82f73884 7446 return event_ptid;
43ff13b4
JM
7447}
7448
74531fed
PA
7449/* Wait until the remote machine stops, then return, storing status in
7450 STATUS just as `wait' would. */
7451
c8e38a49 7452static ptid_t
117de6a9 7453remote_wait (struct target_ops *ops,
47608cb1 7454 ptid_t ptid, struct target_waitstatus *status, int options)
c8e38a49
PA
7455{
7456 ptid_t event_ptid;
7457
6efcd9a8 7458 if (target_is_non_stop_p ())
47608cb1 7459 event_ptid = remote_wait_ns (ptid, status, options);
74531fed 7460 else
47608cb1 7461 event_ptid = remote_wait_as (ptid, status, options);
c8e38a49 7462
d9d41e78 7463 if (target_is_async_p ())
c8e38a49 7464 {
74531fed
PA
7465 /* If there are are events left in the queue tell the event loop
7466 to return here. */
722247f1 7467 if (!QUEUE_is_empty (stop_reply_p, stop_reply_queue))
74531fed 7468 mark_async_event_handler (remote_async_inferior_event_token);
c8e38a49 7469 }
c8e38a49
PA
7470
7471 return event_ptid;
7472}
7473
74ca34ce 7474/* Fetch a single register using a 'p' packet. */
c906108c 7475
b96ec7ac 7476static int
56be3814 7477fetch_register_using_p (struct regcache *regcache, struct packet_reg *reg)
b96ec7ac 7478{
9890e433 7479 struct gdbarch *gdbarch = get_regcache_arch (regcache);
b96ec7ac 7480 struct remote_state *rs = get_remote_state ();
2e9f7625 7481 char *buf, *p;
9890e433 7482 gdb_byte *regp = (gdb_byte *) alloca (register_size (gdbarch, reg->regnum));
b96ec7ac
AC
7483 int i;
7484
4082afcc 7485 if (packet_support (PACKET_p) == PACKET_DISABLE)
74ca34ce
DJ
7486 return 0;
7487
7488 if (reg->pnum == -1)
7489 return 0;
7490
2e9f7625 7491 p = rs->buf;
fcad0fa4 7492 *p++ = 'p';
74ca34ce 7493 p += hexnumstr (p, reg->pnum);
fcad0fa4 7494 *p++ = '\0';
1f4437a4
MS
7495 putpkt (rs->buf);
7496 getpkt (&rs->buf, &rs->buf_size, 0);
3f9a994c 7497
2e9f7625
DJ
7498 buf = rs->buf;
7499
74ca34ce
DJ
7500 switch (packet_ok (buf, &remote_protocol_packets[PACKET_p]))
7501 {
7502 case PACKET_OK:
7503 break;
7504 case PACKET_UNKNOWN:
7505 return 0;
7506 case PACKET_ERROR:
27a9c0bf
MS
7507 error (_("Could not fetch register \"%s\"; remote failure reply '%s'"),
7508 gdbarch_register_name (get_regcache_arch (regcache),
7509 reg->regnum),
7510 buf);
74ca34ce 7511 }
3f9a994c
JB
7512
7513 /* If this register is unfetchable, tell the regcache. */
7514 if (buf[0] == 'x')
8480adf2 7515 {
56be3814 7516 regcache_raw_supply (regcache, reg->regnum, NULL);
8480adf2 7517 return 1;
b96ec7ac 7518 }
b96ec7ac 7519
3f9a994c
JB
7520 /* Otherwise, parse and supply the value. */
7521 p = buf;
7522 i = 0;
7523 while (p[0] != 0)
7524 {
7525 if (p[1] == 0)
74ca34ce 7526 error (_("fetch_register_using_p: early buf termination"));
3f9a994c
JB
7527
7528 regp[i++] = fromhex (p[0]) * 16 + fromhex (p[1]);
7529 p += 2;
7530 }
56be3814 7531 regcache_raw_supply (regcache, reg->regnum, regp);
3f9a994c 7532 return 1;
b96ec7ac
AC
7533}
7534
74ca34ce
DJ
7535/* Fetch the registers included in the target's 'g' packet. */
7536
29709017
DJ
7537static int
7538send_g_packet (void)
c906108c 7539{
d01949b6 7540 struct remote_state *rs = get_remote_state ();
cea39f65 7541 int buf_len;
c906108c 7542
bba74b36 7543 xsnprintf (rs->buf, get_remote_packet_size (), "g");
74ca34ce 7544 remote_send (&rs->buf, &rs->buf_size);
c906108c 7545
29709017
DJ
7546 /* We can get out of synch in various cases. If the first character
7547 in the buffer is not a hex character, assume that has happened
7548 and try to fetch another packet to read. */
7549 while ((rs->buf[0] < '0' || rs->buf[0] > '9')
7550 && (rs->buf[0] < 'A' || rs->buf[0] > 'F')
7551 && (rs->buf[0] < 'a' || rs->buf[0] > 'f')
7552 && rs->buf[0] != 'x') /* New: unavailable register value. */
7553 {
7554 if (remote_debug)
7555 fprintf_unfiltered (gdb_stdlog,
7556 "Bad register packet; fetching a new packet\n");
7557 getpkt (&rs->buf, &rs->buf_size, 0);
7558 }
7559
74ca34ce
DJ
7560 buf_len = strlen (rs->buf);
7561
7562 /* Sanity check the received packet. */
7563 if (buf_len % 2 != 0)
7564 error (_("Remote 'g' packet reply is of odd length: %s"), rs->buf);
29709017
DJ
7565
7566 return buf_len / 2;
7567}
7568
7569static void
56be3814 7570process_g_packet (struct regcache *regcache)
29709017 7571{
4a22f64d 7572 struct gdbarch *gdbarch = get_regcache_arch (regcache);
29709017
DJ
7573 struct remote_state *rs = get_remote_state ();
7574 struct remote_arch_state *rsa = get_remote_arch_state ();
7575 int i, buf_len;
7576 char *p;
7577 char *regs;
7578
7579 buf_len = strlen (rs->buf);
7580
7581 /* Further sanity checks, with knowledge of the architecture. */
74ca34ce
DJ
7582 if (buf_len > 2 * rsa->sizeof_g_packet)
7583 error (_("Remote 'g' packet reply is too long: %s"), rs->buf);
7584
7585 /* Save the size of the packet sent to us by the target. It is used
7586 as a heuristic when determining the max size of packets that the
7587 target can safely receive. */
7588 if (rsa->actual_register_packet_size == 0)
7589 rsa->actual_register_packet_size = buf_len;
7590
7591 /* If this is smaller than we guessed the 'g' packet would be,
7592 update our records. A 'g' reply that doesn't include a register's
7593 value implies either that the register is not available, or that
7594 the 'p' packet must be used. */
7595 if (buf_len < 2 * rsa->sizeof_g_packet)
b323314b 7596 {
9dc193c3 7597 long sizeof_g_packet = buf_len / 2;
74ca34ce 7598
4a22f64d 7599 for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
b96ec7ac 7600 {
9dc193c3
LF
7601 long offset = rsa->regs[i].offset;
7602 long reg_size = register_size (gdbarch, i);
7603
74ca34ce
DJ
7604 if (rsa->regs[i].pnum == -1)
7605 continue;
7606
9dc193c3 7607 if (offset >= sizeof_g_packet)
74ca34ce 7608 rsa->regs[i].in_g_packet = 0;
9dc193c3
LF
7609 else if (offset + reg_size > sizeof_g_packet)
7610 error (_("Truncated register %d in remote 'g' packet"), i);
b96ec7ac 7611 else
74ca34ce 7612 rsa->regs[i].in_g_packet = 1;
b96ec7ac 7613 }
9dc193c3
LF
7614
7615 /* Looks valid enough, we can assume this is the correct length
7616 for a 'g' packet. It's important not to adjust
7617 rsa->sizeof_g_packet if we have truncated registers otherwise
7618 this "if" won't be run the next time the method is called
7619 with a packet of the same size and one of the internal errors
7620 below will trigger instead. */
7621 rsa->sizeof_g_packet = sizeof_g_packet;
74ca34ce 7622 }
b323314b 7623
224c3ddb 7624 regs = (char *) alloca (rsa->sizeof_g_packet);
c906108c
SS
7625
7626 /* Unimplemented registers read as all bits zero. */
ea9c271d 7627 memset (regs, 0, rsa->sizeof_g_packet);
c906108c 7628
c906108c
SS
7629 /* Reply describes registers byte by byte, each byte encoded as two
7630 hex characters. Suck them all up, then supply them to the
7631 register cacheing/storage mechanism. */
7632
74ca34ce 7633 p = rs->buf;
ea9c271d 7634 for (i = 0; i < rsa->sizeof_g_packet; i++)
c906108c 7635 {
74ca34ce
DJ
7636 if (p[0] == 0 || p[1] == 0)
7637 /* This shouldn't happen - we adjusted sizeof_g_packet above. */
7638 internal_error (__FILE__, __LINE__,
9b20d036 7639 _("unexpected end of 'g' packet reply"));
74ca34ce 7640
c906108c 7641 if (p[0] == 'x' && p[1] == 'x')
c5aa993b 7642 regs[i] = 0; /* 'x' */
c906108c
SS
7643 else
7644 regs[i] = fromhex (p[0]) * 16 + fromhex (p[1]);
7645 p += 2;
7646 }
7647
a744cf53
MS
7648 for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
7649 {
7650 struct packet_reg *r = &rsa->regs[i];
9dc193c3 7651 long reg_size = register_size (gdbarch, i);
a744cf53
MS
7652
7653 if (r->in_g_packet)
7654 {
9dc193c3 7655 if ((r->offset + reg_size) * 2 > strlen (rs->buf))
a744cf53
MS
7656 /* This shouldn't happen - we adjusted in_g_packet above. */
7657 internal_error (__FILE__, __LINE__,
9b20d036 7658 _("unexpected end of 'g' packet reply"));
a744cf53
MS
7659 else if (rs->buf[r->offset * 2] == 'x')
7660 {
7661 gdb_assert (r->offset * 2 < strlen (rs->buf));
7662 /* The register isn't available, mark it as such (at
7663 the same time setting the value to zero). */
7664 regcache_raw_supply (regcache, r->regnum, NULL);
7665 }
7666 else
7667 regcache_raw_supply (regcache, r->regnum,
7668 regs + r->offset);
7669 }
7670 }
c906108c
SS
7671}
7672
29709017 7673static void
56be3814 7674fetch_registers_using_g (struct regcache *regcache)
29709017
DJ
7675{
7676 send_g_packet ();
56be3814 7677 process_g_packet (regcache);
29709017
DJ
7678}
7679
e6e4e701
PA
7680/* Make the remote selected traceframe match GDB's selected
7681 traceframe. */
7682
7683static void
7684set_remote_traceframe (void)
7685{
7686 int newnum;
262e1174 7687 struct remote_state *rs = get_remote_state ();
e6e4e701 7688
262e1174 7689 if (rs->remote_traceframe_number == get_traceframe_number ())
e6e4e701
PA
7690 return;
7691
7692 /* Avoid recursion, remote_trace_find calls us again. */
262e1174 7693 rs->remote_traceframe_number = get_traceframe_number ();
e6e4e701
PA
7694
7695 newnum = target_trace_find (tfind_number,
7696 get_traceframe_number (), 0, 0, NULL);
7697
7698 /* Should not happen. If it does, all bets are off. */
7699 if (newnum != get_traceframe_number ())
7700 warning (_("could not set remote traceframe"));
7701}
7702
74ca34ce 7703static void
28439f5e
PA
7704remote_fetch_registers (struct target_ops *ops,
7705 struct regcache *regcache, int regnum)
74ca34ce 7706{
74ca34ce
DJ
7707 struct remote_arch_state *rsa = get_remote_arch_state ();
7708 int i;
7709
e6e4e701 7710 set_remote_traceframe ();
bcc0c096 7711 set_general_thread (regcache_get_ptid (regcache));
74ca34ce
DJ
7712
7713 if (regnum >= 0)
7714 {
7715 struct packet_reg *reg = packet_reg_from_regnum (rsa, regnum);
a744cf53 7716
74ca34ce
DJ
7717 gdb_assert (reg != NULL);
7718
7719 /* If this register might be in the 'g' packet, try that first -
7720 we are likely to read more than one register. If this is the
7721 first 'g' packet, we might be overly optimistic about its
7722 contents, so fall back to 'p'. */
7723 if (reg->in_g_packet)
7724 {
56be3814 7725 fetch_registers_using_g (regcache);
74ca34ce
DJ
7726 if (reg->in_g_packet)
7727 return;
7728 }
7729
56be3814 7730 if (fetch_register_using_p (regcache, reg))
74ca34ce
DJ
7731 return;
7732
7733 /* This register is not available. */
56be3814 7734 regcache_raw_supply (regcache, reg->regnum, NULL);
74ca34ce
DJ
7735
7736 return;
7737 }
7738
56be3814 7739 fetch_registers_using_g (regcache);
74ca34ce 7740
4a22f64d 7741 for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++)
74ca34ce 7742 if (!rsa->regs[i].in_g_packet)
56be3814 7743 if (!fetch_register_using_p (regcache, &rsa->regs[i]))
74ca34ce
DJ
7744 {
7745 /* This register is not available. */
56be3814 7746 regcache_raw_supply (regcache, i, NULL);
74ca34ce
DJ
7747 }
7748}
7749
c906108c
SS
7750/* Prepare to store registers. Since we may send them all (using a
7751 'G' request), we have to read out the ones we don't want to change
7752 first. */
7753
c5aa993b 7754static void
f32dbf8c 7755remote_prepare_to_store (struct target_ops *self, struct regcache *regcache)
c906108c 7756{
ea9c271d 7757 struct remote_arch_state *rsa = get_remote_arch_state ();
cf0e1e0d 7758 int i;
cf0e1e0d 7759
c906108c 7760 /* Make sure the entire registers array is valid. */
4082afcc 7761 switch (packet_support (PACKET_P))
5a2468f5
JM
7762 {
7763 case PACKET_DISABLE:
7764 case PACKET_SUPPORT_UNKNOWN:
cf0e1e0d 7765 /* Make sure all the necessary registers are cached. */
4a22f64d 7766 for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++)
ea9c271d 7767 if (rsa->regs[i].in_g_packet)
8e368124 7768 regcache_raw_update (regcache, rsa->regs[i].regnum);
5a2468f5
JM
7769 break;
7770 case PACKET_ENABLE:
7771 break;
7772 }
7773}
7774
ad10f812 7775/* Helper: Attempt to store REGNUM using the P packet. Return fail IFF
23860348 7776 packet was not recognized. */
5a2468f5
JM
7777
7778static int
1f4437a4
MS
7779store_register_using_P (const struct regcache *regcache,
7780 struct packet_reg *reg)
5a2468f5 7781{
4a22f64d 7782 struct gdbarch *gdbarch = get_regcache_arch (regcache);
d01949b6 7783 struct remote_state *rs = get_remote_state ();
5a2468f5 7784 /* Try storing a single register. */
6d820c5c 7785 char *buf = rs->buf;
9890e433 7786 gdb_byte *regp = (gdb_byte *) alloca (register_size (gdbarch, reg->regnum));
5a2468f5 7787 char *p;
5a2468f5 7788
4082afcc 7789 if (packet_support (PACKET_P) == PACKET_DISABLE)
74ca34ce
DJ
7790 return 0;
7791
7792 if (reg->pnum == -1)
7793 return 0;
7794
ea9c271d 7795 xsnprintf (buf, get_remote_packet_size (), "P%s=", phex_nz (reg->pnum, 0));
5a2468f5 7796 p = buf + strlen (buf);
56be3814 7797 regcache_raw_collect (regcache, reg->regnum, regp);
4a22f64d 7798 bin2hex (regp, p, register_size (gdbarch, reg->regnum));
1f4437a4
MS
7799 putpkt (rs->buf);
7800 getpkt (&rs->buf, &rs->buf_size, 0);
5a2468f5 7801
74ca34ce
DJ
7802 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_P]))
7803 {
7804 case PACKET_OK:
7805 return 1;
7806 case PACKET_ERROR:
27a9c0bf
MS
7807 error (_("Could not write register \"%s\"; remote failure reply '%s'"),
7808 gdbarch_register_name (gdbarch, reg->regnum), rs->buf);
74ca34ce
DJ
7809 case PACKET_UNKNOWN:
7810 return 0;
7811 default:
7812 internal_error (__FILE__, __LINE__, _("Bad result from packet_ok"));
7813 }
c906108c
SS
7814}
7815
23860348
MS
7816/* Store register REGNUM, or all registers if REGNUM == -1, from the
7817 contents of the register cache buffer. FIXME: ignores errors. */
c906108c
SS
7818
7819static void
56be3814 7820store_registers_using_G (const struct regcache *regcache)
c906108c 7821{
d01949b6 7822 struct remote_state *rs = get_remote_state ();
ea9c271d 7823 struct remote_arch_state *rsa = get_remote_arch_state ();
cfd77fa1 7824 gdb_byte *regs;
c906108c
SS
7825 char *p;
7826
193cb69f
AC
7827 /* Extract all the registers in the regcache copying them into a
7828 local buffer. */
7829 {
b323314b 7830 int i;
a744cf53 7831
224c3ddb 7832 regs = (gdb_byte *) alloca (rsa->sizeof_g_packet);
ea9c271d 7833 memset (regs, 0, rsa->sizeof_g_packet);
4a22f64d 7834 for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++)
193cb69f 7835 {
ea9c271d 7836 struct packet_reg *r = &rsa->regs[i];
a744cf53 7837
b323314b 7838 if (r->in_g_packet)
56be3814 7839 regcache_raw_collect (regcache, r->regnum, regs + r->offset);
193cb69f
AC
7840 }
7841 }
c906108c
SS
7842
7843 /* Command describes registers byte by byte,
7844 each byte encoded as two hex characters. */
6d820c5c 7845 p = rs->buf;
193cb69f 7846 *p++ = 'G';
74ca34ce 7847 bin2hex (regs, p, rsa->sizeof_g_packet);
1f4437a4
MS
7848 putpkt (rs->buf);
7849 getpkt (&rs->buf, &rs->buf_size, 0);
7850 if (packet_check_result (rs->buf) == PACKET_ERROR)
27a9c0bf
MS
7851 error (_("Could not write registers; remote failure reply '%s'"),
7852 rs->buf);
c906108c 7853}
74ca34ce
DJ
7854
7855/* Store register REGNUM, or all registers if REGNUM == -1, from the contents
7856 of the register cache buffer. FIXME: ignores errors. */
7857
7858static void
28439f5e
PA
7859remote_store_registers (struct target_ops *ops,
7860 struct regcache *regcache, int regnum)
74ca34ce 7861{
74ca34ce
DJ
7862 struct remote_arch_state *rsa = get_remote_arch_state ();
7863 int i;
7864
e6e4e701 7865 set_remote_traceframe ();
bcc0c096 7866 set_general_thread (regcache_get_ptid (regcache));
74ca34ce
DJ
7867
7868 if (regnum >= 0)
7869 {
7870 struct packet_reg *reg = packet_reg_from_regnum (rsa, regnum);
a744cf53 7871
74ca34ce
DJ
7872 gdb_assert (reg != NULL);
7873
7874 /* Always prefer to store registers using the 'P' packet if
7875 possible; we often change only a small number of registers.
7876 Sometimes we change a larger number; we'd need help from a
7877 higher layer to know to use 'G'. */
56be3814 7878 if (store_register_using_P (regcache, reg))
74ca34ce
DJ
7879 return;
7880
7881 /* For now, don't complain if we have no way to write the
7882 register. GDB loses track of unavailable registers too
7883 easily. Some day, this may be an error. We don't have
0df8b418 7884 any way to read the register, either... */
74ca34ce
DJ
7885 if (!reg->in_g_packet)
7886 return;
7887
56be3814 7888 store_registers_using_G (regcache);
74ca34ce
DJ
7889 return;
7890 }
7891
56be3814 7892 store_registers_using_G (regcache);
74ca34ce 7893
4a22f64d 7894 for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++)
74ca34ce 7895 if (!rsa->regs[i].in_g_packet)
56be3814 7896 if (!store_register_using_P (regcache, &rsa->regs[i]))
74ca34ce
DJ
7897 /* See above for why we do not issue an error here. */
7898 continue;
7899}
c906108c
SS
7900\f
7901
7902/* Return the number of hex digits in num. */
7903
7904static int
fba45db2 7905hexnumlen (ULONGEST num)
c906108c
SS
7906{
7907 int i;
7908
7909 for (i = 0; num != 0; i++)
7910 num >>= 4;
7911
325fac50 7912 return std::max (i, 1);
c906108c
SS
7913}
7914
2df3850c 7915/* Set BUF to the minimum number of hex digits representing NUM. */
c906108c
SS
7916
7917static int
fba45db2 7918hexnumstr (char *buf, ULONGEST num)
c906108c 7919{
c906108c 7920 int len = hexnumlen (num);
a744cf53 7921
2df3850c
JM
7922 return hexnumnstr (buf, num, len);
7923}
7924
c906108c 7925
2df3850c 7926/* Set BUF to the hex digits representing NUM, padded to WIDTH characters. */
c906108c 7927
2df3850c 7928static int
fba45db2 7929hexnumnstr (char *buf, ULONGEST num, int width)
2df3850c
JM
7930{
7931 int i;
7932
7933 buf[width] = '\0';
7934
7935 for (i = width - 1; i >= 0; i--)
c906108c 7936 {
c5aa993b 7937 buf[i] = "0123456789abcdef"[(num & 0xf)];
c906108c
SS
7938 num >>= 4;
7939 }
7940
2df3850c 7941 return width;
c906108c
SS
7942}
7943
23860348 7944/* Mask all but the least significant REMOTE_ADDRESS_SIZE bits. */
c906108c
SS
7945
7946static CORE_ADDR
fba45db2 7947remote_address_masked (CORE_ADDR addr)
c906108c 7948{
883b9c6c 7949 unsigned int address_size = remote_address_size;
a744cf53 7950
911c95a5
UW
7951 /* If "remoteaddresssize" was not set, default to target address size. */
7952 if (!address_size)
f5656ead 7953 address_size = gdbarch_addr_bit (target_gdbarch ());
911c95a5
UW
7954
7955 if (address_size > 0
7956 && address_size < (sizeof (ULONGEST) * 8))
c906108c
SS
7957 {
7958 /* Only create a mask when that mask can safely be constructed
23860348 7959 in a ULONGEST variable. */
c906108c 7960 ULONGEST mask = 1;
a744cf53 7961
911c95a5 7962 mask = (mask << address_size) - 1;
c906108c
SS
7963 addr &= mask;
7964 }
7965 return addr;
7966}
7967
7968/* Determine whether the remote target supports binary downloading.
7969 This is accomplished by sending a no-op memory write of zero length
7970 to the target at the specified address. It does not suffice to send
23860348
MS
7971 the whole packet, since many stubs strip the eighth bit and
7972 subsequently compute a wrong checksum, which causes real havoc with
7973 remote_write_bytes.
7a292a7a 7974
96baa820 7975 NOTE: This can still lose if the serial line is not eight-bit
0df8b418 7976 clean. In cases like this, the user should clear "remote
23860348 7977 X-packet". */
96baa820 7978
c906108c 7979static void
fba45db2 7980check_binary_download (CORE_ADDR addr)
c906108c 7981{
d01949b6 7982 struct remote_state *rs = get_remote_state ();
24b06219 7983
4082afcc 7984 switch (packet_support (PACKET_X))
c906108c 7985 {
96baa820
JM
7986 case PACKET_DISABLE:
7987 break;
7988 case PACKET_ENABLE:
7989 break;
7990 case PACKET_SUPPORT_UNKNOWN:
7991 {
96baa820 7992 char *p;
802188a7 7993
2e9f7625 7994 p = rs->buf;
96baa820
JM
7995 *p++ = 'X';
7996 p += hexnumstr (p, (ULONGEST) addr);
7997 *p++ = ',';
7998 p += hexnumstr (p, (ULONGEST) 0);
7999 *p++ = ':';
8000 *p = '\0';
802188a7 8001
2e9f7625 8002 putpkt_binary (rs->buf, (int) (p - rs->buf));
6d820c5c 8003 getpkt (&rs->buf, &rs->buf_size, 0);
c906108c 8004
2e9f7625 8005 if (rs->buf[0] == '\0')
96baa820
JM
8006 {
8007 if (remote_debug)
8008 fprintf_unfiltered (gdb_stdlog,
3e43a32a
MS
8009 "binary downloading NOT "
8010 "supported by target\n");
444abaca 8011 remote_protocol_packets[PACKET_X].support = PACKET_DISABLE;
96baa820
JM
8012 }
8013 else
8014 {
8015 if (remote_debug)
8016 fprintf_unfiltered (gdb_stdlog,
64b9b334 8017 "binary downloading supported by target\n");
444abaca 8018 remote_protocol_packets[PACKET_X].support = PACKET_ENABLE;
96baa820
JM
8019 }
8020 break;
8021 }
c906108c
SS
8022 }
8023}
8024
124e13d9
SM
8025/* Helper function to resize the payload in order to try to get a good
8026 alignment. We try to write an amount of data such that the next write will
8027 start on an address aligned on REMOTE_ALIGN_WRITES. */
8028
8029static int
8030align_for_efficient_write (int todo, CORE_ADDR memaddr)
8031{
8032 return ((memaddr + todo) & ~(REMOTE_ALIGN_WRITES - 1)) - memaddr;
8033}
8034
c906108c
SS
8035/* Write memory data directly to the remote machine.
8036 This does not inform the data cache; the data cache uses this.
a76d924d 8037 HEADER is the starting part of the packet.
c906108c
SS
8038 MEMADDR is the address in the remote memory space.
8039 MYADDR is the address of the buffer in our space.
124e13d9
SM
8040 LEN_UNITS is the number of addressable units to write.
8041 UNIT_SIZE is the length in bytes of an addressable unit.
a76d924d
DJ
8042 PACKET_FORMAT should be either 'X' or 'M', and indicates if we
8043 should send data as binary ('X'), or hex-encoded ('M').
8044
8045 The function creates packet of the form
8046 <HEADER><ADDRESS>,<LENGTH>:<DATA>
8047
124e13d9 8048 where encoding of <DATA> is terminated by PACKET_FORMAT.
a76d924d
DJ
8049
8050 If USE_LENGTH is 0, then the <LENGTH> field and the preceding comma
8051 are omitted.
8052
9b409511 8053 Return the transferred status, error or OK (an
124e13d9
SM
8054 'enum target_xfer_status' value). Save the number of addressable units
8055 transferred in *XFERED_LEN_UNITS. Only transfer a single packet.
8056
8057 On a platform with an addressable memory size of 2 bytes (UNIT_SIZE == 2), an
8058 exchange between gdb and the stub could look like (?? in place of the
8059 checksum):
8060
8061 -> $m1000,4#??
8062 <- aaaabbbbccccdddd
8063
8064 -> $M1000,3:eeeeffffeeee#??
8065 <- OK
8066
8067 -> $m1000,4#??
8068 <- eeeeffffeeeedddd */
c906108c 8069
9b409511 8070static enum target_xfer_status
a76d924d 8071remote_write_bytes_aux (const char *header, CORE_ADDR memaddr,
124e13d9
SM
8072 const gdb_byte *myaddr, ULONGEST len_units,
8073 int unit_size, ULONGEST *xfered_len_units,
8074 char packet_format, int use_length)
c906108c 8075{
6d820c5c 8076 struct remote_state *rs = get_remote_state ();
cfd77fa1 8077 char *p;
a76d924d
DJ
8078 char *plen = NULL;
8079 int plenlen = 0;
124e13d9
SM
8080 int todo_units;
8081 int units_written;
8082 int payload_capacity_bytes;
8083 int payload_length_bytes;
a76d924d
DJ
8084
8085 if (packet_format != 'X' && packet_format != 'M')
8086 internal_error (__FILE__, __LINE__,
9b20d036 8087 _("remote_write_bytes_aux: bad packet format"));
c906108c 8088
124e13d9 8089 if (len_units == 0)
9b409511 8090 return TARGET_XFER_EOF;
b2182ed2 8091
124e13d9 8092 payload_capacity_bytes = get_memory_write_packet_size ();
2bc416ba 8093
6d820c5c
DJ
8094 /* The packet buffer will be large enough for the payload;
8095 get_memory_packet_size ensures this. */
a76d924d 8096 rs->buf[0] = '\0';
c906108c 8097
a257b5bb 8098 /* Compute the size of the actual payload by subtracting out the
0df8b418
MS
8099 packet header and footer overhead: "$M<memaddr>,<len>:...#nn". */
8100
124e13d9 8101 payload_capacity_bytes -= strlen ("$,:#NN");
a76d924d 8102 if (!use_length)
0df8b418 8103 /* The comma won't be used. */
124e13d9
SM
8104 payload_capacity_bytes += 1;
8105 payload_capacity_bytes -= strlen (header);
8106 payload_capacity_bytes -= hexnumlen (memaddr);
c906108c 8107
a76d924d 8108 /* Construct the packet excluding the data: "<header><memaddr>,<len>:". */
917317f4 8109
a76d924d
DJ
8110 strcat (rs->buf, header);
8111 p = rs->buf + strlen (header);
8112
8113 /* Compute a best guess of the number of bytes actually transfered. */
8114 if (packet_format == 'X')
c906108c 8115 {
23860348 8116 /* Best guess at number of bytes that will fit. */
325fac50
PA
8117 todo_units = std::min (len_units,
8118 (ULONGEST) payload_capacity_bytes / unit_size);
a76d924d 8119 if (use_length)
124e13d9 8120 payload_capacity_bytes -= hexnumlen (todo_units);
325fac50 8121 todo_units = std::min (todo_units, payload_capacity_bytes / unit_size);
a76d924d
DJ
8122 }
8123 else
8124 {
124e13d9 8125 /* Number of bytes that will fit. */
325fac50
PA
8126 todo_units
8127 = std::min (len_units,
8128 (ULONGEST) (payload_capacity_bytes / unit_size) / 2);
a76d924d 8129 if (use_length)
124e13d9 8130 payload_capacity_bytes -= hexnumlen (todo_units);
325fac50
PA
8131 todo_units = std::min (todo_units,
8132 (payload_capacity_bytes / unit_size) / 2);
917317f4 8133 }
a76d924d 8134
124e13d9 8135 if (todo_units <= 0)
3de11b2e 8136 internal_error (__FILE__, __LINE__,
405f8e94 8137 _("minimum packet size too small to write data"));
802188a7 8138
6765f3e5
DJ
8139 /* If we already need another packet, then try to align the end
8140 of this packet to a useful boundary. */
124e13d9
SM
8141 if (todo_units > 2 * REMOTE_ALIGN_WRITES && todo_units < len_units)
8142 todo_units = align_for_efficient_write (todo_units, memaddr);
6765f3e5 8143
a257b5bb 8144 /* Append "<memaddr>". */
917317f4
JM
8145 memaddr = remote_address_masked (memaddr);
8146 p += hexnumstr (p, (ULONGEST) memaddr);
a257b5bb 8147
a76d924d
DJ
8148 if (use_length)
8149 {
8150 /* Append ",". */
8151 *p++ = ',';
802188a7 8152
124e13d9
SM
8153 /* Append the length and retain its location and size. It may need to be
8154 adjusted once the packet body has been created. */
a76d924d 8155 plen = p;
124e13d9 8156 plenlen = hexnumstr (p, (ULONGEST) todo_units);
a76d924d
DJ
8157 p += plenlen;
8158 }
a257b5bb
AC
8159
8160 /* Append ":". */
917317f4
JM
8161 *p++ = ':';
8162 *p = '\0';
802188a7 8163
a257b5bb 8164 /* Append the packet body. */
a76d924d 8165 if (packet_format == 'X')
917317f4 8166 {
917317f4
JM
8167 /* Binary mode. Send target system values byte by byte, in
8168 increasing byte addresses. Only escape certain critical
8169 characters. */
124e13d9
SM
8170 payload_length_bytes =
8171 remote_escape_output (myaddr, todo_units, unit_size, (gdb_byte *) p,
8172 &units_written, payload_capacity_bytes);
6765f3e5 8173
124e13d9 8174 /* If not all TODO units fit, then we'll need another packet. Make
9b7194bc
DJ
8175 a second try to keep the end of the packet aligned. Don't do
8176 this if the packet is tiny. */
124e13d9 8177 if (units_written < todo_units && units_written > 2 * REMOTE_ALIGN_WRITES)
6765f3e5 8178 {
124e13d9
SM
8179 int new_todo_units;
8180
8181 new_todo_units = align_for_efficient_write (units_written, memaddr);
8182
8183 if (new_todo_units != units_written)
8184 payload_length_bytes =
8185 remote_escape_output (myaddr, new_todo_units, unit_size,
8186 (gdb_byte *) p, &units_written,
8187 payload_capacity_bytes);
6765f3e5
DJ
8188 }
8189
124e13d9
SM
8190 p += payload_length_bytes;
8191 if (use_length && units_written < todo_units)
c906108c 8192 {
802188a7 8193 /* Escape chars have filled up the buffer prematurely,
124e13d9 8194 and we have actually sent fewer units than planned.
917317f4
JM
8195 Fix-up the length field of the packet. Use the same
8196 number of characters as before. */
124e13d9
SM
8197 plen += hexnumnstr (plen, (ULONGEST) units_written,
8198 plenlen);
917317f4 8199 *plen = ':'; /* overwrite \0 from hexnumnstr() */
c906108c 8200 }
a76d924d
DJ
8201 }
8202 else
8203 {
917317f4
JM
8204 /* Normal mode: Send target system values byte by byte, in
8205 increasing byte addresses. Each byte is encoded as a two hex
8206 value. */
124e13d9
SM
8207 p += 2 * bin2hex (myaddr, p, todo_units * unit_size);
8208 units_written = todo_units;
c906108c 8209 }
802188a7 8210
2e9f7625 8211 putpkt_binary (rs->buf, (int) (p - rs->buf));
6d820c5c 8212 getpkt (&rs->buf, &rs->buf_size, 0);
802188a7 8213
2e9f7625 8214 if (rs->buf[0] == 'E')
00d84524 8215 return TARGET_XFER_E_IO;
802188a7 8216
124e13d9
SM
8217 /* Return UNITS_WRITTEN, not TODO_UNITS, in case escape chars caused us to
8218 send fewer units than we'd planned. */
8219 *xfered_len_units = (ULONGEST) units_written;
9b409511 8220 return TARGET_XFER_OK;
c906108c
SS
8221}
8222
a76d924d
DJ
8223/* Write memory data directly to the remote machine.
8224 This does not inform the data cache; the data cache uses this.
8225 MEMADDR is the address in the remote memory space.
8226 MYADDR is the address of the buffer in our space.
8227 LEN is the number of bytes.
8228
9b409511
YQ
8229 Return the transferred status, error or OK (an
8230 'enum target_xfer_status' value). Save the number of bytes
8231 transferred in *XFERED_LEN. Only transfer a single packet. */
a76d924d 8232
9b409511
YQ
8233static enum target_xfer_status
8234remote_write_bytes (CORE_ADDR memaddr, const gdb_byte *myaddr, ULONGEST len,
124e13d9 8235 int unit_size, ULONGEST *xfered_len)
a76d924d 8236{
a121b7c1 8237 const char *packet_format = NULL;
a76d924d
DJ
8238
8239 /* Check whether the target supports binary download. */
8240 check_binary_download (memaddr);
8241
4082afcc 8242 switch (packet_support (PACKET_X))
a76d924d
DJ
8243 {
8244 case PACKET_ENABLE:
8245 packet_format = "X";
8246 break;
8247 case PACKET_DISABLE:
8248 packet_format = "M";
8249 break;
8250 case PACKET_SUPPORT_UNKNOWN:
8251 internal_error (__FILE__, __LINE__,
8252 _("remote_write_bytes: bad internal state"));
8253 default:
8254 internal_error (__FILE__, __LINE__, _("bad switch"));
8255 }
8256
8257 return remote_write_bytes_aux (packet_format,
124e13d9 8258 memaddr, myaddr, len, unit_size, xfered_len,
9b409511 8259 packet_format[0], 1);
a76d924d
DJ
8260}
8261
9217e74e
YQ
8262/* Read memory data directly from the remote machine.
8263 This does not use the data cache; the data cache uses this.
8264 MEMADDR is the address in the remote memory space.
8265 MYADDR is the address of the buffer in our space.
124e13d9
SM
8266 LEN_UNITS is the number of addressable memory units to read..
8267 UNIT_SIZE is the length in bytes of an addressable unit.
9217e74e
YQ
8268
8269 Return the transferred status, error or OK (an
8270 'enum target_xfer_status' value). Save the number of bytes
124e13d9
SM
8271 transferred in *XFERED_LEN_UNITS.
8272
8273 See the comment of remote_write_bytes_aux for an example of
8274 memory read/write exchange between gdb and the stub. */
9217e74e
YQ
8275
8276static enum target_xfer_status
124e13d9
SM
8277remote_read_bytes_1 (CORE_ADDR memaddr, gdb_byte *myaddr, ULONGEST len_units,
8278 int unit_size, ULONGEST *xfered_len_units)
9217e74e
YQ
8279{
8280 struct remote_state *rs = get_remote_state ();
124e13d9 8281 int buf_size_bytes; /* Max size of packet output buffer. */
9217e74e 8282 char *p;
124e13d9
SM
8283 int todo_units;
8284 int decoded_bytes;
9217e74e 8285
124e13d9 8286 buf_size_bytes = get_memory_read_packet_size ();
9217e74e
YQ
8287 /* The packet buffer will be large enough for the payload;
8288 get_memory_packet_size ensures this. */
8289
124e13d9 8290 /* Number of units that will fit. */
325fac50
PA
8291 todo_units = std::min (len_units,
8292 (ULONGEST) (buf_size_bytes / unit_size) / 2);
9217e74e
YQ
8293
8294 /* Construct "m"<memaddr>","<len>". */
8295 memaddr = remote_address_masked (memaddr);
8296 p = rs->buf;
8297 *p++ = 'm';
8298 p += hexnumstr (p, (ULONGEST) memaddr);
8299 *p++ = ',';
124e13d9 8300 p += hexnumstr (p, (ULONGEST) todo_units);
9217e74e
YQ
8301 *p = '\0';
8302 putpkt (rs->buf);
8303 getpkt (&rs->buf, &rs->buf_size, 0);
8304 if (rs->buf[0] == 'E'
8305 && isxdigit (rs->buf[1]) && isxdigit (rs->buf[2])
8306 && rs->buf[3] == '\0')
8307 return TARGET_XFER_E_IO;
8308 /* Reply describes memory byte by byte, each byte encoded as two hex
8309 characters. */
8310 p = rs->buf;
124e13d9 8311 decoded_bytes = hex2bin (p, myaddr, todo_units * unit_size);
9217e74e 8312 /* Return what we have. Let higher layers handle partial reads. */
124e13d9 8313 *xfered_len_units = (ULONGEST) (decoded_bytes / unit_size);
9217e74e
YQ
8314 return TARGET_XFER_OK;
8315}
8316
b55fbac4
YQ
8317/* Using the set of read-only target sections of remote, read live
8318 read-only memory.
8acf9577
YQ
8319
8320 For interface/parameters/return description see target.h,
8321 to_xfer_partial. */
8322
8323static enum target_xfer_status
b55fbac4
YQ
8324remote_xfer_live_readonly_partial (struct target_ops *ops, gdb_byte *readbuf,
8325 ULONGEST memaddr, ULONGEST len,
124e13d9 8326 int unit_size, ULONGEST *xfered_len)
8acf9577
YQ
8327{
8328 struct target_section *secp;
8329 struct target_section_table *table;
8330
8331 secp = target_section_by_addr (ops, memaddr);
8332 if (secp != NULL
8333 && (bfd_get_section_flags (secp->the_bfd_section->owner,
8334 secp->the_bfd_section)
8335 & SEC_READONLY))
8336 {
8337 struct target_section *p;
8338 ULONGEST memend = memaddr + len;
8339
8340 table = target_get_section_table (ops);
8341
8342 for (p = table->sections; p < table->sections_end; p++)
8343 {
8344 if (memaddr >= p->addr)
8345 {
8346 if (memend <= p->endaddr)
8347 {
8348 /* Entire transfer is within this section. */
124e13d9 8349 return remote_read_bytes_1 (memaddr, readbuf, len, unit_size,
b55fbac4 8350 xfered_len);
8acf9577
YQ
8351 }
8352 else if (memaddr >= p->endaddr)
8353 {
8354 /* This section ends before the transfer starts. */
8355 continue;
8356 }
8357 else
8358 {
8359 /* This section overlaps the transfer. Just do half. */
8360 len = p->endaddr - memaddr;
124e13d9 8361 return remote_read_bytes_1 (memaddr, readbuf, len, unit_size,
b55fbac4 8362 xfered_len);
8acf9577
YQ
8363 }
8364 }
8365 }
8366 }
8367
8368 return TARGET_XFER_EOF;
8369}
8370
9217e74e
YQ
8371/* Similar to remote_read_bytes_1, but it reads from the remote stub
8372 first if the requested memory is unavailable in traceframe.
8373 Otherwise, fall back to remote_read_bytes_1. */
c906108c 8374
9b409511 8375static enum target_xfer_status
8acf9577 8376remote_read_bytes (struct target_ops *ops, CORE_ADDR memaddr,
124e13d9
SM
8377 gdb_byte *myaddr, ULONGEST len, int unit_size,
8378 ULONGEST *xfered_len)
c906108c 8379{
6b6aa828 8380 if (len == 0)
96c4f946 8381 return TARGET_XFER_EOF;
b2182ed2 8382
8acf9577
YQ
8383 if (get_traceframe_number () != -1)
8384 {
8385 VEC(mem_range_s) *available;
8386
8387 /* If we fail to get the set of available memory, then the
8388 target does not support querying traceframe info, and so we
8389 attempt reading from the traceframe anyway (assuming the
8390 target implements the old QTro packet then). */
8391 if (traceframe_available_memory (&available, memaddr, len))
8392 {
8393 struct cleanup *old_chain;
8394
8395 old_chain = make_cleanup (VEC_cleanup(mem_range_s), &available);
8396
8397 if (VEC_empty (mem_range_s, available)
8398 || VEC_index (mem_range_s, available, 0)->start != memaddr)
8399 {
8400 enum target_xfer_status res;
8401
8402 /* Don't read into the traceframe's available
8403 memory. */
8404 if (!VEC_empty (mem_range_s, available))
8405 {
8406 LONGEST oldlen = len;
8407
8408 len = VEC_index (mem_range_s, available, 0)->start - memaddr;
8409 gdb_assert (len <= oldlen);
8410 }
8411
8412 do_cleanups (old_chain);
8413
8414 /* This goes through the topmost target again. */
b55fbac4 8415 res = remote_xfer_live_readonly_partial (ops, myaddr, memaddr,
124e13d9 8416 len, unit_size, xfered_len);
8acf9577
YQ
8417 if (res == TARGET_XFER_OK)
8418 return TARGET_XFER_OK;
8419 else
8420 {
8421 /* No use trying further, we know some memory starting
8422 at MEMADDR isn't available. */
8423 *xfered_len = len;
8424 return TARGET_XFER_UNAVAILABLE;
8425 }
8426 }
8427
8428 /* Don't try to read more than how much is available, in
8429 case the target implements the deprecated QTro packet to
8430 cater for older GDBs (the target's knowledge of read-only
8431 sections may be outdated by now). */
8432 len = VEC_index (mem_range_s, available, 0)->length;
8433
8434 do_cleanups (old_chain);
8435 }
8436 }
8437
124e13d9 8438 return remote_read_bytes_1 (memaddr, myaddr, len, unit_size, xfered_len);
c906108c 8439}
74531fed 8440
c906108c 8441\f
c906108c 8442
a76d924d
DJ
8443/* Sends a packet with content determined by the printf format string
8444 FORMAT and the remaining arguments, then gets the reply. Returns
8445 whether the packet was a success, a failure, or unknown. */
8446
77b64a49
PA
8447static enum packet_result remote_send_printf (const char *format, ...)
8448 ATTRIBUTE_PRINTF (1, 2);
8449
2c0b251b 8450static enum packet_result
a76d924d
DJ
8451remote_send_printf (const char *format, ...)
8452{
8453 struct remote_state *rs = get_remote_state ();
8454 int max_size = get_remote_packet_size ();
a76d924d 8455 va_list ap;
a744cf53 8456
a76d924d
DJ
8457 va_start (ap, format);
8458
8459 rs->buf[0] = '\0';
8460 if (vsnprintf (rs->buf, max_size, format, ap) >= max_size)
9b20d036 8461 internal_error (__FILE__, __LINE__, _("Too long remote packet."));
a76d924d
DJ
8462
8463 if (putpkt (rs->buf) < 0)
8464 error (_("Communication problem with target."));
8465
8466 rs->buf[0] = '\0';
8467 getpkt (&rs->buf, &rs->buf_size, 0);
8468
8469 return packet_check_result (rs->buf);
8470}
8471
8472static void
8473restore_remote_timeout (void *p)
8474{
8475 int value = *(int *)p;
a744cf53 8476
a76d924d
DJ
8477 remote_timeout = value;
8478}
8479
8480/* Flash writing can take quite some time. We'll set
8481 effectively infinite timeout for flash operations.
8482 In future, we'll need to decide on a better approach. */
8483static const int remote_flash_timeout = 1000;
8484
8485static void
8486remote_flash_erase (struct target_ops *ops,
8487 ULONGEST address, LONGEST length)
8488{
f5656ead 8489 int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
a76d924d
DJ
8490 int saved_remote_timeout = remote_timeout;
8491 enum packet_result ret;
a76d924d
DJ
8492 struct cleanup *back_to = make_cleanup (restore_remote_timeout,
8493 &saved_remote_timeout);
a744cf53 8494
a76d924d
DJ
8495 remote_timeout = remote_flash_timeout;
8496
8497 ret = remote_send_printf ("vFlashErase:%s,%s",
5af949e3 8498 phex (address, addr_size),
a76d924d
DJ
8499 phex (length, 4));
8500 switch (ret)
8501 {
8502 case PACKET_UNKNOWN:
8503 error (_("Remote target does not support flash erase"));
8504 case PACKET_ERROR:
8505 error (_("Error erasing flash with vFlashErase packet"));
8506 default:
8507 break;
8508 }
8509
8510 do_cleanups (back_to);
8511}
8512
9b409511
YQ
8513static enum target_xfer_status
8514remote_flash_write (struct target_ops *ops, ULONGEST address,
8515 ULONGEST length, ULONGEST *xfered_len,
8516 const gdb_byte *data)
a76d924d
DJ
8517{
8518 int saved_remote_timeout = remote_timeout;
9b409511 8519 enum target_xfer_status ret;
a76d924d 8520 struct cleanup *back_to = make_cleanup (restore_remote_timeout,
9b409511 8521 &saved_remote_timeout);
a76d924d
DJ
8522
8523 remote_timeout = remote_flash_timeout;
124e13d9 8524 ret = remote_write_bytes_aux ("vFlashWrite:", address, data, length, 1,
9b409511 8525 xfered_len,'X', 0);
a76d924d
DJ
8526 do_cleanups (back_to);
8527
8528 return ret;
8529}
8530
8531static void
8532remote_flash_done (struct target_ops *ops)
8533{
8534 int saved_remote_timeout = remote_timeout;
8535 int ret;
8536 struct cleanup *back_to = make_cleanup (restore_remote_timeout,
8537 &saved_remote_timeout);
8538
8539 remote_timeout = remote_flash_timeout;
8540 ret = remote_send_printf ("vFlashDone");
8541 do_cleanups (back_to);
8542
8543 switch (ret)
8544 {
8545 case PACKET_UNKNOWN:
8546 error (_("Remote target does not support vFlashDone"));
8547 case PACKET_ERROR:
8548 error (_("Error finishing flash operation"));
8549 default:
8550 break;
8551 }
8552}
8553
c906108c 8554static void
fba45db2 8555remote_files_info (struct target_ops *ignore)
c906108c
SS
8556{
8557 puts_filtered ("Debugging a target over a serial line.\n");
8558}
8559\f
8560/* Stuff for dealing with the packets which are part of this protocol.
8561 See comment at top of file for details. */
8562
1927e618
PA
8563/* Close/unpush the remote target, and throw a TARGET_CLOSE_ERROR
8564 error to higher layers. Called when a serial error is detected.
8565 The exception message is STRING, followed by a colon and a blank,
d6cb50a2
JK
8566 the system error message for errno at function entry and final dot
8567 for output compatibility with throw_perror_with_name. */
1927e618
PA
8568
8569static void
8570unpush_and_perror (const char *string)
8571{
d6cb50a2 8572 int saved_errno = errno;
1927e618
PA
8573
8574 remote_unpush_target ();
d6cb50a2
JK
8575 throw_error (TARGET_CLOSE_ERROR, "%s: %s.", string,
8576 safe_strerror (saved_errno));
1927e618
PA
8577}
8578
048094ac
PA
8579/* Read a single character from the remote end. The current quit
8580 handler is overridden to avoid quitting in the middle of packet
8581 sequence, as that would break communication with the remote server.
8582 See remote_serial_quit_handler for more detail. */
c906108c
SS
8583
8584static int
fba45db2 8585readchar (int timeout)
c906108c
SS
8586{
8587 int ch;
5d93a237 8588 struct remote_state *rs = get_remote_state ();
048094ac
PA
8589 struct cleanup *old_chain;
8590
8591 old_chain = make_cleanup_override_quit_handler (remote_serial_quit_handler);
8592
8593 rs->got_ctrlc_during_io = 0;
c906108c 8594
5d93a237 8595 ch = serial_readchar (rs->remote_desc, timeout);
c906108c 8596
048094ac
PA
8597 if (rs->got_ctrlc_during_io)
8598 set_quit_flag ();
8599
8600 do_cleanups (old_chain);
8601
2acceee2 8602 if (ch >= 0)
0876f84a 8603 return ch;
2acceee2
JM
8604
8605 switch ((enum serial_rc) ch)
c906108c
SS
8606 {
8607 case SERIAL_EOF:
78a095c3 8608 remote_unpush_target ();
598d3636 8609 throw_error (TARGET_CLOSE_ERROR, _("Remote connection closed"));
2acceee2 8610 /* no return */
c906108c 8611 case SERIAL_ERROR:
1927e618
PA
8612 unpush_and_perror (_("Remote communication error. "
8613 "Target disconnected."));
2acceee2 8614 /* no return */
c906108c 8615 case SERIAL_TIMEOUT:
2acceee2 8616 break;
c906108c 8617 }
2acceee2 8618 return ch;
c906108c
SS
8619}
8620
c33e31fd 8621/* Wrapper for serial_write that closes the target and throws if
048094ac
PA
8622 writing fails. The current quit handler is overridden to avoid
8623 quitting in the middle of packet sequence, as that would break
8624 communication with the remote server. See
8625 remote_serial_quit_handler for more detail. */
c33e31fd
PA
8626
8627static void
8628remote_serial_write (const char *str, int len)
8629{
5d93a237 8630 struct remote_state *rs = get_remote_state ();
048094ac
PA
8631 struct cleanup *old_chain;
8632
8633 old_chain = make_cleanup_override_quit_handler (remote_serial_quit_handler);
8634
8635 rs->got_ctrlc_during_io = 0;
5d93a237
TT
8636
8637 if (serial_write (rs->remote_desc, str, len))
c33e31fd 8638 {
1927e618
PA
8639 unpush_and_perror (_("Remote communication error. "
8640 "Target disconnected."));
c33e31fd 8641 }
048094ac
PA
8642
8643 if (rs->got_ctrlc_during_io)
8644 set_quit_flag ();
8645
8646 do_cleanups (old_chain);
c33e31fd
PA
8647}
8648
6d820c5c
DJ
8649/* Send the command in *BUF to the remote machine, and read the reply
8650 into *BUF. Report an error if we get an error reply. Resize
8651 *BUF using xrealloc if necessary to hold the result, and update
8652 *SIZEOF_BUF. */
c906108c
SS
8653
8654static void
6d820c5c
DJ
8655remote_send (char **buf,
8656 long *sizeof_buf)
c906108c 8657{
6d820c5c 8658 putpkt (*buf);
c2d11a7d 8659 getpkt (buf, sizeof_buf, 0);
c906108c 8660
6d820c5c
DJ
8661 if ((*buf)[0] == 'E')
8662 error (_("Remote failure reply: %s"), *buf);
c906108c
SS
8663}
8664
b3ced9ba
PA
8665/* Return a string representing an escaped version of BUF, of len N.
8666 E.g. \n is converted to \\n, \t to \\t, etc. */
6e5abd65 8667
b3ced9ba 8668static std::string
6e5abd65
PA
8669escape_buffer (const char *buf, int n)
8670{
d7e74731 8671 string_file stb;
6e5abd65 8672
d7e74731
PA
8673 stb.putstrn (buf, n, '\\');
8674 return std::move (stb.string ());
6e5abd65
PA
8675}
8676
c906108c
SS
8677/* Display a null-terminated packet on stdout, for debugging, using C
8678 string notation. */
8679
8680static void
baa336ce 8681print_packet (const char *buf)
c906108c
SS
8682{
8683 puts_filtered ("\"");
43e526b9 8684 fputstr_filtered (buf, '"', gdb_stdout);
c906108c
SS
8685 puts_filtered ("\"");
8686}
8687
8688int
baa336ce 8689putpkt (const char *buf)
c906108c
SS
8690{
8691 return putpkt_binary (buf, strlen (buf));
8692}
8693
8694/* Send a packet to the remote machine, with error checking. The data
23860348 8695 of the packet is in BUF. The string in BUF can be at most
ea9c271d 8696 get_remote_packet_size () - 5 to account for the $, # and checksum,
23860348
MS
8697 and for a possible /0 if we are debugging (remote_debug) and want
8698 to print the sent packet as a string. */
c906108c
SS
8699
8700static int
baa336ce 8701putpkt_binary (const char *buf, int cnt)
c906108c 8702{
2d717e4f 8703 struct remote_state *rs = get_remote_state ();
c906108c
SS
8704 int i;
8705 unsigned char csum = 0;
224c3ddb 8706 char *buf2 = (char *) xmalloc (cnt + 6);
a5c0808e 8707 struct cleanup *old_chain = make_cleanup (xfree, buf2);
085dd6e6 8708
c906108c
SS
8709 int ch;
8710 int tcount = 0;
8711 char *p;
8712
e24a49d8
PA
8713 /* Catch cases like trying to read memory or listing threads while
8714 we're waiting for a stop reply. The remote server wouldn't be
8715 ready to handle this request, so we'd hang and timeout. We don't
8716 have to worry about this in synchronous mode, because in that
8717 case it's not possible to issue a command while the target is
74531fed
PA
8718 running. This is not a problem in non-stop mode, because in that
8719 case, the stub is always ready to process serial input. */
6efcd9a8
PA
8720 if (!target_is_non_stop_p ()
8721 && target_is_async_p ()
8722 && rs->waiting_for_stop_reply)
9597b22a
DE
8723 {
8724 error (_("Cannot execute this command while the target is running.\n"
8725 "Use the \"interrupt\" command to stop the target\n"
8726 "and then try again."));
8727 }
e24a49d8 8728
2d717e4f
DJ
8729 /* We're sending out a new packet. Make sure we don't look at a
8730 stale cached response. */
8731 rs->cached_wait_status = 0;
8732
c906108c
SS
8733 /* Copy the packet into buffer BUF2, encapsulating it
8734 and giving it a checksum. */
8735
c906108c
SS
8736 p = buf2;
8737 *p++ = '$';
8738
8739 for (i = 0; i < cnt; i++)
8740 {
8741 csum += buf[i];
8742 *p++ = buf[i];
8743 }
8744 *p++ = '#';
8745 *p++ = tohex ((csum >> 4) & 0xf);
8746 *p++ = tohex (csum & 0xf);
8747
8748 /* Send it over and over until we get a positive ack. */
8749
8750 while (1)
8751 {
8752 int started_error_output = 0;
8753
8754 if (remote_debug)
8755 {
8756 *p = '\0';
b3ced9ba 8757
6f8976bf
YQ
8758 int len = (int) (p - buf2);
8759
8760 std::string str
8761 = escape_buffer (buf2, std::min (len, REMOTE_DEBUG_MAX_CHAR));
8762
8763 fprintf_unfiltered (gdb_stdlog, "Sending packet: %s", str.c_str ());
8764
8765 if (str.length () > REMOTE_DEBUG_MAX_CHAR)
8766 {
8767 fprintf_unfiltered (gdb_stdlog, "[%zu bytes omitted]",
8768 str.length () - REMOTE_DEBUG_MAX_CHAR);
8769 }
8770
8771 fprintf_unfiltered (gdb_stdlog, "...");
b3ced9ba 8772
0f71a2f6 8773 gdb_flush (gdb_stdlog);
c906108c 8774 }
c33e31fd 8775 remote_serial_write (buf2, p - buf2);
c906108c 8776
a6f3e723
SL
8777 /* If this is a no acks version of the remote protocol, send the
8778 packet and move on. */
8779 if (rs->noack_mode)
8780 break;
8781
74531fed
PA
8782 /* Read until either a timeout occurs (-2) or '+' is read.
8783 Handle any notification that arrives in the mean time. */
c906108c
SS
8784 while (1)
8785 {
8786 ch = readchar (remote_timeout);
8787
c5aa993b 8788 if (remote_debug)
c906108c
SS
8789 {
8790 switch (ch)
8791 {
8792 case '+':
1216fa2c 8793 case '-':
c906108c
SS
8794 case SERIAL_TIMEOUT:
8795 case '$':
74531fed 8796 case '%':
c906108c
SS
8797 if (started_error_output)
8798 {
8799 putchar_unfiltered ('\n');
8800 started_error_output = 0;
8801 }
8802 }
8803 }
8804
8805 switch (ch)
8806 {
8807 case '+':
8808 if (remote_debug)
0f71a2f6 8809 fprintf_unfiltered (gdb_stdlog, "Ack\n");
a5c0808e 8810 do_cleanups (old_chain);
c906108c 8811 return 1;
1216fa2c
AC
8812 case '-':
8813 if (remote_debug)
8814 fprintf_unfiltered (gdb_stdlog, "Nak\n");
a17d146e 8815 /* FALLTHROUGH */
c906108c 8816 case SERIAL_TIMEOUT:
c5aa993b 8817 tcount++;
c906108c 8818 if (tcount > 3)
a5c0808e
PA
8819 {
8820 do_cleanups (old_chain);
8821 return 0;
8822 }
23860348 8823 break; /* Retransmit buffer. */
c906108c
SS
8824 case '$':
8825 {
40e3f985 8826 if (remote_debug)
2bc416ba 8827 fprintf_unfiltered (gdb_stdlog,
23860348 8828 "Packet instead of Ack, ignoring it\n");
d6f7abdf
AC
8829 /* It's probably an old response sent because an ACK
8830 was lost. Gobble up the packet and ack it so it
8831 doesn't get retransmitted when we resend this
8832 packet. */
6d820c5c 8833 skip_frame ();
c33e31fd 8834 remote_serial_write ("+", 1);
23860348 8835 continue; /* Now, go look for +. */
c906108c 8836 }
74531fed
PA
8837
8838 case '%':
8839 {
8840 int val;
8841
8842 /* If we got a notification, handle it, and go back to looking
8843 for an ack. */
8844 /* We've found the start of a notification. Now
8845 collect the data. */
8846 val = read_frame (&rs->buf, &rs->buf_size);
8847 if (val >= 0)
8848 {
8849 if (remote_debug)
8850 {
b3ced9ba 8851 std::string str = escape_buffer (rs->buf, val);
6e5abd65 8852
6e5abd65
PA
8853 fprintf_unfiltered (gdb_stdlog,
8854 " Notification received: %s\n",
b3ced9ba 8855 str.c_str ());
74531fed 8856 }
5965e028 8857 handle_notification (rs->notif_state, rs->buf);
74531fed
PA
8858 /* We're in sync now, rewait for the ack. */
8859 tcount = 0;
8860 }
8861 else
8862 {
8863 if (remote_debug)
8864 {
8865 if (!started_error_output)
8866 {
8867 started_error_output = 1;
8868 fprintf_unfiltered (gdb_stdlog, "putpkt: Junk: ");
8869 }
8870 fputc_unfiltered (ch & 0177, gdb_stdlog);
8871 fprintf_unfiltered (gdb_stdlog, "%s", rs->buf);
8872 }
8873 }
8874 continue;
8875 }
8876 /* fall-through */
c906108c
SS
8877 default:
8878 if (remote_debug)
8879 {
8880 if (!started_error_output)
8881 {
8882 started_error_output = 1;
0f71a2f6 8883 fprintf_unfiltered (gdb_stdlog, "putpkt: Junk: ");
c906108c 8884 }
0f71a2f6 8885 fputc_unfiltered (ch & 0177, gdb_stdlog);
c906108c
SS
8886 }
8887 continue;
8888 }
23860348 8889 break; /* Here to retransmit. */
c906108c
SS
8890 }
8891
8892#if 0
8893 /* This is wrong. If doing a long backtrace, the user should be
c5aa993b
JM
8894 able to get out next time we call QUIT, without anything as
8895 violent as interrupt_query. If we want to provide a way out of
8896 here without getting to the next QUIT, it should be based on
8897 hitting ^C twice as in remote_wait. */
c906108c
SS
8898 if (quit_flag)
8899 {
8900 quit_flag = 0;
8901 interrupt_query ();
8902 }
8903#endif
8904 }
a5c0808e
PA
8905
8906 do_cleanups (old_chain);
a6f3e723 8907 return 0;
c906108c
SS
8908}
8909
6d820c5c
DJ
8910/* Come here after finding the start of a frame when we expected an
8911 ack. Do our best to discard the rest of this packet. */
8912
8913static void
8914skip_frame (void)
8915{
8916 int c;
8917
8918 while (1)
8919 {
8920 c = readchar (remote_timeout);
8921 switch (c)
8922 {
8923 case SERIAL_TIMEOUT:
8924 /* Nothing we can do. */
8925 return;
8926 case '#':
8927 /* Discard the two bytes of checksum and stop. */
8928 c = readchar (remote_timeout);
8929 if (c >= 0)
8930 c = readchar (remote_timeout);
8931
8932 return;
8933 case '*': /* Run length encoding. */
8934 /* Discard the repeat count. */
8935 c = readchar (remote_timeout);
8936 if (c < 0)
8937 return;
8938 break;
8939 default:
8940 /* A regular character. */
8941 break;
8942 }
8943 }
8944}
8945
c906108c 8946/* Come here after finding the start of the frame. Collect the rest
6d820c5c
DJ
8947 into *BUF, verifying the checksum, length, and handling run-length
8948 compression. NUL terminate the buffer. If there is not enough room,
8949 expand *BUF using xrealloc.
c906108c 8950
c2d11a7d
JM
8951 Returns -1 on error, number of characters in buffer (ignoring the
8952 trailing NULL) on success. (could be extended to return one of the
23860348 8953 SERIAL status indications). */
c2d11a7d
JM
8954
8955static long
6d820c5c
DJ
8956read_frame (char **buf_p,
8957 long *sizeof_buf)
c906108c
SS
8958{
8959 unsigned char csum;
c2d11a7d 8960 long bc;
c906108c 8961 int c;
6d820c5c 8962 char *buf = *buf_p;
a6f3e723 8963 struct remote_state *rs = get_remote_state ();
c906108c
SS
8964
8965 csum = 0;
c2d11a7d 8966 bc = 0;
c906108c
SS
8967
8968 while (1)
8969 {
8970 c = readchar (remote_timeout);
c906108c
SS
8971 switch (c)
8972 {
8973 case SERIAL_TIMEOUT:
8974 if (remote_debug)
0f71a2f6 8975 fputs_filtered ("Timeout in mid-packet, retrying\n", gdb_stdlog);
c2d11a7d 8976 return -1;
c906108c
SS
8977 case '$':
8978 if (remote_debug)
0f71a2f6
JM
8979 fputs_filtered ("Saw new packet start in middle of old one\n",
8980 gdb_stdlog);
23860348 8981 return -1; /* Start a new packet, count retries. */
c906108c
SS
8982 case '#':
8983 {
8984 unsigned char pktcsum;
e1b09194
AC
8985 int check_0 = 0;
8986 int check_1 = 0;
c906108c 8987
c2d11a7d 8988 buf[bc] = '\0';
c906108c 8989
e1b09194
AC
8990 check_0 = readchar (remote_timeout);
8991 if (check_0 >= 0)
8992 check_1 = readchar (remote_timeout);
802188a7 8993
e1b09194
AC
8994 if (check_0 == SERIAL_TIMEOUT || check_1 == SERIAL_TIMEOUT)
8995 {
8996 if (remote_debug)
2bc416ba 8997 fputs_filtered ("Timeout in checksum, retrying\n",
23860348 8998 gdb_stdlog);
e1b09194
AC
8999 return -1;
9000 }
9001 else if (check_0 < 0 || check_1 < 0)
40e3f985
FN
9002 {
9003 if (remote_debug)
2bc416ba 9004 fputs_filtered ("Communication error in checksum\n",
23860348 9005 gdb_stdlog);
40e3f985
FN
9006 return -1;
9007 }
c906108c 9008
a6f3e723
SL
9009 /* Don't recompute the checksum; with no ack packets we
9010 don't have any way to indicate a packet retransmission
9011 is necessary. */
9012 if (rs->noack_mode)
9013 return bc;
9014
e1b09194 9015 pktcsum = (fromhex (check_0) << 4) | fromhex (check_1);
c906108c 9016 if (csum == pktcsum)
c2d11a7d 9017 return bc;
c906108c 9018
c5aa993b 9019 if (remote_debug)
c906108c 9020 {
b3ced9ba 9021 std::string str = escape_buffer (buf, bc);
6e5abd65 9022
6e5abd65 9023 fprintf_unfiltered (gdb_stdlog,
3e43a32a
MS
9024 "Bad checksum, sentsum=0x%x, "
9025 "csum=0x%x, buf=%s\n",
b3ced9ba 9026 pktcsum, csum, str.c_str ());
c906108c 9027 }
c2d11a7d 9028 /* Number of characters in buffer ignoring trailing
23860348 9029 NULL. */
c2d11a7d 9030 return -1;
c906108c 9031 }
23860348 9032 case '*': /* Run length encoding. */
c2c6d25f
JM
9033 {
9034 int repeat;
c906108c 9035
a744cf53 9036 csum += c;
b4501125
AC
9037 c = readchar (remote_timeout);
9038 csum += c;
23860348 9039 repeat = c - ' ' + 3; /* Compute repeat count. */
c906108c 9040
23860348 9041 /* The character before ``*'' is repeated. */
c2d11a7d 9042
6d820c5c 9043 if (repeat > 0 && repeat <= 255 && bc > 0)
c2c6d25f 9044 {
6d820c5c
DJ
9045 if (bc + repeat - 1 >= *sizeof_buf - 1)
9046 {
9047 /* Make some more room in the buffer. */
9048 *sizeof_buf += repeat;
224c3ddb 9049 *buf_p = (char *) xrealloc (*buf_p, *sizeof_buf);
6d820c5c
DJ
9050 buf = *buf_p;
9051 }
9052
c2d11a7d
JM
9053 memset (&buf[bc], buf[bc - 1], repeat);
9054 bc += repeat;
c2c6d25f
JM
9055 continue;
9056 }
9057
c2d11a7d 9058 buf[bc] = '\0';
6d820c5c 9059 printf_filtered (_("Invalid run length encoding: %s\n"), buf);
c2d11a7d 9060 return -1;
c2c6d25f 9061 }
c906108c 9062 default:
6d820c5c 9063 if (bc >= *sizeof_buf - 1)
c906108c 9064 {
6d820c5c
DJ
9065 /* Make some more room in the buffer. */
9066 *sizeof_buf *= 2;
224c3ddb 9067 *buf_p = (char *) xrealloc (*buf_p, *sizeof_buf);
6d820c5c 9068 buf = *buf_p;
c906108c
SS
9069 }
9070
6d820c5c
DJ
9071 buf[bc++] = c;
9072 csum += c;
9073 continue;
c906108c
SS
9074 }
9075 }
9076}
9077
9078/* Read a packet from the remote machine, with error checking, and
6d820c5c
DJ
9079 store it in *BUF. Resize *BUF using xrealloc if necessary to hold
9080 the result, and update *SIZEOF_BUF. If FOREVER, wait forever
9081 rather than timing out; this is used (in synchronous mode) to wait
9082 for a target that is is executing user code to stop. */
d9fcf2fb
JM
9083/* FIXME: ezannoni 2000-02-01 this wrapper is necessary so that we
9084 don't have to change all the calls to getpkt to deal with the
9085 return value, because at the moment I don't know what the right
23860348 9086 thing to do it for those. */
c906108c 9087void
6d820c5c
DJ
9088getpkt (char **buf,
9089 long *sizeof_buf,
c2d11a7d 9090 int forever)
d9fcf2fb 9091{
54887903 9092 getpkt_sane (buf, sizeof_buf, forever);
d9fcf2fb
JM
9093}
9094
9095
9096/* Read a packet from the remote machine, with error checking, and
6d820c5c
DJ
9097 store it in *BUF. Resize *BUF using xrealloc if necessary to hold
9098 the result, and update *SIZEOF_BUF. If FOREVER, wait forever
9099 rather than timing out; this is used (in synchronous mode) to wait
9100 for a target that is is executing user code to stop. If FOREVER ==
9101 0, this function is allowed to time out gracefully and return an
74531fed
PA
9102 indication of this to the caller. Otherwise return the number of
9103 bytes read. If EXPECTING_NOTIF, consider receiving a notification
fee9eda9
YQ
9104 enough reason to return to the caller. *IS_NOTIF is an output
9105 boolean that indicates whether *BUF holds a notification or not
9106 (a regular packet). */
74531fed 9107
3172dc30 9108static int
74531fed 9109getpkt_or_notif_sane_1 (char **buf, long *sizeof_buf, int forever,
fee9eda9 9110 int expecting_notif, int *is_notif)
c906108c 9111{
2d717e4f 9112 struct remote_state *rs = get_remote_state ();
c906108c
SS
9113 int c;
9114 int tries;
9115 int timeout;
df4b58fe 9116 int val = -1;
c906108c 9117
2d717e4f
DJ
9118 /* We're reading a new response. Make sure we don't look at a
9119 previously cached response. */
9120 rs->cached_wait_status = 0;
9121
6d820c5c 9122 strcpy (*buf, "timeout");
c906108c
SS
9123
9124 if (forever)
74531fed
PA
9125 timeout = watchdog > 0 ? watchdog : -1;
9126 else if (expecting_notif)
9127 timeout = 0; /* There should already be a char in the buffer. If
9128 not, bail out. */
c906108c
SS
9129 else
9130 timeout = remote_timeout;
9131
9132#define MAX_TRIES 3
9133
74531fed
PA
9134 /* Process any number of notifications, and then return when
9135 we get a packet. */
9136 for (;;)
c906108c 9137 {
d9c43928 9138 /* If we get a timeout or bad checksum, retry up to MAX_TRIES
74531fed
PA
9139 times. */
9140 for (tries = 1; tries <= MAX_TRIES; tries++)
c906108c 9141 {
74531fed
PA
9142 /* This can loop forever if the remote side sends us
9143 characters continuously, but if it pauses, we'll get
9144 SERIAL_TIMEOUT from readchar because of timeout. Then
9145 we'll count that as a retry.
9146
9147 Note that even when forever is set, we will only wait
9148 forever prior to the start of a packet. After that, we
9149 expect characters to arrive at a brisk pace. They should
9150 show up within remote_timeout intervals. */
9151 do
9152 c = readchar (timeout);
9153 while (c != SERIAL_TIMEOUT && c != '$' && c != '%');
c906108c
SS
9154
9155 if (c == SERIAL_TIMEOUT)
9156 {
74531fed
PA
9157 if (expecting_notif)
9158 return -1; /* Don't complain, it's normal to not get
9159 anything in this case. */
9160
23860348 9161 if (forever) /* Watchdog went off? Kill the target. */
c906108c 9162 {
78a095c3 9163 remote_unpush_target ();
598d3636
JK
9164 throw_error (TARGET_CLOSE_ERROR,
9165 _("Watchdog timeout has expired. "
9166 "Target detached."));
c906108c 9167 }
c906108c 9168 if (remote_debug)
0f71a2f6 9169 fputs_filtered ("Timed out.\n", gdb_stdlog);
c906108c 9170 }
74531fed
PA
9171 else
9172 {
9173 /* We've found the start of a packet or notification.
9174 Now collect the data. */
9175 val = read_frame (buf, sizeof_buf);
9176 if (val >= 0)
9177 break;
9178 }
9179
c33e31fd 9180 remote_serial_write ("-", 1);
c906108c 9181 }
c906108c 9182
74531fed
PA
9183 if (tries > MAX_TRIES)
9184 {
9185 /* We have tried hard enough, and just can't receive the
9186 packet/notification. Give up. */
9187 printf_unfiltered (_("Ignoring packet error, continuing...\n"));
c906108c 9188
74531fed
PA
9189 /* Skip the ack char if we're in no-ack mode. */
9190 if (!rs->noack_mode)
c33e31fd 9191 remote_serial_write ("+", 1);
74531fed
PA
9192 return -1;
9193 }
c906108c 9194
74531fed
PA
9195 /* If we got an ordinary packet, return that to our caller. */
9196 if (c == '$')
c906108c
SS
9197 {
9198 if (remote_debug)
43e526b9 9199 {
6f8976bf
YQ
9200 std::string str
9201 = escape_buffer (*buf,
9202 std::min (val, REMOTE_DEBUG_MAX_CHAR));
9203
9204 fprintf_unfiltered (gdb_stdlog, "Packet received: %s",
9205 str.c_str ());
9206
9207 if (str.length () > REMOTE_DEBUG_MAX_CHAR)
9208 {
9209 fprintf_unfiltered (gdb_stdlog, "[%zu bytes omitted]",
9210 str.length () - REMOTE_DEBUG_MAX_CHAR);
9211 }
6e5abd65 9212
6f8976bf 9213 fprintf_unfiltered (gdb_stdlog, "\n");
43e526b9 9214 }
a6f3e723
SL
9215
9216 /* Skip the ack char if we're in no-ack mode. */
9217 if (!rs->noack_mode)
c33e31fd 9218 remote_serial_write ("+", 1);
fee9eda9
YQ
9219 if (is_notif != NULL)
9220 *is_notif = 0;
0876f84a 9221 return val;
c906108c
SS
9222 }
9223
74531fed
PA
9224 /* If we got a notification, handle it, and go back to looking
9225 for a packet. */
9226 else
9227 {
9228 gdb_assert (c == '%');
9229
9230 if (remote_debug)
9231 {
b3ced9ba 9232 std::string str = escape_buffer (*buf, val);
6e5abd65 9233
6e5abd65
PA
9234 fprintf_unfiltered (gdb_stdlog,
9235 " Notification received: %s\n",
b3ced9ba 9236 str.c_str ());
74531fed 9237 }
fee9eda9
YQ
9238 if (is_notif != NULL)
9239 *is_notif = 1;
c906108c 9240
5965e028 9241 handle_notification (rs->notif_state, *buf);
c906108c 9242
74531fed 9243 /* Notifications require no acknowledgement. */
a6f3e723 9244
74531fed 9245 if (expecting_notif)
fee9eda9 9246 return val;
74531fed
PA
9247 }
9248 }
9249}
9250
9251static int
9252getpkt_sane (char **buf, long *sizeof_buf, int forever)
9253{
fee9eda9 9254 return getpkt_or_notif_sane_1 (buf, sizeof_buf, forever, 0, NULL);
74531fed
PA
9255}
9256
9257static int
fee9eda9
YQ
9258getpkt_or_notif_sane (char **buf, long *sizeof_buf, int forever,
9259 int *is_notif)
74531fed 9260{
fee9eda9
YQ
9261 return getpkt_or_notif_sane_1 (buf, sizeof_buf, forever, 1,
9262 is_notif);
c906108c 9263}
74531fed 9264
cbb8991c
DB
9265/* Check whether EVENT is a fork event for the process specified
9266 by the pid passed in DATA, and if it is, kill the fork child. */
9267
9268static int
9269kill_child_of_pending_fork (QUEUE (stop_reply_p) *q,
9270 QUEUE_ITER (stop_reply_p) *iter,
9271 stop_reply_p event,
9272 void *data)
9273{
19ba03f4 9274 struct queue_iter_param *param = (struct queue_iter_param *) data;
cbb8991c
DB
9275 int parent_pid = *(int *) param->input;
9276
9277 if (is_pending_fork_parent (&event->ws, parent_pid, event->ptid))
9278 {
9279 struct remote_state *rs = get_remote_state ();
9280 int child_pid = ptid_get_pid (event->ws.value.related_pid);
9281 int res;
9282
9283 res = remote_vkill (child_pid, rs);
9284 if (res != 0)
9285 error (_("Can't kill fork child process %d"), child_pid);
9286 }
9287
9288 return 1;
9289}
9290
9291/* Kill any new fork children of process PID that haven't been
9292 processed by follow_fork. */
9293
9294static void
9295kill_new_fork_children (int pid, struct remote_state *rs)
9296{
9297 struct thread_info *thread;
9298 struct notif_client *notif = &notif_client_stop;
9299 struct queue_iter_param param;
9300
9301 /* Kill the fork child threads of any threads in process PID
9302 that are stopped at a fork event. */
9303 ALL_NON_EXITED_THREADS (thread)
9304 {
9305 struct target_waitstatus *ws = &thread->pending_follow;
9306
9307 if (is_pending_fork_parent (ws, pid, thread->ptid))
9308 {
9309 struct remote_state *rs = get_remote_state ();
9310 int child_pid = ptid_get_pid (ws->value.related_pid);
9311 int res;
9312
9313 res = remote_vkill (child_pid, rs);
9314 if (res != 0)
9315 error (_("Can't kill fork child process %d"), child_pid);
9316 }
9317 }
9318
9319 /* Check for any pending fork events (not reported or processed yet)
9320 in process PID and kill those fork child threads as well. */
9321 remote_notif_get_pending_events (notif);
9322 param.input = &pid;
9323 param.output = NULL;
9324 QUEUE_iterate (stop_reply_p, stop_reply_queue,
9325 kill_child_of_pending_fork, &param);
9326}
9327
c906108c 9328\f
8020350c
DB
9329/* Target hook to kill the current inferior. */
9330
c906108c 9331static void
7d85a9c0 9332remote_kill (struct target_ops *ops)
43ff13b4 9333{
8020350c
DB
9334 int res = -1;
9335 int pid = ptid_get_pid (inferior_ptid);
9336 struct remote_state *rs = get_remote_state ();
0fdf84ca 9337
8020350c 9338 if (packet_support (PACKET_vKill) != PACKET_DISABLE)
0fdf84ca 9339 {
8020350c
DB
9340 /* If we're stopped while forking and we haven't followed yet,
9341 kill the child task. We need to do this before killing the
9342 parent task because if this is a vfork then the parent will
9343 be sleeping. */
9344 kill_new_fork_children (pid, rs);
9345
9346 res = remote_vkill (pid, rs);
9347 if (res == 0)
0fdf84ca 9348 {
bc1e6c81 9349 target_mourn_inferior (inferior_ptid);
0fdf84ca
PA
9350 return;
9351 }
8020350c 9352 }
0fdf84ca 9353
8020350c
DB
9354 /* If we are in 'target remote' mode and we are killing the only
9355 inferior, then we will tell gdbserver to exit and unpush the
9356 target. */
9357 if (res == -1 && !remote_multi_process_p (rs)
9358 && number_of_live_inferiors () == 1)
9359 {
9360 remote_kill_k ();
9361
9362 /* We've killed the remote end, we get to mourn it. If we are
9363 not in extended mode, mourning the inferior also unpushes
9364 remote_ops from the target stack, which closes the remote
9365 connection. */
bc1e6c81 9366 target_mourn_inferior (inferior_ptid);
8020350c
DB
9367
9368 return;
0fdf84ca 9369 }
43ff13b4 9370
8020350c 9371 error (_("Can't kill process"));
43ff13b4
JM
9372}
9373
8020350c
DB
9374/* Send a kill request to the target using the 'vKill' packet. */
9375
82f73884
PA
9376static int
9377remote_vkill (int pid, struct remote_state *rs)
9378{
4082afcc 9379 if (packet_support (PACKET_vKill) == PACKET_DISABLE)
82f73884
PA
9380 return -1;
9381
9382 /* Tell the remote target to detach. */
bba74b36 9383 xsnprintf (rs->buf, get_remote_packet_size (), "vKill;%x", pid);
82f73884
PA
9384 putpkt (rs->buf);
9385 getpkt (&rs->buf, &rs->buf_size, 0);
9386
4082afcc
PA
9387 switch (packet_ok (rs->buf,
9388 &remote_protocol_packets[PACKET_vKill]))
9389 {
9390 case PACKET_OK:
9391 return 0;
9392 case PACKET_ERROR:
9393 return 1;
9394 case PACKET_UNKNOWN:
9395 return -1;
9396 default:
9397 internal_error (__FILE__, __LINE__, _("Bad result from packet_ok"));
9398 }
82f73884
PA
9399}
9400
8020350c
DB
9401/* Send a kill request to the target using the 'k' packet. */
9402
82f73884 9403static void
8020350c 9404remote_kill_k (void)
82f73884 9405{
8020350c
DB
9406 /* Catch errors so the user can quit from gdb even when we
9407 aren't on speaking terms with the remote system. */
9408 TRY
82f73884 9409 {
82f73884 9410 putpkt ("k");
82f73884 9411 }
8020350c
DB
9412 CATCH (ex, RETURN_MASK_ERROR)
9413 {
9414 if (ex.error == TARGET_CLOSE_ERROR)
9415 {
9416 /* If we got an (EOF) error that caused the target
9417 to go away, then we're done, that's what we wanted.
9418 "k" is susceptible to cause a premature EOF, given
9419 that the remote server isn't actually required to
9420 reply to "k", and it can happen that it doesn't
9421 even get to reply ACK to the "k". */
9422 return;
9423 }
82f73884 9424
8020350c
DB
9425 /* Otherwise, something went wrong. We didn't actually kill
9426 the target. Just propagate the exception, and let the
9427 user or higher layers decide what to do. */
9428 throw_exception (ex);
9429 }
9430 END_CATCH
82f73884
PA
9431}
9432
c906108c 9433static void
20f796c9 9434remote_mourn (struct target_ops *target)
c906108c 9435{
8020350c 9436 struct remote_state *rs = get_remote_state ();
ce5ce7ed 9437
8020350c
DB
9438 /* In 'target remote' mode with one inferior, we close the connection. */
9439 if (!rs->extended && number_of_live_inferiors () <= 1)
9440 {
9441 unpush_target (target);
c906108c 9442
8020350c
DB
9443 /* remote_close takes care of doing most of the clean up. */
9444 generic_mourn_inferior ();
9445 return;
9446 }
c906108c 9447
e24a49d8
PA
9448 /* In case we got here due to an error, but we're going to stay
9449 connected. */
9450 rs->waiting_for_stop_reply = 0;
9451
dc1981d7
PA
9452 /* If the current general thread belonged to the process we just
9453 detached from or has exited, the remote side current general
9454 thread becomes undefined. Considering a case like this:
9455
9456 - We just got here due to a detach.
9457 - The process that we're detaching from happens to immediately
9458 report a global breakpoint being hit in non-stop mode, in the
9459 same thread we had selected before.
9460 - GDB attaches to this process again.
9461 - This event happens to be the next event we handle.
9462
9463 GDB would consider that the current general thread didn't need to
9464 be set on the stub side (with Hg), since for all it knew,
9465 GENERAL_THREAD hadn't changed.
9466
9467 Notice that although in all-stop mode, the remote server always
9468 sets the current thread to the thread reporting the stop event,
9469 that doesn't happen in non-stop mode; in non-stop, the stub *must
9470 not* change the current thread when reporting a breakpoint hit,
9471 due to the decoupling of event reporting and event handling.
9472
9473 To keep things simple, we always invalidate our notion of the
9474 current thread. */
47f8a51d 9475 record_currthread (rs, minus_one_ptid);
dc1981d7 9476
8020350c 9477 /* Call common code to mark the inferior as not running. */
48aa3c27
PA
9478 generic_mourn_inferior ();
9479
d729566a 9480 if (!have_inferiors ())
2d717e4f 9481 {
82f73884
PA
9482 if (!remote_multi_process_p (rs))
9483 {
9484 /* Check whether the target is running now - some remote stubs
9485 automatically restart after kill. */
9486 putpkt ("?");
9487 getpkt (&rs->buf, &rs->buf_size, 0);
9488
9489 if (rs->buf[0] == 'S' || rs->buf[0] == 'T')
9490 {
3e43a32a
MS
9491 /* Assume that the target has been restarted. Set
9492 inferior_ptid so that bits of core GDB realizes
9493 there's something here, e.g., so that the user can
9494 say "kill" again. */
82f73884
PA
9495 inferior_ptid = magic_null_ptid;
9496 }
82f73884 9497 }
2d717e4f
DJ
9498 }
9499}
c906108c 9500
03583c20 9501static int
2bfc0540 9502extended_remote_supports_disable_randomization (struct target_ops *self)
03583c20 9503{
4082afcc 9504 return packet_support (PACKET_QDisableRandomization) == PACKET_ENABLE;
03583c20
UW
9505}
9506
9507static void
9508extended_remote_disable_randomization (int val)
9509{
9510 struct remote_state *rs = get_remote_state ();
9511 char *reply;
9512
bba74b36
YQ
9513 xsnprintf (rs->buf, get_remote_packet_size (), "QDisableRandomization:%x",
9514 val);
03583c20
UW
9515 putpkt (rs->buf);
9516 reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
9517 if (*reply == '\0')
9518 error (_("Target does not support QDisableRandomization."));
9519 if (strcmp (reply, "OK") != 0)
9520 error (_("Bogus QDisableRandomization reply from target: %s"), reply);
9521}
9522
2d717e4f 9523static int
7c5ded6a 9524extended_remote_run (const std::string &args)
2d717e4f
DJ
9525{
9526 struct remote_state *rs = get_remote_state ();
2d717e4f 9527 int len;
94585166 9528 const char *remote_exec_file = get_remote_exec_file ();
c906108c 9529
2d717e4f
DJ
9530 /* If the user has disabled vRun support, or we have detected that
9531 support is not available, do not try it. */
4082afcc 9532 if (packet_support (PACKET_vRun) == PACKET_DISABLE)
2d717e4f 9533 return -1;
424163ea 9534
2d717e4f
DJ
9535 strcpy (rs->buf, "vRun;");
9536 len = strlen (rs->buf);
c906108c 9537
2d717e4f
DJ
9538 if (strlen (remote_exec_file) * 2 + len >= get_remote_packet_size ())
9539 error (_("Remote file name too long for run packet"));
9f1b45b0
TT
9540 len += 2 * bin2hex ((gdb_byte *) remote_exec_file, rs->buf + len,
9541 strlen (remote_exec_file));
2d717e4f 9542
7c5ded6a 9543 if (!args.empty ())
2d717e4f
DJ
9544 {
9545 struct cleanup *back_to;
9546 int i;
9547 char **argv;
9548
7c5ded6a 9549 argv = gdb_buildargv (args.c_str ());
6e366df1 9550 back_to = make_cleanup_freeargv (argv);
2d717e4f
DJ
9551 for (i = 0; argv[i] != NULL; i++)
9552 {
9553 if (strlen (argv[i]) * 2 + 1 + len >= get_remote_packet_size ())
9554 error (_("Argument list too long for run packet"));
9555 rs->buf[len++] = ';';
9f1b45b0
TT
9556 len += 2 * bin2hex ((gdb_byte *) argv[i], rs->buf + len,
9557 strlen (argv[i]));
2d717e4f
DJ
9558 }
9559 do_cleanups (back_to);
9560 }
9561
9562 rs->buf[len++] = '\0';
9563
9564 putpkt (rs->buf);
9565 getpkt (&rs->buf, &rs->buf_size, 0);
9566
4082afcc 9567 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_vRun]))
2d717e4f 9568 {
4082afcc 9569 case PACKET_OK:
3405876a 9570 /* We have a wait response. All is well. */
2d717e4f 9571 return 0;
4082afcc
PA
9572 case PACKET_UNKNOWN:
9573 return -1;
9574 case PACKET_ERROR:
2d717e4f
DJ
9575 if (remote_exec_file[0] == '\0')
9576 error (_("Running the default executable on the remote target failed; "
9577 "try \"set remote exec-file\"?"));
9578 else
9579 error (_("Running \"%s\" on the remote target failed"),
9580 remote_exec_file);
4082afcc
PA
9581 default:
9582 gdb_assert_not_reached (_("bad switch"));
2d717e4f 9583 }
c906108c
SS
9584}
9585
2d717e4f
DJ
9586/* In the extended protocol we want to be able to do things like
9587 "run" and have them basically work as expected. So we need
9588 a special create_inferior function. We support changing the
9589 executable file and the command line arguments, but not the
9590 environment. */
9591
43ff13b4 9592static void
77a19445 9593extended_remote_create_inferior (struct target_ops *ops,
7c5ded6a
SDJ
9594 const char *exec_file,
9595 const std::string &args,
77a19445 9596 char **env, int from_tty)
43ff13b4 9597{
3405876a
PA
9598 int run_worked;
9599 char *stop_reply;
9600 struct remote_state *rs = get_remote_state ();
94585166 9601 const char *remote_exec_file = get_remote_exec_file ();
3405876a 9602
43ff13b4 9603 /* If running asynchronously, register the target file descriptor
23860348 9604 with the event loop. */
75c99385 9605 if (target_can_async_p ())
6a3753b3 9606 target_async (1);
43ff13b4 9607
03583c20 9608 /* Disable address space randomization if requested (and supported). */
2bfc0540 9609 if (extended_remote_supports_disable_randomization (ops))
03583c20
UW
9610 extended_remote_disable_randomization (disable_randomization);
9611
aefd8b33
SDJ
9612 /* If startup-with-shell is on, we inform gdbserver to start the
9613 remote inferior using a shell. */
9614 if (packet_support (PACKET_QStartupWithShell) != PACKET_DISABLE)
9615 {
9616 xsnprintf (rs->buf, get_remote_packet_size (),
9617 "QStartupWithShell:%d", startup_with_shell ? 1 : 0);
9618 putpkt (rs->buf);
9619 getpkt (&rs->buf, &rs->buf_size, 0);
9620 if (strcmp (rs->buf, "OK") != 0)
9621 error (_("\
9622Remote replied unexpectedly while setting startup-with-shell: %s"),
9623 rs->buf);
9624 }
9625
43ff13b4 9626 /* Now restart the remote server. */
3405876a
PA
9627 run_worked = extended_remote_run (args) != -1;
9628 if (!run_worked)
2d717e4f
DJ
9629 {
9630 /* vRun was not supported. Fail if we need it to do what the
9631 user requested. */
9632 if (remote_exec_file[0])
9633 error (_("Remote target does not support \"set remote exec-file\""));
7c5ded6a 9634 if (!args.empty ())
2d717e4f 9635 error (_("Remote target does not support \"set args\" or run <ARGS>"));
43ff13b4 9636
2d717e4f
DJ
9637 /* Fall back to "R". */
9638 extended_remote_restart ();
9639 }
424163ea 9640
6c95b8df
PA
9641 if (!have_inferiors ())
9642 {
9643 /* Clean up from the last time we ran, before we mark the target
9644 running again. This will mark breakpoints uninserted, and
9645 get_offsets may insert breakpoints. */
9646 init_thread_list ();
9647 init_wait_for_inferior ();
9648 }
45280a52 9649
3405876a
PA
9650 /* vRun's success return is a stop reply. */
9651 stop_reply = run_worked ? rs->buf : NULL;
9652 add_current_inferior_and_thread (stop_reply);
c0a2216e 9653
2d717e4f
DJ
9654 /* Get updated offsets, if the stub uses qOffsets. */
9655 get_offsets ();
2d717e4f 9656}
c906108c 9657\f
c5aa993b 9658
b775012e
LM
9659/* Given a location's target info BP_TGT and the packet buffer BUF, output
9660 the list of conditions (in agent expression bytecode format), if any, the
9661 target needs to evaluate. The output is placed into the packet buffer
bba74b36 9662 started from BUF and ended at BUF_END. */
b775012e
LM
9663
9664static int
9665remote_add_target_side_condition (struct gdbarch *gdbarch,
bba74b36
YQ
9666 struct bp_target_info *bp_tgt, char *buf,
9667 char *buf_end)
b775012e 9668{
3cde5c42 9669 if (bp_tgt->conditions.empty ())
b775012e
LM
9670 return 0;
9671
9672 buf += strlen (buf);
bba74b36 9673 xsnprintf (buf, buf_end - buf, "%s", ";");
b775012e
LM
9674 buf++;
9675
83621223 9676 /* Send conditions to the target. */
d538e36d 9677 for (agent_expr *aexpr : bp_tgt->conditions)
b775012e 9678 {
bba74b36 9679 xsnprintf (buf, buf_end - buf, "X%x,", aexpr->len);
b775012e 9680 buf += strlen (buf);
3cde5c42 9681 for (int i = 0; i < aexpr->len; ++i)
b775012e
LM
9682 buf = pack_hex_byte (buf, aexpr->buf[i]);
9683 *buf = '\0';
9684 }
b775012e
LM
9685 return 0;
9686}
9687
d3ce09f5
SS
9688static void
9689remote_add_target_side_commands (struct gdbarch *gdbarch,
9690 struct bp_target_info *bp_tgt, char *buf)
9691{
3cde5c42 9692 if (bp_tgt->tcommands.empty ())
d3ce09f5
SS
9693 return;
9694
9695 buf += strlen (buf);
9696
9697 sprintf (buf, ";cmds:%x,", bp_tgt->persist);
9698 buf += strlen (buf);
9699
9700 /* Concatenate all the agent expressions that are commands into the
9701 cmds parameter. */
df97be55 9702 for (agent_expr *aexpr : bp_tgt->tcommands)
d3ce09f5
SS
9703 {
9704 sprintf (buf, "X%x,", aexpr->len);
9705 buf += strlen (buf);
3cde5c42 9706 for (int i = 0; i < aexpr->len; ++i)
d3ce09f5
SS
9707 buf = pack_hex_byte (buf, aexpr->buf[i]);
9708 *buf = '\0';
9709 }
d3ce09f5
SS
9710}
9711
8181d85f
DJ
9712/* Insert a breakpoint. On targets that have software breakpoint
9713 support, we ask the remote target to do the work; on targets
9714 which don't, we insert a traditional memory breakpoint. */
c906108c
SS
9715
9716static int
3db08215
MM
9717remote_insert_breakpoint (struct target_ops *ops,
9718 struct gdbarch *gdbarch,
a6d9a66e 9719 struct bp_target_info *bp_tgt)
c906108c 9720{
d471ea57
AC
9721 /* Try the "Z" s/w breakpoint packet if it is not already disabled.
9722 If it succeeds, then set the support to PACKET_ENABLE. If it
9723 fails, and the user has explicitly requested the Z support then
23860348 9724 report an error, otherwise, mark it disabled and go on. */
802188a7 9725
4082afcc 9726 if (packet_support (PACKET_Z0) != PACKET_DISABLE)
96baa820 9727 {
0d5ed153 9728 CORE_ADDR addr = bp_tgt->reqstd_address;
4fff2411 9729 struct remote_state *rs;
bba74b36 9730 char *p, *endbuf;
7c0f6dcc 9731 int bpsize;
4fff2411 9732
28439a30
PA
9733 /* Make sure the remote is pointing at the right process, if
9734 necessary. */
9735 if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
9736 set_general_process ();
9737
4fff2411
JZ
9738 rs = get_remote_state ();
9739 p = rs->buf;
bba74b36 9740 endbuf = rs->buf + get_remote_packet_size ();
802188a7 9741
96baa820
JM
9742 *(p++) = 'Z';
9743 *(p++) = '0';
9744 *(p++) = ',';
7c0f6dcc 9745 addr = (ULONGEST) remote_address_masked (addr);
8181d85f 9746 p += hexnumstr (p, addr);
579c6ad9 9747 xsnprintf (p, endbuf - p, ",%d", bp_tgt->kind);
802188a7 9748
efcc2da7 9749 if (remote_supports_cond_breakpoints (ops))
bba74b36 9750 remote_add_target_side_condition (gdbarch, bp_tgt, p, endbuf);
b775012e 9751
78eff0ec 9752 if (remote_can_run_breakpoint_commands (ops))
d3ce09f5
SS
9753 remote_add_target_side_commands (gdbarch, bp_tgt, p);
9754
6d820c5c
DJ
9755 putpkt (rs->buf);
9756 getpkt (&rs->buf, &rs->buf_size, 0);
96baa820 9757
6d820c5c 9758 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0]))
96baa820 9759 {
d471ea57
AC
9760 case PACKET_ERROR:
9761 return -1;
9762 case PACKET_OK:
9763 return 0;
9764 case PACKET_UNKNOWN:
9765 break;
96baa820
JM
9766 }
9767 }
c906108c 9768
0000e5cc
PA
9769 /* If this breakpoint has target-side commands but this stub doesn't
9770 support Z0 packets, throw error. */
3cde5c42 9771 if (!bp_tgt->tcommands.empty ())
0000e5cc
PA
9772 throw_error (NOT_SUPPORTED_ERROR, _("\
9773Target doesn't support breakpoints that have target side commands."));
9774
3db08215 9775 return memory_insert_breakpoint (ops, gdbarch, bp_tgt);
c906108c
SS
9776}
9777
9778static int
3db08215
MM
9779remote_remove_breakpoint (struct target_ops *ops,
9780 struct gdbarch *gdbarch,
73971819
PA
9781 struct bp_target_info *bp_tgt,
9782 enum remove_bp_reason reason)
c906108c 9783{
8181d85f 9784 CORE_ADDR addr = bp_tgt->placed_address;
d01949b6 9785 struct remote_state *rs = get_remote_state ();
96baa820 9786
4082afcc 9787 if (packet_support (PACKET_Z0) != PACKET_DISABLE)
96baa820 9788 {
6d820c5c 9789 char *p = rs->buf;
bba74b36 9790 char *endbuf = rs->buf + get_remote_packet_size ();
802188a7 9791
28439a30
PA
9792 /* Make sure the remote is pointing at the right process, if
9793 necessary. */
9794 if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
9795 set_general_process ();
9796
96baa820
JM
9797 *(p++) = 'z';
9798 *(p++) = '0';
9799 *(p++) = ',';
9800
8181d85f
DJ
9801 addr = (ULONGEST) remote_address_masked (bp_tgt->placed_address);
9802 p += hexnumstr (p, addr);
579c6ad9 9803 xsnprintf (p, endbuf - p, ",%d", bp_tgt->kind);
802188a7 9804
6d820c5c
DJ
9805 putpkt (rs->buf);
9806 getpkt (&rs->buf, &rs->buf_size, 0);
96baa820 9807
6d820c5c 9808 return (rs->buf[0] == 'E');
96baa820
JM
9809 }
9810
73971819 9811 return memory_remove_breakpoint (ops, gdbarch, bp_tgt, reason);
c906108c
SS
9812}
9813
f486487f 9814static enum Z_packet_type
d471ea57
AC
9815watchpoint_to_Z_packet (int type)
9816{
9817 switch (type)
9818 {
9819 case hw_write:
bb858e6a 9820 return Z_PACKET_WRITE_WP;
d471ea57
AC
9821 break;
9822 case hw_read:
bb858e6a 9823 return Z_PACKET_READ_WP;
d471ea57
AC
9824 break;
9825 case hw_access:
bb858e6a 9826 return Z_PACKET_ACCESS_WP;
d471ea57
AC
9827 break;
9828 default:
8e65ff28 9829 internal_error (__FILE__, __LINE__,
e2e0b3e5 9830 _("hw_bp_to_z: bad watchpoint type %d"), type);
d471ea57
AC
9831 }
9832}
9833
3c3bea1c 9834static int
f486487f
SM
9835remote_insert_watchpoint (struct target_ops *self, CORE_ADDR addr, int len,
9836 enum target_hw_bp_type type, struct expression *cond)
96baa820 9837{
d01949b6 9838 struct remote_state *rs = get_remote_state ();
bba74b36 9839 char *endbuf = rs->buf + get_remote_packet_size ();
e514a9d6 9840 char *p;
d471ea57 9841 enum Z_packet_type packet = watchpoint_to_Z_packet (type);
96baa820 9842
4082afcc 9843 if (packet_support (PACKET_Z0 + packet) == PACKET_DISABLE)
85d721b8 9844 return 1;
802188a7 9845
28439a30
PA
9846 /* Make sure the remote is pointing at the right process, if
9847 necessary. */
9848 if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
9849 set_general_process ();
9850
bba74b36 9851 xsnprintf (rs->buf, endbuf - rs->buf, "Z%x,", packet);
6d820c5c 9852 p = strchr (rs->buf, '\0');
96baa820
JM
9853 addr = remote_address_masked (addr);
9854 p += hexnumstr (p, (ULONGEST) addr);
bba74b36 9855 xsnprintf (p, endbuf - p, ",%x", len);
802188a7 9856
6d820c5c
DJ
9857 putpkt (rs->buf);
9858 getpkt (&rs->buf, &rs->buf_size, 0);
96baa820 9859
6d820c5c 9860 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0 + packet]))
d471ea57
AC
9861 {
9862 case PACKET_ERROR:
d471ea57 9863 return -1;
85d721b8
PA
9864 case PACKET_UNKNOWN:
9865 return 1;
d471ea57
AC
9866 case PACKET_OK:
9867 return 0;
9868 }
8e65ff28 9869 internal_error (__FILE__, __LINE__,
e2e0b3e5 9870 _("remote_insert_watchpoint: reached end of function"));
96baa820
JM
9871}
9872
283002cf
MR
9873static int
9874remote_watchpoint_addr_within_range (struct target_ops *target, CORE_ADDR addr,
9875 CORE_ADDR start, int length)
9876{
9877 CORE_ADDR diff = remote_address_masked (addr - start);
9878
9879 return diff < length;
9880}
9881
d471ea57 9882
3c3bea1c 9883static int
f486487f
SM
9884remote_remove_watchpoint (struct target_ops *self, CORE_ADDR addr, int len,
9885 enum target_hw_bp_type type, struct expression *cond)
96baa820 9886{
d01949b6 9887 struct remote_state *rs = get_remote_state ();
bba74b36 9888 char *endbuf = rs->buf + get_remote_packet_size ();
e514a9d6 9889 char *p;
d471ea57
AC
9890 enum Z_packet_type packet = watchpoint_to_Z_packet (type);
9891
4082afcc 9892 if (packet_support (PACKET_Z0 + packet) == PACKET_DISABLE)
5cffb350 9893 return -1;
802188a7 9894
28439a30
PA
9895 /* Make sure the remote is pointing at the right process, if
9896 necessary. */
9897 if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
9898 set_general_process ();
9899
bba74b36 9900 xsnprintf (rs->buf, endbuf - rs->buf, "z%x,", packet);
6d820c5c 9901 p = strchr (rs->buf, '\0');
96baa820
JM
9902 addr = remote_address_masked (addr);
9903 p += hexnumstr (p, (ULONGEST) addr);
bba74b36 9904 xsnprintf (p, endbuf - p, ",%x", len);
6d820c5c
DJ
9905 putpkt (rs->buf);
9906 getpkt (&rs->buf, &rs->buf_size, 0);
96baa820 9907
6d820c5c 9908 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0 + packet]))
d471ea57
AC
9909 {
9910 case PACKET_ERROR:
9911 case PACKET_UNKNOWN:
9912 return -1;
9913 case PACKET_OK:
9914 return 0;
9915 }
8e65ff28 9916 internal_error (__FILE__, __LINE__,
e2e0b3e5 9917 _("remote_remove_watchpoint: reached end of function"));
96baa820
JM
9918}
9919
3c3bea1c 9920
501eef12 9921int remote_hw_watchpoint_limit = -1;
480a3f21 9922int remote_hw_watchpoint_length_limit = -1;
501eef12 9923int remote_hw_breakpoint_limit = -1;
d471ea57 9924
480a3f21 9925static int
31568a15
TT
9926remote_region_ok_for_hw_watchpoint (struct target_ops *self,
9927 CORE_ADDR addr, int len)
480a3f21
PW
9928{
9929 if (remote_hw_watchpoint_length_limit == 0)
9930 return 0;
9931 else if (remote_hw_watchpoint_length_limit < 0)
9932 return 1;
9933 else if (len <= remote_hw_watchpoint_length_limit)
9934 return 1;
9935 else
9936 return 0;
9937}
9938
b9362cc7 9939static int
5461485a 9940remote_check_watch_resources (struct target_ops *self,
f486487f 9941 enum bptype type, int cnt, int ot)
96baa820 9942{
3c3bea1c
GS
9943 if (type == bp_hardware_breakpoint)
9944 {
9945 if (remote_hw_breakpoint_limit == 0)
9946 return 0;
501eef12
AC
9947 else if (remote_hw_breakpoint_limit < 0)
9948 return 1;
3c3bea1c
GS
9949 else if (cnt <= remote_hw_breakpoint_limit)
9950 return 1;
9951 }
9952 else
9953 {
9954 if (remote_hw_watchpoint_limit == 0)
9955 return 0;
501eef12
AC
9956 else if (remote_hw_watchpoint_limit < 0)
9957 return 1;
3c3bea1c
GS
9958 else if (ot)
9959 return -1;
9960 else if (cnt <= remote_hw_watchpoint_limit)
9961 return 1;
9962 }
9963 return -1;
9964}
9965
f7e6eed5
PA
9966/* The to_stopped_by_sw_breakpoint method of target remote. */
9967
9968static int
9969remote_stopped_by_sw_breakpoint (struct target_ops *ops)
9970{
799a2abe 9971 struct thread_info *thread = inferior_thread ();
f7e6eed5 9972
799a2abe
PA
9973 return (thread->priv != NULL
9974 && thread->priv->stop_reason == TARGET_STOPPED_BY_SW_BREAKPOINT);
f7e6eed5
PA
9975}
9976
9977/* The to_supports_stopped_by_sw_breakpoint method of target
9978 remote. */
9979
9980static int
9981remote_supports_stopped_by_sw_breakpoint (struct target_ops *ops)
9982{
f7e6eed5
PA
9983 return (packet_support (PACKET_swbreak_feature) == PACKET_ENABLE);
9984}
9985
9986/* The to_stopped_by_hw_breakpoint method of target remote. */
9987
9988static int
9989remote_stopped_by_hw_breakpoint (struct target_ops *ops)
9990{
799a2abe 9991 struct thread_info *thread = inferior_thread ();
f7e6eed5 9992
799a2abe
PA
9993 return (thread->priv != NULL
9994 && thread->priv->stop_reason == TARGET_STOPPED_BY_HW_BREAKPOINT);
f7e6eed5
PA
9995}
9996
9997/* The to_supports_stopped_by_hw_breakpoint method of target
9998 remote. */
9999
10000static int
10001remote_supports_stopped_by_hw_breakpoint (struct target_ops *ops)
10002{
f7e6eed5
PA
10003 return (packet_support (PACKET_hwbreak_feature) == PACKET_ENABLE);
10004}
10005
b9362cc7 10006static int
6a109b6b 10007remote_stopped_by_watchpoint (struct target_ops *ops)
3c3bea1c 10008{
799a2abe 10009 struct thread_info *thread = inferior_thread ();
ee154bee 10010
799a2abe
PA
10011 return (thread->priv != NULL
10012 && thread->priv->stop_reason == TARGET_STOPPED_BY_WATCHPOINT);
3c3bea1c
GS
10013}
10014
4aa7a7f5
JJ
10015static int
10016remote_stopped_data_address (struct target_ops *target, CORE_ADDR *addr_p)
3c3bea1c 10017{
799a2abe 10018 struct thread_info *thread = inferior_thread ();
a744cf53 10019
799a2abe
PA
10020 if (thread->priv != NULL
10021 && thread->priv->stop_reason == TARGET_STOPPED_BY_WATCHPOINT)
4aa7a7f5 10022 {
799a2abe
PA
10023 *addr_p = thread->priv->watch_data_address;
10024 return 1;
4aa7a7f5
JJ
10025 }
10026
799a2abe 10027 return 0;
3c3bea1c
GS
10028}
10029
10030
10031static int
23a26771 10032remote_insert_hw_breakpoint (struct target_ops *self, struct gdbarch *gdbarch,
a6d9a66e 10033 struct bp_target_info *bp_tgt)
3c3bea1c 10034{
0d5ed153 10035 CORE_ADDR addr = bp_tgt->reqstd_address;
4fff2411 10036 struct remote_state *rs;
bba74b36 10037 char *p, *endbuf;
dd61ec5c 10038 char *message;
3c3bea1c 10039
4082afcc 10040 if (packet_support (PACKET_Z1) == PACKET_DISABLE)
5cffb350 10041 return -1;
2bc416ba 10042
28439a30
PA
10043 /* Make sure the remote is pointing at the right process, if
10044 necessary. */
10045 if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10046 set_general_process ();
10047
4fff2411
JZ
10048 rs = get_remote_state ();
10049 p = rs->buf;
bba74b36 10050 endbuf = rs->buf + get_remote_packet_size ();
4fff2411 10051
96baa820
JM
10052 *(p++) = 'Z';
10053 *(p++) = '1';
10054 *(p++) = ',';
802188a7 10055
0d5ed153 10056 addr = remote_address_masked (addr);
96baa820 10057 p += hexnumstr (p, (ULONGEST) addr);
579c6ad9 10058 xsnprintf (p, endbuf - p, ",%x", bp_tgt->kind);
96baa820 10059
efcc2da7 10060 if (remote_supports_cond_breakpoints (self))
bba74b36 10061 remote_add_target_side_condition (gdbarch, bp_tgt, p, endbuf);
b775012e 10062
78eff0ec 10063 if (remote_can_run_breakpoint_commands (self))
d3ce09f5
SS
10064 remote_add_target_side_commands (gdbarch, bp_tgt, p);
10065
6d820c5c
DJ
10066 putpkt (rs->buf);
10067 getpkt (&rs->buf, &rs->buf_size, 0);
96baa820 10068
6d820c5c 10069 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z1]))
d471ea57
AC
10070 {
10071 case PACKET_ERROR:
dd61ec5c
MW
10072 if (rs->buf[1] == '.')
10073 {
10074 message = strchr (rs->buf + 2, '.');
10075 if (message)
0316657e 10076 error (_("Remote failure reply: %s"), message + 1);
dd61ec5c
MW
10077 }
10078 return -1;
d471ea57
AC
10079 case PACKET_UNKNOWN:
10080 return -1;
10081 case PACKET_OK:
10082 return 0;
10083 }
8e65ff28 10084 internal_error (__FILE__, __LINE__,
e2e0b3e5 10085 _("remote_insert_hw_breakpoint: reached end of function"));
96baa820
JM
10086}
10087
d471ea57 10088
802188a7 10089static int
a64dc96c 10090remote_remove_hw_breakpoint (struct target_ops *self, struct gdbarch *gdbarch,
a6d9a66e 10091 struct bp_target_info *bp_tgt)
96baa820 10092{
8181d85f 10093 CORE_ADDR addr;
d01949b6 10094 struct remote_state *rs = get_remote_state ();
6d820c5c 10095 char *p = rs->buf;
bba74b36 10096 char *endbuf = rs->buf + get_remote_packet_size ();
c8189ed1 10097
4082afcc 10098 if (packet_support (PACKET_Z1) == PACKET_DISABLE)
5cffb350 10099 return -1;
802188a7 10100
28439a30
PA
10101 /* Make sure the remote is pointing at the right process, if
10102 necessary. */
10103 if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10104 set_general_process ();
10105
96baa820
JM
10106 *(p++) = 'z';
10107 *(p++) = '1';
10108 *(p++) = ',';
802188a7 10109
8181d85f 10110 addr = remote_address_masked (bp_tgt->placed_address);
96baa820 10111 p += hexnumstr (p, (ULONGEST) addr);
579c6ad9 10112 xsnprintf (p, endbuf - p, ",%x", bp_tgt->kind);
96baa820 10113
6d820c5c
DJ
10114 putpkt (rs->buf);
10115 getpkt (&rs->buf, &rs->buf_size, 0);
802188a7 10116
6d820c5c 10117 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z1]))
d471ea57
AC
10118 {
10119 case PACKET_ERROR:
10120 case PACKET_UNKNOWN:
10121 return -1;
10122 case PACKET_OK:
10123 return 0;
10124 }
8e65ff28 10125 internal_error (__FILE__, __LINE__,
e2e0b3e5 10126 _("remote_remove_hw_breakpoint: reached end of function"));
96baa820 10127}
96baa820 10128
4a5e7a5b
PA
10129/* Verify memory using the "qCRC:" request. */
10130
10131static int
10132remote_verify_memory (struct target_ops *ops,
10133 const gdb_byte *data, CORE_ADDR lma, ULONGEST size)
10134{
10135 struct remote_state *rs = get_remote_state ();
10136 unsigned long host_crc, target_crc;
10137 char *tmp;
10138
936d2992
PA
10139 /* It doesn't make sense to use qCRC if the remote target is
10140 connected but not running. */
10141 if (target_has_execution && packet_support (PACKET_qCRC) != PACKET_DISABLE)
10142 {
10143 enum packet_result result;
28439a30 10144
936d2992
PA
10145 /* Make sure the remote is pointing at the right process. */
10146 set_general_process ();
4a5e7a5b 10147
936d2992
PA
10148 /* FIXME: assumes lma can fit into long. */
10149 xsnprintf (rs->buf, get_remote_packet_size (), "qCRC:%lx,%lx",
10150 (long) lma, (long) size);
10151 putpkt (rs->buf);
4a5e7a5b 10152
936d2992
PA
10153 /* Be clever; compute the host_crc before waiting for target
10154 reply. */
10155 host_crc = xcrc32 (data, size, 0xffffffff);
10156
10157 getpkt (&rs->buf, &rs->buf_size, 0);
4a5e7a5b 10158
936d2992
PA
10159 result = packet_ok (rs->buf,
10160 &remote_protocol_packets[PACKET_qCRC]);
10161 if (result == PACKET_ERROR)
10162 return -1;
10163 else if (result == PACKET_OK)
10164 {
10165 for (target_crc = 0, tmp = &rs->buf[1]; *tmp; tmp++)
10166 target_crc = target_crc * 16 + fromhex (*tmp);
4a5e7a5b 10167
936d2992
PA
10168 return (host_crc == target_crc);
10169 }
10170 }
4a5e7a5b 10171
936d2992 10172 return simple_verify_memory (ops, data, lma, size);
4a5e7a5b
PA
10173}
10174
c906108c
SS
10175/* compare-sections command
10176
10177 With no arguments, compares each loadable section in the exec bfd
10178 with the same memory range on the target, and reports mismatches.
4a5e7a5b 10179 Useful for verifying the image on the target against the exec file. */
e514a9d6 10180
c906108c 10181static void
fba45db2 10182compare_sections_command (char *args, int from_tty)
c906108c
SS
10183{
10184 asection *s;
c906108c 10185 struct cleanup *old_chain;
948f8e3d 10186 gdb_byte *sectdata;
ce359b09 10187 const char *sectname;
c906108c
SS
10188 bfd_size_type size;
10189 bfd_vma lma;
10190 int matched = 0;
10191 int mismatched = 0;
4a5e7a5b 10192 int res;
95cf3b38 10193 int read_only = 0;
c906108c
SS
10194
10195 if (!exec_bfd)
8a3fe4f8 10196 error (_("command cannot be used without an exec file"));
c906108c 10197
28439a30
PA
10198 /* Make sure the remote is pointing at the right process. */
10199 set_general_process ();
10200
95cf3b38
DT
10201 if (args != NULL && strcmp (args, "-r") == 0)
10202 {
10203 read_only = 1;
10204 args = NULL;
10205 }
10206
c5aa993b 10207 for (s = exec_bfd->sections; s; s = s->next)
c906108c
SS
10208 {
10209 if (!(s->flags & SEC_LOAD))
0df8b418 10210 continue; /* Skip non-loadable section. */
c906108c 10211
95cf3b38
DT
10212 if (read_only && (s->flags & SEC_READONLY) == 0)
10213 continue; /* Skip writeable sections */
10214
2c500098 10215 size = bfd_get_section_size (s);
c906108c 10216 if (size == 0)
0df8b418 10217 continue; /* Skip zero-length section. */
c906108c 10218
ce359b09 10219 sectname = bfd_get_section_name (exec_bfd, s);
c906108c 10220 if (args && strcmp (args, sectname) != 0)
0df8b418 10221 continue; /* Not the section selected by user. */
c906108c 10222
0df8b418 10223 matched = 1; /* Do this section. */
c906108c 10224 lma = s->lma;
c906108c 10225
224c3ddb 10226 sectdata = (gdb_byte *) xmalloc (size);
b8c9b27d 10227 old_chain = make_cleanup (xfree, sectdata);
c906108c 10228 bfd_get_section_contents (exec_bfd, s, sectdata, 0, size);
c906108c 10229
4a5e7a5b
PA
10230 res = target_verify_memory (sectdata, lma, size);
10231
10232 if (res == -1)
5af949e3 10233 error (_("target memory fault, section %s, range %s -- %s"), sectname,
f5656ead
TT
10234 paddress (target_gdbarch (), lma),
10235 paddress (target_gdbarch (), lma + size));
c906108c 10236
5af949e3 10237 printf_filtered ("Section %s, range %s -- %s: ", sectname,
f5656ead
TT
10238 paddress (target_gdbarch (), lma),
10239 paddress (target_gdbarch (), lma + size));
4a5e7a5b 10240 if (res)
c906108c
SS
10241 printf_filtered ("matched.\n");
10242 else
c5aa993b
JM
10243 {
10244 printf_filtered ("MIS-MATCHED!\n");
10245 mismatched++;
10246 }
c906108c
SS
10247
10248 do_cleanups (old_chain);
10249 }
10250 if (mismatched > 0)
936d2992 10251 warning (_("One or more sections of the target image does not match\n\
8a3fe4f8 10252the loaded file\n"));
c906108c 10253 if (args && !matched)
a3f17187 10254 printf_filtered (_("No loaded section named '%s'.\n"), args);
c906108c
SS
10255}
10256
0e7f50da
UW
10257/* Write LEN bytes from WRITEBUF into OBJECT_NAME/ANNEX at OFFSET
10258 into remote target. The number of bytes written to the remote
10259 target is returned, or -1 for error. */
10260
9b409511 10261static enum target_xfer_status
0e7f50da
UW
10262remote_write_qxfer (struct target_ops *ops, const char *object_name,
10263 const char *annex, const gdb_byte *writebuf,
9b409511 10264 ULONGEST offset, LONGEST len, ULONGEST *xfered_len,
0e7f50da
UW
10265 struct packet_config *packet)
10266{
10267 int i, buf_len;
10268 ULONGEST n;
0e7f50da
UW
10269 struct remote_state *rs = get_remote_state ();
10270 int max_size = get_memory_write_packet_size ();
10271
10272 if (packet->support == PACKET_DISABLE)
2ed4b548 10273 return TARGET_XFER_E_IO;
0e7f50da
UW
10274
10275 /* Insert header. */
10276 i = snprintf (rs->buf, max_size,
10277 "qXfer:%s:write:%s:%s:",
10278 object_name, annex ? annex : "",
10279 phex_nz (offset, sizeof offset));
10280 max_size -= (i + 1);
10281
10282 /* Escape as much data as fits into rs->buf. */
10283 buf_len = remote_escape_output
124e13d9 10284 (writebuf, len, 1, (gdb_byte *) rs->buf + i, &max_size, max_size);
0e7f50da
UW
10285
10286 if (putpkt_binary (rs->buf, i + buf_len) < 0
10287 || getpkt_sane (&rs->buf, &rs->buf_size, 0) < 0
10288 || packet_ok (rs->buf, packet) != PACKET_OK)
2ed4b548 10289 return TARGET_XFER_E_IO;
0e7f50da
UW
10290
10291 unpack_varlen_hex (rs->buf, &n);
9b409511
YQ
10292
10293 *xfered_len = n;
10294 return TARGET_XFER_OK;
0e7f50da
UW
10295}
10296
0876f84a
DJ
10297/* Read OBJECT_NAME/ANNEX from the remote target using a qXfer packet.
10298 Data at OFFSET, of up to LEN bytes, is read into READBUF; the
10299 number of bytes read is returned, or 0 for EOF, or -1 for error.
10300 The number of bytes read may be less than LEN without indicating an
10301 EOF. PACKET is checked and updated to indicate whether the remote
10302 target supports this object. */
10303
9b409511 10304static enum target_xfer_status
0876f84a
DJ
10305remote_read_qxfer (struct target_ops *ops, const char *object_name,
10306 const char *annex,
10307 gdb_byte *readbuf, ULONGEST offset, LONGEST len,
9b409511 10308 ULONGEST *xfered_len,
0876f84a
DJ
10309 struct packet_config *packet)
10310{
0876f84a 10311 struct remote_state *rs = get_remote_state ();
0876f84a
DJ
10312 LONGEST i, n, packet_len;
10313
10314 if (packet->support == PACKET_DISABLE)
2ed4b548 10315 return TARGET_XFER_E_IO;
0876f84a
DJ
10316
10317 /* Check whether we've cached an end-of-object packet that matches
10318 this request. */
8e88304f 10319 if (rs->finished_object)
0876f84a 10320 {
8e88304f
TT
10321 if (strcmp (object_name, rs->finished_object) == 0
10322 && strcmp (annex ? annex : "", rs->finished_annex) == 0
10323 && offset == rs->finished_offset)
9b409511
YQ
10324 return TARGET_XFER_EOF;
10325
0876f84a
DJ
10326
10327 /* Otherwise, we're now reading something different. Discard
10328 the cache. */
8e88304f
TT
10329 xfree (rs->finished_object);
10330 xfree (rs->finished_annex);
10331 rs->finished_object = NULL;
10332 rs->finished_annex = NULL;
0876f84a
DJ
10333 }
10334
10335 /* Request only enough to fit in a single packet. The actual data
10336 may not, since we don't know how much of it will need to be escaped;
10337 the target is free to respond with slightly less data. We subtract
10338 five to account for the response type and the protocol frame. */
768adc05 10339 n = std::min<LONGEST> (get_remote_packet_size () - 5, len);
0876f84a
DJ
10340 snprintf (rs->buf, get_remote_packet_size () - 4, "qXfer:%s:read:%s:%s,%s",
10341 object_name, annex ? annex : "",
10342 phex_nz (offset, sizeof offset),
10343 phex_nz (n, sizeof n));
10344 i = putpkt (rs->buf);
10345 if (i < 0)
2ed4b548 10346 return TARGET_XFER_E_IO;
0876f84a
DJ
10347
10348 rs->buf[0] = '\0';
10349 packet_len = getpkt_sane (&rs->buf, &rs->buf_size, 0);
10350 if (packet_len < 0 || packet_ok (rs->buf, packet) != PACKET_OK)
2ed4b548 10351 return TARGET_XFER_E_IO;
0876f84a
DJ
10352
10353 if (rs->buf[0] != 'l' && rs->buf[0] != 'm')
10354 error (_("Unknown remote qXfer reply: %s"), rs->buf);
10355
10356 /* 'm' means there is (or at least might be) more data after this
10357 batch. That does not make sense unless there's at least one byte
10358 of data in this reply. */
10359 if (rs->buf[0] == 'm' && packet_len == 1)
10360 error (_("Remote qXfer reply contained no data."));
10361
10362 /* Got some data. */
bc20a4af
PA
10363 i = remote_unescape_input ((gdb_byte *) rs->buf + 1,
10364 packet_len - 1, readbuf, n);
0876f84a
DJ
10365
10366 /* 'l' is an EOF marker, possibly including a final block of data,
0e7f50da
UW
10367 or possibly empty. If we have the final block of a non-empty
10368 object, record this fact to bypass a subsequent partial read. */
10369 if (rs->buf[0] == 'l' && offset + i > 0)
0876f84a 10370 {
8e88304f
TT
10371 rs->finished_object = xstrdup (object_name);
10372 rs->finished_annex = xstrdup (annex ? annex : "");
10373 rs->finished_offset = offset + i;
0876f84a
DJ
10374 }
10375
9b409511
YQ
10376 if (i == 0)
10377 return TARGET_XFER_EOF;
10378 else
10379 {
10380 *xfered_len = i;
10381 return TARGET_XFER_OK;
10382 }
0876f84a
DJ
10383}
10384
9b409511 10385static enum target_xfer_status
4b8a223f 10386remote_xfer_partial (struct target_ops *ops, enum target_object object,
961cb7b5 10387 const char *annex, gdb_byte *readbuf,
9b409511
YQ
10388 const gdb_byte *writebuf, ULONGEST offset, ULONGEST len,
10389 ULONGEST *xfered_len)
c906108c 10390{
82f73884 10391 struct remote_state *rs;
c906108c 10392 int i;
6d820c5c 10393 char *p2;
1e3ff5ad 10394 char query_type;
124e13d9 10395 int unit_size = gdbarch_addressable_memory_unit_size (target_gdbarch ());
c906108c 10396
e6e4e701 10397 set_remote_traceframe ();
82f73884
PA
10398 set_general_thread (inferior_ptid);
10399
10400 rs = get_remote_state ();
10401
b2182ed2 10402 /* Handle memory using the standard memory routines. */
21e3b9b9
DJ
10403 if (object == TARGET_OBJECT_MEMORY)
10404 {
2d717e4f
DJ
10405 /* If the remote target is connected but not running, we should
10406 pass this request down to a lower stratum (e.g. the executable
10407 file). */
10408 if (!target_has_execution)
9b409511 10409 return TARGET_XFER_EOF;
2d717e4f 10410
21e3b9b9 10411 if (writebuf != NULL)
124e13d9
SM
10412 return remote_write_bytes (offset, writebuf, len, unit_size,
10413 xfered_len);
21e3b9b9 10414 else
124e13d9
SM
10415 return remote_read_bytes (ops, offset, readbuf, len, unit_size,
10416 xfered_len);
21e3b9b9
DJ
10417 }
10418
0df8b418 10419 /* Handle SPU memory using qxfer packets. */
0e7f50da
UW
10420 if (object == TARGET_OBJECT_SPU)
10421 {
10422 if (readbuf)
10423 return remote_read_qxfer (ops, "spu", annex, readbuf, offset, len,
9b409511
YQ
10424 xfered_len, &remote_protocol_packets
10425 [PACKET_qXfer_spu_read]);
0e7f50da
UW
10426 else
10427 return remote_write_qxfer (ops, "spu", annex, writebuf, offset, len,
9b409511
YQ
10428 xfered_len, &remote_protocol_packets
10429 [PACKET_qXfer_spu_write]);
0e7f50da
UW
10430 }
10431
4aa995e1
PA
10432 /* Handle extra signal info using qxfer packets. */
10433 if (object == TARGET_OBJECT_SIGNAL_INFO)
10434 {
10435 if (readbuf)
10436 return remote_read_qxfer (ops, "siginfo", annex, readbuf, offset, len,
9b409511 10437 xfered_len, &remote_protocol_packets
4aa995e1
PA
10438 [PACKET_qXfer_siginfo_read]);
10439 else
3e43a32a 10440 return remote_write_qxfer (ops, "siginfo", annex,
9b409511 10441 writebuf, offset, len, xfered_len,
4aa995e1
PA
10442 &remote_protocol_packets
10443 [PACKET_qXfer_siginfo_write]);
10444 }
10445
0fb4aa4b
PA
10446 if (object == TARGET_OBJECT_STATIC_TRACE_DATA)
10447 {
10448 if (readbuf)
3e43a32a 10449 return remote_read_qxfer (ops, "statictrace", annex,
9b409511 10450 readbuf, offset, len, xfered_len,
0fb4aa4b
PA
10451 &remote_protocol_packets
10452 [PACKET_qXfer_statictrace_read]);
10453 else
2ed4b548 10454 return TARGET_XFER_E_IO;
0fb4aa4b
PA
10455 }
10456
a76d924d
DJ
10457 /* Only handle flash writes. */
10458 if (writebuf != NULL)
10459 {
a76d924d
DJ
10460 switch (object)
10461 {
10462 case TARGET_OBJECT_FLASH:
9b409511
YQ
10463 return remote_flash_write (ops, offset, len, xfered_len,
10464 writebuf);
a76d924d
DJ
10465
10466 default:
2ed4b548 10467 return TARGET_XFER_E_IO;
a76d924d
DJ
10468 }
10469 }
4b8a223f 10470
1e3ff5ad
AC
10471 /* Map pre-existing objects onto letters. DO NOT do this for new
10472 objects!!! Instead specify new query packets. */
10473 switch (object)
c906108c 10474 {
1e3ff5ad
AC
10475 case TARGET_OBJECT_AVR:
10476 query_type = 'R';
10477 break;
802188a7
RM
10478
10479 case TARGET_OBJECT_AUXV:
0876f84a
DJ
10480 gdb_assert (annex == NULL);
10481 return remote_read_qxfer (ops, "auxv", annex, readbuf, offset, len,
9b409511 10482 xfered_len,
0876f84a 10483 &remote_protocol_packets[PACKET_qXfer_auxv]);
802188a7 10484
23181151
DJ
10485 case TARGET_OBJECT_AVAILABLE_FEATURES:
10486 return remote_read_qxfer
9b409511 10487 (ops, "features", annex, readbuf, offset, len, xfered_len,
23181151
DJ
10488 &remote_protocol_packets[PACKET_qXfer_features]);
10489
cfa9d6d9
DJ
10490 case TARGET_OBJECT_LIBRARIES:
10491 return remote_read_qxfer
9b409511 10492 (ops, "libraries", annex, readbuf, offset, len, xfered_len,
cfa9d6d9
DJ
10493 &remote_protocol_packets[PACKET_qXfer_libraries]);
10494
2268b414
JK
10495 case TARGET_OBJECT_LIBRARIES_SVR4:
10496 return remote_read_qxfer
9b409511 10497 (ops, "libraries-svr4", annex, readbuf, offset, len, xfered_len,
2268b414
JK
10498 &remote_protocol_packets[PACKET_qXfer_libraries_svr4]);
10499
fd79ecee
DJ
10500 case TARGET_OBJECT_MEMORY_MAP:
10501 gdb_assert (annex == NULL);
10502 return remote_read_qxfer (ops, "memory-map", annex, readbuf, offset, len,
9b409511 10503 xfered_len,
fd79ecee
DJ
10504 &remote_protocol_packets[PACKET_qXfer_memory_map]);
10505
07e059b5
VP
10506 case TARGET_OBJECT_OSDATA:
10507 /* Should only get here if we're connected. */
5d93a237 10508 gdb_assert (rs->remote_desc);
07e059b5 10509 return remote_read_qxfer
9b409511 10510 (ops, "osdata", annex, readbuf, offset, len, xfered_len,
07e059b5
VP
10511 &remote_protocol_packets[PACKET_qXfer_osdata]);
10512
dc146f7c
VP
10513 case TARGET_OBJECT_THREADS:
10514 gdb_assert (annex == NULL);
10515 return remote_read_qxfer (ops, "threads", annex, readbuf, offset, len,
9b409511 10516 xfered_len,
dc146f7c
VP
10517 &remote_protocol_packets[PACKET_qXfer_threads]);
10518
b3b9301e
PA
10519 case TARGET_OBJECT_TRACEFRAME_INFO:
10520 gdb_assert (annex == NULL);
10521 return remote_read_qxfer
9b409511 10522 (ops, "traceframe-info", annex, readbuf, offset, len, xfered_len,
b3b9301e 10523 &remote_protocol_packets[PACKET_qXfer_traceframe_info]);
78d85199
YQ
10524
10525 case TARGET_OBJECT_FDPIC:
10526 return remote_read_qxfer (ops, "fdpic", annex, readbuf, offset, len,
9b409511 10527 xfered_len,
78d85199 10528 &remote_protocol_packets[PACKET_qXfer_fdpic]);
169081d0
TG
10529
10530 case TARGET_OBJECT_OPENVMS_UIB:
10531 return remote_read_qxfer (ops, "uib", annex, readbuf, offset, len,
9b409511 10532 xfered_len,
169081d0
TG
10533 &remote_protocol_packets[PACKET_qXfer_uib]);
10534
9accd112
MM
10535 case TARGET_OBJECT_BTRACE:
10536 return remote_read_qxfer (ops, "btrace", annex, readbuf, offset, len,
9b409511 10537 xfered_len,
9accd112
MM
10538 &remote_protocol_packets[PACKET_qXfer_btrace]);
10539
f4abbc16
MM
10540 case TARGET_OBJECT_BTRACE_CONF:
10541 return remote_read_qxfer (ops, "btrace-conf", annex, readbuf, offset,
10542 len, xfered_len,
10543 &remote_protocol_packets[PACKET_qXfer_btrace_conf]);
10544
c78fa86a
GB
10545 case TARGET_OBJECT_EXEC_FILE:
10546 return remote_read_qxfer (ops, "exec-file", annex, readbuf, offset,
10547 len, xfered_len,
10548 &remote_protocol_packets[PACKET_qXfer_exec_file]);
10549
1e3ff5ad 10550 default:
2ed4b548 10551 return TARGET_XFER_E_IO;
c906108c
SS
10552 }
10553
0df8b418 10554 /* Minimum outbuf size is get_remote_packet_size (). If LEN is not
24b06219 10555 large enough let the caller deal with it. */
ea9c271d 10556 if (len < get_remote_packet_size ())
2ed4b548 10557 return TARGET_XFER_E_IO;
ea9c271d 10558 len = get_remote_packet_size ();
1e3ff5ad 10559
23860348 10560 /* Except for querying the minimum buffer size, target must be open. */
5d93a237 10561 if (!rs->remote_desc)
8a3fe4f8 10562 error (_("remote query is only available after target open"));
c906108c 10563
1e3ff5ad 10564 gdb_assert (annex != NULL);
4b8a223f 10565 gdb_assert (readbuf != NULL);
c906108c 10566
6d820c5c 10567 p2 = rs->buf;
c906108c
SS
10568 *p2++ = 'q';
10569 *p2++ = query_type;
10570
23860348
MS
10571 /* We used one buffer char for the remote protocol q command and
10572 another for the query type. As the remote protocol encapsulation
10573 uses 4 chars plus one extra in case we are debugging
10574 (remote_debug), we have PBUFZIZ - 7 left to pack the query
10575 string. */
c906108c 10576 i = 0;
ea9c271d 10577 while (annex[i] && (i < (get_remote_packet_size () - 8)))
c906108c 10578 {
1e3ff5ad
AC
10579 /* Bad caller may have sent forbidden characters. */
10580 gdb_assert (isprint (annex[i]) && annex[i] != '$' && annex[i] != '#');
10581 *p2++ = annex[i];
c906108c
SS
10582 i++;
10583 }
1e3ff5ad
AC
10584 *p2 = '\0';
10585 gdb_assert (annex[i] == '\0');
c906108c 10586
6d820c5c 10587 i = putpkt (rs->buf);
c5aa993b 10588 if (i < 0)
2ed4b548 10589 return TARGET_XFER_E_IO;
c906108c 10590
6d820c5c
DJ
10591 getpkt (&rs->buf, &rs->buf_size, 0);
10592 strcpy ((char *) readbuf, rs->buf);
c906108c 10593
9b409511
YQ
10594 *xfered_len = strlen ((char *) readbuf);
10595 return TARGET_XFER_OK;
c906108c
SS
10596}
10597
09c98b44
DB
10598/* Implementation of to_get_memory_xfer_limit. */
10599
10600static ULONGEST
10601remote_get_memory_xfer_limit (struct target_ops *ops)
10602{
10603 return get_memory_write_packet_size ();
10604}
10605
08388c79
DE
10606static int
10607remote_search_memory (struct target_ops* ops,
10608 CORE_ADDR start_addr, ULONGEST search_space_len,
10609 const gdb_byte *pattern, ULONGEST pattern_len,
10610 CORE_ADDR *found_addrp)
10611{
f5656ead 10612 int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
08388c79
DE
10613 struct remote_state *rs = get_remote_state ();
10614 int max_size = get_memory_write_packet_size ();
10615 struct packet_config *packet =
10616 &remote_protocol_packets[PACKET_qSearch_memory];
0df8b418
MS
10617 /* Number of packet bytes used to encode the pattern;
10618 this could be more than PATTERN_LEN due to escape characters. */
08388c79 10619 int escaped_pattern_len;
0df8b418 10620 /* Amount of pattern that was encodable in the packet. */
08388c79
DE
10621 int used_pattern_len;
10622 int i;
10623 int found;
10624 ULONGEST found_addr;
10625
10626 /* Don't go to the target if we don't have to.
10627 This is done before checking packet->support to avoid the possibility that
10628 a success for this edge case means the facility works in general. */
10629 if (pattern_len > search_space_len)
10630 return 0;
10631 if (pattern_len == 0)
10632 {
10633 *found_addrp = start_addr;
10634 return 1;
10635 }
10636
10637 /* If we already know the packet isn't supported, fall back to the simple
10638 way of searching memory. */
10639
4082afcc 10640 if (packet_config_support (packet) == PACKET_DISABLE)
08388c79
DE
10641 {
10642 /* Target doesn't provided special support, fall back and use the
10643 standard support (copy memory and do the search here). */
10644 return simple_search_memory (ops, start_addr, search_space_len,
10645 pattern, pattern_len, found_addrp);
10646 }
10647
28439a30
PA
10648 /* Make sure the remote is pointing at the right process. */
10649 set_general_process ();
10650
08388c79
DE
10651 /* Insert header. */
10652 i = snprintf (rs->buf, max_size,
10653 "qSearch:memory:%s;%s;",
5af949e3 10654 phex_nz (start_addr, addr_size),
08388c79
DE
10655 phex_nz (search_space_len, sizeof (search_space_len)));
10656 max_size -= (i + 1);
10657
10658 /* Escape as much data as fits into rs->buf. */
10659 escaped_pattern_len =
124e13d9 10660 remote_escape_output (pattern, pattern_len, 1, (gdb_byte *) rs->buf + i,
08388c79
DE
10661 &used_pattern_len, max_size);
10662
10663 /* Bail if the pattern is too large. */
10664 if (used_pattern_len != pattern_len)
9b20d036 10665 error (_("Pattern is too large to transmit to remote target."));
08388c79
DE
10666
10667 if (putpkt_binary (rs->buf, i + escaped_pattern_len) < 0
10668 || getpkt_sane (&rs->buf, &rs->buf_size, 0) < 0
10669 || packet_ok (rs->buf, packet) != PACKET_OK)
10670 {
10671 /* The request may not have worked because the command is not
10672 supported. If so, fall back to the simple way. */
10673 if (packet->support == PACKET_DISABLE)
10674 {
10675 return simple_search_memory (ops, start_addr, search_space_len,
10676 pattern, pattern_len, found_addrp);
10677 }
10678 return -1;
10679 }
10680
10681 if (rs->buf[0] == '0')
10682 found = 0;
10683 else if (rs->buf[0] == '1')
10684 {
10685 found = 1;
10686 if (rs->buf[1] != ',')
10e0fa18 10687 error (_("Unknown qSearch:memory reply: %s"), rs->buf);
08388c79
DE
10688 unpack_varlen_hex (rs->buf + 2, &found_addr);
10689 *found_addrp = found_addr;
10690 }
10691 else
10e0fa18 10692 error (_("Unknown qSearch:memory reply: %s"), rs->buf);
08388c79
DE
10693
10694 return found;
10695}
10696
96baa820 10697static void
a30bf1f1 10698remote_rcmd (struct target_ops *self, const char *command,
d9fcf2fb 10699 struct ui_file *outbuf)
96baa820 10700{
d01949b6 10701 struct remote_state *rs = get_remote_state ();
2e9f7625 10702 char *p = rs->buf;
96baa820 10703
5d93a237 10704 if (!rs->remote_desc)
8a3fe4f8 10705 error (_("remote rcmd is only available after target open"));
96baa820 10706
23860348 10707 /* Send a NULL command across as an empty command. */
7be570e7
JM
10708 if (command == NULL)
10709 command = "";
10710
23860348 10711 /* The query prefix. */
2e9f7625
DJ
10712 strcpy (rs->buf, "qRcmd,");
10713 p = strchr (rs->buf, '\0');
96baa820 10714
3e43a32a
MS
10715 if ((strlen (rs->buf) + strlen (command) * 2 + 8/*misc*/)
10716 > get_remote_packet_size ())
8a3fe4f8 10717 error (_("\"monitor\" command ``%s'' is too long."), command);
96baa820 10718
23860348 10719 /* Encode the actual command. */
a30bf1f1 10720 bin2hex ((const gdb_byte *) command, p, strlen (command));
96baa820 10721
6d820c5c 10722 if (putpkt (rs->buf) < 0)
8a3fe4f8 10723 error (_("Communication problem with target."));
96baa820
JM
10724
10725 /* get/display the response */
10726 while (1)
10727 {
2e9f7625
DJ
10728 char *buf;
10729
00bf0b85 10730 /* XXX - see also remote_get_noisy_reply(). */
5b37825d 10731 QUIT; /* Allow user to bail out with ^C. */
2e9f7625 10732 rs->buf[0] = '\0';
5b37825d
PW
10733 if (getpkt_sane (&rs->buf, &rs->buf_size, 0) == -1)
10734 {
10735 /* Timeout. Continue to (try to) read responses.
10736 This is better than stopping with an error, assuming the stub
10737 is still executing the (long) monitor command.
10738 If needed, the user can interrupt gdb using C-c, obtaining
10739 an effect similar to stop on timeout. */
10740 continue;
10741 }
2e9f7625 10742 buf = rs->buf;
96baa820 10743 if (buf[0] == '\0')
8a3fe4f8 10744 error (_("Target does not support this command."));
96baa820
JM
10745 if (buf[0] == 'O' && buf[1] != 'K')
10746 {
23860348 10747 remote_console_output (buf + 1); /* 'O' message from stub. */
96baa820
JM
10748 continue;
10749 }
10750 if (strcmp (buf, "OK") == 0)
10751 break;
7be570e7
JM
10752 if (strlen (buf) == 3 && buf[0] == 'E'
10753 && isdigit (buf[1]) && isdigit (buf[2]))
10754 {
8a3fe4f8 10755 error (_("Protocol error with Rcmd"));
7be570e7 10756 }
96baa820
JM
10757 for (p = buf; p[0] != '\0' && p[1] != '\0'; p += 2)
10758 {
10759 char c = (fromhex (p[0]) << 4) + fromhex (p[1]);
a744cf53 10760
96baa820
JM
10761 fputc_unfiltered (c, outbuf);
10762 }
10763 break;
10764 }
10765}
10766
fd79ecee
DJ
10767static VEC(mem_region_s) *
10768remote_memory_map (struct target_ops *ops)
10769{
10770 VEC(mem_region_s) *result = NULL;
10771 char *text = target_read_stralloc (&current_target,
10772 TARGET_OBJECT_MEMORY_MAP, NULL);
10773
10774 if (text)
10775 {
10776 struct cleanup *back_to = make_cleanup (xfree, text);
a744cf53 10777
fd79ecee
DJ
10778 result = parse_memory_map (text);
10779 do_cleanups (back_to);
10780 }
10781
10782 return result;
10783}
10784
c906108c 10785static void
fba45db2 10786packet_command (char *args, int from_tty)
c906108c 10787{
d01949b6 10788 struct remote_state *rs = get_remote_state ();
c906108c 10789
5d93a237 10790 if (!rs->remote_desc)
8a3fe4f8 10791 error (_("command can only be used with remote target"));
c906108c 10792
c5aa993b 10793 if (!args)
8a3fe4f8 10794 error (_("remote-packet command requires packet text as argument"));
c906108c
SS
10795
10796 puts_filtered ("sending: ");
10797 print_packet (args);
10798 puts_filtered ("\n");
10799 putpkt (args);
10800
6d820c5c 10801 getpkt (&rs->buf, &rs->buf_size, 0);
c906108c 10802 puts_filtered ("received: ");
6d820c5c 10803 print_packet (rs->buf);
c906108c
SS
10804 puts_filtered ("\n");
10805}
10806
10807#if 0
23860348 10808/* --------- UNIT_TEST for THREAD oriented PACKETS ------------------- */
c906108c 10809
a14ed312 10810static void display_thread_info (struct gdb_ext_thread_info *info);
c906108c 10811
a14ed312 10812static void threadset_test_cmd (char *cmd, int tty);
c906108c 10813
a14ed312 10814static void threadalive_test (char *cmd, int tty);
c906108c 10815
a14ed312 10816static void threadlist_test_cmd (char *cmd, int tty);
c906108c 10817
23860348 10818int get_and_display_threadinfo (threadref *ref);
c906108c 10819
a14ed312 10820static void threadinfo_test_cmd (char *cmd, int tty);
c906108c 10821
23860348 10822static int thread_display_step (threadref *ref, void *context);
c906108c 10823
a14ed312 10824static void threadlist_update_test_cmd (char *cmd, int tty);
c906108c 10825
a14ed312 10826static void init_remote_threadtests (void);
c906108c 10827
23860348 10828#define SAMPLE_THREAD 0x05060708 /* Truncated 64 bit threadid. */
c906108c
SS
10829
10830static void
fba45db2 10831threadset_test_cmd (char *cmd, int tty)
c906108c
SS
10832{
10833 int sample_thread = SAMPLE_THREAD;
10834
a3f17187 10835 printf_filtered (_("Remote threadset test\n"));
79d7f229 10836 set_general_thread (sample_thread);
c906108c
SS
10837}
10838
10839
10840static void
fba45db2 10841threadalive_test (char *cmd, int tty)
c906108c
SS
10842{
10843 int sample_thread = SAMPLE_THREAD;
79d7f229 10844 int pid = ptid_get_pid (inferior_ptid);
ba348170 10845 ptid_t ptid = ptid_build (pid, sample_thread, 0);
c906108c 10846
79d7f229 10847 if (remote_thread_alive (ptid))
c906108c
SS
10848 printf_filtered ("PASS: Thread alive test\n");
10849 else
10850 printf_filtered ("FAIL: Thread alive test\n");
10851}
10852
23860348 10853void output_threadid (char *title, threadref *ref);
c906108c
SS
10854
10855void
fba45db2 10856output_threadid (char *title, threadref *ref)
c906108c
SS
10857{
10858 char hexid[20];
10859
23860348 10860 pack_threadid (&hexid[0], ref); /* Convert threead id into hex. */
c906108c
SS
10861 hexid[16] = 0;
10862 printf_filtered ("%s %s\n", title, (&hexid[0]));
10863}
10864
10865static void
fba45db2 10866threadlist_test_cmd (char *cmd, int tty)
c906108c
SS
10867{
10868 int startflag = 1;
10869 threadref nextthread;
10870 int done, result_count;
10871 threadref threadlist[3];
10872
10873 printf_filtered ("Remote Threadlist test\n");
10874 if (!remote_get_threadlist (startflag, &nextthread, 3, &done,
10875 &result_count, &threadlist[0]))
10876 printf_filtered ("FAIL: threadlist test\n");
10877 else
10878 {
10879 threadref *scan = threadlist;
10880 threadref *limit = scan + result_count;
10881
10882 while (scan < limit)
10883 output_threadid (" thread ", scan++);
10884 }
10885}
10886
10887void
fba45db2 10888display_thread_info (struct gdb_ext_thread_info *info)
c906108c
SS
10889{
10890 output_threadid ("Threadid: ", &info->threadid);
10891 printf_filtered ("Name: %s\n ", info->shortname);
10892 printf_filtered ("State: %s\n", info->display);
10893 printf_filtered ("other: %s\n\n", info->more_display);
10894}
10895
10896int
fba45db2 10897get_and_display_threadinfo (threadref *ref)
c906108c
SS
10898{
10899 int result;
10900 int set;
10901 struct gdb_ext_thread_info threadinfo;
10902
10903 set = TAG_THREADID | TAG_EXISTS | TAG_THREADNAME
10904 | TAG_MOREDISPLAY | TAG_DISPLAY;
10905 if (0 != (result = remote_get_threadinfo (ref, set, &threadinfo)))
10906 display_thread_info (&threadinfo);
10907 return result;
10908}
10909
10910static void
fba45db2 10911threadinfo_test_cmd (char *cmd, int tty)
c906108c
SS
10912{
10913 int athread = SAMPLE_THREAD;
10914 threadref thread;
10915 int set;
10916
10917 int_to_threadref (&thread, athread);
10918 printf_filtered ("Remote Threadinfo test\n");
10919 if (!get_and_display_threadinfo (&thread))
10920 printf_filtered ("FAIL cannot get thread info\n");
10921}
10922
10923static int
fba45db2 10924thread_display_step (threadref *ref, void *context)
c906108c
SS
10925{
10926 /* output_threadid(" threadstep ",ref); *//* simple test */
10927 return get_and_display_threadinfo (ref);
10928}
10929
10930static void
fba45db2 10931threadlist_update_test_cmd (char *cmd, int tty)
c906108c
SS
10932{
10933 printf_filtered ("Remote Threadlist update test\n");
10934 remote_threadlist_iterator (thread_display_step, 0, CRAZY_MAX_THREADS);
10935}
10936
10937static void
10938init_remote_threadtests (void)
10939{
3e43a32a
MS
10940 add_com ("tlist", class_obscure, threadlist_test_cmd,
10941 _("Fetch and print the remote list of "
10942 "thread identifiers, one pkt only"));
c906108c 10943 add_com ("tinfo", class_obscure, threadinfo_test_cmd,
1bedd215 10944 _("Fetch and display info about one thread"));
c906108c 10945 add_com ("tset", class_obscure, threadset_test_cmd,
1bedd215 10946 _("Test setting to a different thread"));
c906108c 10947 add_com ("tupd", class_obscure, threadlist_update_test_cmd,
1bedd215 10948 _("Iterate through updating all remote thread info"));
c906108c 10949 add_com ("talive", class_obscure, threadalive_test,
1bedd215 10950 _(" Remote thread alive test "));
c906108c
SS
10951}
10952
10953#endif /* 0 */
10954
f3fb8c85
MS
10955/* Convert a thread ID to a string. Returns the string in a static
10956 buffer. */
10957
7a114964 10958static const char *
117de6a9 10959remote_pid_to_str (struct target_ops *ops, ptid_t ptid)
f3fb8c85 10960{
79d7f229 10961 static char buf[64];
82f73884 10962 struct remote_state *rs = get_remote_state ();
f3fb8c85 10963
7cee1e54
PA
10964 if (ptid_equal (ptid, null_ptid))
10965 return normal_pid_to_str (ptid);
10966 else if (ptid_is_pid (ptid))
ecd0ada5
PA
10967 {
10968 /* Printing an inferior target id. */
10969
10970 /* When multi-process extensions are off, there's no way in the
10971 remote protocol to know the remote process id, if there's any
10972 at all. There's one exception --- when we're connected with
10973 target extended-remote, and we manually attached to a process
10974 with "attach PID". We don't record anywhere a flag that
10975 allows us to distinguish that case from the case of
10976 connecting with extended-remote and the stub already being
10977 attached to a process, and reporting yes to qAttached, hence
10978 no smart special casing here. */
10979 if (!remote_multi_process_p (rs))
10980 {
10981 xsnprintf (buf, sizeof buf, "Remote target");
10982 return buf;
10983 }
10984
10985 return normal_pid_to_str (ptid);
82f73884 10986 }
ecd0ada5 10987 else
79d7f229 10988 {
ecd0ada5
PA
10989 if (ptid_equal (magic_null_ptid, ptid))
10990 xsnprintf (buf, sizeof buf, "Thread <main>");
8020350c 10991 else if (remote_multi_process_p (rs))
de0d863e
DB
10992 if (ptid_get_lwp (ptid) == 0)
10993 return normal_pid_to_str (ptid);
10994 else
10995 xsnprintf (buf, sizeof buf, "Thread %d.%ld",
10996 ptid_get_pid (ptid), ptid_get_lwp (ptid));
ecd0ada5
PA
10997 else
10998 xsnprintf (buf, sizeof buf, "Thread %ld",
ba348170 10999 ptid_get_lwp (ptid));
79d7f229
PA
11000 return buf;
11001 }
f3fb8c85
MS
11002}
11003
38691318
KB
11004/* Get the address of the thread local variable in OBJFILE which is
11005 stored at OFFSET within the thread local storage for thread PTID. */
11006
11007static CORE_ADDR
117de6a9
PA
11008remote_get_thread_local_address (struct target_ops *ops,
11009 ptid_t ptid, CORE_ADDR lm, CORE_ADDR offset)
38691318 11010{
4082afcc 11011 if (packet_support (PACKET_qGetTLSAddr) != PACKET_DISABLE)
38691318
KB
11012 {
11013 struct remote_state *rs = get_remote_state ();
6d820c5c 11014 char *p = rs->buf;
82f73884 11015 char *endp = rs->buf + get_remote_packet_size ();
571dd617 11016 enum packet_result result;
38691318
KB
11017
11018 strcpy (p, "qGetTLSAddr:");
11019 p += strlen (p);
82f73884 11020 p = write_ptid (p, endp, ptid);
38691318
KB
11021 *p++ = ',';
11022 p += hexnumstr (p, offset);
11023 *p++ = ',';
11024 p += hexnumstr (p, lm);
11025 *p++ = '\0';
11026
6d820c5c
DJ
11027 putpkt (rs->buf);
11028 getpkt (&rs->buf, &rs->buf_size, 0);
3e43a32a
MS
11029 result = packet_ok (rs->buf,
11030 &remote_protocol_packets[PACKET_qGetTLSAddr]);
571dd617 11031 if (result == PACKET_OK)
38691318
KB
11032 {
11033 ULONGEST result;
11034
6d820c5c 11035 unpack_varlen_hex (rs->buf, &result);
38691318
KB
11036 return result;
11037 }
571dd617 11038 else if (result == PACKET_UNKNOWN)
109c3e39
AC
11039 throw_error (TLS_GENERIC_ERROR,
11040 _("Remote target doesn't support qGetTLSAddr packet"));
38691318 11041 else
109c3e39
AC
11042 throw_error (TLS_GENERIC_ERROR,
11043 _("Remote target failed to process qGetTLSAddr request"));
38691318
KB
11044 }
11045 else
109c3e39
AC
11046 throw_error (TLS_GENERIC_ERROR,
11047 _("TLS not supported or disabled on this target"));
38691318
KB
11048 /* Not reached. */
11049 return 0;
11050}
11051
711e434b
PM
11052/* Provide thread local base, i.e. Thread Information Block address.
11053 Returns 1 if ptid is found and thread_local_base is non zero. */
11054
70221824 11055static int
bd7ae0f5 11056remote_get_tib_address (struct target_ops *self, ptid_t ptid, CORE_ADDR *addr)
711e434b 11057{
4082afcc 11058 if (packet_support (PACKET_qGetTIBAddr) != PACKET_DISABLE)
711e434b
PM
11059 {
11060 struct remote_state *rs = get_remote_state ();
11061 char *p = rs->buf;
11062 char *endp = rs->buf + get_remote_packet_size ();
11063 enum packet_result result;
11064
11065 strcpy (p, "qGetTIBAddr:");
11066 p += strlen (p);
11067 p = write_ptid (p, endp, ptid);
11068 *p++ = '\0';
11069
11070 putpkt (rs->buf);
11071 getpkt (&rs->buf, &rs->buf_size, 0);
11072 result = packet_ok (rs->buf,
11073 &remote_protocol_packets[PACKET_qGetTIBAddr]);
11074 if (result == PACKET_OK)
11075 {
11076 ULONGEST result;
11077
11078 unpack_varlen_hex (rs->buf, &result);
11079 if (addr)
11080 *addr = (CORE_ADDR) result;
11081 return 1;
11082 }
11083 else if (result == PACKET_UNKNOWN)
11084 error (_("Remote target doesn't support qGetTIBAddr packet"));
11085 else
11086 error (_("Remote target failed to process qGetTIBAddr request"));
11087 }
11088 else
11089 error (_("qGetTIBAddr not supported or disabled on this target"));
11090 /* Not reached. */
11091 return 0;
11092}
11093
29709017
DJ
11094/* Support for inferring a target description based on the current
11095 architecture and the size of a 'g' packet. While the 'g' packet
11096 can have any size (since optional registers can be left off the
11097 end), some sizes are easily recognizable given knowledge of the
11098 approximate architecture. */
11099
11100struct remote_g_packet_guess
11101{
11102 int bytes;
11103 const struct target_desc *tdesc;
11104};
11105typedef struct remote_g_packet_guess remote_g_packet_guess_s;
11106DEF_VEC_O(remote_g_packet_guess_s);
11107
11108struct remote_g_packet_data
11109{
11110 VEC(remote_g_packet_guess_s) *guesses;
11111};
11112
11113static struct gdbarch_data *remote_g_packet_data_handle;
11114
11115static void *
11116remote_g_packet_data_init (struct obstack *obstack)
11117{
11118 return OBSTACK_ZALLOC (obstack, struct remote_g_packet_data);
11119}
11120
11121void
11122register_remote_g_packet_guess (struct gdbarch *gdbarch, int bytes,
11123 const struct target_desc *tdesc)
11124{
11125 struct remote_g_packet_data *data
19ba03f4
SM
11126 = ((struct remote_g_packet_data *)
11127 gdbarch_data (gdbarch, remote_g_packet_data_handle));
29709017
DJ
11128 struct remote_g_packet_guess new_guess, *guess;
11129 int ix;
11130
11131 gdb_assert (tdesc != NULL);
11132
11133 for (ix = 0;
11134 VEC_iterate (remote_g_packet_guess_s, data->guesses, ix, guess);
11135 ix++)
11136 if (guess->bytes == bytes)
11137 internal_error (__FILE__, __LINE__,
9b20d036 11138 _("Duplicate g packet description added for size %d"),
29709017
DJ
11139 bytes);
11140
11141 new_guess.bytes = bytes;
11142 new_guess.tdesc = tdesc;
11143 VEC_safe_push (remote_g_packet_guess_s, data->guesses, &new_guess);
11144}
11145
d962ef82
DJ
11146/* Return 1 if remote_read_description would do anything on this target
11147 and architecture, 0 otherwise. */
11148
11149static int
11150remote_read_description_p (struct target_ops *target)
11151{
11152 struct remote_g_packet_data *data
19ba03f4
SM
11153 = ((struct remote_g_packet_data *)
11154 gdbarch_data (target_gdbarch (), remote_g_packet_data_handle));
d962ef82
DJ
11155
11156 if (!VEC_empty (remote_g_packet_guess_s, data->guesses))
11157 return 1;
11158
11159 return 0;
11160}
11161
29709017
DJ
11162static const struct target_desc *
11163remote_read_description (struct target_ops *target)
11164{
11165 struct remote_g_packet_data *data
19ba03f4
SM
11166 = ((struct remote_g_packet_data *)
11167 gdbarch_data (target_gdbarch (), remote_g_packet_data_handle));
29709017 11168
d962ef82
DJ
11169 /* Do not try this during initial connection, when we do not know
11170 whether there is a running but stopped thread. */
11171 if (!target_has_execution || ptid_equal (inferior_ptid, null_ptid))
2117c711 11172 return target->beneath->to_read_description (target->beneath);
d962ef82 11173
29709017
DJ
11174 if (!VEC_empty (remote_g_packet_guess_s, data->guesses))
11175 {
11176 struct remote_g_packet_guess *guess;
11177 int ix;
11178 int bytes = send_g_packet ();
11179
11180 for (ix = 0;
11181 VEC_iterate (remote_g_packet_guess_s, data->guesses, ix, guess);
11182 ix++)
11183 if (guess->bytes == bytes)
11184 return guess->tdesc;
11185
11186 /* We discard the g packet. A minor optimization would be to
11187 hold on to it, and fill the register cache once we have selected
11188 an architecture, but it's too tricky to do safely. */
11189 }
11190
2117c711 11191 return target->beneath->to_read_description (target->beneath);
29709017
DJ
11192}
11193
a6b151f1
DJ
11194/* Remote file transfer support. This is host-initiated I/O, not
11195 target-initiated; for target-initiated, see remote-fileio.c. */
11196
11197/* If *LEFT is at least the length of STRING, copy STRING to
11198 *BUFFER, update *BUFFER to point to the new end of the buffer, and
11199 decrease *LEFT. Otherwise raise an error. */
11200
11201static void
a121b7c1 11202remote_buffer_add_string (char **buffer, int *left, const char *string)
a6b151f1
DJ
11203{
11204 int len = strlen (string);
11205
11206 if (len > *left)
11207 error (_("Packet too long for target."));
11208
11209 memcpy (*buffer, string, len);
11210 *buffer += len;
11211 *left -= len;
11212
11213 /* NUL-terminate the buffer as a convenience, if there is
11214 room. */
11215 if (*left)
11216 **buffer = '\0';
11217}
11218
11219/* If *LEFT is large enough, hex encode LEN bytes from BYTES into
11220 *BUFFER, update *BUFFER to point to the new end of the buffer, and
11221 decrease *LEFT. Otherwise raise an error. */
11222
11223static void
11224remote_buffer_add_bytes (char **buffer, int *left, const gdb_byte *bytes,
11225 int len)
11226{
11227 if (2 * len > *left)
11228 error (_("Packet too long for target."));
11229
11230 bin2hex (bytes, *buffer, len);
11231 *buffer += 2 * len;
11232 *left -= 2 * len;
11233
11234 /* NUL-terminate the buffer as a convenience, if there is
11235 room. */
11236 if (*left)
11237 **buffer = '\0';
11238}
11239
11240/* If *LEFT is large enough, convert VALUE to hex and add it to
11241 *BUFFER, update *BUFFER to point to the new end of the buffer, and
11242 decrease *LEFT. Otherwise raise an error. */
11243
11244static void
11245remote_buffer_add_int (char **buffer, int *left, ULONGEST value)
11246{
11247 int len = hexnumlen (value);
11248
11249 if (len > *left)
11250 error (_("Packet too long for target."));
11251
11252 hexnumstr (*buffer, value);
11253 *buffer += len;
11254 *left -= len;
11255
11256 /* NUL-terminate the buffer as a convenience, if there is
11257 room. */
11258 if (*left)
11259 **buffer = '\0';
11260}
11261
11262/* Parse an I/O result packet from BUFFER. Set RETCODE to the return
11263 value, *REMOTE_ERRNO to the remote error number or zero if none
11264 was included, and *ATTACHMENT to point to the start of the annex
11265 if any. The length of the packet isn't needed here; there may
11266 be NUL bytes in BUFFER, but they will be after *ATTACHMENT.
11267
11268 Return 0 if the packet could be parsed, -1 if it could not. If
11269 -1 is returned, the other variables may not be initialized. */
11270
11271static int
11272remote_hostio_parse_result (char *buffer, int *retcode,
11273 int *remote_errno, char **attachment)
11274{
11275 char *p, *p2;
11276
11277 *remote_errno = 0;
11278 *attachment = NULL;
11279
11280 if (buffer[0] != 'F')
11281 return -1;
11282
11283 errno = 0;
11284 *retcode = strtol (&buffer[1], &p, 16);
11285 if (errno != 0 || p == &buffer[1])
11286 return -1;
11287
11288 /* Check for ",errno". */
11289 if (*p == ',')
11290 {
11291 errno = 0;
11292 *remote_errno = strtol (p + 1, &p2, 16);
11293 if (errno != 0 || p + 1 == p2)
11294 return -1;
11295 p = p2;
11296 }
11297
11298 /* Check for ";attachment". If there is no attachment, the
11299 packet should end here. */
11300 if (*p == ';')
11301 {
11302 *attachment = p + 1;
11303 return 0;
11304 }
11305 else if (*p == '\0')
11306 return 0;
11307 else
11308 return -1;
11309}
11310
11311/* Send a prepared I/O packet to the target and read its response.
11312 The prepared packet is in the global RS->BUF before this function
11313 is called, and the answer is there when we return.
11314
11315 COMMAND_BYTES is the length of the request to send, which may include
11316 binary data. WHICH_PACKET is the packet configuration to check
11317 before attempting a packet. If an error occurs, *REMOTE_ERRNO
11318 is set to the error number and -1 is returned. Otherwise the value
11319 returned by the function is returned.
11320
11321 ATTACHMENT and ATTACHMENT_LEN should be non-NULL if and only if an
11322 attachment is expected; an error will be reported if there's a
11323 mismatch. If one is found, *ATTACHMENT will be set to point into
11324 the packet buffer and *ATTACHMENT_LEN will be set to the
11325 attachment's length. */
11326
11327static int
11328remote_hostio_send_command (int command_bytes, int which_packet,
11329 int *remote_errno, char **attachment,
11330 int *attachment_len)
11331{
11332 struct remote_state *rs = get_remote_state ();
11333 int ret, bytes_read;
11334 char *attachment_tmp;
11335
5d93a237 11336 if (!rs->remote_desc
4082afcc 11337 || packet_support (which_packet) == PACKET_DISABLE)
a6b151f1
DJ
11338 {
11339 *remote_errno = FILEIO_ENOSYS;
11340 return -1;
11341 }
11342
11343 putpkt_binary (rs->buf, command_bytes);
11344 bytes_read = getpkt_sane (&rs->buf, &rs->buf_size, 0);
11345
11346 /* If it timed out, something is wrong. Don't try to parse the
11347 buffer. */
11348 if (bytes_read < 0)
11349 {
11350 *remote_errno = FILEIO_EINVAL;
11351 return -1;
11352 }
11353
11354 switch (packet_ok (rs->buf, &remote_protocol_packets[which_packet]))
11355 {
11356 case PACKET_ERROR:
11357 *remote_errno = FILEIO_EINVAL;
11358 return -1;
11359 case PACKET_UNKNOWN:
11360 *remote_errno = FILEIO_ENOSYS;
11361 return -1;
11362 case PACKET_OK:
11363 break;
11364 }
11365
11366 if (remote_hostio_parse_result (rs->buf, &ret, remote_errno,
11367 &attachment_tmp))
11368 {
11369 *remote_errno = FILEIO_EINVAL;
11370 return -1;
11371 }
11372
11373 /* Make sure we saw an attachment if and only if we expected one. */
11374 if ((attachment_tmp == NULL && attachment != NULL)
11375 || (attachment_tmp != NULL && attachment == NULL))
11376 {
11377 *remote_errno = FILEIO_EINVAL;
11378 return -1;
11379 }
11380
11381 /* If an attachment was found, it must point into the packet buffer;
11382 work out how many bytes there were. */
11383 if (attachment_tmp != NULL)
11384 {
11385 *attachment = attachment_tmp;
11386 *attachment_len = bytes_read - (*attachment - rs->buf);
11387 }
11388
11389 return ret;
11390}
11391
80152258
PA
11392/* Invalidate the readahead cache. */
11393
11394static void
11395readahead_cache_invalidate (void)
11396{
11397 struct remote_state *rs = get_remote_state ();
11398
11399 rs->readahead_cache.fd = -1;
11400}
11401
11402/* Invalidate the readahead cache if it is holding data for FD. */
11403
11404static void
11405readahead_cache_invalidate_fd (int fd)
11406{
11407 struct remote_state *rs = get_remote_state ();
11408
11409 if (rs->readahead_cache.fd == fd)
11410 rs->readahead_cache.fd = -1;
11411}
11412
15a201c8
GB
11413/* Set the filesystem remote_hostio functions that take FILENAME
11414 arguments will use. Return 0 on success, or -1 if an error
11415 occurs (and set *REMOTE_ERRNO). */
11416
11417static int
11418remote_hostio_set_filesystem (struct inferior *inf, int *remote_errno)
11419{
11420 struct remote_state *rs = get_remote_state ();
11421 int required_pid = (inf == NULL || inf->fake_pid_p) ? 0 : inf->pid;
11422 char *p = rs->buf;
11423 int left = get_remote_packet_size () - 1;
11424 char arg[9];
11425 int ret;
11426
11427 if (packet_support (PACKET_vFile_setfs) == PACKET_DISABLE)
11428 return 0;
11429
11430 if (rs->fs_pid != -1 && required_pid == rs->fs_pid)
11431 return 0;
11432
11433 remote_buffer_add_string (&p, &left, "vFile:setfs:");
11434
11435 xsnprintf (arg, sizeof (arg), "%x", required_pid);
11436 remote_buffer_add_string (&p, &left, arg);
11437
11438 ret = remote_hostio_send_command (p - rs->buf, PACKET_vFile_setfs,
11439 remote_errno, NULL, NULL);
11440
11441 if (packet_support (PACKET_vFile_setfs) == PACKET_DISABLE)
11442 return 0;
11443
11444 if (ret == 0)
11445 rs->fs_pid = required_pid;
11446
11447 return ret;
11448}
11449
12e2a5fd 11450/* Implementation of to_fileio_open. */
a6b151f1
DJ
11451
11452static int
cd897586 11453remote_hostio_open (struct target_ops *self,
07c138c8 11454 struct inferior *inf, const char *filename,
4313b8c0
GB
11455 int flags, int mode, int warn_if_slow,
11456 int *remote_errno)
a6b151f1
DJ
11457{
11458 struct remote_state *rs = get_remote_state ();
11459 char *p = rs->buf;
11460 int left = get_remote_packet_size () - 1;
11461
4313b8c0
GB
11462 if (warn_if_slow)
11463 {
11464 static int warning_issued = 0;
11465
11466 printf_unfiltered (_("Reading %s from remote target...\n"),
11467 filename);
11468
11469 if (!warning_issued)
11470 {
11471 warning (_("File transfers from remote targets can be slow."
11472 " Use \"set sysroot\" to access files locally"
11473 " instead."));
11474 warning_issued = 1;
11475 }
11476 }
11477
15a201c8
GB
11478 if (remote_hostio_set_filesystem (inf, remote_errno) != 0)
11479 return -1;
11480
a6b151f1
DJ
11481 remote_buffer_add_string (&p, &left, "vFile:open:");
11482
11483 remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
11484 strlen (filename));
11485 remote_buffer_add_string (&p, &left, ",");
11486
11487 remote_buffer_add_int (&p, &left, flags);
11488 remote_buffer_add_string (&p, &left, ",");
11489
11490 remote_buffer_add_int (&p, &left, mode);
11491
11492 return remote_hostio_send_command (p - rs->buf, PACKET_vFile_open,
11493 remote_errno, NULL, NULL);
11494}
11495
12e2a5fd 11496/* Implementation of to_fileio_pwrite. */
a6b151f1
DJ
11497
11498static int
0d866f62
TT
11499remote_hostio_pwrite (struct target_ops *self,
11500 int fd, const gdb_byte *write_buf, int len,
a6b151f1
DJ
11501 ULONGEST offset, int *remote_errno)
11502{
11503 struct remote_state *rs = get_remote_state ();
11504 char *p = rs->buf;
11505 int left = get_remote_packet_size ();
11506 int out_len;
11507
80152258
PA
11508 readahead_cache_invalidate_fd (fd);
11509
a6b151f1
DJ
11510 remote_buffer_add_string (&p, &left, "vFile:pwrite:");
11511
11512 remote_buffer_add_int (&p, &left, fd);
11513 remote_buffer_add_string (&p, &left, ",");
11514
11515 remote_buffer_add_int (&p, &left, offset);
11516 remote_buffer_add_string (&p, &left, ",");
11517
124e13d9 11518 p += remote_escape_output (write_buf, len, 1, (gdb_byte *) p, &out_len,
a6b151f1
DJ
11519 get_remote_packet_size () - (p - rs->buf));
11520
11521 return remote_hostio_send_command (p - rs->buf, PACKET_vFile_pwrite,
11522 remote_errno, NULL, NULL);
11523}
11524
80152258
PA
11525/* Helper for the implementation of to_fileio_pread. Read the file
11526 from the remote side with vFile:pread. */
a6b151f1
DJ
11527
11528static int
80152258
PA
11529remote_hostio_pread_vFile (struct target_ops *self,
11530 int fd, gdb_byte *read_buf, int len,
11531 ULONGEST offset, int *remote_errno)
a6b151f1
DJ
11532{
11533 struct remote_state *rs = get_remote_state ();
11534 char *p = rs->buf;
11535 char *attachment;
11536 int left = get_remote_packet_size ();
11537 int ret, attachment_len;
11538 int read_len;
11539
11540 remote_buffer_add_string (&p, &left, "vFile:pread:");
11541
11542 remote_buffer_add_int (&p, &left, fd);
11543 remote_buffer_add_string (&p, &left, ",");
11544
11545 remote_buffer_add_int (&p, &left, len);
11546 remote_buffer_add_string (&p, &left, ",");
11547
11548 remote_buffer_add_int (&p, &left, offset);
11549
11550 ret = remote_hostio_send_command (p - rs->buf, PACKET_vFile_pread,
11551 remote_errno, &attachment,
11552 &attachment_len);
11553
11554 if (ret < 0)
11555 return ret;
11556
bc20a4af 11557 read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len,
a6b151f1
DJ
11558 read_buf, len);
11559 if (read_len != ret)
11560 error (_("Read returned %d, but %d bytes."), ret, (int) read_len);
11561
11562 return ret;
11563}
11564
80152258
PA
11565/* Serve pread from the readahead cache. Returns number of bytes
11566 read, or 0 if the request can't be served from the cache. */
11567
11568static int
11569remote_hostio_pread_from_cache (struct remote_state *rs,
11570 int fd, gdb_byte *read_buf, size_t len,
11571 ULONGEST offset)
11572{
11573 struct readahead_cache *cache = &rs->readahead_cache;
11574
11575 if (cache->fd == fd
11576 && cache->offset <= offset
11577 && offset < cache->offset + cache->bufsize)
11578 {
11579 ULONGEST max = cache->offset + cache->bufsize;
11580
11581 if (offset + len > max)
11582 len = max - offset;
11583
11584 memcpy (read_buf, cache->buf + offset - cache->offset, len);
11585 return len;
11586 }
11587
11588 return 0;
11589}
11590
11591/* Implementation of to_fileio_pread. */
11592
11593static int
11594remote_hostio_pread (struct target_ops *self,
11595 int fd, gdb_byte *read_buf, int len,
11596 ULONGEST offset, int *remote_errno)
11597{
11598 int ret;
11599 struct remote_state *rs = get_remote_state ();
11600 struct readahead_cache *cache = &rs->readahead_cache;
11601
11602 ret = remote_hostio_pread_from_cache (rs, fd, read_buf, len, offset);
11603 if (ret > 0)
11604 {
11605 cache->hit_count++;
11606
11607 if (remote_debug)
11608 fprintf_unfiltered (gdb_stdlog, "readahead cache hit %s\n",
11609 pulongest (cache->hit_count));
11610 return ret;
11611 }
11612
11613 cache->miss_count++;
11614 if (remote_debug)
11615 fprintf_unfiltered (gdb_stdlog, "readahead cache miss %s\n",
11616 pulongest (cache->miss_count));
11617
11618 cache->fd = fd;
11619 cache->offset = offset;
11620 cache->bufsize = get_remote_packet_size ();
224c3ddb 11621 cache->buf = (gdb_byte *) xrealloc (cache->buf, cache->bufsize);
80152258
PA
11622
11623 ret = remote_hostio_pread_vFile (self, cache->fd, cache->buf, cache->bufsize,
11624 cache->offset, remote_errno);
11625 if (ret <= 0)
11626 {
11627 readahead_cache_invalidate_fd (fd);
11628 return ret;
11629 }
11630
11631 cache->bufsize = ret;
11632 return remote_hostio_pread_from_cache (rs, fd, read_buf, len, offset);
11633}
11634
12e2a5fd 11635/* Implementation of to_fileio_close. */
a6b151f1
DJ
11636
11637static int
df39ea25 11638remote_hostio_close (struct target_ops *self, int fd, int *remote_errno)
a6b151f1
DJ
11639{
11640 struct remote_state *rs = get_remote_state ();
11641 char *p = rs->buf;
11642 int left = get_remote_packet_size () - 1;
11643
80152258
PA
11644 readahead_cache_invalidate_fd (fd);
11645
a6b151f1
DJ
11646 remote_buffer_add_string (&p, &left, "vFile:close:");
11647
11648 remote_buffer_add_int (&p, &left, fd);
11649
11650 return remote_hostio_send_command (p - rs->buf, PACKET_vFile_close,
11651 remote_errno, NULL, NULL);
11652}
11653
12e2a5fd 11654/* Implementation of to_fileio_unlink. */
a6b151f1
DJ
11655
11656static int
dbbca37d 11657remote_hostio_unlink (struct target_ops *self,
07c138c8
GB
11658 struct inferior *inf, const char *filename,
11659 int *remote_errno)
a6b151f1
DJ
11660{
11661 struct remote_state *rs = get_remote_state ();
11662 char *p = rs->buf;
11663 int left = get_remote_packet_size () - 1;
11664
15a201c8
GB
11665 if (remote_hostio_set_filesystem (inf, remote_errno) != 0)
11666 return -1;
11667
a6b151f1
DJ
11668 remote_buffer_add_string (&p, &left, "vFile:unlink:");
11669
11670 remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
11671 strlen (filename));
11672
11673 return remote_hostio_send_command (p - rs->buf, PACKET_vFile_unlink,
11674 remote_errno, NULL, NULL);
11675}
11676
12e2a5fd 11677/* Implementation of to_fileio_readlink. */
b9e7b9c3
UW
11678
11679static char *
fab5aa7c 11680remote_hostio_readlink (struct target_ops *self,
07c138c8
GB
11681 struct inferior *inf, const char *filename,
11682 int *remote_errno)
b9e7b9c3
UW
11683{
11684 struct remote_state *rs = get_remote_state ();
11685 char *p = rs->buf;
11686 char *attachment;
11687 int left = get_remote_packet_size ();
11688 int len, attachment_len;
11689 int read_len;
11690 char *ret;
11691
15a201c8
GB
11692 if (remote_hostio_set_filesystem (inf, remote_errno) != 0)
11693 return NULL;
11694
b9e7b9c3
UW
11695 remote_buffer_add_string (&p, &left, "vFile:readlink:");
11696
11697 remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
11698 strlen (filename));
11699
11700 len = remote_hostio_send_command (p - rs->buf, PACKET_vFile_readlink,
11701 remote_errno, &attachment,
11702 &attachment_len);
11703
11704 if (len < 0)
11705 return NULL;
11706
224c3ddb 11707 ret = (char *) xmalloc (len + 1);
b9e7b9c3 11708
bc20a4af
PA
11709 read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len,
11710 (gdb_byte *) ret, len);
b9e7b9c3
UW
11711 if (read_len != len)
11712 error (_("Readlink returned %d, but %d bytes."), len, read_len);
11713
11714 ret[len] = '\0';
11715 return ret;
11716}
11717
12e2a5fd 11718/* Implementation of to_fileio_fstat. */
0a93529c
GB
11719
11720static int
11721remote_hostio_fstat (struct target_ops *self,
11722 int fd, struct stat *st,
11723 int *remote_errno)
11724{
11725 struct remote_state *rs = get_remote_state ();
11726 char *p = rs->buf;
11727 int left = get_remote_packet_size ();
11728 int attachment_len, ret;
11729 char *attachment;
11730 struct fio_stat fst;
11731 int read_len;
11732
464b0089
GB
11733 remote_buffer_add_string (&p, &left, "vFile:fstat:");
11734
11735 remote_buffer_add_int (&p, &left, fd);
11736
11737 ret = remote_hostio_send_command (p - rs->buf, PACKET_vFile_fstat,
11738 remote_errno, &attachment,
11739 &attachment_len);
11740 if (ret < 0)
0a93529c 11741 {
464b0089
GB
11742 if (*remote_errno != FILEIO_ENOSYS)
11743 return ret;
11744
0a93529c
GB
11745 /* Strictly we should return -1, ENOSYS here, but when
11746 "set sysroot remote:" was implemented in August 2008
11747 BFD's need for a stat function was sidestepped with
11748 this hack. This was not remedied until March 2015
11749 so we retain the previous behavior to avoid breaking
11750 compatibility.
11751
11752 Note that the memset is a March 2015 addition; older
11753 GDBs set st_size *and nothing else* so the structure
11754 would have garbage in all other fields. This might
11755 break something but retaining the previous behavior
11756 here would be just too wrong. */
11757
11758 memset (st, 0, sizeof (struct stat));
11759 st->st_size = INT_MAX;
11760 return 0;
11761 }
11762
0a93529c
GB
11763 read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len,
11764 (gdb_byte *) &fst, sizeof (fst));
11765
11766 if (read_len != ret)
11767 error (_("vFile:fstat returned %d, but %d bytes."), ret, read_len);
11768
11769 if (read_len != sizeof (fst))
11770 error (_("vFile:fstat returned %d bytes, but expecting %d."),
11771 read_len, (int) sizeof (fst));
11772
11773 remote_fileio_to_host_stat (&fst, st);
11774
11775 return 0;
11776}
11777
12e2a5fd 11778/* Implementation of to_filesystem_is_local. */
e3dd7556
GB
11779
11780static int
11781remote_filesystem_is_local (struct target_ops *self)
11782{
11783 /* Valgrind GDB presents itself as a remote target but works
11784 on the local filesystem: it does not implement remote get
11785 and users are not expected to set a sysroot. To handle
11786 this case we treat the remote filesystem as local if the
11787 sysroot is exactly TARGET_SYSROOT_PREFIX and if the stub
11788 does not support vFile:open. */
a3be80c3 11789 if (strcmp (gdb_sysroot, TARGET_SYSROOT_PREFIX) == 0)
e3dd7556
GB
11790 {
11791 enum packet_support ps = packet_support (PACKET_vFile_open);
11792
11793 if (ps == PACKET_SUPPORT_UNKNOWN)
11794 {
11795 int fd, remote_errno;
11796
11797 /* Try opening a file to probe support. The supplied
11798 filename is irrelevant, we only care about whether
11799 the stub recognizes the packet or not. */
07c138c8 11800 fd = remote_hostio_open (self, NULL, "just probing",
4313b8c0 11801 FILEIO_O_RDONLY, 0700, 0,
e3dd7556
GB
11802 &remote_errno);
11803
11804 if (fd >= 0)
11805 remote_hostio_close (self, fd, &remote_errno);
11806
11807 ps = packet_support (PACKET_vFile_open);
11808 }
11809
11810 if (ps == PACKET_DISABLE)
11811 {
11812 static int warning_issued = 0;
11813
11814 if (!warning_issued)
11815 {
11816 warning (_("remote target does not support file"
11817 " transfer, attempting to access files"
11818 " from local filesystem."));
11819 warning_issued = 1;
11820 }
11821
11822 return 1;
11823 }
11824 }
11825
11826 return 0;
11827}
11828
a6b151f1
DJ
11829static int
11830remote_fileio_errno_to_host (int errnum)
11831{
11832 switch (errnum)
11833 {
11834 case FILEIO_EPERM:
11835 return EPERM;
11836 case FILEIO_ENOENT:
11837 return ENOENT;
11838 case FILEIO_EINTR:
11839 return EINTR;
11840 case FILEIO_EIO:
11841 return EIO;
11842 case FILEIO_EBADF:
11843 return EBADF;
11844 case FILEIO_EACCES:
11845 return EACCES;
11846 case FILEIO_EFAULT:
11847 return EFAULT;
11848 case FILEIO_EBUSY:
11849 return EBUSY;
11850 case FILEIO_EEXIST:
11851 return EEXIST;
11852 case FILEIO_ENODEV:
11853 return ENODEV;
11854 case FILEIO_ENOTDIR:
11855 return ENOTDIR;
11856 case FILEIO_EISDIR:
11857 return EISDIR;
11858 case FILEIO_EINVAL:
11859 return EINVAL;
11860 case FILEIO_ENFILE:
11861 return ENFILE;
11862 case FILEIO_EMFILE:
11863 return EMFILE;
11864 case FILEIO_EFBIG:
11865 return EFBIG;
11866 case FILEIO_ENOSPC:
11867 return ENOSPC;
11868 case FILEIO_ESPIPE:
11869 return ESPIPE;
11870 case FILEIO_EROFS:
11871 return EROFS;
11872 case FILEIO_ENOSYS:
11873 return ENOSYS;
11874 case FILEIO_ENAMETOOLONG:
11875 return ENAMETOOLONG;
11876 }
11877 return -1;
11878}
11879
11880static char *
11881remote_hostio_error (int errnum)
11882{
11883 int host_error = remote_fileio_errno_to_host (errnum);
11884
11885 if (host_error == -1)
11886 error (_("Unknown remote I/O error %d"), errnum);
11887 else
11888 error (_("Remote I/O error: %s"), safe_strerror (host_error));
11889}
11890
a6b151f1
DJ
11891static void
11892remote_hostio_close_cleanup (void *opaque)
11893{
11894 int fd = *(int *) opaque;
11895 int remote_errno;
11896
df39ea25 11897 remote_hostio_close (find_target_at (process_stratum), fd, &remote_errno);
a6b151f1
DJ
11898}
11899
11900void
11901remote_file_put (const char *local_file, const char *remote_file, int from_tty)
11902{
11903 struct cleanup *back_to, *close_cleanup;
11904 int retcode, fd, remote_errno, bytes, io_size;
11905 FILE *file;
11906 gdb_byte *buffer;
11907 int bytes_in_buffer;
11908 int saw_eof;
11909 ULONGEST offset;
5d93a237 11910 struct remote_state *rs = get_remote_state ();
a6b151f1 11911
5d93a237 11912 if (!rs->remote_desc)
a6b151f1
DJ
11913 error (_("command can only be used with remote target"));
11914
614c279d 11915 file = gdb_fopen_cloexec (local_file, "rb");
a6b151f1
DJ
11916 if (file == NULL)
11917 perror_with_name (local_file);
7c8a8b04 11918 back_to = make_cleanup_fclose (file);
a6b151f1 11919
07c138c8 11920 fd = remote_hostio_open (find_target_at (process_stratum), NULL,
cd897586 11921 remote_file, (FILEIO_O_WRONLY | FILEIO_O_CREAT
a6b151f1 11922 | FILEIO_O_TRUNC),
4313b8c0 11923 0700, 0, &remote_errno);
a6b151f1
DJ
11924 if (fd == -1)
11925 remote_hostio_error (remote_errno);
11926
11927 /* Send up to this many bytes at once. They won't all fit in the
11928 remote packet limit, so we'll transfer slightly fewer. */
11929 io_size = get_remote_packet_size ();
224c3ddb 11930 buffer = (gdb_byte *) xmalloc (io_size);
a6b151f1
DJ
11931 make_cleanup (xfree, buffer);
11932
11933 close_cleanup = make_cleanup (remote_hostio_close_cleanup, &fd);
11934
11935 bytes_in_buffer = 0;
11936 saw_eof = 0;
11937 offset = 0;
11938 while (bytes_in_buffer || !saw_eof)
11939 {
11940 if (!saw_eof)
11941 {
3e43a32a
MS
11942 bytes = fread (buffer + bytes_in_buffer, 1,
11943 io_size - bytes_in_buffer,
a6b151f1
DJ
11944 file);
11945 if (bytes == 0)
11946 {
11947 if (ferror (file))
11948 error (_("Error reading %s."), local_file);
11949 else
11950 {
11951 /* EOF. Unless there is something still in the
11952 buffer from the last iteration, we are done. */
11953 saw_eof = 1;
11954 if (bytes_in_buffer == 0)
11955 break;
11956 }
11957 }
11958 }
11959 else
11960 bytes = 0;
11961
11962 bytes += bytes_in_buffer;
11963 bytes_in_buffer = 0;
11964
0d866f62
TT
11965 retcode = remote_hostio_pwrite (find_target_at (process_stratum),
11966 fd, buffer, bytes,
3e43a32a 11967 offset, &remote_errno);
a6b151f1
DJ
11968
11969 if (retcode < 0)
11970 remote_hostio_error (remote_errno);
11971 else if (retcode == 0)
11972 error (_("Remote write of %d bytes returned 0!"), bytes);
11973 else if (retcode < bytes)
11974 {
11975 /* Short write. Save the rest of the read data for the next
11976 write. */
11977 bytes_in_buffer = bytes - retcode;
11978 memmove (buffer, buffer + retcode, bytes_in_buffer);
11979 }
11980
11981 offset += retcode;
11982 }
11983
11984 discard_cleanups (close_cleanup);
df39ea25 11985 if (remote_hostio_close (find_target_at (process_stratum), fd, &remote_errno))
a6b151f1
DJ
11986 remote_hostio_error (remote_errno);
11987
11988 if (from_tty)
11989 printf_filtered (_("Successfully sent file \"%s\".\n"), local_file);
11990 do_cleanups (back_to);
11991}
11992
11993void
11994remote_file_get (const char *remote_file, const char *local_file, int from_tty)
11995{
11996 struct cleanup *back_to, *close_cleanup;
cea39f65 11997 int fd, remote_errno, bytes, io_size;
a6b151f1
DJ
11998 FILE *file;
11999 gdb_byte *buffer;
12000 ULONGEST offset;
5d93a237 12001 struct remote_state *rs = get_remote_state ();
a6b151f1 12002
5d93a237 12003 if (!rs->remote_desc)
a6b151f1
DJ
12004 error (_("command can only be used with remote target"));
12005
07c138c8 12006 fd = remote_hostio_open (find_target_at (process_stratum), NULL,
4313b8c0
GB
12007 remote_file, FILEIO_O_RDONLY, 0, 0,
12008 &remote_errno);
a6b151f1
DJ
12009 if (fd == -1)
12010 remote_hostio_error (remote_errno);
12011
614c279d 12012 file = gdb_fopen_cloexec (local_file, "wb");
a6b151f1
DJ
12013 if (file == NULL)
12014 perror_with_name (local_file);
7c8a8b04 12015 back_to = make_cleanup_fclose (file);
a6b151f1
DJ
12016
12017 /* Send up to this many bytes at once. They won't all fit in the
12018 remote packet limit, so we'll transfer slightly fewer. */
12019 io_size = get_remote_packet_size ();
224c3ddb 12020 buffer = (gdb_byte *) xmalloc (io_size);
a6b151f1
DJ
12021 make_cleanup (xfree, buffer);
12022
12023 close_cleanup = make_cleanup (remote_hostio_close_cleanup, &fd);
12024
12025 offset = 0;
12026 while (1)
12027 {
a3be983c
TT
12028 bytes = remote_hostio_pread (find_target_at (process_stratum),
12029 fd, buffer, io_size, offset, &remote_errno);
a6b151f1
DJ
12030 if (bytes == 0)
12031 /* Success, but no bytes, means end-of-file. */
12032 break;
12033 if (bytes == -1)
12034 remote_hostio_error (remote_errno);
12035
12036 offset += bytes;
12037
12038 bytes = fwrite (buffer, 1, bytes, file);
12039 if (bytes == 0)
12040 perror_with_name (local_file);
12041 }
12042
12043 discard_cleanups (close_cleanup);
df39ea25 12044 if (remote_hostio_close (find_target_at (process_stratum), fd, &remote_errno))
a6b151f1
DJ
12045 remote_hostio_error (remote_errno);
12046
12047 if (from_tty)
12048 printf_filtered (_("Successfully fetched file \"%s\".\n"), remote_file);
12049 do_cleanups (back_to);
12050}
12051
12052void
12053remote_file_delete (const char *remote_file, int from_tty)
12054{
12055 int retcode, remote_errno;
5d93a237 12056 struct remote_state *rs = get_remote_state ();
a6b151f1 12057
5d93a237 12058 if (!rs->remote_desc)
a6b151f1
DJ
12059 error (_("command can only be used with remote target"));
12060
dbbca37d 12061 retcode = remote_hostio_unlink (find_target_at (process_stratum),
07c138c8 12062 NULL, remote_file, &remote_errno);
a6b151f1
DJ
12063 if (retcode == -1)
12064 remote_hostio_error (remote_errno);
12065
12066 if (from_tty)
12067 printf_filtered (_("Successfully deleted file \"%s\".\n"), remote_file);
12068}
12069
12070static void
12071remote_put_command (char *args, int from_tty)
12072{
12073 struct cleanup *back_to;
12074 char **argv;
12075
d1a41061
PP
12076 if (args == NULL)
12077 error_no_arg (_("file to put"));
12078
12079 argv = gdb_buildargv (args);
a6b151f1
DJ
12080 back_to = make_cleanup_freeargv (argv);
12081 if (argv[0] == NULL || argv[1] == NULL || argv[2] != NULL)
12082 error (_("Invalid parameters to remote put"));
12083
12084 remote_file_put (argv[0], argv[1], from_tty);
12085
12086 do_cleanups (back_to);
12087}
12088
12089static void
12090remote_get_command (char *args, int from_tty)
12091{
12092 struct cleanup *back_to;
12093 char **argv;
12094
d1a41061
PP
12095 if (args == NULL)
12096 error_no_arg (_("file to get"));
12097
12098 argv = gdb_buildargv (args);
a6b151f1
DJ
12099 back_to = make_cleanup_freeargv (argv);
12100 if (argv[0] == NULL || argv[1] == NULL || argv[2] != NULL)
12101 error (_("Invalid parameters to remote get"));
12102
12103 remote_file_get (argv[0], argv[1], from_tty);
12104
12105 do_cleanups (back_to);
12106}
12107
12108static void
12109remote_delete_command (char *args, int from_tty)
12110{
12111 struct cleanup *back_to;
12112 char **argv;
12113
d1a41061
PP
12114 if (args == NULL)
12115 error_no_arg (_("file to delete"));
12116
12117 argv = gdb_buildargv (args);
a6b151f1
DJ
12118 back_to = make_cleanup_freeargv (argv);
12119 if (argv[0] == NULL || argv[1] != NULL)
12120 error (_("Invalid parameters to remote delete"));
12121
12122 remote_file_delete (argv[0], from_tty);
12123
12124 do_cleanups (back_to);
12125}
12126
12127static void
12128remote_command (char *args, int from_tty)
12129{
635c7e8a 12130 help_list (remote_cmdlist, "remote ", all_commands, gdb_stdout);
a6b151f1
DJ
12131}
12132
b2175913 12133static int
19db3e69 12134remote_can_execute_reverse (struct target_ops *self)
b2175913 12135{
4082afcc
PA
12136 if (packet_support (PACKET_bs) == PACKET_ENABLE
12137 || packet_support (PACKET_bc) == PACKET_ENABLE)
40ab02ce
MS
12138 return 1;
12139 else
12140 return 0;
b2175913
MS
12141}
12142
74531fed 12143static int
2a9a2795 12144remote_supports_non_stop (struct target_ops *self)
74531fed
PA
12145{
12146 return 1;
12147}
12148
03583c20 12149static int
2bfc0540 12150remote_supports_disable_randomization (struct target_ops *self)
03583c20
UW
12151{
12152 /* Only supported in extended mode. */
12153 return 0;
12154}
12155
8a305172 12156static int
86ce2668 12157remote_supports_multi_process (struct target_ops *self)
8a305172
PA
12158{
12159 struct remote_state *rs = get_remote_state ();
a744cf53 12160
8020350c 12161 return remote_multi_process_p (rs);
8a305172
PA
12162}
12163
70221824 12164static int
782b2b07
SS
12165remote_supports_cond_tracepoints (void)
12166{
4082afcc 12167 return packet_support (PACKET_ConditionalTracepoints) == PACKET_ENABLE;
782b2b07
SS
12168}
12169
3788aec7 12170static int
efcc2da7 12171remote_supports_cond_breakpoints (struct target_ops *self)
3788aec7 12172{
4082afcc 12173 return packet_support (PACKET_ConditionalBreakpoints) == PACKET_ENABLE;
3788aec7
LM
12174}
12175
70221824 12176static int
7a697b8d
SS
12177remote_supports_fast_tracepoints (void)
12178{
4082afcc 12179 return packet_support (PACKET_FastTracepoints) == PACKET_ENABLE;
7a697b8d
SS
12180}
12181
0fb4aa4b
PA
12182static int
12183remote_supports_static_tracepoints (void)
12184{
4082afcc 12185 return packet_support (PACKET_StaticTracepoints) == PACKET_ENABLE;
0fb4aa4b
PA
12186}
12187
1e4d1764
YQ
12188static int
12189remote_supports_install_in_trace (void)
12190{
4082afcc 12191 return packet_support (PACKET_InstallInTrace) == PACKET_ENABLE;
1e4d1764
YQ
12192}
12193
d248b706 12194static int
7d178d6a 12195remote_supports_enable_disable_tracepoint (struct target_ops *self)
d248b706 12196{
4082afcc
PA
12197 return (packet_support (PACKET_EnableDisableTracepoints_feature)
12198 == PACKET_ENABLE);
d248b706
KY
12199}
12200
3065dfb6 12201static int
6de37a3a 12202remote_supports_string_tracing (struct target_ops *self)
3065dfb6 12203{
4082afcc 12204 return packet_support (PACKET_tracenz_feature) == PACKET_ENABLE;
3065dfb6
SS
12205}
12206
d3ce09f5 12207static int
78eff0ec 12208remote_can_run_breakpoint_commands (struct target_ops *self)
d3ce09f5 12209{
4082afcc 12210 return packet_support (PACKET_BreakpointCommands) == PACKET_ENABLE;
d3ce09f5
SS
12211}
12212
35b1e5cc 12213static void
ecae04e1 12214remote_trace_init (struct target_ops *self)
35b1e5cc
SS
12215{
12216 putpkt ("QTinit");
12217 remote_get_noisy_reply (&target_buf, &target_buf_size);
ad91cd99 12218 if (strcmp (target_buf, "OK") != 0)
35b1e5cc
SS
12219 error (_("Target does not support this command."));
12220}
12221
12222static void free_actions_list (char **actions_list);
12223static void free_actions_list_cleanup_wrapper (void *);
12224static void
12225free_actions_list_cleanup_wrapper (void *al)
12226{
19ba03f4 12227 free_actions_list ((char **) al);
35b1e5cc
SS
12228}
12229
12230static void
12231free_actions_list (char **actions_list)
12232{
12233 int ndx;
12234
12235 if (actions_list == 0)
12236 return;
12237
12238 for (ndx = 0; actions_list[ndx]; ndx++)
12239 xfree (actions_list[ndx]);
12240
12241 xfree (actions_list);
12242}
12243
409873ef
SS
12244/* Recursive routine to walk through command list including loops, and
12245 download packets for each command. */
12246
12247static void
12248remote_download_command_source (int num, ULONGEST addr,
12249 struct command_line *cmds)
12250{
12251 struct remote_state *rs = get_remote_state ();
12252 struct command_line *cmd;
12253
12254 for (cmd = cmds; cmd; cmd = cmd->next)
12255 {
0df8b418 12256 QUIT; /* Allow user to bail out with ^C. */
409873ef
SS
12257 strcpy (rs->buf, "QTDPsrc:");
12258 encode_source_string (num, addr, "cmd", cmd->line,
12259 rs->buf + strlen (rs->buf),
12260 rs->buf_size - strlen (rs->buf));
12261 putpkt (rs->buf);
12262 remote_get_noisy_reply (&target_buf, &target_buf_size);
12263 if (strcmp (target_buf, "OK"))
12264 warning (_("Target does not support source download."));
12265
12266 if (cmd->control_type == while_control
12267 || cmd->control_type == while_stepping_control)
12268 {
12269 remote_download_command_source (num, addr, *cmd->body_list);
12270
0df8b418 12271 QUIT; /* Allow user to bail out with ^C. */
409873ef
SS
12272 strcpy (rs->buf, "QTDPsrc:");
12273 encode_source_string (num, addr, "cmd", "end",
12274 rs->buf + strlen (rs->buf),
12275 rs->buf_size - strlen (rs->buf));
12276 putpkt (rs->buf);
12277 remote_get_noisy_reply (&target_buf, &target_buf_size);
12278 if (strcmp (target_buf, "OK"))
12279 warning (_("Target does not support source download."));
12280 }
12281 }
12282}
12283
35b1e5cc 12284static void
548f7808 12285remote_download_tracepoint (struct target_ops *self, struct bp_location *loc)
35b1e5cc 12286{
bba74b36 12287#define BUF_SIZE 2048
e8ba3115 12288
35b1e5cc 12289 CORE_ADDR tpaddr;
409873ef 12290 char addrbuf[40];
bba74b36 12291 char buf[BUF_SIZE];
35b1e5cc
SS
12292 char **tdp_actions;
12293 char **stepping_actions;
12294 int ndx;
12295 struct cleanup *old_chain = NULL;
35b1e5cc 12296 char *pkt;
e8ba3115 12297 struct breakpoint *b = loc->owner;
d9b3f62e 12298 struct tracepoint *t = (struct tracepoint *) b;
35b1e5cc 12299
dc673c81 12300 encode_actions_rsp (loc, &tdp_actions, &stepping_actions);
e8ba3115
YQ
12301 old_chain = make_cleanup (free_actions_list_cleanup_wrapper,
12302 tdp_actions);
12303 (void) make_cleanup (free_actions_list_cleanup_wrapper,
12304 stepping_actions);
12305
12306 tpaddr = loc->address;
12307 sprintf_vma (addrbuf, tpaddr);
bba74b36
YQ
12308 xsnprintf (buf, BUF_SIZE, "QTDP:%x:%s:%c:%lx:%x", b->number,
12309 addrbuf, /* address */
12310 (b->enable_state == bp_enabled ? 'E' : 'D'),
12311 t->step_count, t->pass_count);
e8ba3115
YQ
12312 /* Fast tracepoints are mostly handled by the target, but we can
12313 tell the target how big of an instruction block should be moved
12314 around. */
12315 if (b->type == bp_fast_tracepoint)
12316 {
12317 /* Only test for support at download time; we may not know
12318 target capabilities at definition time. */
12319 if (remote_supports_fast_tracepoints ())
35b1e5cc 12320 {
6b940e6a
PL
12321 if (gdbarch_fast_tracepoint_valid_at (loc->gdbarch, tpaddr,
12322 NULL))
bba74b36 12323 xsnprintf (buf + strlen (buf), BUF_SIZE - strlen (buf), ":F%x",
6b940e6a 12324 gdb_insn_length (loc->gdbarch, tpaddr));
35b1e5cc 12325 else
e8ba3115
YQ
12326 /* If it passed validation at definition but fails now,
12327 something is very wrong. */
12328 internal_error (__FILE__, __LINE__,
12329 _("Fast tracepoint not "
12330 "valid during download"));
35b1e5cc 12331 }
e8ba3115
YQ
12332 else
12333 /* Fast tracepoints are functionally identical to regular
12334 tracepoints, so don't take lack of support as a reason to
12335 give up on the trace run. */
12336 warning (_("Target does not support fast tracepoints, "
12337 "downloading %d as regular tracepoint"), b->number);
12338 }
12339 else if (b->type == bp_static_tracepoint)
12340 {
12341 /* Only test for support at download time; we may not know
12342 target capabilities at definition time. */
12343 if (remote_supports_static_tracepoints ())
0fb4aa4b 12344 {
e8ba3115 12345 struct static_tracepoint_marker marker;
0fb4aa4b 12346
e8ba3115
YQ
12347 if (target_static_tracepoint_marker_at (tpaddr, &marker))
12348 strcat (buf, ":S");
0fb4aa4b 12349 else
e8ba3115 12350 error (_("Static tracepoint not valid during download"));
0fb4aa4b 12351 }
e8ba3115
YQ
12352 else
12353 /* Fast tracepoints are functionally identical to regular
12354 tracepoints, so don't take lack of support as a reason
12355 to give up on the trace run. */
12356 error (_("Target does not support static tracepoints"));
12357 }
12358 /* If the tracepoint has a conditional, make it into an agent
12359 expression and append to the definition. */
12360 if (loc->cond)
12361 {
12362 /* Only test support at download time, we may not know target
12363 capabilities at definition time. */
12364 if (remote_supports_cond_tracepoints ())
35b1e5cc 12365 {
833177a4 12366 agent_expr_up aexpr = gen_eval_for_expr (tpaddr, loc->cond.get ());
bba74b36
YQ
12367 xsnprintf (buf + strlen (buf), BUF_SIZE - strlen (buf), ":X%x,",
12368 aexpr->len);
e8ba3115
YQ
12369 pkt = buf + strlen (buf);
12370 for (ndx = 0; ndx < aexpr->len; ++ndx)
12371 pkt = pack_hex_byte (pkt, aexpr->buf[ndx]);
12372 *pkt = '\0';
35b1e5cc 12373 }
e8ba3115
YQ
12374 else
12375 warning (_("Target does not support conditional tracepoints, "
12376 "ignoring tp %d cond"), b->number);
12377 }
35b1e5cc 12378
d9b3f62e 12379 if (b->commands || *default_collect)
e8ba3115
YQ
12380 strcat (buf, "-");
12381 putpkt (buf);
12382 remote_get_noisy_reply (&target_buf, &target_buf_size);
12383 if (strcmp (target_buf, "OK"))
12384 error (_("Target does not support tracepoints."));
35b1e5cc 12385
e8ba3115
YQ
12386 /* do_single_steps (t); */
12387 if (tdp_actions)
12388 {
12389 for (ndx = 0; tdp_actions[ndx]; ndx++)
35b1e5cc 12390 {
e8ba3115 12391 QUIT; /* Allow user to bail out with ^C. */
bba74b36
YQ
12392 xsnprintf (buf, BUF_SIZE, "QTDP:-%x:%s:%s%c",
12393 b->number, addrbuf, /* address */
12394 tdp_actions[ndx],
12395 ((tdp_actions[ndx + 1] || stepping_actions)
12396 ? '-' : 0));
e8ba3115
YQ
12397 putpkt (buf);
12398 remote_get_noisy_reply (&target_buf,
12399 &target_buf_size);
12400 if (strcmp (target_buf, "OK"))
12401 error (_("Error on target while setting tracepoints."));
35b1e5cc 12402 }
e8ba3115
YQ
12403 }
12404 if (stepping_actions)
12405 {
12406 for (ndx = 0; stepping_actions[ndx]; ndx++)
35b1e5cc 12407 {
e8ba3115 12408 QUIT; /* Allow user to bail out with ^C. */
bba74b36
YQ
12409 xsnprintf (buf, BUF_SIZE, "QTDP:-%x:%s:%s%s%s",
12410 b->number, addrbuf, /* address */
12411 ((ndx == 0) ? "S" : ""),
12412 stepping_actions[ndx],
12413 (stepping_actions[ndx + 1] ? "-" : ""));
e8ba3115
YQ
12414 putpkt (buf);
12415 remote_get_noisy_reply (&target_buf,
12416 &target_buf_size);
12417 if (strcmp (target_buf, "OK"))
12418 error (_("Error on target while setting tracepoints."));
35b1e5cc 12419 }
e8ba3115 12420 }
409873ef 12421
4082afcc 12422 if (packet_support (PACKET_TracepointSource) == PACKET_ENABLE)
e8ba3115 12423 {
f00aae0f 12424 if (b->location != NULL)
409873ef 12425 {
e8ba3115 12426 strcpy (buf, "QTDPsrc:");
f00aae0f 12427 encode_source_string (b->number, loc->address, "at",
d28cd78a 12428 event_location_to_string (b->location.get ()),
f00aae0f 12429 buf + strlen (buf), 2048 - strlen (buf));
e8ba3115
YQ
12430 putpkt (buf);
12431 remote_get_noisy_reply (&target_buf, &target_buf_size);
12432 if (strcmp (target_buf, "OK"))
12433 warning (_("Target does not support source download."));
409873ef 12434 }
e8ba3115
YQ
12435 if (b->cond_string)
12436 {
12437 strcpy (buf, "QTDPsrc:");
12438 encode_source_string (b->number, loc->address,
12439 "cond", b->cond_string, buf + strlen (buf),
12440 2048 - strlen (buf));
12441 putpkt (buf);
12442 remote_get_noisy_reply (&target_buf, &target_buf_size);
12443 if (strcmp (target_buf, "OK"))
12444 warning (_("Target does not support source download."));
12445 }
12446 remote_download_command_source (b->number, loc->address,
12447 breakpoint_commands (b));
35b1e5cc 12448 }
e8ba3115
YQ
12449
12450 do_cleanups (old_chain);
35b1e5cc
SS
12451}
12452
1e4d1764 12453static int
a52a8357 12454remote_can_download_tracepoint (struct target_ops *self)
1e4d1764 12455{
1e51243a
PA
12456 struct remote_state *rs = get_remote_state ();
12457 struct trace_status *ts;
12458 int status;
12459
12460 /* Don't try to install tracepoints until we've relocated our
12461 symbols, and fetched and merged the target's tracepoint list with
12462 ours. */
12463 if (rs->starting_up)
12464 return 0;
12465
12466 ts = current_trace_status ();
8bd200f1 12467 status = remote_get_trace_status (self, ts);
1e4d1764
YQ
12468
12469 if (status == -1 || !ts->running_known || !ts->running)
12470 return 0;
12471
12472 /* If we are in a tracing experiment, but remote stub doesn't support
12473 installing tracepoint in trace, we have to return. */
12474 if (!remote_supports_install_in_trace ())
12475 return 0;
12476
12477 return 1;
12478}
12479
12480
35b1e5cc 12481static void
559d2b81
TT
12482remote_download_trace_state_variable (struct target_ops *self,
12483 struct trace_state_variable *tsv)
35b1e5cc
SS
12484{
12485 struct remote_state *rs = get_remote_state ();
00bf0b85 12486 char *p;
35b1e5cc 12487
bba74b36
YQ
12488 xsnprintf (rs->buf, get_remote_packet_size (), "QTDV:%x:%s:%x:",
12489 tsv->number, phex ((ULONGEST) tsv->initial_value, 8),
12490 tsv->builtin);
00bf0b85
SS
12491 p = rs->buf + strlen (rs->buf);
12492 if ((p - rs->buf) + strlen (tsv->name) * 2 >= get_remote_packet_size ())
12493 error (_("Trace state variable name too long for tsv definition packet"));
9f1b45b0 12494 p += 2 * bin2hex ((gdb_byte *) (tsv->name), p, strlen (tsv->name));
00bf0b85 12495 *p++ = '\0';
35b1e5cc
SS
12496 putpkt (rs->buf);
12497 remote_get_noisy_reply (&target_buf, &target_buf_size);
ad91cd99
PA
12498 if (*target_buf == '\0')
12499 error (_("Target does not support this command."));
12500 if (strcmp (target_buf, "OK") != 0)
12501 error (_("Error on target while downloading trace state variable."));
35b1e5cc
SS
12502}
12503
d248b706 12504static void
46670d57
TT
12505remote_enable_tracepoint (struct target_ops *self,
12506 struct bp_location *location)
d248b706
KY
12507{
12508 struct remote_state *rs = get_remote_state ();
12509 char addr_buf[40];
12510
12511 sprintf_vma (addr_buf, location->address);
bba74b36
YQ
12512 xsnprintf (rs->buf, get_remote_packet_size (), "QTEnable:%x:%s",
12513 location->owner->number, addr_buf);
d248b706
KY
12514 putpkt (rs->buf);
12515 remote_get_noisy_reply (&rs->buf, &rs->buf_size);
12516 if (*rs->buf == '\0')
12517 error (_("Target does not support enabling tracepoints while a trace run is ongoing."));
12518 if (strcmp (rs->buf, "OK") != 0)
12519 error (_("Error on target while enabling tracepoint."));
12520}
12521
12522static void
780b049c
TT
12523remote_disable_tracepoint (struct target_ops *self,
12524 struct bp_location *location)
d248b706
KY
12525{
12526 struct remote_state *rs = get_remote_state ();
12527 char addr_buf[40];
12528
12529 sprintf_vma (addr_buf, location->address);
bba74b36
YQ
12530 xsnprintf (rs->buf, get_remote_packet_size (), "QTDisable:%x:%s",
12531 location->owner->number, addr_buf);
d248b706
KY
12532 putpkt (rs->buf);
12533 remote_get_noisy_reply (&rs->buf, &rs->buf_size);
12534 if (*rs->buf == '\0')
12535 error (_("Target does not support disabling tracepoints while a trace run is ongoing."));
12536 if (strcmp (rs->buf, "OK") != 0)
12537 error (_("Error on target while disabling tracepoint."));
12538}
12539
35b1e5cc 12540static void
583f9a86 12541remote_trace_set_readonly_regions (struct target_ops *self)
35b1e5cc
SS
12542{
12543 asection *s;
81b9b86e 12544 bfd *abfd = NULL;
35b1e5cc 12545 bfd_size_type size;
608bcef2 12546 bfd_vma vma;
35b1e5cc 12547 int anysecs = 0;
c2fa21f1 12548 int offset = 0;
35b1e5cc
SS
12549
12550 if (!exec_bfd)
12551 return; /* No information to give. */
12552
12553 strcpy (target_buf, "QTro");
9779ab84 12554 offset = strlen (target_buf);
35b1e5cc
SS
12555 for (s = exec_bfd->sections; s; s = s->next)
12556 {
12557 char tmp1[40], tmp2[40];
c2fa21f1 12558 int sec_length;
35b1e5cc
SS
12559
12560 if ((s->flags & SEC_LOAD) == 0 ||
0df8b418 12561 /* (s->flags & SEC_CODE) == 0 || */
35b1e5cc
SS
12562 (s->flags & SEC_READONLY) == 0)
12563 continue;
12564
12565 anysecs = 1;
81b9b86e 12566 vma = bfd_get_section_vma (abfd, s);
35b1e5cc 12567 size = bfd_get_section_size (s);
608bcef2
HZ
12568 sprintf_vma (tmp1, vma);
12569 sprintf_vma (tmp2, vma + size);
c2fa21f1
HZ
12570 sec_length = 1 + strlen (tmp1) + 1 + strlen (tmp2);
12571 if (offset + sec_length + 1 > target_buf_size)
12572 {
4082afcc 12573 if (packet_support (PACKET_qXfer_traceframe_info) != PACKET_ENABLE)
864ac8a7 12574 warning (_("\
c2fa21f1
HZ
12575Too many sections for read-only sections definition packet."));
12576 break;
12577 }
bba74b36
YQ
12578 xsnprintf (target_buf + offset, target_buf_size - offset, ":%s,%s",
12579 tmp1, tmp2);
c2fa21f1 12580 offset += sec_length;
35b1e5cc
SS
12581 }
12582 if (anysecs)
12583 {
12584 putpkt (target_buf);
12585 getpkt (&target_buf, &target_buf_size, 0);
12586 }
12587}
12588
12589static void
e2d1aae3 12590remote_trace_start (struct target_ops *self)
35b1e5cc
SS
12591{
12592 putpkt ("QTStart");
12593 remote_get_noisy_reply (&target_buf, &target_buf_size);
ad91cd99
PA
12594 if (*target_buf == '\0')
12595 error (_("Target does not support this command."));
12596 if (strcmp (target_buf, "OK") != 0)
35b1e5cc
SS
12597 error (_("Bogus reply from target: %s"), target_buf);
12598}
12599
12600static int
8bd200f1 12601remote_get_trace_status (struct target_ops *self, struct trace_status *ts)
35b1e5cc 12602{
953b98d1 12603 /* Initialize it just to avoid a GCC false warning. */
f652de6f 12604 char *p = NULL;
0df8b418 12605 /* FIXME we need to get register block size some other way. */
00bf0b85 12606 extern int trace_regblock_size;
bd3eecc3
PA
12607 enum packet_result result;
12608
4082afcc 12609 if (packet_support (PACKET_qTStatus) == PACKET_DISABLE)
bd3eecc3 12610 return -1;
a744cf53 12611
00bf0b85
SS
12612 trace_regblock_size = get_remote_arch_state ()->sizeof_g_packet;
12613
049dc89b
JK
12614 putpkt ("qTStatus");
12615
492d29ea 12616 TRY
67f41397
JK
12617 {
12618 p = remote_get_noisy_reply (&target_buf, &target_buf_size);
12619 }
492d29ea 12620 CATCH (ex, RETURN_MASK_ERROR)
67f41397 12621 {
598d3636
JK
12622 if (ex.error != TARGET_CLOSE_ERROR)
12623 {
12624 exception_fprintf (gdb_stderr, ex, "qTStatus: ");
12625 return -1;
12626 }
12627 throw_exception (ex);
67f41397 12628 }
492d29ea 12629 END_CATCH
00bf0b85 12630
bd3eecc3
PA
12631 result = packet_ok (p, &remote_protocol_packets[PACKET_qTStatus]);
12632
00bf0b85 12633 /* If the remote target doesn't do tracing, flag it. */
bd3eecc3 12634 if (result == PACKET_UNKNOWN)
00bf0b85 12635 return -1;
35b1e5cc 12636
00bf0b85 12637 /* We're working with a live target. */
f5911ea1 12638 ts->filename = NULL;
00bf0b85 12639
00bf0b85 12640 if (*p++ != 'T')
35b1e5cc
SS
12641 error (_("Bogus trace status reply from target: %s"), target_buf);
12642
84cebc4a
YQ
12643 /* Function 'parse_trace_status' sets default value of each field of
12644 'ts' at first, so we don't have to do it here. */
00bf0b85
SS
12645 parse_trace_status (p, ts);
12646
12647 return ts->running;
35b1e5cc
SS
12648}
12649
70221824 12650static void
db90e85c 12651remote_get_tracepoint_status (struct target_ops *self, struct breakpoint *bp,
f196051f
SS
12652 struct uploaded_tp *utp)
12653{
12654 struct remote_state *rs = get_remote_state ();
f196051f
SS
12655 char *reply;
12656 struct bp_location *loc;
12657 struct tracepoint *tp = (struct tracepoint *) bp;
bba74b36 12658 size_t size = get_remote_packet_size ();
f196051f
SS
12659
12660 if (tp)
12661 {
c1fc2657 12662 tp->hit_count = 0;
f196051f 12663 tp->traceframe_usage = 0;
c1fc2657 12664 for (loc = tp->loc; loc; loc = loc->next)
f196051f
SS
12665 {
12666 /* If the tracepoint was never downloaded, don't go asking for
12667 any status. */
12668 if (tp->number_on_target == 0)
12669 continue;
bba74b36
YQ
12670 xsnprintf (rs->buf, size, "qTP:%x:%s", tp->number_on_target,
12671 phex_nz (loc->address, 0));
f196051f
SS
12672 putpkt (rs->buf);
12673 reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
12674 if (reply && *reply)
12675 {
12676 if (*reply == 'V')
12677 parse_tracepoint_status (reply + 1, bp, utp);
12678 }
12679 }
12680 }
12681 else if (utp)
12682 {
12683 utp->hit_count = 0;
12684 utp->traceframe_usage = 0;
bba74b36
YQ
12685 xsnprintf (rs->buf, size, "qTP:%x:%s", utp->number,
12686 phex_nz (utp->addr, 0));
f196051f
SS
12687 putpkt (rs->buf);
12688 reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
12689 if (reply && *reply)
12690 {
12691 if (*reply == 'V')
12692 parse_tracepoint_status (reply + 1, bp, utp);
12693 }
12694 }
12695}
12696
35b1e5cc 12697static void
74499f1b 12698remote_trace_stop (struct target_ops *self)
35b1e5cc
SS
12699{
12700 putpkt ("QTStop");
12701 remote_get_noisy_reply (&target_buf, &target_buf_size);
ad91cd99
PA
12702 if (*target_buf == '\0')
12703 error (_("Target does not support this command."));
12704 if (strcmp (target_buf, "OK") != 0)
35b1e5cc
SS
12705 error (_("Bogus reply from target: %s"), target_buf);
12706}
12707
12708static int
bd4c6793
TT
12709remote_trace_find (struct target_ops *self,
12710 enum trace_find_type type, int num,
cc5925ad 12711 CORE_ADDR addr1, CORE_ADDR addr2,
35b1e5cc
SS
12712 int *tpp)
12713{
12714 struct remote_state *rs = get_remote_state ();
bba74b36 12715 char *endbuf = rs->buf + get_remote_packet_size ();
35b1e5cc
SS
12716 char *p, *reply;
12717 int target_frameno = -1, target_tracept = -1;
12718
e6e4e701
PA
12719 /* Lookups other than by absolute frame number depend on the current
12720 trace selected, so make sure it is correct on the remote end
12721 first. */
12722 if (type != tfind_number)
12723 set_remote_traceframe ();
12724
35b1e5cc
SS
12725 p = rs->buf;
12726 strcpy (p, "QTFrame:");
12727 p = strchr (p, '\0');
12728 switch (type)
12729 {
12730 case tfind_number:
bba74b36 12731 xsnprintf (p, endbuf - p, "%x", num);
35b1e5cc
SS
12732 break;
12733 case tfind_pc:
bba74b36 12734 xsnprintf (p, endbuf - p, "pc:%s", phex_nz (addr1, 0));
35b1e5cc
SS
12735 break;
12736 case tfind_tp:
bba74b36 12737 xsnprintf (p, endbuf - p, "tdp:%x", num);
35b1e5cc
SS
12738 break;
12739 case tfind_range:
bba74b36
YQ
12740 xsnprintf (p, endbuf - p, "range:%s:%s", phex_nz (addr1, 0),
12741 phex_nz (addr2, 0));
35b1e5cc
SS
12742 break;
12743 case tfind_outside:
bba74b36
YQ
12744 xsnprintf (p, endbuf - p, "outside:%s:%s", phex_nz (addr1, 0),
12745 phex_nz (addr2, 0));
35b1e5cc
SS
12746 break;
12747 default:
9b20d036 12748 error (_("Unknown trace find type %d"), type);
35b1e5cc
SS
12749 }
12750
12751 putpkt (rs->buf);
2f65bcb7 12752 reply = remote_get_noisy_reply (&(rs->buf), &rs->buf_size);
ad91cd99
PA
12753 if (*reply == '\0')
12754 error (_("Target does not support this command."));
35b1e5cc
SS
12755
12756 while (reply && *reply)
12757 switch (*reply)
12758 {
12759 case 'F':
f197e0f1
VP
12760 p = ++reply;
12761 target_frameno = (int) strtol (p, &reply, 16);
12762 if (reply == p)
12763 error (_("Unable to parse trace frame number"));
e6e4e701
PA
12764 /* Don't update our remote traceframe number cache on failure
12765 to select a remote traceframe. */
f197e0f1
VP
12766 if (target_frameno == -1)
12767 return -1;
35b1e5cc
SS
12768 break;
12769 case 'T':
f197e0f1
VP
12770 p = ++reply;
12771 target_tracept = (int) strtol (p, &reply, 16);
12772 if (reply == p)
12773 error (_("Unable to parse tracepoint number"));
35b1e5cc
SS
12774 break;
12775 case 'O': /* "OK"? */
12776 if (reply[1] == 'K' && reply[2] == '\0')
12777 reply += 2;
12778 else
12779 error (_("Bogus reply from target: %s"), reply);
12780 break;
12781 default:
12782 error (_("Bogus reply from target: %s"), reply);
12783 }
12784 if (tpp)
12785 *tpp = target_tracept;
e6e4e701 12786
262e1174 12787 rs->remote_traceframe_number = target_frameno;
35b1e5cc
SS
12788 return target_frameno;
12789}
12790
12791static int
4011015b
TT
12792remote_get_trace_state_variable_value (struct target_ops *self,
12793 int tsvnum, LONGEST *val)
35b1e5cc
SS
12794{
12795 struct remote_state *rs = get_remote_state ();
12796 char *reply;
12797 ULONGEST uval;
12798
e6e4e701
PA
12799 set_remote_traceframe ();
12800
bba74b36 12801 xsnprintf (rs->buf, get_remote_packet_size (), "qTV:%x", tsvnum);
35b1e5cc
SS
12802 putpkt (rs->buf);
12803 reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
12804 if (reply && *reply)
12805 {
12806 if (*reply == 'V')
12807 {
12808 unpack_varlen_hex (reply + 1, &uval);
12809 *val = (LONGEST) uval;
12810 return 1;
12811 }
12812 }
12813 return 0;
12814}
12815
00bf0b85 12816static int
dc3decaf 12817remote_save_trace_data (struct target_ops *self, const char *filename)
00bf0b85
SS
12818{
12819 struct remote_state *rs = get_remote_state ();
12820 char *p, *reply;
12821
12822 p = rs->buf;
12823 strcpy (p, "QTSave:");
12824 p += strlen (p);
12825 if ((p - rs->buf) + strlen (filename) * 2 >= get_remote_packet_size ())
12826 error (_("Remote file name too long for trace save packet"));
9f1b45b0 12827 p += 2 * bin2hex ((gdb_byte *) filename, p, strlen (filename));
00bf0b85
SS
12828 *p++ = '\0';
12829 putpkt (rs->buf);
ad91cd99 12830 reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
d6c5869f 12831 if (*reply == '\0')
ad91cd99
PA
12832 error (_("Target does not support this command."));
12833 if (strcmp (reply, "OK") != 0)
12834 error (_("Bogus reply from target: %s"), reply);
00bf0b85
SS
12835 return 0;
12836}
12837
12838/* This is basically a memory transfer, but needs to be its own packet
12839 because we don't know how the target actually organizes its trace
12840 memory, plus we want to be able to ask for as much as possible, but
12841 not be unhappy if we don't get as much as we ask for. */
12842
12843static LONGEST
88ee6f45
TT
12844remote_get_raw_trace_data (struct target_ops *self,
12845 gdb_byte *buf, ULONGEST offset, LONGEST len)
00bf0b85
SS
12846{
12847 struct remote_state *rs = get_remote_state ();
12848 char *reply;
12849 char *p;
12850 int rslt;
12851
12852 p = rs->buf;
12853 strcpy (p, "qTBuffer:");
12854 p += strlen (p);
12855 p += hexnumstr (p, offset);
12856 *p++ = ',';
12857 p += hexnumstr (p, len);
12858 *p++ = '\0';
12859
12860 putpkt (rs->buf);
12861 reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
12862 if (reply && *reply)
12863 {
12864 /* 'l' by itself means we're at the end of the buffer and
12865 there is nothing more to get. */
12866 if (*reply == 'l')
12867 return 0;
12868
12869 /* Convert the reply into binary. Limit the number of bytes to
12870 convert according to our passed-in buffer size, rather than
12871 what was returned in the packet; if the target is
12872 unexpectedly generous and gives us a bigger reply than we
12873 asked for, we don't want to crash. */
12874 rslt = hex2bin (target_buf, buf, len);
12875 return rslt;
12876 }
12877
12878 /* Something went wrong, flag as an error. */
12879 return -1;
12880}
12881
35b1e5cc 12882static void
37b25738 12883remote_set_disconnected_tracing (struct target_ops *self, int val)
35b1e5cc
SS
12884{
12885 struct remote_state *rs = get_remote_state ();
12886
4082afcc 12887 if (packet_support (PACKET_DisconnectedTracing_feature) == PACKET_ENABLE)
33da3f1c 12888 {
ad91cd99
PA
12889 char *reply;
12890
bba74b36 12891 xsnprintf (rs->buf, get_remote_packet_size (), "QTDisconnected:%x", val);
33da3f1c 12892 putpkt (rs->buf);
ad91cd99
PA
12893 reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
12894 if (*reply == '\0')
33da3f1c 12895 error (_("Target does not support this command."));
ad91cd99
PA
12896 if (strcmp (reply, "OK") != 0)
12897 error (_("Bogus reply from target: %s"), reply);
33da3f1c
SS
12898 }
12899 else if (val)
12900 warning (_("Target does not support disconnected tracing."));
35b1e5cc
SS
12901}
12902
dc146f7c
VP
12903static int
12904remote_core_of_thread (struct target_ops *ops, ptid_t ptid)
12905{
12906 struct thread_info *info = find_thread_ptid (ptid);
a744cf53 12907
fe978cb0
PA
12908 if (info && info->priv)
12909 return info->priv->core;
dc146f7c
VP
12910 return -1;
12911}
12912
4daf5ac0 12913static void
736d5b1f 12914remote_set_circular_trace_buffer (struct target_ops *self, int val)
4daf5ac0
SS
12915{
12916 struct remote_state *rs = get_remote_state ();
ad91cd99 12917 char *reply;
4daf5ac0 12918
bba74b36 12919 xsnprintf (rs->buf, get_remote_packet_size (), "QTBuffer:circular:%x", val);
4daf5ac0 12920 putpkt (rs->buf);
ad91cd99
PA
12921 reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
12922 if (*reply == '\0')
4daf5ac0 12923 error (_("Target does not support this command."));
ad91cd99
PA
12924 if (strcmp (reply, "OK") != 0)
12925 error (_("Bogus reply from target: %s"), reply);
4daf5ac0
SS
12926}
12927
b3b9301e 12928static struct traceframe_info *
a893e81f 12929remote_traceframe_info (struct target_ops *self)
b3b9301e
PA
12930{
12931 char *text;
12932
12933 text = target_read_stralloc (&current_target,
12934 TARGET_OBJECT_TRACEFRAME_INFO, NULL);
12935 if (text != NULL)
12936 {
12937 struct traceframe_info *info;
12938 struct cleanup *back_to = make_cleanup (xfree, text);
12939
12940 info = parse_traceframe_info (text);
12941 do_cleanups (back_to);
12942 return info;
12943 }
12944
12945 return NULL;
12946}
12947
405f8e94
SS
12948/* Handle the qTMinFTPILen packet. Returns the minimum length of
12949 instruction on which a fast tracepoint may be placed. Returns -1
12950 if the packet is not supported, and 0 if the minimum instruction
12951 length is unknown. */
12952
12953static int
0e67620a 12954remote_get_min_fast_tracepoint_insn_len (struct target_ops *self)
405f8e94
SS
12955{
12956 struct remote_state *rs = get_remote_state ();
12957 char *reply;
12958
e886a173
PA
12959 /* If we're not debugging a process yet, the IPA can't be
12960 loaded. */
12961 if (!target_has_execution)
12962 return 0;
12963
12964 /* Make sure the remote is pointing at the right process. */
12965 set_general_process ();
12966
bba74b36 12967 xsnprintf (rs->buf, get_remote_packet_size (), "qTMinFTPILen");
405f8e94
SS
12968 putpkt (rs->buf);
12969 reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
12970 if (*reply == '\0')
12971 return -1;
12972 else
12973 {
12974 ULONGEST min_insn_len;
12975
12976 unpack_varlen_hex (reply, &min_insn_len);
12977
12978 return (int) min_insn_len;
12979 }
12980}
12981
f6f899bf 12982static void
4da384be 12983remote_set_trace_buffer_size (struct target_ops *self, LONGEST val)
f6f899bf 12984{
4082afcc 12985 if (packet_support (PACKET_QTBuffer_size) != PACKET_DISABLE)
f6f899bf
HAQ
12986 {
12987 struct remote_state *rs = get_remote_state ();
12988 char *buf = rs->buf;
12989 char *endbuf = rs->buf + get_remote_packet_size ();
12990 enum packet_result result;
12991
12992 gdb_assert (val >= 0 || val == -1);
12993 buf += xsnprintf (buf, endbuf - buf, "QTBuffer:size:");
12994 /* Send -1 as literal "-1" to avoid host size dependency. */
12995 if (val < 0)
12996 {
12997 *buf++ = '-';
12998 buf += hexnumstr (buf, (ULONGEST) -val);
12999 }
13000 else
13001 buf += hexnumstr (buf, (ULONGEST) val);
13002
13003 putpkt (rs->buf);
13004 remote_get_noisy_reply (&rs->buf, &rs->buf_size);
13005 result = packet_ok (rs->buf,
13006 &remote_protocol_packets[PACKET_QTBuffer_size]);
13007
13008 if (result != PACKET_OK)
13009 warning (_("Bogus reply from target: %s"), rs->buf);
13010 }
13011}
13012
f196051f 13013static int
d9e68a2c
TT
13014remote_set_trace_notes (struct target_ops *self,
13015 const char *user, const char *notes,
ca623f82 13016 const char *stop_notes)
f196051f
SS
13017{
13018 struct remote_state *rs = get_remote_state ();
13019 char *reply;
13020 char *buf = rs->buf;
13021 char *endbuf = rs->buf + get_remote_packet_size ();
13022 int nbytes;
13023
13024 buf += xsnprintf (buf, endbuf - buf, "QTNotes:");
13025 if (user)
13026 {
13027 buf += xsnprintf (buf, endbuf - buf, "user:");
9f1b45b0 13028 nbytes = bin2hex ((gdb_byte *) user, buf, strlen (user));
f196051f
SS
13029 buf += 2 * nbytes;
13030 *buf++ = ';';
13031 }
13032 if (notes)
13033 {
13034 buf += xsnprintf (buf, endbuf - buf, "notes:");
9f1b45b0 13035 nbytes = bin2hex ((gdb_byte *) notes, buf, strlen (notes));
f196051f
SS
13036 buf += 2 * nbytes;
13037 *buf++ = ';';
13038 }
13039 if (stop_notes)
13040 {
13041 buf += xsnprintf (buf, endbuf - buf, "tstop:");
9f1b45b0 13042 nbytes = bin2hex ((gdb_byte *) stop_notes, buf, strlen (stop_notes));
f196051f
SS
13043 buf += 2 * nbytes;
13044 *buf++ = ';';
13045 }
13046 /* Ensure the buffer is terminated. */
13047 *buf = '\0';
13048
13049 putpkt (rs->buf);
13050 reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
13051 if (*reply == '\0')
13052 return 0;
13053
13054 if (strcmp (reply, "OK") != 0)
13055 error (_("Bogus reply from target: %s"), reply);
13056
13057 return 1;
13058}
13059
d1feda86 13060static int
2c152180 13061remote_use_agent (struct target_ops *self, int use)
d1feda86 13062{
4082afcc 13063 if (packet_support (PACKET_QAgent) != PACKET_DISABLE)
d1feda86
YQ
13064 {
13065 struct remote_state *rs = get_remote_state ();
13066
13067 /* If the stub supports QAgent. */
bba74b36 13068 xsnprintf (rs->buf, get_remote_packet_size (), "QAgent:%d", use);
d1feda86
YQ
13069 putpkt (rs->buf);
13070 getpkt (&rs->buf, &rs->buf_size, 0);
13071
13072 if (strcmp (rs->buf, "OK") == 0)
13073 {
13074 use_agent = use;
13075 return 1;
13076 }
13077 }
13078
13079 return 0;
13080}
13081
13082static int
fe38f897 13083remote_can_use_agent (struct target_ops *self)
d1feda86 13084{
4082afcc 13085 return (packet_support (PACKET_QAgent) != PACKET_DISABLE);
d1feda86
YQ
13086}
13087
9accd112
MM
13088struct btrace_target_info
13089{
13090 /* The ptid of the traced thread. */
13091 ptid_t ptid;
f4abbc16
MM
13092
13093 /* The obtained branch trace configuration. */
13094 struct btrace_config conf;
9accd112
MM
13095};
13096
f4abbc16
MM
13097/* Reset our idea of our target's btrace configuration. */
13098
13099static void
13100remote_btrace_reset (void)
13101{
13102 struct remote_state *rs = get_remote_state ();
13103
13104 memset (&rs->btrace_config, 0, sizeof (rs->btrace_config));
13105}
13106
9accd112
MM
13107/* Check whether the target supports branch tracing. */
13108
13109static int
043c3577 13110remote_supports_btrace (struct target_ops *self, enum btrace_format format)
9accd112 13111{
4082afcc 13112 if (packet_support (PACKET_Qbtrace_off) != PACKET_ENABLE)
9accd112 13113 return 0;
4082afcc 13114 if (packet_support (PACKET_qXfer_btrace) != PACKET_ENABLE)
9accd112
MM
13115 return 0;
13116
043c3577
MM
13117 switch (format)
13118 {
13119 case BTRACE_FORMAT_NONE:
13120 return 0;
13121
13122 case BTRACE_FORMAT_BTS:
13123 return (packet_support (PACKET_Qbtrace_bts) == PACKET_ENABLE);
b20a6524
MM
13124
13125 case BTRACE_FORMAT_PT:
13126 /* The trace is decoded on the host. Even if our target supports it,
13127 we still need to have libipt to decode the trace. */
13128#if defined (HAVE_LIBIPT)
13129 return (packet_support (PACKET_Qbtrace_pt) == PACKET_ENABLE);
13130#else /* !defined (HAVE_LIBIPT) */
13131 return 0;
13132#endif /* !defined (HAVE_LIBIPT) */
043c3577
MM
13133 }
13134
13135 internal_error (__FILE__, __LINE__, _("Unknown branch trace format"));
9accd112
MM
13136}
13137
f4abbc16
MM
13138/* Synchronize the configuration with the target. */
13139
13140static void
13141btrace_sync_conf (const struct btrace_config *conf)
13142{
d33501a5
MM
13143 struct packet_config *packet;
13144 struct remote_state *rs;
13145 char *buf, *pos, *endbuf;
13146
13147 rs = get_remote_state ();
13148 buf = rs->buf;
13149 endbuf = buf + get_remote_packet_size ();
13150
13151 packet = &remote_protocol_packets[PACKET_Qbtrace_conf_bts_size];
13152 if (packet_config_support (packet) == PACKET_ENABLE
13153 && conf->bts.size != rs->btrace_config.bts.size)
13154 {
13155 pos = buf;
13156 pos += xsnprintf (pos, endbuf - pos, "%s=0x%x", packet->name,
13157 conf->bts.size);
13158
13159 putpkt (buf);
13160 getpkt (&buf, &rs->buf_size, 0);
13161
13162 if (packet_ok (buf, packet) == PACKET_ERROR)
13163 {
13164 if (buf[0] == 'E' && buf[1] == '.')
13165 error (_("Failed to configure the BTS buffer size: %s"), buf + 2);
13166 else
13167 error (_("Failed to configure the BTS buffer size."));
13168 }
13169
13170 rs->btrace_config.bts.size = conf->bts.size;
13171 }
b20a6524
MM
13172
13173 packet = &remote_protocol_packets[PACKET_Qbtrace_conf_pt_size];
13174 if (packet_config_support (packet) == PACKET_ENABLE
13175 && conf->pt.size != rs->btrace_config.pt.size)
13176 {
13177 pos = buf;
13178 pos += xsnprintf (pos, endbuf - pos, "%s=0x%x", packet->name,
13179 conf->pt.size);
13180
13181 putpkt (buf);
13182 getpkt (&buf, &rs->buf_size, 0);
13183
13184 if (packet_ok (buf, packet) == PACKET_ERROR)
13185 {
13186 if (buf[0] == 'E' && buf[1] == '.')
13187 error (_("Failed to configure the trace buffer size: %s"), buf + 2);
13188 else
13189 error (_("Failed to configure the trace buffer size."));
13190 }
13191
13192 rs->btrace_config.pt.size = conf->pt.size;
13193 }
f4abbc16
MM
13194}
13195
13196/* Read the current thread's btrace configuration from the target and
13197 store it into CONF. */
13198
13199static void
13200btrace_read_config (struct btrace_config *conf)
13201{
13202 char *xml;
13203
13204 xml = target_read_stralloc (&current_target,
b20a6524 13205 TARGET_OBJECT_BTRACE_CONF, "");
f4abbc16
MM
13206 if (xml != NULL)
13207 {
13208 struct cleanup *cleanup;
13209
13210 cleanup = make_cleanup (xfree, xml);
13211 parse_xml_btrace_conf (conf, xml);
13212 do_cleanups (cleanup);
13213 }
13214}
13215
c0272db5
TW
13216/* Maybe reopen target btrace. */
13217
13218static void
13219remote_btrace_maybe_reopen (void)
13220{
13221 struct remote_state *rs = get_remote_state ();
c0272db5
TW
13222 struct thread_info *tp;
13223 int btrace_target_pushed = 0;
13224 int warned = 0;
13225
5ed8105e
PA
13226 scoped_restore_current_thread restore_thread;
13227
c0272db5
TW
13228 ALL_NON_EXITED_THREADS (tp)
13229 {
13230 set_general_thread (tp->ptid);
13231
13232 memset (&rs->btrace_config, 0x00, sizeof (struct btrace_config));
13233 btrace_read_config (&rs->btrace_config);
13234
13235 if (rs->btrace_config.format == BTRACE_FORMAT_NONE)
13236 continue;
13237
13238#if !defined (HAVE_LIBIPT)
13239 if (rs->btrace_config.format == BTRACE_FORMAT_PT)
13240 {
13241 if (!warned)
13242 {
13243 warned = 1;
13244 warning (_("GDB does not support Intel Processor Trace. "
13245 "\"record\" will not work in this session."));
13246 }
13247
13248 continue;
13249 }
13250#endif /* !defined (HAVE_LIBIPT) */
13251
13252 /* Push target, once, but before anything else happens. This way our
13253 changes to the threads will be cleaned up by unpushing the target
13254 in case btrace_read_config () throws. */
13255 if (!btrace_target_pushed)
13256 {
13257 btrace_target_pushed = 1;
13258 record_btrace_push_target ();
13259 printf_filtered (_("Target is recording using %s.\n"),
13260 btrace_format_string (rs->btrace_config.format));
13261 }
13262
13263 tp->btrace.target = XCNEW (struct btrace_target_info);
13264 tp->btrace.target->ptid = tp->ptid;
13265 tp->btrace.target->conf = rs->btrace_config;
13266 }
c0272db5
TW
13267}
13268
9accd112
MM
13269/* Enable branch tracing. */
13270
13271static struct btrace_target_info *
f4abbc16
MM
13272remote_enable_btrace (struct target_ops *self, ptid_t ptid,
13273 const struct btrace_config *conf)
9accd112
MM
13274{
13275 struct btrace_target_info *tinfo = NULL;
b20a6524 13276 struct packet_config *packet = NULL;
9accd112
MM
13277 struct remote_state *rs = get_remote_state ();
13278 char *buf = rs->buf;
13279 char *endbuf = rs->buf + get_remote_packet_size ();
13280
b20a6524
MM
13281 switch (conf->format)
13282 {
13283 case BTRACE_FORMAT_BTS:
13284 packet = &remote_protocol_packets[PACKET_Qbtrace_bts];
13285 break;
13286
13287 case BTRACE_FORMAT_PT:
13288 packet = &remote_protocol_packets[PACKET_Qbtrace_pt];
13289 break;
13290 }
13291
13292 if (packet == NULL || packet_config_support (packet) != PACKET_ENABLE)
9accd112
MM
13293 error (_("Target does not support branch tracing."));
13294
f4abbc16
MM
13295 btrace_sync_conf (conf);
13296
9accd112
MM
13297 set_general_thread (ptid);
13298
13299 buf += xsnprintf (buf, endbuf - buf, "%s", packet->name);
13300 putpkt (rs->buf);
13301 getpkt (&rs->buf, &rs->buf_size, 0);
13302
13303 if (packet_ok (rs->buf, packet) == PACKET_ERROR)
13304 {
13305 if (rs->buf[0] == 'E' && rs->buf[1] == '.')
13306 error (_("Could not enable branch tracing for %s: %s"),
13307 target_pid_to_str (ptid), rs->buf + 2);
13308 else
13309 error (_("Could not enable branch tracing for %s."),
13310 target_pid_to_str (ptid));
13311 }
13312
8d749320 13313 tinfo = XCNEW (struct btrace_target_info);
9accd112
MM
13314 tinfo->ptid = ptid;
13315
f4abbc16
MM
13316 /* If we fail to read the configuration, we lose some information, but the
13317 tracing itself is not impacted. */
492d29ea
PA
13318 TRY
13319 {
13320 btrace_read_config (&tinfo->conf);
13321 }
13322 CATCH (err, RETURN_MASK_ERROR)
13323 {
13324 if (err.message != NULL)
13325 warning ("%s", err.message);
13326 }
13327 END_CATCH
f4abbc16 13328
9accd112
MM
13329 return tinfo;
13330}
13331
13332/* Disable branch tracing. */
13333
13334static void
25e95349
TT
13335remote_disable_btrace (struct target_ops *self,
13336 struct btrace_target_info *tinfo)
9accd112
MM
13337{
13338 struct packet_config *packet = &remote_protocol_packets[PACKET_Qbtrace_off];
13339 struct remote_state *rs = get_remote_state ();
13340 char *buf = rs->buf;
13341 char *endbuf = rs->buf + get_remote_packet_size ();
13342
4082afcc 13343 if (packet_config_support (packet) != PACKET_ENABLE)
9accd112
MM
13344 error (_("Target does not support branch tracing."));
13345
13346 set_general_thread (tinfo->ptid);
13347
13348 buf += xsnprintf (buf, endbuf - buf, "%s", packet->name);
13349 putpkt (rs->buf);
13350 getpkt (&rs->buf, &rs->buf_size, 0);
13351
13352 if (packet_ok (rs->buf, packet) == PACKET_ERROR)
13353 {
13354 if (rs->buf[0] == 'E' && rs->buf[1] == '.')
13355 error (_("Could not disable branch tracing for %s: %s"),
13356 target_pid_to_str (tinfo->ptid), rs->buf + 2);
13357 else
13358 error (_("Could not disable branch tracing for %s."),
13359 target_pid_to_str (tinfo->ptid));
13360 }
13361
13362 xfree (tinfo);
13363}
13364
13365/* Teardown branch tracing. */
13366
13367static void
1777056d
TT
13368remote_teardown_btrace (struct target_ops *self,
13369 struct btrace_target_info *tinfo)
9accd112
MM
13370{
13371 /* We must not talk to the target during teardown. */
13372 xfree (tinfo);
13373}
13374
13375/* Read the branch trace. */
13376
969c39fb 13377static enum btrace_error
39c49f83 13378remote_read_btrace (struct target_ops *self,
734b0e4b 13379 struct btrace_data *btrace,
969c39fb 13380 struct btrace_target_info *tinfo,
9accd112
MM
13381 enum btrace_read_type type)
13382{
13383 struct packet_config *packet = &remote_protocol_packets[PACKET_qXfer_btrace];
969c39fb 13384 struct cleanup *cleanup;
9accd112
MM
13385 const char *annex;
13386 char *xml;
13387
4082afcc 13388 if (packet_config_support (packet) != PACKET_ENABLE)
9accd112
MM
13389 error (_("Target does not support branch tracing."));
13390
13391#if !defined(HAVE_LIBEXPAT)
13392 error (_("Cannot process branch tracing result. XML parsing not supported."));
13393#endif
13394
13395 switch (type)
13396 {
864089d2 13397 case BTRACE_READ_ALL:
9accd112
MM
13398 annex = "all";
13399 break;
864089d2 13400 case BTRACE_READ_NEW:
9accd112
MM
13401 annex = "new";
13402 break;
969c39fb
MM
13403 case BTRACE_READ_DELTA:
13404 annex = "delta";
13405 break;
9accd112
MM
13406 default:
13407 internal_error (__FILE__, __LINE__,
13408 _("Bad branch tracing read type: %u."),
13409 (unsigned int) type);
13410 }
13411
13412 xml = target_read_stralloc (&current_target,
b20a6524 13413 TARGET_OBJECT_BTRACE, annex);
969c39fb
MM
13414 if (xml == NULL)
13415 return BTRACE_ERR_UNKNOWN;
9accd112 13416
969c39fb 13417 cleanup = make_cleanup (xfree, xml);
734b0e4b 13418 parse_xml_btrace (btrace, xml);
969c39fb 13419 do_cleanups (cleanup);
9accd112 13420
969c39fb 13421 return BTRACE_ERR_NONE;
9accd112
MM
13422}
13423
f4abbc16
MM
13424static const struct btrace_config *
13425remote_btrace_conf (struct target_ops *self,
13426 const struct btrace_target_info *tinfo)
13427{
13428 return &tinfo->conf;
13429}
13430
ced63ec0 13431static int
5436ff03 13432remote_augmented_libraries_svr4_read (struct target_ops *self)
ced63ec0 13433{
4082afcc
PA
13434 return (packet_support (PACKET_augmented_libraries_svr4_read_feature)
13435 == PACKET_ENABLE);
ced63ec0
GB
13436}
13437
9dd130a0
TT
13438/* Implementation of to_load. */
13439
13440static void
9cbe5fff 13441remote_load (struct target_ops *self, const char *name, int from_tty)
9dd130a0
TT
13442{
13443 generic_load (name, from_tty);
13444}
13445
c78fa86a
GB
13446/* Accepts an integer PID; returns a string representing a file that
13447 can be opened on the remote side to get the symbols for the child
13448 process. Returns NULL if the operation is not supported. */
13449
13450static char *
13451remote_pid_to_exec_file (struct target_ops *self, int pid)
13452{
13453 static char *filename = NULL;
835205d0
GB
13454 struct inferior *inf;
13455 char *annex = NULL;
c78fa86a
GB
13456
13457 if (packet_support (PACKET_qXfer_exec_file) != PACKET_ENABLE)
13458 return NULL;
13459
13460 if (filename != NULL)
13461 xfree (filename);
13462
835205d0
GB
13463 inf = find_inferior_pid (pid);
13464 if (inf == NULL)
13465 internal_error (__FILE__, __LINE__,
13466 _("not currently attached to process %d"), pid);
13467
13468 if (!inf->fake_pid_p)
13469 {
13470 const int annex_size = 9;
13471
224c3ddb 13472 annex = (char *) alloca (annex_size);
835205d0
GB
13473 xsnprintf (annex, annex_size, "%x", pid);
13474 }
13475
c78fa86a
GB
13476 filename = target_read_stralloc (&current_target,
13477 TARGET_OBJECT_EXEC_FILE, annex);
13478
13479 return filename;
13480}
13481
750ce8d1
YQ
13482/* Implement the to_can_do_single_step target_ops method. */
13483
13484static int
13485remote_can_do_single_step (struct target_ops *ops)
13486{
13487 /* We can only tell whether target supports single step or not by
13488 supported s and S vCont actions if the stub supports vContSupported
13489 feature. If the stub doesn't support vContSupported feature,
13490 we have conservatively to think target doesn't supports single
13491 step. */
13492 if (packet_support (PACKET_vContSupported) == PACKET_ENABLE)
13493 {
13494 struct remote_state *rs = get_remote_state ();
13495
13496 if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
13497 remote_vcont_probe (rs);
13498
13499 return rs->supports_vCont.s && rs->supports_vCont.S;
13500 }
13501 else
13502 return 0;
13503}
13504
3a00c802
PA
13505/* Implementation of the to_execution_direction method for the remote
13506 target. */
13507
13508static enum exec_direction_kind
13509remote_execution_direction (struct target_ops *self)
13510{
13511 struct remote_state *rs = get_remote_state ();
13512
13513 return rs->last_resume_exec_dir;
13514}
13515
c906108c 13516static void
fba45db2 13517init_remote_ops (void)
c906108c 13518{
c5aa993b 13519 remote_ops.to_shortname = "remote";
c906108c 13520 remote_ops.to_longname = "Remote serial target in gdb-specific protocol";
c5aa993b 13521 remote_ops.to_doc =
c906108c 13522 "Use a remote computer via a serial line, using a gdb-specific protocol.\n\
0d06e24b
JM
13523Specify the serial device it is connected to\n\
13524(e.g. /dev/ttyS0, /dev/ttya, COM1, etc.).";
c5aa993b
JM
13525 remote_ops.to_open = remote_open;
13526 remote_ops.to_close = remote_close;
c906108c 13527 remote_ops.to_detach = remote_detach;
6ad8ae5c 13528 remote_ops.to_disconnect = remote_disconnect;
c5aa993b 13529 remote_ops.to_resume = remote_resume;
85ad3aaf 13530 remote_ops.to_commit_resume = remote_commit_resume;
c906108c
SS
13531 remote_ops.to_wait = remote_wait;
13532 remote_ops.to_fetch_registers = remote_fetch_registers;
13533 remote_ops.to_store_registers = remote_store_registers;
13534 remote_ops.to_prepare_to_store = remote_prepare_to_store;
c5aa993b 13535 remote_ops.to_files_info = remote_files_info;
c906108c
SS
13536 remote_ops.to_insert_breakpoint = remote_insert_breakpoint;
13537 remote_ops.to_remove_breakpoint = remote_remove_breakpoint;
f7e6eed5
PA
13538 remote_ops.to_stopped_by_sw_breakpoint = remote_stopped_by_sw_breakpoint;
13539 remote_ops.to_supports_stopped_by_sw_breakpoint = remote_supports_stopped_by_sw_breakpoint;
13540 remote_ops.to_stopped_by_hw_breakpoint = remote_stopped_by_hw_breakpoint;
13541 remote_ops.to_supports_stopped_by_hw_breakpoint = remote_supports_stopped_by_hw_breakpoint;
3c3bea1c
GS
13542 remote_ops.to_stopped_by_watchpoint = remote_stopped_by_watchpoint;
13543 remote_ops.to_stopped_data_address = remote_stopped_data_address;
283002cf
MR
13544 remote_ops.to_watchpoint_addr_within_range =
13545 remote_watchpoint_addr_within_range;
3c3bea1c
GS
13546 remote_ops.to_can_use_hw_breakpoint = remote_check_watch_resources;
13547 remote_ops.to_insert_hw_breakpoint = remote_insert_hw_breakpoint;
13548 remote_ops.to_remove_hw_breakpoint = remote_remove_hw_breakpoint;
480a3f21
PW
13549 remote_ops.to_region_ok_for_hw_watchpoint
13550 = remote_region_ok_for_hw_watchpoint;
3c3bea1c
GS
13551 remote_ops.to_insert_watchpoint = remote_insert_watchpoint;
13552 remote_ops.to_remove_watchpoint = remote_remove_watchpoint;
c5aa993b 13553 remote_ops.to_kill = remote_kill;
9dd130a0 13554 remote_ops.to_load = remote_load;
c906108c 13555 remote_ops.to_mourn_inferior = remote_mourn;
2455069d 13556 remote_ops.to_pass_signals = remote_pass_signals;
82075af2 13557 remote_ops.to_set_syscall_catchpoint = remote_set_syscall_catchpoint;
9b224c5e 13558 remote_ops.to_program_signals = remote_program_signals;
c906108c 13559 remote_ops.to_thread_alive = remote_thread_alive;
79efa585 13560 remote_ops.to_thread_name = remote_thread_name;
e8032dde 13561 remote_ops.to_update_thread_list = remote_update_thread_list;
0caabb7e 13562 remote_ops.to_pid_to_str = remote_pid_to_str;
cf759d3b 13563 remote_ops.to_extra_thread_info = remote_threads_extra_info;
10760264 13564 remote_ops.to_get_ada_task_ptid = remote_get_ada_task_ptid;
c906108c 13565 remote_ops.to_stop = remote_stop;
bfedc46a 13566 remote_ops.to_interrupt = remote_interrupt;
93692b58 13567 remote_ops.to_pass_ctrlc = remote_pass_ctrlc;
4b8a223f 13568 remote_ops.to_xfer_partial = remote_xfer_partial;
09c98b44 13569 remote_ops.to_get_memory_xfer_limit = remote_get_memory_xfer_limit;
96baa820 13570 remote_ops.to_rcmd = remote_rcmd;
c78fa86a 13571 remote_ops.to_pid_to_exec_file = remote_pid_to_exec_file;
49d03eab 13572 remote_ops.to_log_command = serial_log_command;
38691318 13573 remote_ops.to_get_thread_local_address = remote_get_thread_local_address;
c906108c 13574 remote_ops.to_stratum = process_stratum;
c35b1492
PA
13575 remote_ops.to_has_all_memory = default_child_has_all_memory;
13576 remote_ops.to_has_memory = default_child_has_memory;
13577 remote_ops.to_has_stack = default_child_has_stack;
13578 remote_ops.to_has_registers = default_child_has_registers;
13579 remote_ops.to_has_execution = default_child_has_execution;
3e43a32a 13580 remote_ops.to_has_thread_control = tc_schedlock; /* can lock scheduler */
b2175913 13581 remote_ops.to_can_execute_reverse = remote_can_execute_reverse;
c5aa993b 13582 remote_ops.to_magic = OPS_MAGIC;
fd79ecee 13583 remote_ops.to_memory_map = remote_memory_map;
a76d924d
DJ
13584 remote_ops.to_flash_erase = remote_flash_erase;
13585 remote_ops.to_flash_done = remote_flash_done;
29709017 13586 remote_ops.to_read_description = remote_read_description;
08388c79 13587 remote_ops.to_search_memory = remote_search_memory;
75c99385
PA
13588 remote_ops.to_can_async_p = remote_can_async_p;
13589 remote_ops.to_is_async_p = remote_is_async_p;
13590 remote_ops.to_async = remote_async;
65706a29 13591 remote_ops.to_thread_events = remote_thread_events;
750ce8d1 13592 remote_ops.to_can_do_single_step = remote_can_do_single_step;
75c99385
PA
13593 remote_ops.to_terminal_inferior = remote_terminal_inferior;
13594 remote_ops.to_terminal_ours = remote_terminal_ours;
74531fed 13595 remote_ops.to_supports_non_stop = remote_supports_non_stop;
8a305172 13596 remote_ops.to_supports_multi_process = remote_supports_multi_process;
03583c20
UW
13597 remote_ops.to_supports_disable_randomization
13598 = remote_supports_disable_randomization;
4bd7dc42 13599 remote_ops.to_filesystem_is_local = remote_filesystem_is_local;
7313baad
UW
13600 remote_ops.to_fileio_open = remote_hostio_open;
13601 remote_ops.to_fileio_pwrite = remote_hostio_pwrite;
13602 remote_ops.to_fileio_pread = remote_hostio_pread;
9b15c1f0 13603 remote_ops.to_fileio_fstat = remote_hostio_fstat;
7313baad
UW
13604 remote_ops.to_fileio_close = remote_hostio_close;
13605 remote_ops.to_fileio_unlink = remote_hostio_unlink;
b9e7b9c3 13606 remote_ops.to_fileio_readlink = remote_hostio_readlink;
d248b706 13607 remote_ops.to_supports_enable_disable_tracepoint = remote_supports_enable_disable_tracepoint;
3065dfb6 13608 remote_ops.to_supports_string_tracing = remote_supports_string_tracing;
b775012e 13609 remote_ops.to_supports_evaluation_of_breakpoint_conditions = remote_supports_cond_breakpoints;
d3ce09f5 13610 remote_ops.to_can_run_breakpoint_commands = remote_can_run_breakpoint_commands;
35b1e5cc
SS
13611 remote_ops.to_trace_init = remote_trace_init;
13612 remote_ops.to_download_tracepoint = remote_download_tracepoint;
1e4d1764 13613 remote_ops.to_can_download_tracepoint = remote_can_download_tracepoint;
3e43a32a
MS
13614 remote_ops.to_download_trace_state_variable
13615 = remote_download_trace_state_variable;
d248b706
KY
13616 remote_ops.to_enable_tracepoint = remote_enable_tracepoint;
13617 remote_ops.to_disable_tracepoint = remote_disable_tracepoint;
35b1e5cc
SS
13618 remote_ops.to_trace_set_readonly_regions = remote_trace_set_readonly_regions;
13619 remote_ops.to_trace_start = remote_trace_start;
13620 remote_ops.to_get_trace_status = remote_get_trace_status;
f196051f 13621 remote_ops.to_get_tracepoint_status = remote_get_tracepoint_status;
35b1e5cc
SS
13622 remote_ops.to_trace_stop = remote_trace_stop;
13623 remote_ops.to_trace_find = remote_trace_find;
3e43a32a
MS
13624 remote_ops.to_get_trace_state_variable_value
13625 = remote_get_trace_state_variable_value;
00bf0b85
SS
13626 remote_ops.to_save_trace_data = remote_save_trace_data;
13627 remote_ops.to_upload_tracepoints = remote_upload_tracepoints;
3e43a32a
MS
13628 remote_ops.to_upload_trace_state_variables
13629 = remote_upload_trace_state_variables;
00bf0b85 13630 remote_ops.to_get_raw_trace_data = remote_get_raw_trace_data;
405f8e94 13631 remote_ops.to_get_min_fast_tracepoint_insn_len = remote_get_min_fast_tracepoint_insn_len;
35b1e5cc 13632 remote_ops.to_set_disconnected_tracing = remote_set_disconnected_tracing;
4daf5ac0 13633 remote_ops.to_set_circular_trace_buffer = remote_set_circular_trace_buffer;
f6f899bf 13634 remote_ops.to_set_trace_buffer_size = remote_set_trace_buffer_size;
f196051f 13635 remote_ops.to_set_trace_notes = remote_set_trace_notes;
dc146f7c 13636 remote_ops.to_core_of_thread = remote_core_of_thread;
4a5e7a5b 13637 remote_ops.to_verify_memory = remote_verify_memory;
711e434b 13638 remote_ops.to_get_tib_address = remote_get_tib_address;
d914c394 13639 remote_ops.to_set_permissions = remote_set_permissions;
0fb4aa4b
PA
13640 remote_ops.to_static_tracepoint_marker_at
13641 = remote_static_tracepoint_marker_at;
13642 remote_ops.to_static_tracepoint_markers_by_strid
13643 = remote_static_tracepoint_markers_by_strid;
b3b9301e 13644 remote_ops.to_traceframe_info = remote_traceframe_info;
d1feda86
YQ
13645 remote_ops.to_use_agent = remote_use_agent;
13646 remote_ops.to_can_use_agent = remote_can_use_agent;
9accd112
MM
13647 remote_ops.to_supports_btrace = remote_supports_btrace;
13648 remote_ops.to_enable_btrace = remote_enable_btrace;
13649 remote_ops.to_disable_btrace = remote_disable_btrace;
13650 remote_ops.to_teardown_btrace = remote_teardown_btrace;
13651 remote_ops.to_read_btrace = remote_read_btrace;
f4abbc16 13652 remote_ops.to_btrace_conf = remote_btrace_conf;
ced63ec0
GB
13653 remote_ops.to_augmented_libraries_svr4_read =
13654 remote_augmented_libraries_svr4_read;
8020350c
DB
13655 remote_ops.to_follow_fork = remote_follow_fork;
13656 remote_ops.to_follow_exec = remote_follow_exec;
13657 remote_ops.to_insert_fork_catchpoint = remote_insert_fork_catchpoint;
13658 remote_ops.to_remove_fork_catchpoint = remote_remove_fork_catchpoint;
13659 remote_ops.to_insert_vfork_catchpoint = remote_insert_vfork_catchpoint;
13660 remote_ops.to_remove_vfork_catchpoint = remote_remove_vfork_catchpoint;
13661 remote_ops.to_insert_exec_catchpoint = remote_insert_exec_catchpoint;
13662 remote_ops.to_remove_exec_catchpoint = remote_remove_exec_catchpoint;
3a00c802 13663 remote_ops.to_execution_direction = remote_execution_direction;
c906108c
SS
13664}
13665
13666/* Set up the extended remote vector by making a copy of the standard
13667 remote vector and adding to it. */
13668
13669static void
fba45db2 13670init_extended_remote_ops (void)
c906108c
SS
13671{
13672 extended_remote_ops = remote_ops;
13673
0f71a2f6 13674 extended_remote_ops.to_shortname = "extended-remote";
c5aa993b 13675 extended_remote_ops.to_longname =
c906108c 13676 "Extended remote serial target in gdb-specific protocol";
c5aa993b 13677 extended_remote_ops.to_doc =
c906108c 13678 "Use a remote computer via a serial line, using a gdb-specific protocol.\n\
39237dd1
PA
13679Specify the serial device it is connected to (e.g. /dev/ttya).";
13680 extended_remote_ops.to_open = extended_remote_open;
c906108c 13681 extended_remote_ops.to_create_inferior = extended_remote_create_inferior;
2d717e4f
DJ
13682 extended_remote_ops.to_detach = extended_remote_detach;
13683 extended_remote_ops.to_attach = extended_remote_attach;
b9c1d481 13684 extended_remote_ops.to_post_attach = extended_remote_post_attach;
03583c20
UW
13685 extended_remote_ops.to_supports_disable_randomization
13686 = extended_remote_supports_disable_randomization;
0f71a2f6
JM
13687}
13688
6426a772 13689static int
6a109b6b 13690remote_can_async_p (struct target_ops *ops)
6426a772 13691{
5d93a237
TT
13692 struct remote_state *rs = get_remote_state ();
13693
3015c064
SM
13694 /* We don't go async if the user has explicitly prevented it with the
13695 "maint set target-async" command. */
c6ebd6cf 13696 if (!target_async_permitted)
75c99385
PA
13697 return 0;
13698
23860348 13699 /* We're async whenever the serial device is. */
5d93a237 13700 return serial_can_async_p (rs->remote_desc);
6426a772
JM
13701}
13702
13703static int
6a109b6b 13704remote_is_async_p (struct target_ops *ops)
6426a772 13705{
5d93a237
TT
13706 struct remote_state *rs = get_remote_state ();
13707
c6ebd6cf 13708 if (!target_async_permitted)
75c99385
PA
13709 /* We only enable async when the user specifically asks for it. */
13710 return 0;
13711
23860348 13712 /* We're async whenever the serial device is. */
5d93a237 13713 return serial_is_async_p (rs->remote_desc);
6426a772
JM
13714}
13715
2acceee2
JM
13716/* Pass the SERIAL event on and up to the client. One day this code
13717 will be able to delay notifying the client of an event until the
23860348 13718 point where an entire packet has been received. */
2acceee2 13719
2acceee2
JM
13720static serial_event_ftype remote_async_serial_handler;
13721
6426a772 13722static void
819cc324 13723remote_async_serial_handler (struct serial *scb, void *context)
6426a772 13724{
2acceee2
JM
13725 /* Don't propogate error information up to the client. Instead let
13726 the client find out about the error by querying the target. */
6a3753b3 13727 inferior_event_handler (INF_REG_EVENT, NULL);
2acceee2
JM
13728}
13729
74531fed
PA
13730static void
13731remote_async_inferior_event_handler (gdb_client_data data)
13732{
13733 inferior_event_handler (INF_REG_EVENT, NULL);
13734}
13735
2acceee2 13736static void
6a3753b3 13737remote_async (struct target_ops *ops, int enable)
2acceee2 13738{
5d93a237
TT
13739 struct remote_state *rs = get_remote_state ();
13740
6a3753b3 13741 if (enable)
2acceee2 13742 {
88b496c3 13743 serial_async (rs->remote_desc, remote_async_serial_handler, rs);
b7d2e916
PA
13744
13745 /* If there are pending events in the stop reply queue tell the
13746 event loop to process them. */
13747 if (!QUEUE_is_empty (stop_reply_p, stop_reply_queue))
13748 mark_async_event_handler (remote_async_inferior_event_token);
6efcd9a8
PA
13749 /* For simplicity, below we clear the pending events token
13750 without remembering whether it is marked, so here we always
13751 mark it. If there's actually no pending notification to
13752 process, this ends up being a no-op (other than a spurious
13753 event-loop wakeup). */
13754 if (target_is_non_stop_p ())
13755 mark_async_event_handler (rs->notif_state->get_pending_events_token);
2acceee2
JM
13756 }
13757 else
b7d2e916
PA
13758 {
13759 serial_async (rs->remote_desc, NULL, NULL);
6efcd9a8
PA
13760 /* If the core is disabling async, it doesn't want to be
13761 disturbed with target events. Clear all async event sources
13762 too. */
b7d2e916 13763 clear_async_event_handler (remote_async_inferior_event_token);
6efcd9a8
PA
13764 if (target_is_non_stop_p ())
13765 clear_async_event_handler (rs->notif_state->get_pending_events_token);
b7d2e916 13766 }
6426a772
JM
13767}
13768
65706a29
PA
13769/* Implementation of the to_thread_events method. */
13770
13771static void
13772remote_thread_events (struct target_ops *ops, int enable)
13773{
13774 struct remote_state *rs = get_remote_state ();
13775 size_t size = get_remote_packet_size ();
65706a29
PA
13776
13777 if (packet_support (PACKET_QThreadEvents) == PACKET_DISABLE)
13778 return;
13779
13780 xsnprintf (rs->buf, size, "QThreadEvents:%x", enable ? 1 : 0);
13781 putpkt (rs->buf);
13782 getpkt (&rs->buf, &rs->buf_size, 0);
13783
13784 switch (packet_ok (rs->buf,
13785 &remote_protocol_packets[PACKET_QThreadEvents]))
13786 {
13787 case PACKET_OK:
13788 if (strcmp (rs->buf, "OK") != 0)
13789 error (_("Remote refused setting thread events: %s"), rs->buf);
13790 break;
13791 case PACKET_ERROR:
13792 warning (_("Remote failure reply: %s"), rs->buf);
13793 break;
13794 case PACKET_UNKNOWN:
13795 break;
13796 }
13797}
13798
5a2468f5 13799static void
c2d11a7d 13800set_remote_cmd (char *args, int from_tty)
5a2468f5 13801{
635c7e8a 13802 help_list (remote_set_cmdlist, "set remote ", all_commands, gdb_stdout);
5a2468f5
JM
13803}
13804
d471ea57
AC
13805static void
13806show_remote_cmd (char *args, int from_tty)
13807{
37a105a1 13808 /* We can't just use cmd_show_list here, because we want to skip
427c3a89 13809 the redundant "show remote Z-packet" and the legacy aliases. */
37a105a1 13810 struct cmd_list_element *list = remote_show_cmdlist;
79a45e25 13811 struct ui_out *uiout = current_uiout;
37a105a1 13812
2e783024 13813 ui_out_emit_tuple tuple_emitter (uiout, "showlist");
37a105a1
DJ
13814 for (; list != NULL; list = list->next)
13815 if (strcmp (list->name, "Z-packet") == 0)
13816 continue;
427c3a89
DJ
13817 else if (list->type == not_set_cmd)
13818 /* Alias commands are exactly like the original, except they
13819 don't have the normal type. */
13820 continue;
13821 else
37a105a1 13822 {
2e783024 13823 ui_out_emit_tuple option_emitter (uiout, "option");
a744cf53 13824
112e8700
SM
13825 uiout->field_string ("name", list->name);
13826 uiout->text (": ");
427c3a89 13827 if (list->type == show_cmd)
f5c4fcd9 13828 do_show_command (NULL, from_tty, list);
427c3a89
DJ
13829 else
13830 cmd_func (list, NULL, from_tty);
37a105a1 13831 }
d471ea57 13832}
5a2468f5 13833
0f71a2f6 13834
23860348 13835/* Function to be called whenever a new objfile (shlib) is detected. */
dc8acb97
MS
13836static void
13837remote_new_objfile (struct objfile *objfile)
13838{
5d93a237
TT
13839 struct remote_state *rs = get_remote_state ();
13840
13841 if (rs->remote_desc != 0) /* Have a remote connection. */
36d25514 13842 remote_check_symbols ();
dc8acb97
MS
13843}
13844
00bf0b85
SS
13845/* Pull all the tracepoints defined on the target and create local
13846 data structures representing them. We don't want to create real
13847 tracepoints yet, we don't want to mess up the user's existing
13848 collection. */
13849
13850static int
ab6617cc 13851remote_upload_tracepoints (struct target_ops *self, struct uploaded_tp **utpp)
d5551862 13852{
00bf0b85
SS
13853 struct remote_state *rs = get_remote_state ();
13854 char *p;
d5551862 13855
00bf0b85
SS
13856 /* Ask for a first packet of tracepoint definition. */
13857 putpkt ("qTfP");
13858 getpkt (&rs->buf, &rs->buf_size, 0);
13859 p = rs->buf;
13860 while (*p && *p != 'l')
d5551862 13861 {
00bf0b85
SS
13862 parse_tracepoint_definition (p, utpp);
13863 /* Ask for another packet of tracepoint definition. */
13864 putpkt ("qTsP");
13865 getpkt (&rs->buf, &rs->buf_size, 0);
13866 p = rs->buf;
d5551862 13867 }
00bf0b85 13868 return 0;
d5551862
SS
13869}
13870
00bf0b85 13871static int
181e3713
TT
13872remote_upload_trace_state_variables (struct target_ops *self,
13873 struct uploaded_tsv **utsvp)
d5551862 13874{
00bf0b85 13875 struct remote_state *rs = get_remote_state ();
d5551862 13876 char *p;
d5551862 13877
00bf0b85
SS
13878 /* Ask for a first packet of variable definition. */
13879 putpkt ("qTfV");
d5551862
SS
13880 getpkt (&rs->buf, &rs->buf_size, 0);
13881 p = rs->buf;
00bf0b85 13882 while (*p && *p != 'l')
d5551862 13883 {
00bf0b85
SS
13884 parse_tsv_definition (p, utsvp);
13885 /* Ask for another packet of variable definition. */
13886 putpkt ("qTsV");
d5551862
SS
13887 getpkt (&rs->buf, &rs->buf_size, 0);
13888 p = rs->buf;
13889 }
00bf0b85 13890 return 0;
d5551862
SS
13891}
13892
c1e36e3e
PA
13893/* The "set/show range-stepping" show hook. */
13894
13895static void
13896show_range_stepping (struct ui_file *file, int from_tty,
13897 struct cmd_list_element *c,
13898 const char *value)
13899{
13900 fprintf_filtered (file,
13901 _("Debugger's willingness to use range stepping "
13902 "is %s.\n"), value);
13903}
13904
13905/* The "set/show range-stepping" set hook. */
13906
13907static void
13908set_range_stepping (char *ignore_args, int from_tty,
13909 struct cmd_list_element *c)
13910{
5d93a237
TT
13911 struct remote_state *rs = get_remote_state ();
13912
c1e36e3e
PA
13913 /* Whene enabling, check whether range stepping is actually
13914 supported by the target, and warn if not. */
13915 if (use_range_stepping)
13916 {
5d93a237 13917 if (rs->remote_desc != NULL)
c1e36e3e 13918 {
4082afcc 13919 if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
c1e36e3e
PA
13920 remote_vcont_probe (rs);
13921
4082afcc 13922 if (packet_support (PACKET_vCont) == PACKET_ENABLE
c1e36e3e
PA
13923 && rs->supports_vCont.r)
13924 return;
13925 }
13926
13927 warning (_("Range stepping is not supported by the current target"));
13928 }
13929}
13930
c906108c 13931void
fba45db2 13932_initialize_remote (void)
c906108c 13933{
9a7071a8 13934 struct cmd_list_element *cmd;
6f937416 13935 const char *cmd_name;
ea9c271d 13936
0f71a2f6 13937 /* architecture specific data */
2bc416ba 13938 remote_gdbarch_data_handle =
23860348 13939 gdbarch_data_register_post_init (init_remote_state);
29709017
DJ
13940 remote_g_packet_data_handle =
13941 gdbarch_data_register_pre_init (remote_g_packet_data_init);
d01949b6 13942
94585166
DB
13943 remote_pspace_data
13944 = register_program_space_data_with_cleanup (NULL,
13945 remote_pspace_data_cleanup);
13946
ea9c271d
DJ
13947 /* Initialize the per-target state. At the moment there is only one
13948 of these, not one per target. Only one target is active at a
cf792862
TT
13949 time. */
13950 remote_state = new_remote_state ();
ea9c271d 13951
c906108c
SS
13952 init_remote_ops ();
13953 add_target (&remote_ops);
13954
13955 init_extended_remote_ops ();
13956 add_target (&extended_remote_ops);
cce74817 13957
dc8acb97 13958 /* Hook into new objfile notification. */
06d3b283 13959 observer_attach_new_objfile (remote_new_objfile);
5f4cf0bb
YQ
13960 /* We're no longer interested in notification events of an inferior
13961 when it exits. */
13962 observer_attach_inferior_exit (discard_pending_stop_replies);
dc8acb97 13963
c906108c
SS
13964#if 0
13965 init_remote_threadtests ();
13966#endif
13967
722247f1 13968 stop_reply_queue = QUEUE_alloc (stop_reply_p, stop_reply_xfree);
23860348 13969 /* set/show remote ... */
d471ea57 13970
1bedd215 13971 add_prefix_cmd ("remote", class_maintenance, set_remote_cmd, _("\
5a2468f5
JM
13972Remote protocol specific variables\n\
13973Configure various remote-protocol specific variables such as\n\
1bedd215 13974the packets being used"),
cff3e48b 13975 &remote_set_cmdlist, "set remote ",
23860348 13976 0 /* allow-unknown */, &setlist);
1bedd215 13977 add_prefix_cmd ("remote", class_maintenance, show_remote_cmd, _("\
5a2468f5
JM
13978Remote protocol specific variables\n\
13979Configure various remote-protocol specific variables such as\n\
1bedd215 13980the packets being used"),
cff3e48b 13981 &remote_show_cmdlist, "show remote ",
23860348 13982 0 /* allow-unknown */, &showlist);
5a2468f5 13983
1a966eab
AC
13984 add_cmd ("compare-sections", class_obscure, compare_sections_command, _("\
13985Compare section data on target to the exec file.\n\
95cf3b38
DT
13986Argument is a single section name (default: all loaded sections).\n\
13987To compare only read-only loaded sections, specify the -r option."),
c906108c
SS
13988 &cmdlist);
13989
1a966eab
AC
13990 add_cmd ("packet", class_maintenance, packet_command, _("\
13991Send an arbitrary packet to a remote target.\n\
c906108c
SS
13992 maintenance packet TEXT\n\
13993If GDB is talking to an inferior via the GDB serial protocol, then\n\
13994this command sends the string TEXT to the inferior, and displays the\n\
13995response packet. GDB supplies the initial `$' character, and the\n\
1a966eab 13996terminating `#' character and checksum."),
c906108c
SS
13997 &maintenancelist);
13998
7915a72c
AC
13999 add_setshow_boolean_cmd ("remotebreak", no_class, &remote_break, _("\
14000Set whether to send break if interrupted."), _("\
14001Show whether to send break if interrupted."), _("\
14002If set, a break, instead of a cntrl-c, is sent to the remote target."),
9a7071a8 14003 set_remotebreak, show_remotebreak,
e707bbc2 14004 &setlist, &showlist);
9a7071a8
JB
14005 cmd_name = "remotebreak";
14006 cmd = lookup_cmd (&cmd_name, setlist, "", -1, 1);
14007 deprecate_cmd (cmd, "set remote interrupt-sequence");
14008 cmd_name = "remotebreak"; /* needed because lookup_cmd updates the pointer */
14009 cmd = lookup_cmd (&cmd_name, showlist, "", -1, 1);
14010 deprecate_cmd (cmd, "show remote interrupt-sequence");
14011
14012 add_setshow_enum_cmd ("interrupt-sequence", class_support,
3e43a32a
MS
14013 interrupt_sequence_modes, &interrupt_sequence_mode,
14014 _("\
9a7071a8
JB
14015Set interrupt sequence to remote target."), _("\
14016Show interrupt sequence to remote target."), _("\
14017Valid value is \"Ctrl-C\", \"BREAK\" or \"BREAK-g\". The default is \"Ctrl-C\"."),
14018 NULL, show_interrupt_sequence,
14019 &remote_set_cmdlist,
14020 &remote_show_cmdlist);
14021
14022 add_setshow_boolean_cmd ("interrupt-on-connect", class_support,
14023 &interrupt_on_connect, _("\
14024Set whether interrupt-sequence is sent to remote target when gdb connects to."), _(" \
14025Show whether interrupt-sequence is sent to remote target when gdb connects to."), _(" \
14026If set, interrupt sequence is sent to remote target."),
14027 NULL, NULL,
14028 &remote_set_cmdlist, &remote_show_cmdlist);
c906108c 14029
23860348 14030 /* Install commands for configuring memory read/write packets. */
11cf8741 14031
1a966eab
AC
14032 add_cmd ("remotewritesize", no_class, set_memory_write_packet_size, _("\
14033Set the maximum number of bytes per memory write packet (deprecated)."),
11cf8741 14034 &setlist);
1a966eab
AC
14035 add_cmd ("remotewritesize", no_class, show_memory_write_packet_size, _("\
14036Show the maximum number of bytes per memory write packet (deprecated)."),
11cf8741
JM
14037 &showlist);
14038 add_cmd ("memory-write-packet-size", no_class,
1a966eab
AC
14039 set_memory_write_packet_size, _("\
14040Set the maximum number of bytes per memory-write packet.\n\
14041Specify the number of bytes in a packet or 0 (zero) for the\n\
14042default packet size. The actual limit is further reduced\n\
14043dependent on the target. Specify ``fixed'' to disable the\n\
14044further restriction and ``limit'' to enable that restriction."),
11cf8741
JM
14045 &remote_set_cmdlist);
14046 add_cmd ("memory-read-packet-size", no_class,
1a966eab
AC
14047 set_memory_read_packet_size, _("\
14048Set the maximum number of bytes per memory-read packet.\n\
14049Specify the number of bytes in a packet or 0 (zero) for the\n\
14050default packet size. The actual limit is further reduced\n\
14051dependent on the target. Specify ``fixed'' to disable the\n\
14052further restriction and ``limit'' to enable that restriction."),
11cf8741
JM
14053 &remote_set_cmdlist);
14054 add_cmd ("memory-write-packet-size", no_class,
14055 show_memory_write_packet_size,
1a966eab 14056 _("Show the maximum number of bytes per memory-write packet."),
11cf8741
JM
14057 &remote_show_cmdlist);
14058 add_cmd ("memory-read-packet-size", no_class,
14059 show_memory_read_packet_size,
1a966eab 14060 _("Show the maximum number of bytes per memory-read packet."),
11cf8741 14061 &remote_show_cmdlist);
c906108c 14062
b3f42336 14063 add_setshow_zinteger_cmd ("hardware-watchpoint-limit", no_class,
7915a72c
AC
14064 &remote_hw_watchpoint_limit, _("\
14065Set the maximum number of target hardware watchpoints."), _("\
14066Show the maximum number of target hardware watchpoints."), _("\
14067Specify a negative limit for unlimited."),
3e43a32a
MS
14068 NULL, NULL, /* FIXME: i18n: The maximum
14069 number of target hardware
14070 watchpoints is %s. */
b3f42336 14071 &remote_set_cmdlist, &remote_show_cmdlist);
480a3f21
PW
14072 add_setshow_zinteger_cmd ("hardware-watchpoint-length-limit", no_class,
14073 &remote_hw_watchpoint_length_limit, _("\
14074Set the maximum length (in bytes) of a target hardware watchpoint."), _("\
14075Show the maximum length (in bytes) of a target hardware watchpoint."), _("\
14076Specify a negative limit for unlimited."),
14077 NULL, NULL, /* FIXME: i18n: The maximum
14078 length (in bytes) of a target
14079 hardware watchpoint is %s. */
14080 &remote_set_cmdlist, &remote_show_cmdlist);
b3f42336 14081 add_setshow_zinteger_cmd ("hardware-breakpoint-limit", no_class,
7915a72c
AC
14082 &remote_hw_breakpoint_limit, _("\
14083Set the maximum number of target hardware breakpoints."), _("\
14084Show the maximum number of target hardware breakpoints."), _("\
14085Specify a negative limit for unlimited."),
3e43a32a
MS
14086 NULL, NULL, /* FIXME: i18n: The maximum
14087 number of target hardware
14088 breakpoints is %s. */
b3f42336 14089 &remote_set_cmdlist, &remote_show_cmdlist);
501eef12 14090
1b493192
PA
14091 add_setshow_zuinteger_cmd ("remoteaddresssize", class_obscure,
14092 &remote_address_size, _("\
4d28ad1e
AC
14093Set the maximum size of the address (in bits) in a memory packet."), _("\
14094Show the maximum size of the address (in bits) in a memory packet."), NULL,
1b493192
PA
14095 NULL,
14096 NULL, /* FIXME: i18n: */
14097 &setlist, &showlist);
c906108c 14098
ca4f7f8b
PA
14099 init_all_packet_configs ();
14100
444abaca 14101 add_packet_config_cmd (&remote_protocol_packets[PACKET_X],
bb572ddd 14102 "X", "binary-download", 1);
0f71a2f6 14103
444abaca 14104 add_packet_config_cmd (&remote_protocol_packets[PACKET_vCont],
bb572ddd 14105 "vCont", "verbose-resume", 0);
506fb367 14106
89be2091
DJ
14107 add_packet_config_cmd (&remote_protocol_packets[PACKET_QPassSignals],
14108 "QPassSignals", "pass-signals", 0);
14109
82075af2
JS
14110 add_packet_config_cmd (&remote_protocol_packets[PACKET_QCatchSyscalls],
14111 "QCatchSyscalls", "catch-syscalls", 0);
14112
9b224c5e
PA
14113 add_packet_config_cmd (&remote_protocol_packets[PACKET_QProgramSignals],
14114 "QProgramSignals", "program-signals", 0);
14115
aefd8b33
SDJ
14116 add_packet_config_cmd (&remote_protocol_packets[PACKET_QStartupWithShell],
14117 "QStartupWithShell", "startup-with-shell", 0);
14118
444abaca 14119 add_packet_config_cmd (&remote_protocol_packets[PACKET_qSymbol],
bb572ddd 14120 "qSymbol", "symbol-lookup", 0);
dc8acb97 14121
444abaca 14122 add_packet_config_cmd (&remote_protocol_packets[PACKET_P],
bb572ddd 14123 "P", "set-register", 1);
d471ea57 14124
444abaca 14125 add_packet_config_cmd (&remote_protocol_packets[PACKET_p],
bb572ddd 14126 "p", "fetch-register", 1);
b96ec7ac 14127
444abaca 14128 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z0],
bb572ddd 14129 "Z0", "software-breakpoint", 0);
d471ea57 14130
444abaca 14131 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z1],
bb572ddd 14132 "Z1", "hardware-breakpoint", 0);
d471ea57 14133
444abaca 14134 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z2],
bb572ddd 14135 "Z2", "write-watchpoint", 0);
d471ea57 14136
444abaca 14137 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z3],
bb572ddd 14138 "Z3", "read-watchpoint", 0);
d471ea57 14139
444abaca 14140 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z4],
bb572ddd 14141 "Z4", "access-watchpoint", 0);
d471ea57 14142
0876f84a
DJ
14143 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_auxv],
14144 "qXfer:auxv:read", "read-aux-vector", 0);
802188a7 14145
c78fa86a
GB
14146 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_exec_file],
14147 "qXfer:exec-file:read", "pid-to-exec-file", 0);
14148
23181151
DJ
14149 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_features],
14150 "qXfer:features:read", "target-features", 0);
14151
cfa9d6d9
DJ
14152 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_libraries],
14153 "qXfer:libraries:read", "library-info", 0);
14154
2268b414
JK
14155 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_libraries_svr4],
14156 "qXfer:libraries-svr4:read", "library-info-svr4", 0);
14157
fd79ecee
DJ
14158 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_memory_map],
14159 "qXfer:memory-map:read", "memory-map", 0);
14160
0e7f50da
UW
14161 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_spu_read],
14162 "qXfer:spu:read", "read-spu-object", 0);
14163
14164 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_spu_write],
14165 "qXfer:spu:write", "write-spu-object", 0);
14166
07e059b5
VP
14167 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_osdata],
14168 "qXfer:osdata:read", "osdata", 0);
14169
dc146f7c
VP
14170 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_threads],
14171 "qXfer:threads:read", "threads", 0);
14172
4aa995e1
PA
14173 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_siginfo_read],
14174 "qXfer:siginfo:read", "read-siginfo-object", 0);
14175
14176 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_siginfo_write],
14177 "qXfer:siginfo:write", "write-siginfo-object", 0);
14178
b3b9301e
PA
14179 add_packet_config_cmd
14180 (&remote_protocol_packets[PACKET_qXfer_traceframe_info],
eb9fe518 14181 "qXfer:traceframe-info:read", "traceframe-info", 0);
b3b9301e 14182
169081d0
TG
14183 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_uib],
14184 "qXfer:uib:read", "unwind-info-block", 0);
14185
444abaca 14186 add_packet_config_cmd (&remote_protocol_packets[PACKET_qGetTLSAddr],
38691318 14187 "qGetTLSAddr", "get-thread-local-storage-address",
38691318
KB
14188 0);
14189
711e434b
PM
14190 add_packet_config_cmd (&remote_protocol_packets[PACKET_qGetTIBAddr],
14191 "qGetTIBAddr", "get-thread-information-block-address",
14192 0);
14193
40ab02ce
MS
14194 add_packet_config_cmd (&remote_protocol_packets[PACKET_bc],
14195 "bc", "reverse-continue", 0);
14196
14197 add_packet_config_cmd (&remote_protocol_packets[PACKET_bs],
14198 "bs", "reverse-step", 0);
14199
be2a5f71
DJ
14200 add_packet_config_cmd (&remote_protocol_packets[PACKET_qSupported],
14201 "qSupported", "supported-packets", 0);
14202
08388c79
DE
14203 add_packet_config_cmd (&remote_protocol_packets[PACKET_qSearch_memory],
14204 "qSearch:memory", "search-memory", 0);
14205
bd3eecc3
PA
14206 add_packet_config_cmd (&remote_protocol_packets[PACKET_qTStatus],
14207 "qTStatus", "trace-status", 0);
14208
15a201c8
GB
14209 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_setfs],
14210 "vFile:setfs", "hostio-setfs", 0);
14211
a6b151f1
DJ
14212 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_open],
14213 "vFile:open", "hostio-open", 0);
14214
14215 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_pread],
14216 "vFile:pread", "hostio-pread", 0);
14217
14218 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_pwrite],
14219 "vFile:pwrite", "hostio-pwrite", 0);
14220
14221 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_close],
14222 "vFile:close", "hostio-close", 0);
14223
14224 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_unlink],
14225 "vFile:unlink", "hostio-unlink", 0);
14226
b9e7b9c3
UW
14227 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_readlink],
14228 "vFile:readlink", "hostio-readlink", 0);
14229
0a93529c
GB
14230 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_fstat],
14231 "vFile:fstat", "hostio-fstat", 0);
14232
2d717e4f
DJ
14233 add_packet_config_cmd (&remote_protocol_packets[PACKET_vAttach],
14234 "vAttach", "attach", 0);
14235
14236 add_packet_config_cmd (&remote_protocol_packets[PACKET_vRun],
14237 "vRun", "run", 0);
14238
a6f3e723
SL
14239 add_packet_config_cmd (&remote_protocol_packets[PACKET_QStartNoAckMode],
14240 "QStartNoAckMode", "noack", 0);
14241
82f73884
PA
14242 add_packet_config_cmd (&remote_protocol_packets[PACKET_vKill],
14243 "vKill", "kill", 0);
14244
0b16c5cf
PA
14245 add_packet_config_cmd (&remote_protocol_packets[PACKET_qAttached],
14246 "qAttached", "query-attached", 0);
14247
782b2b07 14248 add_packet_config_cmd (&remote_protocol_packets[PACKET_ConditionalTracepoints],
3e43a32a
MS
14249 "ConditionalTracepoints",
14250 "conditional-tracepoints", 0);
3788aec7
LM
14251
14252 add_packet_config_cmd (&remote_protocol_packets[PACKET_ConditionalBreakpoints],
14253 "ConditionalBreakpoints",
14254 "conditional-breakpoints", 0);
14255
d3ce09f5
SS
14256 add_packet_config_cmd (&remote_protocol_packets[PACKET_BreakpointCommands],
14257 "BreakpointCommands",
14258 "breakpoint-commands", 0);
14259
7a697b8d
SS
14260 add_packet_config_cmd (&remote_protocol_packets[PACKET_FastTracepoints],
14261 "FastTracepoints", "fast-tracepoints", 0);
782b2b07 14262
409873ef
SS
14263 add_packet_config_cmd (&remote_protocol_packets[PACKET_TracepointSource],
14264 "TracepointSource", "TracepointSource", 0);
14265
d914c394
SS
14266 add_packet_config_cmd (&remote_protocol_packets[PACKET_QAllow],
14267 "QAllow", "allow", 0);
14268
0fb4aa4b
PA
14269 add_packet_config_cmd (&remote_protocol_packets[PACKET_StaticTracepoints],
14270 "StaticTracepoints", "static-tracepoints", 0);
14271
1e4d1764
YQ
14272 add_packet_config_cmd (&remote_protocol_packets[PACKET_InstallInTrace],
14273 "InstallInTrace", "install-in-trace", 0);
14274
0fb4aa4b
PA
14275 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_statictrace_read],
14276 "qXfer:statictrace:read", "read-sdata-object", 0);
14277
78d85199
YQ
14278 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_fdpic],
14279 "qXfer:fdpic:read", "read-fdpic-loadmap", 0);
14280
03583c20
UW
14281 add_packet_config_cmd (&remote_protocol_packets[PACKET_QDisableRandomization],
14282 "QDisableRandomization", "disable-randomization", 0);
14283
d1feda86
YQ
14284 add_packet_config_cmd (&remote_protocol_packets[PACKET_QAgent],
14285 "QAgent", "agent", 0);
14286
f6f899bf
HAQ
14287 add_packet_config_cmd (&remote_protocol_packets[PACKET_QTBuffer_size],
14288 "QTBuffer:size", "trace-buffer-size", 0);
14289
9accd112
MM
14290 add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_off],
14291 "Qbtrace:off", "disable-btrace", 0);
14292
14293 add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_bts],
b20a6524
MM
14294 "Qbtrace:bts", "enable-btrace-bts", 0);
14295
14296 add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_pt],
14297 "Qbtrace:pt", "enable-btrace-pt", 0);
9accd112
MM
14298
14299 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_btrace],
14300 "qXfer:btrace", "read-btrace", 0);
14301
f4abbc16
MM
14302 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_btrace_conf],
14303 "qXfer:btrace-conf", "read-btrace-conf", 0);
14304
d33501a5
MM
14305 add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_conf_bts_size],
14306 "Qbtrace-conf:bts:size", "btrace-conf-bts-size", 0);
14307
73b8c1fd
PA
14308 add_packet_config_cmd (&remote_protocol_packets[PACKET_multiprocess_feature],
14309 "multiprocess-feature", "multiprocess-feature", 0);
14310
f7e6eed5
PA
14311 add_packet_config_cmd (&remote_protocol_packets[PACKET_swbreak_feature],
14312 "swbreak-feature", "swbreak-feature", 0);
14313
14314 add_packet_config_cmd (&remote_protocol_packets[PACKET_hwbreak_feature],
14315 "hwbreak-feature", "hwbreak-feature", 0);
14316
89245bc0
DB
14317 add_packet_config_cmd (&remote_protocol_packets[PACKET_fork_event_feature],
14318 "fork-event-feature", "fork-event-feature", 0);
14319
14320 add_packet_config_cmd (&remote_protocol_packets[PACKET_vfork_event_feature],
14321 "vfork-event-feature", "vfork-event-feature", 0);
14322
b20a6524
MM
14323 add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_conf_pt_size],
14324 "Qbtrace-conf:pt:size", "btrace-conf-pt-size", 0);
14325
750ce8d1
YQ
14326 add_packet_config_cmd (&remote_protocol_packets[PACKET_vContSupported],
14327 "vContSupported", "verbose-resume-supported", 0);
14328
94585166
DB
14329 add_packet_config_cmd (&remote_protocol_packets[PACKET_exec_event_feature],
14330 "exec-event-feature", "exec-event-feature", 0);
14331
de979965
PA
14332 add_packet_config_cmd (&remote_protocol_packets[PACKET_vCtrlC],
14333 "vCtrlC", "ctrl-c", 0);
14334
65706a29
PA
14335 add_packet_config_cmd (&remote_protocol_packets[PACKET_QThreadEvents],
14336 "QThreadEvents", "thread-events", 0);
14337
f2faf941
PA
14338 add_packet_config_cmd (&remote_protocol_packets[PACKET_no_resumed],
14339 "N stop reply", "no-resumed-stop-reply", 0);
14340
0b736949
DB
14341 /* Assert that we've registered "set remote foo-packet" commands
14342 for all packet configs. */
ca4f7f8b
PA
14343 {
14344 int i;
14345
14346 for (i = 0; i < PACKET_MAX; i++)
14347 {
14348 /* Ideally all configs would have a command associated. Some
14349 still don't though. */
14350 int excepted;
14351
14352 switch (i)
14353 {
14354 case PACKET_QNonStop:
ca4f7f8b
PA
14355 case PACKET_EnableDisableTracepoints_feature:
14356 case PACKET_tracenz_feature:
14357 case PACKET_DisconnectedTracing_feature:
14358 case PACKET_augmented_libraries_svr4_read_feature:
936d2992
PA
14359 case PACKET_qCRC:
14360 /* Additions to this list need to be well justified:
14361 pre-existing packets are OK; new packets are not. */
ca4f7f8b
PA
14362 excepted = 1;
14363 break;
14364 default:
14365 excepted = 0;
14366 break;
14367 }
14368
14369 /* This catches both forgetting to add a config command, and
14370 forgetting to remove a packet from the exception list. */
14371 gdb_assert (excepted == (remote_protocol_packets[i].name == NULL));
14372 }
14373 }
14374
37a105a1
DJ
14375 /* Keep the old ``set remote Z-packet ...'' working. Each individual
14376 Z sub-packet has its own set and show commands, but users may
14377 have sets to this variable in their .gdbinit files (or in their
14378 documentation). */
e9e68a56 14379 add_setshow_auto_boolean_cmd ("Z-packet", class_obscure,
7915a72c
AC
14380 &remote_Z_packet_detect, _("\
14381Set use of remote protocol `Z' packets"), _("\
14382Show use of remote protocol `Z' packets "), _("\
3b64bf98 14383When set, GDB will attempt to use the remote breakpoint and watchpoint\n\
7915a72c 14384packets."),
e9e68a56 14385 set_remote_protocol_Z_packet_cmd,
3e43a32a
MS
14386 show_remote_protocol_Z_packet_cmd,
14387 /* FIXME: i18n: Use of remote protocol
14388 `Z' packets is %s. */
e9e68a56 14389 &remote_set_cmdlist, &remote_show_cmdlist);
449092f6 14390
a6b151f1
DJ
14391 add_prefix_cmd ("remote", class_files, remote_command, _("\
14392Manipulate files on the remote system\n\
14393Transfer files to and from the remote target system."),
14394 &remote_cmdlist, "remote ",
14395 0 /* allow-unknown */, &cmdlist);
14396
14397 add_cmd ("put", class_files, remote_put_command,
14398 _("Copy a local file to the remote system."),
14399 &remote_cmdlist);
14400
14401 add_cmd ("get", class_files, remote_get_command,
14402 _("Copy a remote file to the local system."),
14403 &remote_cmdlist);
14404
14405 add_cmd ("delete", class_files, remote_delete_command,
14406 _("Delete a remote file."),
14407 &remote_cmdlist);
14408
2d717e4f 14409 add_setshow_string_noescape_cmd ("exec-file", class_files,
94585166 14410 &remote_exec_file_var, _("\
2d717e4f 14411Set the remote pathname for \"run\""), _("\
94585166
DB
14412Show the remote pathname for \"run\""), NULL,
14413 set_remote_exec_file,
14414 show_remote_exec_file,
14415 &remote_set_cmdlist,
14416 &remote_show_cmdlist);
2d717e4f 14417
c1e36e3e
PA
14418 add_setshow_boolean_cmd ("range-stepping", class_run,
14419 &use_range_stepping, _("\
14420Enable or disable range stepping."), _("\
14421Show whether target-assisted range stepping is enabled."), _("\
14422If on, and the target supports it, when stepping a source line, GDB\n\
14423tells the target to step the corresponding range of addresses itself instead\n\
14424of issuing multiple single-steps. This speeds up source level\n\
14425stepping. If off, GDB always issues single-steps, even if range\n\
14426stepping is supported by the target. The default is on."),
14427 set_range_stepping,
14428 show_range_stepping,
14429 &setlist,
14430 &showlist);
14431
449092f6
CV
14432 /* Eventually initialize fileio. See fileio.c */
14433 initialize_remote_fileio (remote_set_cmdlist, remote_show_cmdlist);
79d7f229 14434
ba348170 14435 /* Take advantage of the fact that the TID field is not used, to tag
79d7f229 14436 special ptids with it set to != 0. */
ba348170
PA
14437 magic_null_ptid = ptid_build (42000, -1, 1);
14438 not_sent_ptid = ptid_build (42000, -2, 1);
14439 any_thread_ptid = ptid_build (42000, 0, 1);
35b1e5cc
SS
14440
14441 target_buf_size = 2048;
224c3ddb 14442 target_buf = (char *) xmalloc (target_buf_size);
c906108c 14443}
10760264 14444
This page took 5.646644 seconds and 4 git commands to generate.