Don't use -fdiagnostics-color=never for rustc
[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>
2ec845e7 75#include "common/scoped_restore.h"
0a2dde4a 76#include "environ.h"
35b1e5cc 77
0df8b418 78/* Temp hacks for tracepoint encoding migration. */
35b1e5cc
SS
79static char *target_buf;
80static long target_buf_size;
35b1e5cc 81
94585166
DB
82/* Per-program-space data key. */
83static const struct program_space_data *remote_pspace_data;
84
85/* The variable registered as the control variable used by the
86 remote exec-file commands. While the remote exec-file setting is
87 per-program-space, the set/show machinery uses this as the
88 location of the remote exec-file value. */
89static char *remote_exec_file_var;
90
6765f3e5
DJ
91/* The size to align memory write packets, when practical. The protocol
92 does not guarantee any alignment, and gdb will generate short
93 writes and unaligned writes, but even as a best-effort attempt this
94 can improve bulk transfers. For instance, if a write is misaligned
95 relative to the target's data bus, the stub may need to make an extra
96 round trip fetching data from the target. This doesn't make a
97 huge difference, but it's easy to do, so we try to be helpful.
98
99 The alignment chosen is arbitrary; usually data bus width is
100 important here, not the possibly larger cache line size. */
101enum { REMOTE_ALIGN_WRITES = 16 };
102
23860348 103/* Prototypes for local functions. */
6d820c5c 104static int getpkt_sane (char **buf, long *sizeof_buf, int forever);
74531fed 105static int getpkt_or_notif_sane (char **buf, long *sizeof_buf,
fee9eda9 106 int forever, int *is_notif);
6426a772 107
a14ed312 108static void remote_files_info (struct target_ops *ignore);
c906108c 109
f32dbf8c
MM
110static void remote_prepare_to_store (struct target_ops *self,
111 struct regcache *regcache);
c906108c 112
014f9477
TT
113static void remote_open_1 (const char *, int, struct target_ops *,
114 int extended_p);
c906108c 115
de90e03d 116static void remote_close (struct target_ops *self);
c906108c 117
cbb8991c
DB
118struct remote_state;
119
120static int remote_vkill (int pid, struct remote_state *rs);
121
8020350c
DB
122static void remote_kill_k (void);
123
136d6dae 124static void remote_mourn (struct target_ops *ops);
c906108c 125
a14ed312 126static void extended_remote_restart (void);
c906108c 127
6d820c5c 128static void remote_send (char **buf, long *sizeof_buf_p);
c906108c 129
a14ed312 130static int readchar (int timeout);
c906108c 131
c33e31fd
PA
132static void remote_serial_write (const char *str, int len);
133
7d85a9c0 134static void remote_kill (struct target_ops *ops);
c906108c 135
6a109b6b 136static int remote_can_async_p (struct target_ops *);
75c99385 137
6a109b6b 138static int remote_is_async_p (struct target_ops *);
75c99385 139
6a3753b3 140static void remote_async (struct target_ops *ops, int enable);
75c99385 141
65706a29
PA
142static void remote_thread_events (struct target_ops *ops, int enable);
143
a14ed312 144static void interrupt_query (void);
c906108c 145
d62a8ae2
SM
146static void set_general_thread (ptid_t ptid);
147static void set_continue_thread (ptid_t ptid);
c906108c 148
a14ed312 149static void get_offsets (void);
c906108c 150
6d820c5c
DJ
151static void skip_frame (void);
152
153static long read_frame (char **buf_p, long *sizeof_buf);
c906108c 154
a14ed312 155static int hexnumlen (ULONGEST num);
c906108c 156
a14ed312 157static void init_remote_ops (void);
c906108c 158
a14ed312 159static void init_extended_remote_ops (void);
c906108c 160
1eab8a48 161static void remote_stop (struct target_ops *self, ptid_t);
c906108c 162
a14ed312 163static int stubhex (int ch);
c906108c 164
a14ed312 165static int hexnumstr (char *, ULONGEST);
c906108c 166
a14ed312 167static int hexnumnstr (char *, ULONGEST, int);
2df3850c 168
a14ed312 169static CORE_ADDR remote_address_masked (CORE_ADDR);
c906108c 170
baa336ce 171static void print_packet (const char *);
c906108c 172
a14ed312 173static void compare_sections_command (char *, int);
c906108c 174
a14ed312 175static void packet_command (char *, int);
c906108c 176
a14ed312 177static int stub_unpack_int (char *buff, int fieldlength);
c906108c 178
39f77062 179static ptid_t remote_current_thread (ptid_t oldptid);
c906108c 180
baa336ce 181static int putpkt_binary (const char *buf, int cnt);
c906108c 182
a14ed312 183static void check_binary_download (CORE_ADDR addr);
c906108c 184
5a2468f5 185struct packet_config;
5a2468f5 186
a14ed312 187static void show_packet_config_cmd (struct packet_config *config);
5a2468f5 188
bb572ddd
DJ
189static void show_remote_protocol_packet_cmd (struct ui_file *file,
190 int from_tty,
191 struct cmd_list_element *c,
192 const char *value);
193
82f73884
PA
194static char *write_ptid (char *buf, const char *endbuf, ptid_t ptid);
195static ptid_t read_ptid (char *buf, char **obuf);
196
c378d69d 197static void remote_set_permissions (struct target_ops *self);
d914c394 198
8bd200f1
TT
199static int remote_get_trace_status (struct target_ops *self,
200 struct trace_status *ts);
d5551862 201
ab6617cc
TT
202static int remote_upload_tracepoints (struct target_ops *self,
203 struct uploaded_tp **utpp);
00bf0b85 204
181e3713
TT
205static int remote_upload_trace_state_variables (struct target_ops *self,
206 struct uploaded_tsv **utsvp);
00bf0b85 207
c8d104ad
PA
208static void remote_query_supported (void);
209
36d25514 210static void remote_check_symbols (void);
c8d104ad 211
a14ed312 212void _initialize_remote (void);
c906108c 213
74531fed 214struct stop_reply;
74531fed 215static void stop_reply_xfree (struct stop_reply *);
722247f1 216static void remote_parse_stop_reply (char *, struct stop_reply *);
74531fed 217static void push_stop_reply (struct stop_reply *);
bcc75809 218static void discard_pending_stop_replies_in_queue (struct remote_state *);
74531fed
PA
219static int peek_stop_reply (ptid_t ptid);
220
cbb8991c
DB
221struct threads_listing_context;
222static void remove_new_fork_children (struct threads_listing_context *);
223
74531fed 224static void remote_async_inferior_event_handler (gdb_client_data);
74531fed 225
e3594fd1 226static void remote_terminal_ours (struct target_ops *self);
d3fd5342 227
d962ef82
DJ
228static int remote_read_description_p (struct target_ops *target);
229
176a6961 230static void remote_console_output (char *msg);
dde08ee1 231
efcc2da7 232static int remote_supports_cond_breakpoints (struct target_ops *self);
b775012e 233
78eff0ec 234static int remote_can_run_breakpoint_commands (struct target_ops *self);
d3ce09f5 235
f4abbc16
MM
236static void remote_btrace_reset (void);
237
c0272db5
TW
238static void remote_btrace_maybe_reopen (void);
239
221e1a37
PA
240static int stop_reply_queue_length (void);
241
80152258
PA
242static void readahead_cache_invalidate (void);
243
048094ac
PA
244static void remote_unpush_and_throw (void);
245
a6b151f1
DJ
246/* For "remote". */
247
248static struct cmd_list_element *remote_cmdlist;
249
bb572ddd
DJ
250/* For "set remote" and "show remote". */
251
252static struct cmd_list_element *remote_set_cmdlist;
253static struct cmd_list_element *remote_show_cmdlist;
254
d458bd84
PA
255/* Stub vCont actions support.
256
257 Each field is a boolean flag indicating whether the stub reports
258 support for the corresponding action. */
259
260struct vCont_action_support
261{
262 /* vCont;t */
263 int t;
c1e36e3e
PA
264
265 /* vCont;r */
266 int r;
750ce8d1
YQ
267
268 /* vCont;s */
269 int s;
270
271 /* vCont;S */
272 int S;
d458bd84
PA
273};
274
c1e36e3e
PA
275/* Controls whether GDB is willing to use range stepping. */
276
277static int use_range_stepping = 1;
278
0d031856
TT
279#define OPAQUETHREADBYTES 8
280
281/* a 64 bit opaque identifier */
282typedef unsigned char threadref[OPAQUETHREADBYTES];
283
284/* About this many threadisds fit in a packet. */
285
286#define MAXTHREADLISTRESULTS 32
287
6f8976bf
YQ
288/* The max number of chars in debug output. The rest of chars are
289 omitted. */
290
291#define REMOTE_DEBUG_MAX_CHAR 512
292
80152258
PA
293/* Data for the vFile:pread readahead cache. */
294
295struct readahead_cache
296{
297 /* The file descriptor for the file that is being cached. -1 if the
298 cache is invalid. */
299 int fd;
300
301 /* The offset into the file that the cache buffer corresponds
302 to. */
303 ULONGEST offset;
304
305 /* The buffer holding the cache contents. */
306 gdb_byte *buf;
307 /* The buffer's size. We try to read as much as fits into a packet
308 at a time. */
309 size_t bufsize;
310
311 /* Cache hit and miss counters. */
312 ULONGEST hit_count;
313 ULONGEST miss_count;
314};
315
ea9c271d
DJ
316/* Description of the remote protocol state for the currently
317 connected target. This is per-target state, and independent of the
318 selected architecture. */
319
320struct remote_state
321{
322 /* A buffer to use for incoming packets, and its current size. The
323 buffer is grown dynamically for larger incoming packets.
324 Outgoing packets may also be constructed in this buffer.
325 BUF_SIZE is always at least REMOTE_PACKET_SIZE;
326 REMOTE_PACKET_SIZE should be used to limit the length of outgoing
327 packets. */
328 char *buf;
329 long buf_size;
be2a5f71 330
1e51243a
PA
331 /* True if we're going through initial connection setup (finding out
332 about the remote side's threads, relocating symbols, etc.). */
333 int starting_up;
334
be2a5f71
DJ
335 /* If we negotiated packet size explicitly (and thus can bypass
336 heuristics for the largest packet size that will not overflow
337 a buffer in the stub), this will be set to that packet size.
338 Otherwise zero, meaning to use the guessed size. */
339 long explicit_packet_size;
2d717e4f
DJ
340
341 /* remote_wait is normally called when the target is running and
342 waits for a stop reply packet. But sometimes we need to call it
343 when the target is already stopped. We can send a "?" packet
344 and have remote_wait read the response. Or, if we already have
345 the response, we can stash it in BUF and tell remote_wait to
346 skip calling getpkt. This flag is set when BUF contains a
347 stop reply packet and the target is not waiting. */
348 int cached_wait_status;
a6f3e723
SL
349
350 /* True, if in no ack mode. That is, neither GDB nor the stub will
351 expect acks from each other. The connection is assumed to be
352 reliable. */
353 int noack_mode;
82f73884
PA
354
355 /* True if we're connected in extended remote mode. */
356 int extended;
357
e24a49d8
PA
358 /* True if we resumed the target and we're waiting for the target to
359 stop. In the mean time, we can't start another command/query.
360 The remote server wouldn't be ready to process it, so we'd
361 timeout waiting for a reply that would never come and eventually
362 we'd close the connection. This can happen in asynchronous mode
363 because we allow GDB commands while the target is running. */
364 int waiting_for_stop_reply;
74531fed 365
d458bd84
PA
366 /* The status of the stub support for the various vCont actions. */
367 struct vCont_action_support supports_vCont;
782b2b07 368
3a29589a
DJ
369 /* Nonzero if the user has pressed Ctrl-C, but the target hasn't
370 responded to that. */
371 int ctrlc_pending_p;
5d93a237 372
048094ac
PA
373 /* True if we saw a Ctrl-C while reading or writing from/to the
374 remote descriptor. At that point it is not safe to send a remote
375 interrupt packet, so we instead remember we saw the Ctrl-C and
376 process it once we're done with sending/receiving the current
377 packet, which should be shortly. If however that takes too long,
378 and the user presses Ctrl-C again, we offer to disconnect. */
379 int got_ctrlc_during_io;
380
5d93a237
TT
381 /* Descriptor for I/O to remote machine. Initialize it to NULL so that
382 remote_open knows that we don't have a file open when the program
383 starts. */
384 struct serial *remote_desc;
47f8a51d
TT
385
386 /* These are the threads which we last sent to the remote system. The
387 TID member will be -1 for all or -2 for not sent yet. */
388 ptid_t general_thread;
389 ptid_t continue_thread;
262e1174
TT
390
391 /* This is the traceframe which we last selected on the remote system.
392 It will be -1 if no traceframe is selected. */
393 int remote_traceframe_number;
747dc59d
TT
394
395 char *last_pass_packet;
5e4a05c4
TT
396
397 /* The last QProgramSignals packet sent to the target. We bypass
398 sending a new program signals list down to the target if the new
399 packet is exactly the same as the last we sent. IOW, we only let
400 the target know about program signals list changes. */
401 char *last_program_signals_packet;
b73be471
TT
402
403 enum gdb_signal last_sent_signal;
280ceea3
TT
404
405 int last_sent_step;
8e88304f 406
3a00c802
PA
407 /* The execution direction of the last resume we got. */
408 enum exec_direction_kind last_resume_exec_dir;
409
8e88304f
TT
410 char *finished_object;
411 char *finished_annex;
412 ULONGEST finished_offset;
b80fafe3
TT
413
414 /* Should we try the 'ThreadInfo' query packet?
415
416 This variable (NOT available to the user: auto-detect only!)
417 determines whether GDB will use the new, simpler "ThreadInfo"
418 query or the older, more complex syntax for thread queries.
419 This is an auto-detect variable (set to true at each connect,
420 and set to false when the target fails to recognize it). */
421 int use_threadinfo_query;
422 int use_threadextra_query;
88b496c3 423
0d031856
TT
424 threadref echo_nextthread;
425 threadref nextthread;
426 threadref resultthreadlist[MAXTHREADLISTRESULTS];
5965e028
YQ
427
428 /* The state of remote notification. */
429 struct remote_notif_state *notif_state;
f4abbc16
MM
430
431 /* The branch trace configuration. */
432 struct btrace_config btrace_config;
15a201c8
GB
433
434 /* The argument to the last "vFile:setfs:" packet we sent, used
435 to avoid sending repeated unnecessary "vFile:setfs:" packets.
436 Initialized to -1 to indicate that no "vFile:setfs:" packet
437 has yet been sent. */
438 int fs_pid;
80152258
PA
439
440 /* A readahead cache for vFile:pread. Often, reading a binary
441 involves a sequence of small reads. E.g., when parsing an ELF
442 file. A readahead cache helps mostly the case of remote
443 debugging on a connection with higher latency, due to the
444 request/reply nature of the RSP. We only cache data for a single
445 file descriptor at a time. */
446 struct readahead_cache readahead_cache;
ea9c271d
DJ
447};
448
dc146f7c
VP
449/* Private data that we'll store in (struct thread_info)->private. */
450struct private_thread_info
451{
452 char *extra;
79efa585 453 char *name;
dc146f7c 454 int core;
799a2abe
PA
455
456 /* Whether the target stopped for a breakpoint/watchpoint. */
457 enum target_stop_reason stop_reason;
458
459 /* This is set to the data address of the access causing the target
460 to stop for a watchpoint. */
461 CORE_ADDR watch_data_address;
85ad3aaf
PA
462
463 /* Fields used by the vCont action coalescing implemented in
464 remote_resume / remote_commit_resume. remote_resume stores each
465 thread's last resume request in these fields, so that a later
466 remote_commit_resume knows which is the proper action for this
467 thread to include in the vCont packet. */
468
469 /* True if the last target_resume call for this thread was a step
470 request, false if a continue request. */
471 int last_resume_step;
472
473 /* The signal specified in the last target_resume call for this
474 thread. */
475 enum gdb_signal last_resume_sig;
476
477 /* Whether this thread was already vCont-resumed on the remote
478 side. */
479 int vcont_resumed;
dc146f7c
VP
480};
481
482static void
483free_private_thread_info (struct private_thread_info *info)
484{
485 xfree (info->extra);
79efa585 486 xfree (info->name);
dc146f7c
VP
487 xfree (info);
488}
489
ea9c271d
DJ
490/* This data could be associated with a target, but we do not always
491 have access to the current target when we need it, so for now it is
492 static. This will be fine for as long as only one target is in use
493 at a time. */
cf792862 494static struct remote_state *remote_state;
ea9c271d
DJ
495
496static struct remote_state *
0b83947e 497get_remote_state_raw (void)
ea9c271d 498{
cf792862
TT
499 return remote_state;
500}
501
502/* Allocate a new struct remote_state with xmalloc, initialize it, and
503 return it. */
504
505static struct remote_state *
506new_remote_state (void)
507{
508 struct remote_state *result = XCNEW (struct remote_state);
509
510 /* The default buffer size is unimportant; it will be expanded
511 whenever a larger buffer is needed. */
512 result->buf_size = 400;
224c3ddb 513 result->buf = (char *) xmalloc (result->buf_size);
262e1174 514 result->remote_traceframe_number = -1;
b73be471 515 result->last_sent_signal = GDB_SIGNAL_0;
3a00c802 516 result->last_resume_exec_dir = EXEC_FORWARD;
15a201c8 517 result->fs_pid = -1;
cf792862
TT
518
519 return result;
ea9c271d
DJ
520}
521
522/* Description of the remote protocol for a given architecture. */
d01949b6 523
ad10f812
AC
524struct packet_reg
525{
526 long offset; /* Offset into G packet. */
527 long regnum; /* GDB's internal register number. */
528 LONGEST pnum; /* Remote protocol register number. */
b323314b 529 int in_g_packet; /* Always part of G packet. */
f5656ead 530 /* long size in bytes; == register_size (target_gdbarch (), regnum);
23860348 531 at present. */
f5656ead 532 /* char *name; == gdbarch_register_name (target_gdbarch (), regnum);
c9f4d572 533 at present. */
ad10f812
AC
534};
535
ea9c271d 536struct remote_arch_state
d01949b6 537{
ad10f812
AC
538 /* Description of the remote protocol registers. */
539 long sizeof_g_packet;
b323314b
AC
540
541 /* Description of the remote protocol registers indexed by REGNUM
f57d151a 542 (making an array gdbarch_num_regs in size). */
b323314b 543 struct packet_reg *regs;
ad10f812 544
d01949b6
AC
545 /* This is the size (in chars) of the first response to the ``g''
546 packet. It is used as a heuristic when determining the maximum
547 size of memory-read and memory-write packets. A target will
548 typically only reserve a buffer large enough to hold the ``g''
549 packet. The size does not include packet overhead (headers and
23860348 550 trailers). */
d01949b6
AC
551 long actual_register_packet_size;
552
553 /* This is the maximum size (in chars) of a non read/write packet.
23860348 554 It is also used as a cap on the size of read/write packets. */
d01949b6
AC
555 long remote_packet_size;
556};
557
35b1e5cc
SS
558/* Utility: generate error from an incoming stub packet. */
559static void
560trace_error (char *buf)
561{
562 if (*buf++ != 'E')
563 return; /* not an error msg */
564 switch (*buf)
565 {
566 case '1': /* malformed packet error */
567 if (*++buf == '0') /* general case: */
568 error (_("remote.c: error in outgoing packet."));
569 else
570 error (_("remote.c: error in outgoing packet at field #%ld."),
571 strtol (buf, NULL, 16));
35b1e5cc
SS
572 default:
573 error (_("Target returns error code '%s'."), buf);
574 }
575}
576
577/* Utility: wait for reply from stub, while accepting "O" packets. */
578static char *
579remote_get_noisy_reply (char **buf_p,
580 long *sizeof_buf)
581{
582 do /* Loop on reply from remote stub. */
583 {
584 char *buf;
a744cf53 585
0df8b418 586 QUIT; /* Allow user to bail out with ^C. */
35b1e5cc
SS
587 getpkt (buf_p, sizeof_buf, 0);
588 buf = *buf_p;
ad91cd99 589 if (buf[0] == 'E')
35b1e5cc 590 trace_error (buf);
61012eef 591 else if (startswith (buf, "qRelocInsn:"))
dde08ee1
PA
592 {
593 ULONGEST ul;
594 CORE_ADDR from, to, org_to;
595 char *p, *pp;
596 int adjusted_size = 0;
7556d4a4 597 int relocated = 0;
dde08ee1
PA
598
599 p = buf + strlen ("qRelocInsn:");
600 pp = unpack_varlen_hex (p, &ul);
601 if (*pp != ';')
cb91c06a 602 error (_("invalid qRelocInsn packet: %s"), buf);
dde08ee1
PA
603 from = ul;
604
605 p = pp + 1;
a9cbf802 606 unpack_varlen_hex (p, &ul);
dde08ee1
PA
607 to = ul;
608
609 org_to = to;
610
492d29ea 611 TRY
dde08ee1 612 {
f5656ead 613 gdbarch_relocate_instruction (target_gdbarch (), &to, from);
7556d4a4 614 relocated = 1;
dde08ee1 615 }
492d29ea 616 CATCH (ex, RETURN_MASK_ALL)
7556d4a4
PA
617 {
618 if (ex.error == MEMORY_ERROR)
619 {
620 /* Propagate memory errors silently back to the
621 target. The stub may have limited the range of
622 addresses we can write to, for example. */
623 }
624 else
625 {
626 /* Something unexpectedly bad happened. Be verbose
627 so we can tell what, and propagate the error back
628 to the stub, so it doesn't get stuck waiting for
629 a response. */
630 exception_fprintf (gdb_stderr, ex,
631 _("warning: relocating instruction: "));
632 }
633 putpkt ("E01");
634 }
492d29ea 635 END_CATCH
7556d4a4
PA
636
637 if (relocated)
dde08ee1
PA
638 {
639 adjusted_size = to - org_to;
640
bba74b36 641 xsnprintf (buf, *sizeof_buf, "qRelocInsn:%x", adjusted_size);
dde08ee1
PA
642 putpkt (buf);
643 }
dde08ee1 644 }
ad91cd99 645 else if (buf[0] == 'O' && buf[1] != 'K')
35b1e5cc
SS
646 remote_console_output (buf + 1); /* 'O' message from stub */
647 else
0df8b418 648 return buf; /* Here's the actual reply. */
35b1e5cc
SS
649 }
650 while (1);
651}
3c3bea1c 652
d01949b6
AC
653/* Handle for retreving the remote protocol data from gdbarch. */
654static struct gdbarch_data *remote_gdbarch_data_handle;
655
ea9c271d
DJ
656static struct remote_arch_state *
657get_remote_arch_state (void)
d01949b6 658{
17d8546e 659 gdb_assert (target_gdbarch () != NULL);
19ba03f4
SM
660 return ((struct remote_arch_state *)
661 gdbarch_data (target_gdbarch (), remote_gdbarch_data_handle));
d01949b6
AC
662}
663
0b83947e
DJ
664/* Fetch the global remote target state. */
665
666static struct remote_state *
667get_remote_state (void)
668{
669 /* Make sure that the remote architecture state has been
670 initialized, because doing so might reallocate rs->buf. Any
671 function which calls getpkt also needs to be mindful of changes
672 to rs->buf, but this call limits the number of places which run
673 into trouble. */
674 get_remote_arch_state ();
675
676 return get_remote_state_raw ();
677}
678
94585166
DB
679/* Cleanup routine for the remote module's pspace data. */
680
681static void
682remote_pspace_data_cleanup (struct program_space *pspace, void *arg)
683{
19ba03f4 684 char *remote_exec_file = (char *) arg;
94585166
DB
685
686 xfree (remote_exec_file);
687}
688
689/* Fetch the remote exec-file from the current program space. */
690
691static const char *
692get_remote_exec_file (void)
693{
694 char *remote_exec_file;
695
19ba03f4
SM
696 remote_exec_file
697 = (char *) program_space_data (current_program_space,
698 remote_pspace_data);
94585166
DB
699 if (remote_exec_file == NULL)
700 return "";
701
702 return remote_exec_file;
703}
704
705/* Set the remote exec file for PSPACE. */
706
707static void
708set_pspace_remote_exec_file (struct program_space *pspace,
709 char *remote_exec_file)
710{
19ba03f4 711 char *old_file = (char *) program_space_data (pspace, remote_pspace_data);
94585166
DB
712
713 xfree (old_file);
714 set_program_space_data (pspace, remote_pspace_data,
715 xstrdup (remote_exec_file));
716}
717
718/* The "set/show remote exec-file" set command hook. */
719
720static void
721set_remote_exec_file (char *ignored, int from_tty,
722 struct cmd_list_element *c)
723{
724 gdb_assert (remote_exec_file_var != NULL);
725 set_pspace_remote_exec_file (current_program_space, remote_exec_file_var);
726}
727
728/* The "set/show remote exec-file" show command hook. */
729
730static void
731show_remote_exec_file (struct ui_file *file, int from_tty,
732 struct cmd_list_element *cmd, const char *value)
733{
734 fprintf_filtered (file, "%s\n", remote_exec_file_var);
735}
736
74ca34ce
DJ
737static int
738compare_pnums (const void *lhs_, const void *rhs_)
739{
19ba03f4
SM
740 const struct packet_reg * const *lhs
741 = (const struct packet_reg * const *) lhs_;
742 const struct packet_reg * const *rhs
743 = (const struct packet_reg * const *) rhs_;
74ca34ce
DJ
744
745 if ((*lhs)->pnum < (*rhs)->pnum)
746 return -1;
747 else if ((*lhs)->pnum == (*rhs)->pnum)
748 return 0;
749 else
750 return 1;
751}
752
c21236dc
PA
753static int
754map_regcache_remote_table (struct gdbarch *gdbarch, struct packet_reg *regs)
d01949b6 755{
74ca34ce 756 int regnum, num_remote_regs, offset;
74ca34ce 757 struct packet_reg **remote_regs;
ea9c271d 758
4a22f64d 759 for (regnum = 0; regnum < gdbarch_num_regs (gdbarch); regnum++)
ad10f812 760 {
c21236dc 761 struct packet_reg *r = &regs[regnum];
baef701f 762
4a22f64d 763 if (register_size (gdbarch, regnum) == 0)
baef701f
DJ
764 /* Do not try to fetch zero-sized (placeholder) registers. */
765 r->pnum = -1;
766 else
767 r->pnum = gdbarch_remote_register_number (gdbarch, regnum);
768
b323314b 769 r->regnum = regnum;
74ca34ce
DJ
770 }
771
772 /* Define the g/G packet format as the contents of each register
773 with a remote protocol number, in order of ascending protocol
774 number. */
775
224c3ddb 776 remote_regs = XALLOCAVEC (struct packet_reg *, gdbarch_num_regs (gdbarch));
f57d151a 777 for (num_remote_regs = 0, regnum = 0;
4a22f64d 778 regnum < gdbarch_num_regs (gdbarch);
f57d151a 779 regnum++)
c21236dc
PA
780 if (regs[regnum].pnum != -1)
781 remote_regs[num_remote_regs++] = &regs[regnum];
7d58c67d 782
74ca34ce
DJ
783 qsort (remote_regs, num_remote_regs, sizeof (struct packet_reg *),
784 compare_pnums);
785
786 for (regnum = 0, offset = 0; regnum < num_remote_regs; regnum++)
787 {
788 remote_regs[regnum]->in_g_packet = 1;
789 remote_regs[regnum]->offset = offset;
4a22f64d 790 offset += register_size (gdbarch, remote_regs[regnum]->regnum);
ad10f812
AC
791 }
792
c21236dc
PA
793 return offset;
794}
795
796/* Given the architecture described by GDBARCH, return the remote
797 protocol register's number and the register's offset in the g/G
798 packets of GDB register REGNUM, in PNUM and POFFSET respectively.
799 If the target does not have a mapping for REGNUM, return false,
800 otherwise, return true. */
801
802int
803remote_register_number_and_offset (struct gdbarch *gdbarch, int regnum,
804 int *pnum, int *poffset)
805{
c21236dc
PA
806 struct packet_reg *regs;
807 struct cleanup *old_chain;
808
809 gdb_assert (regnum < gdbarch_num_regs (gdbarch));
810
224c3ddb 811 regs = XCNEWVEC (struct packet_reg, gdbarch_num_regs (gdbarch));
c21236dc
PA
812 old_chain = make_cleanup (xfree, regs);
813
54887903 814 map_regcache_remote_table (gdbarch, regs);
c21236dc
PA
815
816 *pnum = regs[regnum].pnum;
817 *poffset = regs[regnum].offset;
818
819 do_cleanups (old_chain);
820
821 return *pnum != -1;
822}
823
824static void *
825init_remote_state (struct gdbarch *gdbarch)
826{
827 struct remote_state *rs = get_remote_state_raw ();
828 struct remote_arch_state *rsa;
829
830 rsa = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct remote_arch_state);
831
832 /* Use the architecture to build a regnum<->pnum table, which will be
833 1:1 unless a feature set specifies otherwise. */
834 rsa->regs = GDBARCH_OBSTACK_CALLOC (gdbarch,
835 gdbarch_num_regs (gdbarch),
836 struct packet_reg);
837
74ca34ce
DJ
838 /* Record the maximum possible size of the g packet - it may turn out
839 to be smaller. */
c21236dc 840 rsa->sizeof_g_packet = map_regcache_remote_table (gdbarch, rsa->regs);
74ca34ce 841
0df8b418 842 /* Default maximum number of characters in a packet body. Many
d01949b6
AC
843 remote stubs have a hardwired buffer size of 400 bytes
844 (c.f. BUFMAX in m68k-stub.c and i386-stub.c). BUFMAX-1 is used
845 as the maximum packet-size to ensure that the packet and an extra
846 NUL character can always fit in the buffer. This stops GDB
847 trashing stubs that try to squeeze an extra NUL into what is
ea9c271d
DJ
848 already a full buffer (As of 1999-12-04 that was most stubs). */
849 rsa->remote_packet_size = 400 - 1;
d01949b6 850
ea9c271d
DJ
851 /* This one is filled in when a ``g'' packet is received. */
852 rsa->actual_register_packet_size = 0;
853
854 /* Should rsa->sizeof_g_packet needs more space than the
0df8b418
MS
855 default, adjust the size accordingly. Remember that each byte is
856 encoded as two characters. 32 is the overhead for the packet
857 header / footer. NOTE: cagney/1999-10-26: I suspect that 8
d01949b6 858 (``$NN:G...#NN'') is a better guess, the below has been padded a
23860348 859 little. */
ea9c271d
DJ
860 if (rsa->sizeof_g_packet > ((rsa->remote_packet_size - 32) / 2))
861 rsa->remote_packet_size = (rsa->sizeof_g_packet * 2 + 32);
802188a7 862
ea9c271d
DJ
863 /* Make sure that the packet buffer is plenty big enough for
864 this architecture. */
865 if (rs->buf_size < rsa->remote_packet_size)
866 {
867 rs->buf_size = 2 * rsa->remote_packet_size;
224c3ddb 868 rs->buf = (char *) xrealloc (rs->buf, rs->buf_size);
ea9c271d 869 }
6d820c5c 870
ea9c271d
DJ
871 return rsa;
872}
873
874/* Return the current allowed size of a remote packet. This is
875 inferred from the current architecture, and should be used to
876 limit the length of outgoing packets. */
877static long
878get_remote_packet_size (void)
879{
be2a5f71 880 struct remote_state *rs = get_remote_state ();
ea9c271d
DJ
881 struct remote_arch_state *rsa = get_remote_arch_state ();
882
be2a5f71
DJ
883 if (rs->explicit_packet_size)
884 return rs->explicit_packet_size;
885
ea9c271d 886 return rsa->remote_packet_size;
d01949b6
AC
887}
888
ad10f812 889static struct packet_reg *
ea9c271d 890packet_reg_from_regnum (struct remote_arch_state *rsa, long regnum)
ad10f812 891{
f5656ead 892 if (regnum < 0 && regnum >= gdbarch_num_regs (target_gdbarch ()))
b323314b
AC
893 return NULL;
894 else
ad10f812 895 {
ea9c271d 896 struct packet_reg *r = &rsa->regs[regnum];
a744cf53 897
b323314b
AC
898 gdb_assert (r->regnum == regnum);
899 return r;
ad10f812 900 }
ad10f812
AC
901}
902
903static struct packet_reg *
ea9c271d 904packet_reg_from_pnum (struct remote_arch_state *rsa, LONGEST pnum)
ad10f812 905{
b323314b 906 int i;
a744cf53 907
f5656ead 908 for (i = 0; i < gdbarch_num_regs (target_gdbarch ()); i++)
ad10f812 909 {
ea9c271d 910 struct packet_reg *r = &rsa->regs[i];
a744cf53 911
b323314b
AC
912 if (r->pnum == pnum)
913 return r;
ad10f812
AC
914 }
915 return NULL;
d01949b6
AC
916}
917
c906108c
SS
918static struct target_ops remote_ops;
919
920static struct target_ops extended_remote_ops;
921
6426a772
JM
922/* FIXME: cagney/1999-09-23: Even though getpkt was called with
923 ``forever'' still use the normal timeout mechanism. This is
924 currently used by the ASYNC code to guarentee that target reads
925 during the initial connect always time-out. Once getpkt has been
926 modified to return a timeout indication and, in turn
927 remote_wait()/wait_for_inferior() have gained a timeout parameter
23860348 928 this can go away. */
6426a772
JM
929static int wait_forever_enabled_p = 1;
930
9a7071a8
JB
931/* Allow the user to specify what sequence to send to the remote
932 when he requests a program interruption: Although ^C is usually
933 what remote systems expect (this is the default, here), it is
934 sometimes preferable to send a break. On other systems such
935 as the Linux kernel, a break followed by g, which is Magic SysRq g
936 is required in order to interrupt the execution. */
937const char interrupt_sequence_control_c[] = "Ctrl-C";
938const char interrupt_sequence_break[] = "BREAK";
939const char interrupt_sequence_break_g[] = "BREAK-g";
40478521 940static const char *const interrupt_sequence_modes[] =
9a7071a8
JB
941 {
942 interrupt_sequence_control_c,
943 interrupt_sequence_break,
944 interrupt_sequence_break_g,
945 NULL
946 };
947static const char *interrupt_sequence_mode = interrupt_sequence_control_c;
948
949static void
950show_interrupt_sequence (struct ui_file *file, int from_tty,
951 struct cmd_list_element *c,
952 const char *value)
953{
954 if (interrupt_sequence_mode == interrupt_sequence_control_c)
955 fprintf_filtered (file,
956 _("Send the ASCII ETX character (Ctrl-c) "
957 "to the remote target to interrupt the "
958 "execution of the program.\n"));
959 else if (interrupt_sequence_mode == interrupt_sequence_break)
960 fprintf_filtered (file,
961 _("send a break signal to the remote target "
962 "to interrupt the execution of the program.\n"));
963 else if (interrupt_sequence_mode == interrupt_sequence_break_g)
964 fprintf_filtered (file,
965 _("Send a break signal and 'g' a.k.a. Magic SysRq g to "
966 "the remote target to interrupt the execution "
967 "of Linux kernel.\n"));
968 else
969 internal_error (__FILE__, __LINE__,
970 _("Invalid value for interrupt_sequence_mode: %s."),
971 interrupt_sequence_mode);
972}
6426a772 973
9a7071a8
JB
974/* This boolean variable specifies whether interrupt_sequence is sent
975 to the remote target when gdb connects to it.
976 This is mostly needed when you debug the Linux kernel: The Linux kernel
977 expects BREAK g which is Magic SysRq g for connecting gdb. */
978static int interrupt_on_connect = 0;
c906108c 979
9a7071a8
JB
980/* This variable is used to implement the "set/show remotebreak" commands.
981 Since these commands are now deprecated in favor of "set/show remote
982 interrupt-sequence", it no longer has any effect on the code. */
c906108c
SS
983static int remote_break;
984
9a7071a8
JB
985static void
986set_remotebreak (char *args, int from_tty, struct cmd_list_element *c)
987{
988 if (remote_break)
989 interrupt_sequence_mode = interrupt_sequence_break;
990 else
991 interrupt_sequence_mode = interrupt_sequence_control_c;
992}
993
994static void
995show_remotebreak (struct ui_file *file, int from_tty,
996 struct cmd_list_element *c,
997 const char *value)
998{
999}
1000
c906108c
SS
1001/* This variable sets the number of bits in an address that are to be
1002 sent in a memory ("M" or "m") packet. Normally, after stripping
0df8b418 1003 leading zeros, the entire address would be sent. This variable
c906108c
SS
1004 restricts the address to REMOTE_ADDRESS_SIZE bits. HISTORY: The
1005 initial implementation of remote.c restricted the address sent in
1006 memory packets to ``host::sizeof long'' bytes - (typically 32
1007 bits). Consequently, for 64 bit targets, the upper 32 bits of an
1008 address was never sent. Since fixing this bug may cause a break in
1009 some remote targets this variable is principly provided to
23860348 1010 facilitate backward compatibility. */
c906108c 1011
883b9c6c 1012static unsigned int remote_address_size;
c906108c 1013
75c99385
PA
1014/* Temporary to track who currently owns the terminal. See
1015 remote_terminal_* for more details. */
6426a772
JM
1016
1017static int remote_async_terminal_ours_p;
1018
11cf8741 1019\f
11cf8741 1020/* User configurable variables for the number of characters in a
ea9c271d
DJ
1021 memory read/write packet. MIN (rsa->remote_packet_size,
1022 rsa->sizeof_g_packet) is the default. Some targets need smaller
24b06219 1023 values (fifo overruns, et.al.) and some users need larger values
ad10f812
AC
1024 (speed up transfers). The variables ``preferred_*'' (the user
1025 request), ``current_*'' (what was actually set) and ``forced_*''
23860348 1026 (Positive - a soft limit, negative - a hard limit). */
11cf8741
JM
1027
1028struct memory_packet_config
1029{
a121b7c1 1030 const char *name;
11cf8741
JM
1031 long size;
1032 int fixed_p;
1033};
1034
a5c0808e
PA
1035/* The default max memory-write-packet-size. The 16k is historical.
1036 (It came from older GDB's using alloca for buffers and the
1037 knowledge (folklore?) that some hosts don't cope very well with
1038 large alloca calls.) */
1039#define DEFAULT_MAX_MEMORY_PACKET_SIZE 16384
1040
1041/* The minimum remote packet size for memory transfers. Ensures we
1042 can write at least one byte. */
1043#define MIN_MEMORY_PACKET_SIZE 20
1044
11cf8741
JM
1045/* Compute the current size of a read/write packet. Since this makes
1046 use of ``actual_register_packet_size'' the computation is dynamic. */
1047
1048static long
1049get_memory_packet_size (struct memory_packet_config *config)
1050{
d01949b6 1051 struct remote_state *rs = get_remote_state ();
ea9c271d
DJ
1052 struct remote_arch_state *rsa = get_remote_arch_state ();
1053
11cf8741
JM
1054 long what_they_get;
1055 if (config->fixed_p)
1056 {
1057 if (config->size <= 0)
a5c0808e 1058 what_they_get = DEFAULT_MAX_MEMORY_PACKET_SIZE;
11cf8741
JM
1059 else
1060 what_they_get = config->size;
1061 }
1062 else
1063 {
ea9c271d 1064 what_they_get = get_remote_packet_size ();
23860348 1065 /* Limit the packet to the size specified by the user. */
11cf8741
JM
1066 if (config->size > 0
1067 && what_they_get > config->size)
1068 what_they_get = config->size;
be2a5f71
DJ
1069
1070 /* Limit it to the size of the targets ``g'' response unless we have
1071 permission from the stub to use a larger packet size. */
1072 if (rs->explicit_packet_size == 0
1073 && rsa->actual_register_packet_size > 0
1074 && what_they_get > rsa->actual_register_packet_size)
1075 what_they_get = rsa->actual_register_packet_size;
11cf8741 1076 }
a5c0808e
PA
1077 if (what_they_get < MIN_MEMORY_PACKET_SIZE)
1078 what_they_get = MIN_MEMORY_PACKET_SIZE;
6d820c5c
DJ
1079
1080 /* Make sure there is room in the global buffer for this packet
1081 (including its trailing NUL byte). */
1082 if (rs->buf_size < what_they_get + 1)
1083 {
1084 rs->buf_size = 2 * what_they_get;
224c3ddb 1085 rs->buf = (char *) xrealloc (rs->buf, 2 * what_they_get);
6d820c5c
DJ
1086 }
1087
11cf8741
JM
1088 return what_they_get;
1089}
1090
0df8b418 1091/* Update the size of a read/write packet. If they user wants
23860348 1092 something really big then do a sanity check. */
11cf8741
JM
1093
1094static void
1095set_memory_packet_size (char *args, struct memory_packet_config *config)
1096{
1097 int fixed_p = config->fixed_p;
1098 long size = config->size;
a744cf53 1099
11cf8741 1100 if (args == NULL)
8a3fe4f8 1101 error (_("Argument required (integer, `fixed' or `limited')."));
11cf8741
JM
1102 else if (strcmp (args, "hard") == 0
1103 || strcmp (args, "fixed") == 0)
1104 fixed_p = 1;
1105 else if (strcmp (args, "soft") == 0
1106 || strcmp (args, "limit") == 0)
1107 fixed_p = 0;
1108 else
1109 {
1110 char *end;
a744cf53 1111
11cf8741
JM
1112 size = strtoul (args, &end, 0);
1113 if (args == end)
8a3fe4f8 1114 error (_("Invalid %s (bad syntax)."), config->name);
a5c0808e
PA
1115
1116 /* Instead of explicitly capping the size of a packet to or
1117 disallowing it, the user is allowed to set the size to
1118 something arbitrarily large. */
11cf8741 1119 }
a5c0808e
PA
1120
1121 /* So that the query shows the correct value. */
1122 if (size <= 0)
1123 size = DEFAULT_MAX_MEMORY_PACKET_SIZE;
1124
23860348 1125 /* Extra checks? */
11cf8741
JM
1126 if (fixed_p && !config->fixed_p)
1127 {
e2e0b3e5
AC
1128 if (! query (_("The target may not be able to correctly handle a %s\n"
1129 "of %ld bytes. Change the packet size? "),
11cf8741 1130 config->name, size))
8a3fe4f8 1131 error (_("Packet size not changed."));
11cf8741 1132 }
23860348 1133 /* Update the config. */
11cf8741
JM
1134 config->fixed_p = fixed_p;
1135 config->size = size;
1136}
1137
1138static void
1139show_memory_packet_size (struct memory_packet_config *config)
1140{
a3f17187 1141 printf_filtered (_("The %s is %ld. "), config->name, config->size);
11cf8741 1142 if (config->fixed_p)
a3f17187 1143 printf_filtered (_("Packets are fixed at %ld bytes.\n"),
11cf8741
JM
1144 get_memory_packet_size (config));
1145 else
a3f17187 1146 printf_filtered (_("Packets are limited to %ld bytes.\n"),
11cf8741
JM
1147 get_memory_packet_size (config));
1148}
1149
1150static struct memory_packet_config memory_write_packet_config =
1151{
1152 "memory-write-packet-size",
1153};
1154
1155static void
1156set_memory_write_packet_size (char *args, int from_tty)
1157{
1158 set_memory_packet_size (args, &memory_write_packet_config);
1159}
1160
1161static void
1162show_memory_write_packet_size (char *args, int from_tty)
1163{
1164 show_memory_packet_size (&memory_write_packet_config);
1165}
1166
1167static long
1168get_memory_write_packet_size (void)
1169{
1170 return get_memory_packet_size (&memory_write_packet_config);
1171}
1172
1173static struct memory_packet_config memory_read_packet_config =
1174{
1175 "memory-read-packet-size",
1176};
1177
1178static void
1179set_memory_read_packet_size (char *args, int from_tty)
1180{
1181 set_memory_packet_size (args, &memory_read_packet_config);
1182}
1183
1184static void
1185show_memory_read_packet_size (char *args, int from_tty)
1186{
1187 show_memory_packet_size (&memory_read_packet_config);
1188}
1189
1190static long
1191get_memory_read_packet_size (void)
1192{
1193 long size = get_memory_packet_size (&memory_read_packet_config);
a744cf53 1194
11cf8741
JM
1195 /* FIXME: cagney/1999-11-07: Functions like getpkt() need to get an
1196 extra buffer size argument before the memory read size can be
ea9c271d
DJ
1197 increased beyond this. */
1198 if (size > get_remote_packet_size ())
1199 size = get_remote_packet_size ();
11cf8741
JM
1200 return size;
1201}
1202
11cf8741 1203\f
5a2468f5 1204/* Generic configuration support for packets the stub optionally
0df8b418 1205 supports. Allows the user to specify the use of the packet as well
23860348 1206 as allowing GDB to auto-detect support in the remote stub. */
5a2468f5
JM
1207
1208enum packet_support
1209 {
1210 PACKET_SUPPORT_UNKNOWN = 0,
1211 PACKET_ENABLE,
1212 PACKET_DISABLE
1213 };
1214
5a2468f5
JM
1215struct packet_config
1216 {
bb572ddd
DJ
1217 const char *name;
1218 const char *title;
4082afcc
PA
1219
1220 /* If auto, GDB auto-detects support for this packet or feature,
1221 either through qSupported, or by trying the packet and looking
1222 at the response. If true, GDB assumes the target supports this
ca4f7f8b
PA
1223 packet. If false, the packet is disabled. Configs that don't
1224 have an associated command always have this set to auto. */
7f19b9a2 1225 enum auto_boolean detect;
4082afcc
PA
1226
1227 /* Does the target support this packet? */
5a2468f5
JM
1228 enum packet_support support;
1229 };
1230
d471ea57 1231/* Analyze a packet's return value and update the packet config
23860348 1232 accordingly. */
d471ea57
AC
1233
1234enum packet_result
1235{
1236 PACKET_ERROR,
1237 PACKET_OK,
1238 PACKET_UNKNOWN
1239};
1240
4082afcc
PA
1241static enum packet_support packet_config_support (struct packet_config *config);
1242static enum packet_support packet_support (int packet);
5a2468f5
JM
1243
1244static void
fba45db2 1245show_packet_config_cmd (struct packet_config *config)
5a2468f5 1246{
a121b7c1 1247 const char *support = "internal-error";
a744cf53 1248
4082afcc 1249 switch (packet_config_support (config))
5a2468f5
JM
1250 {
1251 case PACKET_ENABLE:
1252 support = "enabled";
1253 break;
1254 case PACKET_DISABLE:
1255 support = "disabled";
1256 break;
1257 case PACKET_SUPPORT_UNKNOWN:
1258 support = "unknown";
1259 break;
1260 }
1261 switch (config->detect)
1262 {
7f19b9a2 1263 case AUTO_BOOLEAN_AUTO:
3e43a32a
MS
1264 printf_filtered (_("Support for the `%s' packet "
1265 "is auto-detected, currently %s.\n"),
37a105a1 1266 config->name, support);
5a2468f5 1267 break;
7f19b9a2
AC
1268 case AUTO_BOOLEAN_TRUE:
1269 case AUTO_BOOLEAN_FALSE:
37a105a1
DJ
1270 printf_filtered (_("Support for the `%s' packet is currently %s.\n"),
1271 config->name, support);
8e248173 1272 break;
5a2468f5
JM
1273 }
1274}
1275
1276static void
bb572ddd
DJ
1277add_packet_config_cmd (struct packet_config *config, const char *name,
1278 const char *title, int legacy)
d471ea57 1279{
5a2468f5
JM
1280 char *set_doc;
1281 char *show_doc;
d471ea57 1282 char *cmd_name;
3ed07be4 1283
5a2468f5
JM
1284 config->name = name;
1285 config->title = title;
b435e160
AC
1286 set_doc = xstrprintf ("Set use of remote protocol `%s' (%s) packet",
1287 name, title);
3e43a32a
MS
1288 show_doc = xstrprintf ("Show current use of remote "
1289 "protocol `%s' (%s) packet",
b435e160 1290 name, title);
d471ea57 1291 /* set/show TITLE-packet {auto,on,off} */
b435e160 1292 cmd_name = xstrprintf ("%s-packet", title);
e9e68a56 1293 add_setshow_auto_boolean_cmd (cmd_name, class_obscure,
3e43a32a
MS
1294 &config->detect, set_doc,
1295 show_doc, NULL, /* help_doc */
4082afcc 1296 NULL,
bb572ddd
DJ
1297 show_remote_protocol_packet_cmd,
1298 &remote_set_cmdlist, &remote_show_cmdlist);
1eefb858
TT
1299 /* The command code copies the documentation strings. */
1300 xfree (set_doc);
1301 xfree (show_doc);
23860348 1302 /* set/show remote NAME-packet {auto,on,off} -- legacy. */
d471ea57
AC
1303 if (legacy)
1304 {
1305 char *legacy_name;
a744cf53 1306
b435e160 1307 legacy_name = xstrprintf ("%s-packet", name);
d471ea57 1308 add_alias_cmd (legacy_name, cmd_name, class_obscure, 0,
bb572ddd 1309 &remote_set_cmdlist);
d471ea57 1310 add_alias_cmd (legacy_name, cmd_name, class_obscure, 0,
bb572ddd 1311 &remote_show_cmdlist);
d471ea57 1312 }
5a2468f5
JM
1313}
1314
d471ea57 1315static enum packet_result
a76d924d 1316packet_check_result (const char *buf)
5a2468f5 1317{
d471ea57 1318 if (buf[0] != '\0')
5a2468f5 1319 {
d471ea57 1320 /* The stub recognized the packet request. Check that the
23860348 1321 operation succeeded. */
a76d924d
DJ
1322 if (buf[0] == 'E'
1323 && isxdigit (buf[1]) && isxdigit (buf[2])
1324 && buf[3] == '\0')
1325 /* "Enn" - definitly an error. */
1326 return PACKET_ERROR;
1327
1328 /* Always treat "E." as an error. This will be used for
1329 more verbose error messages, such as E.memtypes. */
1330 if (buf[0] == 'E' && buf[1] == '.')
1331 return PACKET_ERROR;
1332
1333 /* The packet may or may not be OK. Just assume it is. */
1334 return PACKET_OK;
1335 }
1336 else
1337 /* The stub does not support the packet. */
1338 return PACKET_UNKNOWN;
1339}
1340
1341static enum packet_result
1342packet_ok (const char *buf, struct packet_config *config)
1343{
1344 enum packet_result result;
1345
4082afcc
PA
1346 if (config->detect != AUTO_BOOLEAN_TRUE
1347 && config->support == PACKET_DISABLE)
1348 internal_error (__FILE__, __LINE__,
1349 _("packet_ok: attempt to use a disabled packet"));
1350
a76d924d
DJ
1351 result = packet_check_result (buf);
1352 switch (result)
1353 {
1354 case PACKET_OK:
1355 case PACKET_ERROR:
1356 /* The stub recognized the packet request. */
4082afcc 1357 if (config->support == PACKET_SUPPORT_UNKNOWN)
d471ea57 1358 {
d471ea57
AC
1359 if (remote_debug)
1360 fprintf_unfiltered (gdb_stdlog,
4082afcc
PA
1361 "Packet %s (%s) is supported\n",
1362 config->name, config->title);
d471ea57 1363 config->support = PACKET_ENABLE;
d471ea57 1364 }
a76d924d
DJ
1365 break;
1366 case PACKET_UNKNOWN:
23860348 1367 /* The stub does not support the packet. */
4082afcc
PA
1368 if (config->detect == AUTO_BOOLEAN_AUTO
1369 && config->support == PACKET_ENABLE)
d471ea57 1370 {
4082afcc
PA
1371 /* If the stub previously indicated that the packet was
1372 supported then there is a protocol error. */
1373 error (_("Protocol error: %s (%s) conflicting enabled responses."),
1374 config->name, config->title);
1375 }
1376 else if (config->detect == AUTO_BOOLEAN_TRUE)
1377 {
1378 /* The user set it wrong. */
1379 error (_("Enabled packet %s (%s) not recognized by stub"),
1380 config->name, config->title);
d471ea57 1381 }
4082afcc
PA
1382
1383 if (remote_debug)
1384 fprintf_unfiltered (gdb_stdlog,
1385 "Packet %s (%s) is NOT supported\n",
1386 config->name, config->title);
1387 config->support = PACKET_DISABLE;
a76d924d 1388 break;
5a2468f5 1389 }
a76d924d
DJ
1390
1391 return result;
5a2468f5
JM
1392}
1393
444abaca
DJ
1394enum {
1395 PACKET_vCont = 0,
1396 PACKET_X,
1397 PACKET_qSymbol,
1398 PACKET_P,
1399 PACKET_p,
1400 PACKET_Z0,
1401 PACKET_Z1,
1402 PACKET_Z2,
1403 PACKET_Z3,
1404 PACKET_Z4,
15a201c8 1405 PACKET_vFile_setfs,
a6b151f1
DJ
1406 PACKET_vFile_open,
1407 PACKET_vFile_pread,
1408 PACKET_vFile_pwrite,
1409 PACKET_vFile_close,
1410 PACKET_vFile_unlink,
b9e7b9c3 1411 PACKET_vFile_readlink,
0a93529c 1412 PACKET_vFile_fstat,
0876f84a 1413 PACKET_qXfer_auxv,
23181151 1414 PACKET_qXfer_features,
c78fa86a 1415 PACKET_qXfer_exec_file,
cfa9d6d9 1416 PACKET_qXfer_libraries,
2268b414 1417 PACKET_qXfer_libraries_svr4,
fd79ecee 1418 PACKET_qXfer_memory_map,
0e7f50da
UW
1419 PACKET_qXfer_spu_read,
1420 PACKET_qXfer_spu_write,
07e059b5 1421 PACKET_qXfer_osdata,
dc146f7c 1422 PACKET_qXfer_threads,
0fb4aa4b 1423 PACKET_qXfer_statictrace_read,
b3b9301e 1424 PACKET_qXfer_traceframe_info,
169081d0 1425 PACKET_qXfer_uib,
711e434b 1426 PACKET_qGetTIBAddr,
444abaca 1427 PACKET_qGetTLSAddr,
be2a5f71 1428 PACKET_qSupported,
bd3eecc3 1429 PACKET_qTStatus,
89be2091 1430 PACKET_QPassSignals,
82075af2 1431 PACKET_QCatchSyscalls,
9b224c5e 1432 PACKET_QProgramSignals,
aefd8b33 1433 PACKET_QStartupWithShell,
0a2dde4a
SDJ
1434 PACKET_QEnvironmentHexEncoded,
1435 PACKET_QEnvironmentReset,
1436 PACKET_QEnvironmentUnset,
936d2992 1437 PACKET_qCRC,
08388c79 1438 PACKET_qSearch_memory,
2d717e4f
DJ
1439 PACKET_vAttach,
1440 PACKET_vRun,
a6f3e723 1441 PACKET_QStartNoAckMode,
82f73884 1442 PACKET_vKill,
4aa995e1
PA
1443 PACKET_qXfer_siginfo_read,
1444 PACKET_qXfer_siginfo_write,
0b16c5cf 1445 PACKET_qAttached,
4082afcc
PA
1446
1447 /* Support for conditional tracepoints. */
782b2b07 1448 PACKET_ConditionalTracepoints,
4082afcc
PA
1449
1450 /* Support for target-side breakpoint conditions. */
3788aec7 1451 PACKET_ConditionalBreakpoints,
4082afcc
PA
1452
1453 /* Support for target-side breakpoint commands. */
d3ce09f5 1454 PACKET_BreakpointCommands,
4082afcc
PA
1455
1456 /* Support for fast tracepoints. */
7a697b8d 1457 PACKET_FastTracepoints,
4082afcc
PA
1458
1459 /* Support for static tracepoints. */
0fb4aa4b 1460 PACKET_StaticTracepoints,
4082afcc
PA
1461
1462 /* Support for installing tracepoints while a trace experiment is
1463 running. */
1e4d1764 1464 PACKET_InstallInTrace,
4082afcc 1465
40ab02ce
MS
1466 PACKET_bc,
1467 PACKET_bs,
409873ef 1468 PACKET_TracepointSource,
d914c394 1469 PACKET_QAllow,
78d85199 1470 PACKET_qXfer_fdpic,
03583c20 1471 PACKET_QDisableRandomization,
d1feda86 1472 PACKET_QAgent,
f6f899bf 1473 PACKET_QTBuffer_size,
9accd112
MM
1474 PACKET_Qbtrace_off,
1475 PACKET_Qbtrace_bts,
b20a6524 1476 PACKET_Qbtrace_pt,
9accd112 1477 PACKET_qXfer_btrace,
4082afcc
PA
1478
1479 /* Support for the QNonStop packet. */
1480 PACKET_QNonStop,
1481
65706a29
PA
1482 /* Support for the QThreadEvents packet. */
1483 PACKET_QThreadEvents,
1484
4082afcc
PA
1485 /* Support for multi-process extensions. */
1486 PACKET_multiprocess_feature,
1487
1488 /* Support for enabling and disabling tracepoints while a trace
1489 experiment is running. */
1490 PACKET_EnableDisableTracepoints_feature,
1491
1492 /* Support for collecting strings using the tracenz bytecode. */
1493 PACKET_tracenz_feature,
1494
1495 /* Support for continuing to run a trace experiment while GDB is
1496 disconnected. */
1497 PACKET_DisconnectedTracing_feature,
1498
1499 /* Support for qXfer:libraries-svr4:read with a non-empty annex. */
1500 PACKET_augmented_libraries_svr4_read_feature,
1501
f4abbc16
MM
1502 /* Support for the qXfer:btrace-conf:read packet. */
1503 PACKET_qXfer_btrace_conf,
1504
d33501a5
MM
1505 /* Support for the Qbtrace-conf:bts:size packet. */
1506 PACKET_Qbtrace_conf_bts_size,
1507
f7e6eed5
PA
1508 /* Support for swbreak+ feature. */
1509 PACKET_swbreak_feature,
1510
1511 /* Support for hwbreak+ feature. */
1512 PACKET_hwbreak_feature,
1513
89245bc0
DB
1514 /* Support for fork events. */
1515 PACKET_fork_event_feature,
1516
1517 /* Support for vfork events. */
1518 PACKET_vfork_event_feature,
1519
b20a6524
MM
1520 /* Support for the Qbtrace-conf:pt:size packet. */
1521 PACKET_Qbtrace_conf_pt_size,
1522
94585166
DB
1523 /* Support for exec events. */
1524 PACKET_exec_event_feature,
1525
750ce8d1
YQ
1526 /* Support for query supported vCont actions. */
1527 PACKET_vContSupported,
1528
de979965
PA
1529 /* Support remote CTRL-C. */
1530 PACKET_vCtrlC,
1531
f2faf941
PA
1532 /* Support TARGET_WAITKIND_NO_RESUMED. */
1533 PACKET_no_resumed,
1534
444abaca
DJ
1535 PACKET_MAX
1536};
506fb367 1537
444abaca 1538static struct packet_config remote_protocol_packets[PACKET_MAX];
dc8acb97 1539
f7e6eed5
PA
1540/* Returns the packet's corresponding "set remote foo-packet" command
1541 state. See struct packet_config for more details. */
1542
1543static enum auto_boolean
1544packet_set_cmd_state (int packet)
1545{
1546 return remote_protocol_packets[packet].detect;
1547}
1548
4082afcc
PA
1549/* Returns whether a given packet or feature is supported. This takes
1550 into account the state of the corresponding "set remote foo-packet"
1551 command, which may be used to bypass auto-detection. */
dc8acb97 1552
4082afcc
PA
1553static enum packet_support
1554packet_config_support (struct packet_config *config)
1555{
1556 switch (config->detect)
444abaca 1557 {
4082afcc
PA
1558 case AUTO_BOOLEAN_TRUE:
1559 return PACKET_ENABLE;
1560 case AUTO_BOOLEAN_FALSE:
1561 return PACKET_DISABLE;
1562 case AUTO_BOOLEAN_AUTO:
1563 return config->support;
1564 default:
1565 gdb_assert_not_reached (_("bad switch"));
444abaca 1566 }
4082afcc
PA
1567}
1568
1569/* Same as packet_config_support, but takes the packet's enum value as
1570 argument. */
1571
1572static enum packet_support
1573packet_support (int packet)
1574{
1575 struct packet_config *config = &remote_protocol_packets[packet];
1576
1577 return packet_config_support (config);
dc8acb97
MS
1578}
1579
5a2468f5 1580static void
444abaca
DJ
1581show_remote_protocol_packet_cmd (struct ui_file *file, int from_tty,
1582 struct cmd_list_element *c,
1583 const char *value)
5a2468f5 1584{
444abaca 1585 struct packet_config *packet;
5a2468f5 1586
444abaca
DJ
1587 for (packet = remote_protocol_packets;
1588 packet < &remote_protocol_packets[PACKET_MAX];
1589 packet++)
1590 {
1591 if (&packet->detect == c->var)
1592 {
1593 show_packet_config_cmd (packet);
1594 return;
1595 }
1596 }
9b20d036 1597 internal_error (__FILE__, __LINE__, _("Could not find config for %s"),
444abaca 1598 c->name);
5a2468f5
JM
1599}
1600
d471ea57
AC
1601/* Should we try one of the 'Z' requests? */
1602
1603enum Z_packet_type
1604{
1605 Z_PACKET_SOFTWARE_BP,
1606 Z_PACKET_HARDWARE_BP,
1607 Z_PACKET_WRITE_WP,
1608 Z_PACKET_READ_WP,
1609 Z_PACKET_ACCESS_WP,
1610 NR_Z_PACKET_TYPES
1611};
96baa820 1612
d471ea57 1613/* For compatibility with older distributions. Provide a ``set remote
23860348 1614 Z-packet ...'' command that updates all the Z packet types. */
d471ea57 1615
7f19b9a2 1616static enum auto_boolean remote_Z_packet_detect;
96baa820
JM
1617
1618static void
fba45db2
KB
1619set_remote_protocol_Z_packet_cmd (char *args, int from_tty,
1620 struct cmd_list_element *c)
96baa820 1621{
d471ea57 1622 int i;
a744cf53 1623
d471ea57 1624 for (i = 0; i < NR_Z_PACKET_TYPES; i++)
4082afcc 1625 remote_protocol_packets[PACKET_Z0 + i].detect = remote_Z_packet_detect;
96baa820
JM
1626}
1627
1628static void
08546159
AC
1629show_remote_protocol_Z_packet_cmd (struct ui_file *file, int from_tty,
1630 struct cmd_list_element *c,
1631 const char *value)
96baa820 1632{
d471ea57 1633 int i;
a744cf53 1634
d471ea57
AC
1635 for (i = 0; i < NR_Z_PACKET_TYPES; i++)
1636 {
444abaca 1637 show_packet_config_cmd (&remote_protocol_packets[PACKET_Z0 + i]);
d471ea57 1638 }
96baa820
JM
1639}
1640
4082afcc
PA
1641/* Returns true if the multi-process extensions are in effect. */
1642
1643static int
1644remote_multi_process_p (struct remote_state *rs)
1645{
1646 return packet_support (PACKET_multiprocess_feature) == PACKET_ENABLE;
1647}
1648
de0d863e
DB
1649/* Returns true if fork events are supported. */
1650
1651static int
1652remote_fork_event_p (struct remote_state *rs)
1653{
1654 return packet_support (PACKET_fork_event_feature) == PACKET_ENABLE;
1655}
1656
c269dbdb
DB
1657/* Returns true if vfork events are supported. */
1658
1659static int
1660remote_vfork_event_p (struct remote_state *rs)
1661{
1662 return packet_support (PACKET_vfork_event_feature) == PACKET_ENABLE;
1663}
1664
d46addbb
DB
1665/* Returns true if exec events are supported. */
1666
1667static int
1668remote_exec_event_p (struct remote_state *rs)
1669{
1670 return packet_support (PACKET_exec_event_feature) == PACKET_ENABLE;
1671}
1672
cbb8991c
DB
1673/* Insert fork catchpoint target routine. If fork events are enabled
1674 then return success, nothing more to do. */
1675
1676static int
1677remote_insert_fork_catchpoint (struct target_ops *ops, int pid)
1678{
1679 struct remote_state *rs = get_remote_state ();
1680
1681 return !remote_fork_event_p (rs);
1682}
1683
1684/* Remove fork catchpoint target routine. Nothing to do, just
1685 return success. */
1686
1687static int
1688remote_remove_fork_catchpoint (struct target_ops *ops, int pid)
1689{
1690 return 0;
1691}
1692
1693/* Insert vfork catchpoint target routine. If vfork events are enabled
1694 then return success, nothing more to do. */
1695
1696static int
1697remote_insert_vfork_catchpoint (struct target_ops *ops, int pid)
1698{
1699 struct remote_state *rs = get_remote_state ();
1700
1701 return !remote_vfork_event_p (rs);
1702}
1703
1704/* Remove vfork catchpoint target routine. Nothing to do, just
1705 return success. */
1706
1707static int
1708remote_remove_vfork_catchpoint (struct target_ops *ops, int pid)
1709{
1710 return 0;
1711}
1712
d46addbb
DB
1713/* Insert exec catchpoint target routine. If exec events are
1714 enabled, just return success. */
1715
1716static int
1717remote_insert_exec_catchpoint (struct target_ops *ops, int pid)
1718{
1719 struct remote_state *rs = get_remote_state ();
1720
1721 return !remote_exec_event_p (rs);
1722}
1723
1724/* Remove exec catchpoint target routine. Nothing to do, just
1725 return success. */
1726
1727static int
1728remote_remove_exec_catchpoint (struct target_ops *ops, int pid)
1729{
1730 return 0;
1731}
1732
74531fed
PA
1733\f
1734/* Asynchronous signal handle registered as event loop source for
1735 when we have pending events ready to be passed to the core. */
1736
1737static struct async_event_handler *remote_async_inferior_event_token;
1738
c906108c
SS
1739\f
1740
79d7f229
PA
1741static ptid_t magic_null_ptid;
1742static ptid_t not_sent_ptid;
1743static ptid_t any_thread_ptid;
1744
0b16c5cf
PA
1745/* Find out if the stub attached to PID (and hence GDB should offer to
1746 detach instead of killing it when bailing out). */
1747
1748static int
1749remote_query_attached (int pid)
1750{
1751 struct remote_state *rs = get_remote_state ();
bba74b36 1752 size_t size = get_remote_packet_size ();
0b16c5cf 1753
4082afcc 1754 if (packet_support (PACKET_qAttached) == PACKET_DISABLE)
0b16c5cf
PA
1755 return 0;
1756
1757 if (remote_multi_process_p (rs))
bba74b36 1758 xsnprintf (rs->buf, size, "qAttached:%x", pid);
0b16c5cf 1759 else
bba74b36 1760 xsnprintf (rs->buf, size, "qAttached");
0b16c5cf
PA
1761
1762 putpkt (rs->buf);
1763 getpkt (&rs->buf, &rs->buf_size, 0);
1764
1765 switch (packet_ok (rs->buf,
1554e9be 1766 &remote_protocol_packets[PACKET_qAttached]))
0b16c5cf
PA
1767 {
1768 case PACKET_OK:
1769 if (strcmp (rs->buf, "1") == 0)
1770 return 1;
1771 break;
1772 case PACKET_ERROR:
1773 warning (_("Remote failure reply: %s"), rs->buf);
1774 break;
1775 case PACKET_UNKNOWN:
1776 break;
1777 }
1778
1779 return 0;
1780}
1781
49c62f2e
PA
1782/* Add PID to GDB's inferior table. If FAKE_PID_P is true, then PID
1783 has been invented by GDB, instead of reported by the target. Since
1784 we can be connected to a remote system before before knowing about
1785 any inferior, mark the target with execution when we find the first
1786 inferior. If ATTACHED is 1, then we had just attached to this
1787 inferior. If it is 0, then we just created this inferior. If it
1788 is -1, then try querying the remote stub to find out if it had
1b6e6f5c
GB
1789 attached to the inferior or not. If TRY_OPEN_EXEC is true then
1790 attempt to open this inferior's executable as the main executable
1791 if no main executable is open already. */
1941c569
PA
1792
1793static struct inferior *
1b6e6f5c
GB
1794remote_add_inferior (int fake_pid_p, int pid, int attached,
1795 int try_open_exec)
1941c569 1796{
1941c569
PA
1797 struct inferior *inf;
1798
0b16c5cf
PA
1799 /* Check whether this process we're learning about is to be
1800 considered attached, or if is to be considered to have been
1801 spawned by the stub. */
1802 if (attached == -1)
1803 attached = remote_query_attached (pid);
1804
f5656ead 1805 if (gdbarch_has_global_solist (target_gdbarch ()))
6c95b8df
PA
1806 {
1807 /* If the target shares code across all inferiors, then every
1808 attach adds a new inferior. */
1809 inf = add_inferior (pid);
1810
1811 /* ... and every inferior is bound to the same program space.
1812 However, each inferior may still have its own address
1813 space. */
1814 inf->aspace = maybe_new_address_space ();
1815 inf->pspace = current_program_space;
1816 }
1817 else
1818 {
1819 /* In the traditional debugging scenario, there's a 1-1 match
1820 between program/address spaces. We simply bind the inferior
1821 to the program space's address space. */
1822 inf = current_inferior ();
1823 inferior_appeared (inf, pid);
1824 }
1941c569 1825
0b16c5cf 1826 inf->attach_flag = attached;
49c62f2e 1827 inf->fake_pid_p = fake_pid_p;
0b16c5cf 1828
1b6e6f5c
GB
1829 /* If no main executable is currently open then attempt to
1830 open the file that was executed to create this inferior. */
835205d0 1831 if (try_open_exec && get_exec_file (0) == NULL)
bb805577 1832 exec_file_locate_attach (pid, 0, 1);
1b6e6f5c 1833
1941c569
PA
1834 return inf;
1835}
1836
85ad3aaf
PA
1837static struct private_thread_info *
1838 get_private_info_thread (struct thread_info *info);
1839
1941c569
PA
1840/* Add thread PTID to GDB's thread list. Tag it as executing/running
1841 according to RUNNING. */
1842
c906108c 1843static void
0d5b594f 1844remote_add_thread (ptid_t ptid, int running, int executing)
c906108c 1845{
b7ea362b 1846 struct remote_state *rs = get_remote_state ();
85ad3aaf 1847 struct thread_info *thread;
b7ea362b
PA
1848
1849 /* GDB historically didn't pull threads in the initial connection
1850 setup. If the remote target doesn't even have a concept of
1851 threads (e.g., a bare-metal target), even if internally we
1852 consider that a single-threaded target, mentioning a new thread
1853 might be confusing to the user. Be silent then, preserving the
1854 age old behavior. */
1855 if (rs->starting_up)
85ad3aaf 1856 thread = add_thread_silent (ptid);
b7ea362b 1857 else
85ad3aaf 1858 thread = add_thread (ptid);
1941c569 1859
85ad3aaf 1860 get_private_info_thread (thread)->vcont_resumed = executing;
0d5b594f 1861 set_executing (ptid, executing);
1941c569
PA
1862 set_running (ptid, running);
1863}
1864
1865/* Come here when we learn about a thread id from the remote target.
1866 It may be the first time we hear about such thread, so take the
1867 opportunity to add it to GDB's thread list. In case this is the
1868 first time we're noticing its corresponding inferior, add it to
0d5b594f
PA
1869 GDB's inferior list as well. EXECUTING indicates whether the
1870 thread is (internally) executing or stopped. */
1941c569
PA
1871
1872static void
0d5b594f 1873remote_notice_new_inferior (ptid_t currthread, int executing)
1941c569 1874{
0d5b594f
PA
1875 /* In non-stop mode, we assume new found threads are (externally)
1876 running until proven otherwise with a stop reply. In all-stop,
1877 we can only get here if all threads are stopped. */
1878 int running = target_is_non_stop_p () ? 1 : 0;
1879
c906108c
SS
1880 /* If this is a new thread, add it to GDB's thread list.
1881 If we leave it up to WFI to do this, bad things will happen. */
82f73884
PA
1882
1883 if (in_thread_list (currthread) && is_exited (currthread))
1884 {
1885 /* We're seeing an event on a thread id we knew had exited.
1886 This has to be a new thread reusing the old id. Add it. */
0d5b594f 1887 remote_add_thread (currthread, running, executing);
82f73884
PA
1888 return;
1889 }
1890
79d7f229 1891 if (!in_thread_list (currthread))
c0a2216e 1892 {
1941c569 1893 struct inferior *inf = NULL;
bad34192 1894 int pid = ptid_get_pid (currthread);
1941c569 1895
bad34192
PA
1896 if (ptid_is_pid (inferior_ptid)
1897 && pid == ptid_get_pid (inferior_ptid))
c0a2216e
PA
1898 {
1899 /* inferior_ptid has no thread member yet. This can happen
1900 with the vAttach -> remote_wait,"TAAthread:" path if the
1901 stub doesn't support qC. This is the first stop reported
1902 after an attach, so this is the main thread. Update the
1903 ptid in the thread list. */
bad34192
PA
1904 if (in_thread_list (pid_to_ptid (pid)))
1905 thread_change_ptid (inferior_ptid, currthread);
1906 else
1907 {
0d5b594f 1908 remote_add_thread (currthread, running, executing);
bad34192
PA
1909 inferior_ptid = currthread;
1910 }
dc146f7c 1911 return;
c0a2216e 1912 }
82f73884
PA
1913
1914 if (ptid_equal (magic_null_ptid, inferior_ptid))
c0a2216e
PA
1915 {
1916 /* inferior_ptid is not set yet. This can happen with the
1917 vRun -> remote_wait,"TAAthread:" path if the stub
1918 doesn't support qC. This is the first stop reported
1919 after an attach, so this is the main thread. Update the
1920 ptid in the thread list. */
dc146f7c 1921 thread_change_ptid (inferior_ptid, currthread);
82f73884 1922 return;
c0a2216e 1923 }
82f73884 1924
29c87f7f
PA
1925 /* When connecting to a target remote, or to a target
1926 extended-remote which already was debugging an inferior, we
1927 may not know about it yet. Add it before adding its child
1928 thread, so notifications are emitted in a sensible order. */
1929 if (!in_inferior_list (ptid_get_pid (currthread)))
49c62f2e
PA
1930 {
1931 struct remote_state *rs = get_remote_state ();
1932 int fake_pid_p = !remote_multi_process_p (rs);
1933
1934 inf = remote_add_inferior (fake_pid_p,
1b6e6f5c 1935 ptid_get_pid (currthread), -1, 1);
49c62f2e 1936 }
29c87f7f 1937
82f73884 1938 /* This is really a new thread. Add it. */
0d5b594f 1939 remote_add_thread (currthread, running, executing);
1941c569
PA
1940
1941 /* If we found a new inferior, let the common code do whatever
1942 it needs to with it (e.g., read shared libraries, insert
b7ea362b
PA
1943 breakpoints), unless we're just setting up an all-stop
1944 connection. */
1941c569 1945 if (inf != NULL)
b7ea362b
PA
1946 {
1947 struct remote_state *rs = get_remote_state ();
1948
6efcd9a8 1949 if (!rs->starting_up)
0d5b594f 1950 notice_new_inferior (currthread, executing, 0);
b7ea362b 1951 }
c0a2216e 1952 }
c906108c
SS
1953}
1954
85ad3aaf 1955/* Return THREAD's private thread data, creating it if necessary. */
dc146f7c 1956
70221824 1957static struct private_thread_info *
85ad3aaf 1958get_private_info_thread (struct thread_info *thread)
dc146f7c 1959{
85ad3aaf 1960 gdb_assert (thread != NULL);
dc146f7c 1961
85ad3aaf 1962 if (thread->priv == NULL)
dc146f7c 1963 {
85ad3aaf
PA
1964 struct private_thread_info *priv = XNEW (struct private_thread_info);
1965
1966 thread->private_dtor = free_private_thread_info;
1967 thread->priv = priv;
1968
1969 priv->core = -1;
1970 priv->extra = NULL;
1971 priv->name = NULL;
1972 priv->name = NULL;
1973 priv->last_resume_step = 0;
1974 priv->last_resume_sig = GDB_SIGNAL_0;
1975 priv->vcont_resumed = 0;
dc146f7c
VP
1976 }
1977
85ad3aaf
PA
1978 return thread->priv;
1979}
1980
1981/* Return PTID's private thread data, creating it if necessary. */
1982
1983static struct private_thread_info *
1984get_private_info_ptid (ptid_t ptid)
1985{
1986 struct thread_info *info = find_thread_ptid (ptid);
1987
1988 return get_private_info_thread (info);
dc146f7c
VP
1989}
1990
74531fed
PA
1991/* Call this function as a result of
1992 1) A halt indication (T packet) containing a thread id
1993 2) A direct query of currthread
0df8b418 1994 3) Successful execution of set thread */
74531fed
PA
1995
1996static void
47f8a51d 1997record_currthread (struct remote_state *rs, ptid_t currthread)
74531fed 1998{
47f8a51d 1999 rs->general_thread = currthread;
74531fed
PA
2000}
2001
89be2091
DJ
2002/* If 'QPassSignals' is supported, tell the remote stub what signals
2003 it can simply pass through to the inferior without reporting. */
2004
2005static void
94bedb42
TT
2006remote_pass_signals (struct target_ops *self,
2007 int numsigs, unsigned char *pass_signals)
89be2091 2008{
4082afcc 2009 if (packet_support (PACKET_QPassSignals) != PACKET_DISABLE)
89be2091
DJ
2010 {
2011 char *pass_packet, *p;
89be2091 2012 int count = 0, i;
747dc59d 2013 struct remote_state *rs = get_remote_state ();
89be2091
DJ
2014
2015 gdb_assert (numsigs < 256);
2016 for (i = 0; i < numsigs; i++)
2017 {
2455069d 2018 if (pass_signals[i])
89be2091
DJ
2019 count++;
2020 }
224c3ddb 2021 pass_packet = (char *) xmalloc (count * 3 + strlen ("QPassSignals:") + 1);
89be2091
DJ
2022 strcpy (pass_packet, "QPassSignals:");
2023 p = pass_packet + strlen (pass_packet);
2024 for (i = 0; i < numsigs; i++)
2025 {
2455069d 2026 if (pass_signals[i])
89be2091
DJ
2027 {
2028 if (i >= 16)
2029 *p++ = tohex (i >> 4);
2030 *p++ = tohex (i & 15);
2031 if (count)
2032 *p++ = ';';
2033 else
2034 break;
2035 count--;
2036 }
2037 }
2038 *p = 0;
747dc59d 2039 if (!rs->last_pass_packet || strcmp (rs->last_pass_packet, pass_packet))
89be2091 2040 {
89be2091
DJ
2041 putpkt (pass_packet);
2042 getpkt (&rs->buf, &rs->buf_size, 0);
8dc5b319 2043 packet_ok (rs->buf, &remote_protocol_packets[PACKET_QPassSignals]);
747dc59d
TT
2044 if (rs->last_pass_packet)
2045 xfree (rs->last_pass_packet);
2046 rs->last_pass_packet = pass_packet;
89be2091
DJ
2047 }
2048 else
2049 xfree (pass_packet);
2050 }
2051}
2052
82075af2
JS
2053/* If 'QCatchSyscalls' is supported, tell the remote stub
2054 to report syscalls to GDB. */
2055
2056static int
2057remote_set_syscall_catchpoint (struct target_ops *self,
2058 int pid, int needed, int any_count,
2059 int table_size, int *table)
2060{
2061 char *catch_packet;
2062 enum packet_result result;
2063 int n_sysno = 0;
2064
2065 if (packet_support (PACKET_QCatchSyscalls) == PACKET_DISABLE)
2066 {
2067 /* Not supported. */
2068 return 1;
2069 }
2070
2071 if (needed && !any_count)
2072 {
2073 int i;
2074
2075 /* Count how many syscalls are to be caught (table[sysno] != 0). */
2076 for (i = 0; i < table_size; i++)
2077 {
2078 if (table[i] != 0)
2079 n_sysno++;
2080 }
2081 }
2082
2083 if (remote_debug)
2084 {
2085 fprintf_unfiltered (gdb_stdlog,
2086 "remote_set_syscall_catchpoint "
2087 "pid %d needed %d any_count %d n_sysno %d\n",
2088 pid, needed, any_count, n_sysno);
2089 }
2090
2091 if (needed)
2092 {
2093 /* Prepare a packet with the sysno list, assuming max 8+1
2094 characters for a sysno. If the resulting packet size is too
2095 big, fallback on the non-selective packet. */
2096 const int maxpktsz = strlen ("QCatchSyscalls:1") + n_sysno * 9 + 1;
2097
c0518081 2098 catch_packet = (char *) xmalloc (maxpktsz);
82075af2
JS
2099 strcpy (catch_packet, "QCatchSyscalls:1");
2100 if (!any_count)
2101 {
2102 int i;
2103 char *p;
2104
2105 p = catch_packet;
2106 p += strlen (p);
2107
2108 /* Add in catch_packet each syscall to be caught (table[i] != 0). */
2109 for (i = 0; i < table_size; i++)
2110 {
2111 if (table[i] != 0)
2112 p += xsnprintf (p, catch_packet + maxpktsz - p, ";%x", i);
2113 }
2114 }
2115 if (strlen (catch_packet) > get_remote_packet_size ())
2116 {
2117 /* catch_packet too big. Fallback to less efficient
2118 non selective mode, with GDB doing the filtering. */
2119 catch_packet[sizeof ("QCatchSyscalls:1") - 1] = 0;
2120 }
2121 }
2122 else
2123 catch_packet = xstrdup ("QCatchSyscalls:0");
2124
2125 {
2126 struct cleanup *old_chain = make_cleanup (xfree, catch_packet);
2127 struct remote_state *rs = get_remote_state ();
2128
2129 putpkt (catch_packet);
2130 getpkt (&rs->buf, &rs->buf_size, 0);
2131 result = packet_ok (rs->buf, &remote_protocol_packets[PACKET_QCatchSyscalls]);
2132 do_cleanups (old_chain);
2133 if (result == PACKET_OK)
2134 return 0;
2135 else
2136 return -1;
2137 }
2138}
2139
9b224c5e
PA
2140/* If 'QProgramSignals' is supported, tell the remote stub what
2141 signals it should pass through to the inferior when detaching. */
2142
2143static void
daf5e9b6
TT
2144remote_program_signals (struct target_ops *self,
2145 int numsigs, unsigned char *signals)
9b224c5e 2146{
4082afcc 2147 if (packet_support (PACKET_QProgramSignals) != PACKET_DISABLE)
9b224c5e
PA
2148 {
2149 char *packet, *p;
2150 int count = 0, i;
5e4a05c4 2151 struct remote_state *rs = get_remote_state ();
9b224c5e
PA
2152
2153 gdb_assert (numsigs < 256);
2154 for (i = 0; i < numsigs; i++)
2155 {
2156 if (signals[i])
2157 count++;
2158 }
224c3ddb 2159 packet = (char *) xmalloc (count * 3 + strlen ("QProgramSignals:") + 1);
9b224c5e
PA
2160 strcpy (packet, "QProgramSignals:");
2161 p = packet + strlen (packet);
2162 for (i = 0; i < numsigs; i++)
2163 {
2164 if (signal_pass_state (i))
2165 {
2166 if (i >= 16)
2167 *p++ = tohex (i >> 4);
2168 *p++ = tohex (i & 15);
2169 if (count)
2170 *p++ = ';';
2171 else
2172 break;
2173 count--;
2174 }
2175 }
2176 *p = 0;
5e4a05c4
TT
2177 if (!rs->last_program_signals_packet
2178 || strcmp (rs->last_program_signals_packet, packet) != 0)
9b224c5e 2179 {
9b224c5e
PA
2180 putpkt (packet);
2181 getpkt (&rs->buf, &rs->buf_size, 0);
8dc5b319 2182 packet_ok (rs->buf, &remote_protocol_packets[PACKET_QProgramSignals]);
5e4a05c4
TT
2183 xfree (rs->last_program_signals_packet);
2184 rs->last_program_signals_packet = packet;
9b224c5e
PA
2185 }
2186 else
2187 xfree (packet);
2188 }
2189}
2190
79d7f229
PA
2191/* If PTID is MAGIC_NULL_PTID, don't set any thread. If PTID is
2192 MINUS_ONE_PTID, set the thread to -1, so the stub returns the
2193 thread. If GEN is set, set the general thread, if not, then set
2194 the step/continue thread. */
c906108c 2195static void
d62a8ae2 2196set_thread (ptid_t ptid, int gen)
c906108c 2197{
d01949b6 2198 struct remote_state *rs = get_remote_state ();
47f8a51d 2199 ptid_t state = gen ? rs->general_thread : rs->continue_thread;
6d820c5c 2200 char *buf = rs->buf;
79d7f229 2201 char *endbuf = rs->buf + get_remote_packet_size ();
c906108c 2202
79d7f229 2203 if (ptid_equal (state, ptid))
c906108c
SS
2204 return;
2205
79d7f229
PA
2206 *buf++ = 'H';
2207 *buf++ = gen ? 'g' : 'c';
2208 if (ptid_equal (ptid, magic_null_ptid))
2209 xsnprintf (buf, endbuf - buf, "0");
2210 else if (ptid_equal (ptid, any_thread_ptid))
2211 xsnprintf (buf, endbuf - buf, "0");
2212 else if (ptid_equal (ptid, minus_one_ptid))
2213 xsnprintf (buf, endbuf - buf, "-1");
2214 else
82f73884 2215 write_ptid (buf, endbuf, ptid);
79d7f229 2216 putpkt (rs->buf);
6d820c5c 2217 getpkt (&rs->buf, &rs->buf_size, 0);
c906108c 2218 if (gen)
47f8a51d 2219 rs->general_thread = ptid;
c906108c 2220 else
47f8a51d 2221 rs->continue_thread = ptid;
c906108c 2222}
79d7f229
PA
2223
2224static void
d62a8ae2 2225set_general_thread (ptid_t ptid)
79d7f229
PA
2226{
2227 set_thread (ptid, 1);
2228}
2229
2230static void
d62a8ae2 2231set_continue_thread (ptid_t ptid)
79d7f229
PA
2232{
2233 set_thread (ptid, 0);
2234}
2235
3c9c4b83
PA
2236/* Change the remote current process. Which thread within the process
2237 ends up selected isn't important, as long as it is the same process
2238 as what INFERIOR_PTID points to.
2239
2240 This comes from that fact that there is no explicit notion of
2241 "selected process" in the protocol. The selected process for
2242 general operations is the process the selected general thread
2243 belongs to. */
2244
2245static void
2246set_general_process (void)
2247{
2248 struct remote_state *rs = get_remote_state ();
2249
2250 /* If the remote can't handle multiple processes, don't bother. */
8020350c 2251 if (!remote_multi_process_p (rs))
3c9c4b83
PA
2252 return;
2253
2254 /* We only need to change the remote current thread if it's pointing
2255 at some other process. */
47f8a51d 2256 if (ptid_get_pid (rs->general_thread) != ptid_get_pid (inferior_ptid))
3c9c4b83
PA
2257 set_general_thread (inferior_ptid);
2258}
2259
c906108c 2260\f
7d1a114c
PA
2261/* Return nonzero if this is the main thread that we made up ourselves
2262 to model non-threaded targets as single-threaded. */
c906108c
SS
2263
2264static int
7d1a114c 2265remote_thread_always_alive (struct target_ops *ops, ptid_t ptid)
c906108c 2266{
c0a2216e
PA
2267 if (ptid_equal (ptid, magic_null_ptid))
2268 /* The main thread is always alive. */
2269 return 1;
2270
ba348170 2271 if (ptid_get_pid (ptid) != 0 && ptid_get_lwp (ptid) == 0)
c0a2216e
PA
2272 /* The main thread is always alive. This can happen after a
2273 vAttach, if the remote side doesn't support
2274 multi-threading. */
2275 return 1;
2276
7d1a114c
PA
2277 return 0;
2278}
2279
2280/* Return nonzero if the thread PTID is still alive on the remote
2281 system. */
2282
2283static int
2284remote_thread_alive (struct target_ops *ops, ptid_t ptid)
2285{
2286 struct remote_state *rs = get_remote_state ();
2287 char *p, *endp;
2288
2289 /* Check if this is a thread that we made up ourselves to model
2290 non-threaded targets as single-threaded. */
2291 if (remote_thread_always_alive (ops, ptid))
2292 return 1;
2293
82f73884
PA
2294 p = rs->buf;
2295 endp = rs->buf + get_remote_packet_size ();
2296
2297 *p++ = 'T';
2298 write_ptid (p, endp, ptid);
2299
2e9f7625 2300 putpkt (rs->buf);
6d820c5c 2301 getpkt (&rs->buf, &rs->buf_size, 0);
2e9f7625 2302 return (rs->buf[0] == 'O' && rs->buf[1] == 'K');
c906108c
SS
2303}
2304
79efa585
SM
2305/* Return a pointer to a thread name if we know it and NULL otherwise.
2306 The thread_info object owns the memory for the name. */
2307
2308static const char *
2309remote_thread_name (struct target_ops *ops, struct thread_info *info)
2310{
2311 if (info->priv != NULL)
2312 return info->priv->name;
2313
2314 return NULL;
2315}
2316
c906108c
SS
2317/* About these extended threadlist and threadinfo packets. They are
2318 variable length packets but, the fields within them are often fixed
2319 length. They are redundent enough to send over UDP as is the
2320 remote protocol in general. There is a matching unit test module
2321 in libstub. */
2322
23860348 2323/* WARNING: This threadref data structure comes from the remote O.S.,
0df8b418 2324 libstub protocol encoding, and remote.c. It is not particularly
23860348 2325 changable. */
cce74817
JM
2326
2327/* Right now, the internal structure is int. We want it to be bigger.
0df8b418 2328 Plan to fix this. */
cce74817 2329
23860348 2330typedef int gdb_threadref; /* Internal GDB thread reference. */
cce74817 2331
9d1f7ab2 2332/* gdb_ext_thread_info is an internal GDB data structure which is
cfde0993 2333 equivalent to the reply of the remote threadinfo packet. */
cce74817
JM
2334
2335struct gdb_ext_thread_info
c5aa993b 2336 {
23860348 2337 threadref threadid; /* External form of thread reference. */
2bc416ba 2338 int active; /* Has state interesting to GDB?
23860348 2339 regs, stack. */
2bc416ba 2340 char display[256]; /* Brief state display, name,
cedea757 2341 blocked/suspended. */
23860348 2342 char shortname[32]; /* To be used to name threads. */
2bc416ba 2343 char more_display[256]; /* Long info, statistics, queue depth,
23860348 2344 whatever. */
c5aa993b 2345 };
cce74817
JM
2346
2347/* The volume of remote transfers can be limited by submitting
2348 a mask containing bits specifying the desired information.
2349 Use a union of these values as the 'selection' parameter to
0df8b418 2350 get_thread_info. FIXME: Make these TAG names more thread specific. */
cce74817
JM
2351
2352#define TAG_THREADID 1
2353#define TAG_EXISTS 2
2354#define TAG_DISPLAY 4
2355#define TAG_THREADNAME 8
c5aa993b 2356#define TAG_MOREDISPLAY 16
cce74817 2357
23860348 2358#define BUF_THREAD_ID_SIZE (OPAQUETHREADBYTES * 2)
c906108c 2359
a14ed312 2360static char *unpack_nibble (char *buf, int *val);
cce74817 2361
a14ed312 2362static char *unpack_byte (char *buf, int *value);
cce74817 2363
a14ed312 2364static char *pack_int (char *buf, int value);
cce74817 2365
a14ed312 2366static char *unpack_int (char *buf, int *value);
cce74817 2367
a14ed312 2368static char *unpack_string (char *src, char *dest, int length);
cce74817 2369
23860348 2370static char *pack_threadid (char *pkt, threadref *id);
cce74817 2371
23860348 2372static char *unpack_threadid (char *inbuf, threadref *id);
cce74817 2373
23860348 2374void int_to_threadref (threadref *id, int value);
cce74817 2375
23860348 2376static int threadref_to_int (threadref *ref);
cce74817 2377
23860348 2378static void copy_threadref (threadref *dest, threadref *src);
cce74817 2379
23860348 2380static int threadmatch (threadref *dest, threadref *src);
cce74817 2381
2bc416ba 2382static char *pack_threadinfo_request (char *pkt, int mode,
23860348 2383 threadref *id);
cce74817 2384
a14ed312 2385static int remote_unpack_thread_info_response (char *pkt,
23860348 2386 threadref *expectedref,
a14ed312
KB
2387 struct gdb_ext_thread_info
2388 *info);
cce74817
JM
2389
2390
2bc416ba 2391static int remote_get_threadinfo (threadref *threadid,
23860348 2392 int fieldset, /*TAG mask */
a14ed312 2393 struct gdb_ext_thread_info *info);
cce74817 2394
a14ed312
KB
2395static char *pack_threadlist_request (char *pkt, int startflag,
2396 int threadcount,
23860348 2397 threadref *nextthread);
cce74817 2398
a14ed312
KB
2399static int parse_threadlist_response (char *pkt,
2400 int result_limit,
23860348 2401 threadref *original_echo,
2bc416ba 2402 threadref *resultlist,
23860348 2403 int *doneflag);
cce74817 2404
a14ed312 2405static int remote_get_threadlist (int startflag,
23860348 2406 threadref *nextthread,
a14ed312
KB
2407 int result_limit,
2408 int *done,
2bc416ba 2409 int *result_count,
23860348 2410 threadref *threadlist);
cce74817 2411
23860348 2412typedef int (*rmt_thread_action) (threadref *ref, void *context);
cce74817 2413
a14ed312
KB
2414static int remote_threadlist_iterator (rmt_thread_action stepfunction,
2415 void *context, int looplimit);
cce74817 2416
23860348 2417static int remote_newthread_step (threadref *ref, void *context);
cce74817 2418
82f73884
PA
2419
2420/* Write a PTID to BUF. ENDBUF points to one-passed-the-end of the
2421 buffer we're allowed to write to. Returns
2422 BUF+CHARACTERS_WRITTEN. */
2423
2424static char *
2425write_ptid (char *buf, const char *endbuf, ptid_t ptid)
2426{
2427 int pid, tid;
2428 struct remote_state *rs = get_remote_state ();
2429
2430 if (remote_multi_process_p (rs))
2431 {
2432 pid = ptid_get_pid (ptid);
2433 if (pid < 0)
2434 buf += xsnprintf (buf, endbuf - buf, "p-%x.", -pid);
2435 else
2436 buf += xsnprintf (buf, endbuf - buf, "p%x.", pid);
2437 }
ba348170 2438 tid = ptid_get_lwp (ptid);
82f73884
PA
2439 if (tid < 0)
2440 buf += xsnprintf (buf, endbuf - buf, "-%x", -tid);
2441 else
2442 buf += xsnprintf (buf, endbuf - buf, "%x", tid);
2443
2444 return buf;
2445}
2446
2447/* Extract a PTID from BUF. If non-null, OBUF is set to the to one
2448 passed the last parsed char. Returns null_ptid on error. */
2449
2450static ptid_t
2451read_ptid (char *buf, char **obuf)
2452{
2453 char *p = buf;
2454 char *pp;
2455 ULONGEST pid = 0, tid = 0;
82f73884
PA
2456
2457 if (*p == 'p')
2458 {
2459 /* Multi-process ptid. */
2460 pp = unpack_varlen_hex (p + 1, &pid);
2461 if (*pp != '.')
b37520b6 2462 error (_("invalid remote ptid: %s"), p);
82f73884
PA
2463
2464 p = pp;
2465 pp = unpack_varlen_hex (p + 1, &tid);
2466 if (obuf)
2467 *obuf = pp;
ba348170 2468 return ptid_build (pid, tid, 0);
82f73884
PA
2469 }
2470
2471 /* No multi-process. Just a tid. */
2472 pp = unpack_varlen_hex (p, &tid);
2473
c9f35b34
KB
2474 /* Return null_ptid when no thread id is found. */
2475 if (p == pp)
2476 {
2477 if (obuf)
2478 *obuf = pp;
2479 return null_ptid;
2480 }
2481
82f73884 2482 /* Since the stub is not sending a process id, then default to
ca19bf23
PA
2483 what's in inferior_ptid, unless it's null at this point. If so,
2484 then since there's no way to know the pid of the reported
2485 threads, use the magic number. */
2486 if (ptid_equal (inferior_ptid, null_ptid))
2487 pid = ptid_get_pid (magic_null_ptid);
2488 else
2489 pid = ptid_get_pid (inferior_ptid);
82f73884
PA
2490
2491 if (obuf)
2492 *obuf = pp;
ba348170 2493 return ptid_build (pid, tid, 0);
82f73884
PA
2494}
2495
c906108c 2496static int
fba45db2 2497stubhex (int ch)
c906108c
SS
2498{
2499 if (ch >= 'a' && ch <= 'f')
2500 return ch - 'a' + 10;
2501 if (ch >= '0' && ch <= '9')
2502 return ch - '0';
2503 if (ch >= 'A' && ch <= 'F')
2504 return ch - 'A' + 10;
2505 return -1;
2506}
2507
2508static int
fba45db2 2509stub_unpack_int (char *buff, int fieldlength)
c906108c
SS
2510{
2511 int nibble;
2512 int retval = 0;
2513
2514 while (fieldlength)
2515 {
2516 nibble = stubhex (*buff++);
2517 retval |= nibble;
2518 fieldlength--;
2519 if (fieldlength)
2520 retval = retval << 4;
2521 }
2522 return retval;
2523}
2524
c906108c 2525static char *
fba45db2 2526unpack_nibble (char *buf, int *val)
c906108c 2527{
b7589f7d 2528 *val = fromhex (*buf++);
c906108c
SS
2529 return buf;
2530}
2531
c906108c 2532static char *
fba45db2 2533unpack_byte (char *buf, int *value)
c906108c
SS
2534{
2535 *value = stub_unpack_int (buf, 2);
2536 return buf + 2;
2537}
2538
2539static char *
fba45db2 2540pack_int (char *buf, int value)
c906108c
SS
2541{
2542 buf = pack_hex_byte (buf, (value >> 24) & 0xff);
2543 buf = pack_hex_byte (buf, (value >> 16) & 0xff);
2544 buf = pack_hex_byte (buf, (value >> 8) & 0x0ff);
2545 buf = pack_hex_byte (buf, (value & 0xff));
2546 return buf;
2547}
2548
2549static char *
fba45db2 2550unpack_int (char *buf, int *value)
c906108c
SS
2551{
2552 *value = stub_unpack_int (buf, 8);
2553 return buf + 8;
2554}
2555
23860348 2556#if 0 /* Currently unused, uncomment when needed. */
a14ed312 2557static char *pack_string (char *pkt, char *string);
c906108c
SS
2558
2559static char *
fba45db2 2560pack_string (char *pkt, char *string)
c906108c
SS
2561{
2562 char ch;
2563 int len;
2564
2565 len = strlen (string);
2566 if (len > 200)
23860348 2567 len = 200; /* Bigger than most GDB packets, junk??? */
c906108c
SS
2568 pkt = pack_hex_byte (pkt, len);
2569 while (len-- > 0)
2570 {
2571 ch = *string++;
2572 if ((ch == '\0') || (ch == '#'))
23860348 2573 ch = '*'; /* Protect encapsulation. */
c906108c
SS
2574 *pkt++ = ch;
2575 }
2576 return pkt;
2577}
2578#endif /* 0 (unused) */
2579
2580static char *
fba45db2 2581unpack_string (char *src, char *dest, int length)
c906108c
SS
2582{
2583 while (length--)
2584 *dest++ = *src++;
2585 *dest = '\0';
2586 return src;
2587}
2588
2589static char *
fba45db2 2590pack_threadid (char *pkt, threadref *id)
c906108c
SS
2591{
2592 char *limit;
2593 unsigned char *altid;
2594
2595 altid = (unsigned char *) id;
2596 limit = pkt + BUF_THREAD_ID_SIZE;
2597 while (pkt < limit)
2598 pkt = pack_hex_byte (pkt, *altid++);
2599 return pkt;
2600}
2601
2602
2603static char *
fba45db2 2604unpack_threadid (char *inbuf, threadref *id)
c906108c
SS
2605{
2606 char *altref;
2607 char *limit = inbuf + BUF_THREAD_ID_SIZE;
2608 int x, y;
2609
2610 altref = (char *) id;
2611
2612 while (inbuf < limit)
2613 {
2614 x = stubhex (*inbuf++);
2615 y = stubhex (*inbuf++);
2616 *altref++ = (x << 4) | y;
2617 }
2618 return inbuf;
2619}
2620
2621/* Externally, threadrefs are 64 bits but internally, they are still
0df8b418 2622 ints. This is due to a mismatch of specifications. We would like
c906108c
SS
2623 to use 64bit thread references internally. This is an adapter
2624 function. */
2625
2626void
fba45db2 2627int_to_threadref (threadref *id, int value)
c906108c
SS
2628{
2629 unsigned char *scan;
2630
2631 scan = (unsigned char *) id;
2632 {
2633 int i = 4;
2634 while (i--)
2635 *scan++ = 0;
2636 }
2637 *scan++ = (value >> 24) & 0xff;
2638 *scan++ = (value >> 16) & 0xff;
2639 *scan++ = (value >> 8) & 0xff;
2640 *scan++ = (value & 0xff);
2641}
2642
2643static int
fba45db2 2644threadref_to_int (threadref *ref)
c906108c
SS
2645{
2646 int i, value = 0;
2647 unsigned char *scan;
2648
cfd77fa1 2649 scan = *ref;
c906108c
SS
2650 scan += 4;
2651 i = 4;
2652 while (i-- > 0)
2653 value = (value << 8) | ((*scan++) & 0xff);
2654 return value;
2655}
2656
2657static void
fba45db2 2658copy_threadref (threadref *dest, threadref *src)
c906108c
SS
2659{
2660 int i;
2661 unsigned char *csrc, *cdest;
2662
2663 csrc = (unsigned char *) src;
2664 cdest = (unsigned char *) dest;
2665 i = 8;
2666 while (i--)
2667 *cdest++ = *csrc++;
2668}
2669
2670static int
fba45db2 2671threadmatch (threadref *dest, threadref *src)
c906108c 2672{
23860348 2673 /* Things are broken right now, so just assume we got a match. */
c906108c
SS
2674#if 0
2675 unsigned char *srcp, *destp;
2676 int i, result;
2677 srcp = (char *) src;
2678 destp = (char *) dest;
2679
2680 result = 1;
2681 while (i-- > 0)
2682 result &= (*srcp++ == *destp++) ? 1 : 0;
2683 return result;
2684#endif
2685 return 1;
2686}
2687
2688/*
c5aa993b
JM
2689 threadid:1, # always request threadid
2690 context_exists:2,
2691 display:4,
2692 unique_name:8,
2693 more_display:16
2694 */
c906108c
SS
2695
2696/* Encoding: 'Q':8,'P':8,mask:32,threadid:64 */
2697
2698static char *
fba45db2 2699pack_threadinfo_request (char *pkt, int mode, threadref *id)
c906108c 2700{
23860348
MS
2701 *pkt++ = 'q'; /* Info Query */
2702 *pkt++ = 'P'; /* process or thread info */
2703 pkt = pack_int (pkt, mode); /* mode */
c906108c 2704 pkt = pack_threadid (pkt, id); /* threadid */
23860348 2705 *pkt = '\0'; /* terminate */
c906108c
SS
2706 return pkt;
2707}
2708
23860348 2709/* These values tag the fields in a thread info response packet. */
c906108c 2710/* Tagging the fields allows us to request specific fields and to
23860348 2711 add more fields as time goes by. */
c906108c 2712
23860348 2713#define TAG_THREADID 1 /* Echo the thread identifier. */
c5aa993b 2714#define TAG_EXISTS 2 /* Is this process defined enough to
23860348 2715 fetch registers and its stack? */
c5aa993b 2716#define TAG_DISPLAY 4 /* A short thing maybe to put on a window */
23860348 2717#define TAG_THREADNAME 8 /* string, maps 1-to-1 with a thread is. */
802188a7 2718#define TAG_MOREDISPLAY 16 /* Whatever the kernel wants to say about
23860348 2719 the process. */
c906108c
SS
2720
2721static int
fba45db2
KB
2722remote_unpack_thread_info_response (char *pkt, threadref *expectedref,
2723 struct gdb_ext_thread_info *info)
c906108c 2724{
d01949b6 2725 struct remote_state *rs = get_remote_state ();
c906108c 2726 int mask, length;
cfd77fa1 2727 int tag;
c906108c 2728 threadref ref;
6d820c5c 2729 char *limit = pkt + rs->buf_size; /* Plausible parsing limit. */
c906108c
SS
2730 int retval = 1;
2731
23860348 2732 /* info->threadid = 0; FIXME: implement zero_threadref. */
c906108c
SS
2733 info->active = 0;
2734 info->display[0] = '\0';
2735 info->shortname[0] = '\0';
2736 info->more_display[0] = '\0';
2737
23860348
MS
2738 /* Assume the characters indicating the packet type have been
2739 stripped. */
c906108c
SS
2740 pkt = unpack_int (pkt, &mask); /* arg mask */
2741 pkt = unpack_threadid (pkt, &ref);
2742
2743 if (mask == 0)
8a3fe4f8 2744 warning (_("Incomplete response to threadinfo request."));
c906108c 2745 if (!threadmatch (&ref, expectedref))
23860348 2746 { /* This is an answer to a different request. */
8a3fe4f8 2747 warning (_("ERROR RMT Thread info mismatch."));
c906108c
SS
2748 return 0;
2749 }
2750 copy_threadref (&info->threadid, &ref);
2751
23860348 2752 /* Loop on tagged fields , try to bail if somthing goes wrong. */
c906108c 2753
23860348
MS
2754 /* Packets are terminated with nulls. */
2755 while ((pkt < limit) && mask && *pkt)
c906108c
SS
2756 {
2757 pkt = unpack_int (pkt, &tag); /* tag */
23860348
MS
2758 pkt = unpack_byte (pkt, &length); /* length */
2759 if (!(tag & mask)) /* Tags out of synch with mask. */
c906108c 2760 {
8a3fe4f8 2761 warning (_("ERROR RMT: threadinfo tag mismatch."));
c906108c
SS
2762 retval = 0;
2763 break;
2764 }
2765 if (tag == TAG_THREADID)
2766 {
2767 if (length != 16)
2768 {
8a3fe4f8 2769 warning (_("ERROR RMT: length of threadid is not 16."));
c906108c
SS
2770 retval = 0;
2771 break;
2772 }
2773 pkt = unpack_threadid (pkt, &ref);
2774 mask = mask & ~TAG_THREADID;
2775 continue;
2776 }
2777 if (tag == TAG_EXISTS)
2778 {
2779 info->active = stub_unpack_int (pkt, length);
2780 pkt += length;
2781 mask = mask & ~(TAG_EXISTS);
2782 if (length > 8)
2783 {
8a3fe4f8 2784 warning (_("ERROR RMT: 'exists' length too long."));
c906108c
SS
2785 retval = 0;
2786 break;
2787 }
2788 continue;
2789 }
2790 if (tag == TAG_THREADNAME)
2791 {
2792 pkt = unpack_string (pkt, &info->shortname[0], length);
2793 mask = mask & ~TAG_THREADNAME;
2794 continue;
2795 }
2796 if (tag == TAG_DISPLAY)
2797 {
2798 pkt = unpack_string (pkt, &info->display[0], length);
2799 mask = mask & ~TAG_DISPLAY;
2800 continue;
2801 }
2802 if (tag == TAG_MOREDISPLAY)
2803 {
2804 pkt = unpack_string (pkt, &info->more_display[0], length);
2805 mask = mask & ~TAG_MOREDISPLAY;
2806 continue;
2807 }
8a3fe4f8 2808 warning (_("ERROR RMT: unknown thread info tag."));
23860348 2809 break; /* Not a tag we know about. */
c906108c
SS
2810 }
2811 return retval;
2812}
2813
2814static int
fba45db2
KB
2815remote_get_threadinfo (threadref *threadid, int fieldset, /* TAG mask */
2816 struct gdb_ext_thread_info *info)
c906108c 2817{
d01949b6 2818 struct remote_state *rs = get_remote_state ();
c906108c 2819 int result;
c906108c 2820
2e9f7625
DJ
2821 pack_threadinfo_request (rs->buf, fieldset, threadid);
2822 putpkt (rs->buf);
6d820c5c 2823 getpkt (&rs->buf, &rs->buf_size, 0);
3084dd77
PA
2824
2825 if (rs->buf[0] == '\0')
2826 return 0;
2827
2e9f7625 2828 result = remote_unpack_thread_info_response (rs->buf + 2,
23860348 2829 threadid, info);
c906108c
SS
2830 return result;
2831}
2832
c906108c
SS
2833/* Format: i'Q':8,i"L":8,initflag:8,batchsize:16,lastthreadid:32 */
2834
2835static char *
fba45db2
KB
2836pack_threadlist_request (char *pkt, int startflag, int threadcount,
2837 threadref *nextthread)
c906108c
SS
2838{
2839 *pkt++ = 'q'; /* info query packet */
2840 *pkt++ = 'L'; /* Process LIST or threadLIST request */
23860348 2841 pkt = pack_nibble (pkt, startflag); /* initflag 1 bytes */
c906108c
SS
2842 pkt = pack_hex_byte (pkt, threadcount); /* threadcount 2 bytes */
2843 pkt = pack_threadid (pkt, nextthread); /* 64 bit thread identifier */
2844 *pkt = '\0';
2845 return pkt;
2846}
2847
2848/* Encoding: 'q':8,'M':8,count:16,done:8,argthreadid:64,(threadid:64)* */
2849
2850static int
fba45db2
KB
2851parse_threadlist_response (char *pkt, int result_limit,
2852 threadref *original_echo, threadref *resultlist,
2853 int *doneflag)
c906108c 2854{
d01949b6 2855 struct remote_state *rs = get_remote_state ();
c906108c
SS
2856 char *limit;
2857 int count, resultcount, done;
2858
2859 resultcount = 0;
2860 /* Assume the 'q' and 'M chars have been stripped. */
6d820c5c 2861 limit = pkt + (rs->buf_size - BUF_THREAD_ID_SIZE);
23860348 2862 /* done parse past here */
c906108c
SS
2863 pkt = unpack_byte (pkt, &count); /* count field */
2864 pkt = unpack_nibble (pkt, &done);
2865 /* The first threadid is the argument threadid. */
2866 pkt = unpack_threadid (pkt, original_echo); /* should match query packet */
2867 while ((count-- > 0) && (pkt < limit))
2868 {
2869 pkt = unpack_threadid (pkt, resultlist++);
2870 if (resultcount++ >= result_limit)
2871 break;
2872 }
2873 if (doneflag)
2874 *doneflag = done;
2875 return resultcount;
2876}
2877
6dc54d91
PA
2878/* Fetch the next batch of threads from the remote. Returns -1 if the
2879 qL packet is not supported, 0 on error and 1 on success. */
2880
c906108c 2881static int
fba45db2
KB
2882remote_get_threadlist (int startflag, threadref *nextthread, int result_limit,
2883 int *done, int *result_count, threadref *threadlist)
c906108c 2884{
d01949b6 2885 struct remote_state *rs = get_remote_state ();
c906108c
SS
2886 int result = 1;
2887
23860348 2888 /* Trancate result limit to be smaller than the packet size. */
3e43a32a
MS
2889 if ((((result_limit + 1) * BUF_THREAD_ID_SIZE) + 10)
2890 >= get_remote_packet_size ())
ea9c271d 2891 result_limit = (get_remote_packet_size () / BUF_THREAD_ID_SIZE) - 2;
c906108c 2892
6d820c5c
DJ
2893 pack_threadlist_request (rs->buf, startflag, result_limit, nextthread);
2894 putpkt (rs->buf);
2895 getpkt (&rs->buf, &rs->buf_size, 0);
d8f2712d 2896 if (*rs->buf == '\0')
6dc54d91
PA
2897 {
2898 /* Packet not supported. */
2899 return -1;
2900 }
2901
2902 *result_count =
2903 parse_threadlist_response (rs->buf + 2, result_limit,
2904 &rs->echo_nextthread, threadlist, done);
c906108c 2905
0d031856 2906 if (!threadmatch (&rs->echo_nextthread, nextthread))
c906108c 2907 {
23860348
MS
2908 /* FIXME: This is a good reason to drop the packet. */
2909 /* Possably, there is a duplicate response. */
c906108c
SS
2910 /* Possabilities :
2911 retransmit immediatly - race conditions
2912 retransmit after timeout - yes
2913 exit
2914 wait for packet, then exit
2915 */
8a3fe4f8 2916 warning (_("HMM: threadlist did not echo arg thread, dropping it."));
23860348 2917 return 0; /* I choose simply exiting. */
c906108c
SS
2918 }
2919 if (*result_count <= 0)
2920 {
2921 if (*done != 1)
2922 {
8a3fe4f8 2923 warning (_("RMT ERROR : failed to get remote thread list."));
c906108c
SS
2924 result = 0;
2925 }
2926 return result; /* break; */
2927 }
2928 if (*result_count > result_limit)
2929 {
2930 *result_count = 0;
8a3fe4f8 2931 warning (_("RMT ERROR: threadlist response longer than requested."));
c906108c
SS
2932 return 0;
2933 }
2934 return result;
2935}
2936
6dc54d91
PA
2937/* Fetch the list of remote threads, with the qL packet, and call
2938 STEPFUNCTION for each thread found. Stops iterating and returns 1
2939 if STEPFUNCTION returns true. Stops iterating and returns 0 if the
2940 STEPFUNCTION returns false. If the packet is not supported,
2941 returns -1. */
c906108c 2942
c906108c 2943static int
fba45db2
KB
2944remote_threadlist_iterator (rmt_thread_action stepfunction, void *context,
2945 int looplimit)
c906108c 2946{
0d031856 2947 struct remote_state *rs = get_remote_state ();
c906108c
SS
2948 int done, i, result_count;
2949 int startflag = 1;
2950 int result = 1;
2951 int loopcount = 0;
c906108c
SS
2952
2953 done = 0;
2954 while (!done)
2955 {
2956 if (loopcount++ > looplimit)
2957 {
2958 result = 0;
8a3fe4f8 2959 warning (_("Remote fetch threadlist -infinite loop-."));
c906108c
SS
2960 break;
2961 }
6dc54d91
PA
2962 result = remote_get_threadlist (startflag, &rs->nextthread,
2963 MAXTHREADLISTRESULTS,
2964 &done, &result_count,
2965 rs->resultthreadlist);
2966 if (result <= 0)
2967 break;
23860348 2968 /* Clear for later iterations. */
c906108c
SS
2969 startflag = 0;
2970 /* Setup to resume next batch of thread references, set nextthread. */
2971 if (result_count >= 1)
0d031856
TT
2972 copy_threadref (&rs->nextthread,
2973 &rs->resultthreadlist[result_count - 1]);
c906108c
SS
2974 i = 0;
2975 while (result_count--)
6dc54d91
PA
2976 {
2977 if (!(*stepfunction) (&rs->resultthreadlist[i++], context))
2978 {
2979 result = 0;
2980 break;
2981 }
2982 }
c906108c
SS
2983 }
2984 return result;
2985}
2986
6dc54d91
PA
2987/* A thread found on the remote target. */
2988
2989typedef struct thread_item
2990{
2991 /* The thread's PTID. */
2992 ptid_t ptid;
2993
2994 /* The thread's extra info. May be NULL. */
2995 char *extra;
2996
79efa585
SM
2997 /* The thread's name. May be NULL. */
2998 char *name;
2999
6dc54d91
PA
3000 /* The core the thread was running on. -1 if not known. */
3001 int core;
3002} thread_item_t;
3003DEF_VEC_O(thread_item_t);
3004
3005/* Context passed around to the various methods listing remote
3006 threads. As new threads are found, they're added to the ITEMS
3007 vector. */
3008
3009struct threads_listing_context
3010{
3011 /* The threads found on the remote target. */
3012 VEC (thread_item_t) *items;
3013};
3014
80134cf5
PA
3015/* Discard the contents of the constructed thread listing context. */
3016
3017static void
3018clear_threads_listing_context (void *p)
3019{
19ba03f4
SM
3020 struct threads_listing_context *context
3021 = (struct threads_listing_context *) p;
80134cf5
PA
3022 int i;
3023 struct thread_item *item;
3024
3025 for (i = 0; VEC_iterate (thread_item_t, context->items, i, item); ++i)
79efa585
SM
3026 {
3027 xfree (item->extra);
3028 xfree (item->name);
3029 }
80134cf5
PA
3030
3031 VEC_free (thread_item_t, context->items);
3032}
3033
cbb8991c
DB
3034/* Remove the thread specified as the related_pid field of WS
3035 from the CONTEXT list. */
3036
3037static void
3038threads_listing_context_remove (struct target_waitstatus *ws,
3039 struct threads_listing_context *context)
3040{
3041 struct thread_item *item;
3042 int i;
3043 ptid_t child_ptid = ws->value.related_pid;
3044
3045 for (i = 0; VEC_iterate (thread_item_t, context->items, i, item); ++i)
3046 {
3047 if (ptid_equal (item->ptid, child_ptid))
3048 {
3049 VEC_ordered_remove (thread_item_t, context->items, i);
3050 break;
3051 }
3052 }
3053}
3054
c906108c 3055static int
6dc54d91 3056remote_newthread_step (threadref *ref, void *data)
c906108c 3057{
19ba03f4
SM
3058 struct threads_listing_context *context
3059 = (struct threads_listing_context *) data;
6dc54d91 3060 struct thread_item item;
79d7f229 3061 int pid = ptid_get_pid (inferior_ptid);
39f77062 3062
6dc54d91
PA
3063 item.ptid = ptid_build (pid, threadref_to_int (ref), 0);
3064 item.core = -1;
2e3b657e 3065 item.name = NULL;
6dc54d91
PA
3066 item.extra = NULL;
3067
3068 VEC_safe_push (thread_item_t, context->items, &item);
3069
c906108c
SS
3070 return 1; /* continue iterator */
3071}
3072
3073#define CRAZY_MAX_THREADS 1000
3074
39f77062
KB
3075static ptid_t
3076remote_current_thread (ptid_t oldpid)
c906108c 3077{
d01949b6 3078 struct remote_state *rs = get_remote_state ();
c906108c
SS
3079
3080 putpkt ("qC");
6d820c5c 3081 getpkt (&rs->buf, &rs->buf_size, 0);
2e9f7625 3082 if (rs->buf[0] == 'Q' && rs->buf[1] == 'C')
c9f35b34
KB
3083 {
3084 char *obuf;
3085 ptid_t result;
3086
3087 result = read_ptid (&rs->buf[2], &obuf);
3088 if (*obuf != '\0' && remote_debug)
3089 fprintf_unfiltered (gdb_stdlog,
3090 "warning: garbage in qC reply\n");
3091
3092 return result;
3093 }
c906108c
SS
3094 else
3095 return oldpid;
3096}
3097
6dc54d91 3098/* List remote threads using the deprecated qL packet. */
cce74817 3099
6dc54d91
PA
3100static int
3101remote_get_threads_with_ql (struct target_ops *ops,
3102 struct threads_listing_context *context)
c906108c 3103{
6dc54d91
PA
3104 if (remote_threadlist_iterator (remote_newthread_step, context,
3105 CRAZY_MAX_THREADS) >= 0)
3106 return 1;
3107
3108 return 0;
c906108c
SS
3109}
3110
dc146f7c
VP
3111#if defined(HAVE_LIBEXPAT)
3112
dc146f7c
VP
3113static void
3114start_thread (struct gdb_xml_parser *parser,
3115 const struct gdb_xml_element *element,
3116 void *user_data, VEC(gdb_xml_value_s) *attributes)
3117{
19ba03f4
SM
3118 struct threads_listing_context *data
3119 = (struct threads_listing_context *) user_data;
dc146f7c
VP
3120
3121 struct thread_item item;
3122 char *id;
3d2c1d41 3123 struct gdb_xml_value *attr;
dc146f7c 3124
19ba03f4 3125 id = (char *) xml_find_attribute (attributes, "id")->value;
dc146f7c
VP
3126 item.ptid = read_ptid (id, NULL);
3127
3d2c1d41
PA
3128 attr = xml_find_attribute (attributes, "core");
3129 if (attr != NULL)
3130 item.core = *(ULONGEST *) attr->value;
dc146f7c
VP
3131 else
3132 item.core = -1;
3133
79efa585 3134 attr = xml_find_attribute (attributes, "name");
e1961661 3135 item.name = attr != NULL ? xstrdup ((const char *) attr->value) : NULL;
79efa585 3136
dc146f7c
VP
3137 item.extra = 0;
3138
3139 VEC_safe_push (thread_item_t, data->items, &item);
3140}
3141
3142static void
3143end_thread (struct gdb_xml_parser *parser,
3144 const struct gdb_xml_element *element,
3145 void *user_data, const char *body_text)
3146{
19ba03f4
SM
3147 struct threads_listing_context *data
3148 = (struct threads_listing_context *) user_data;
dc146f7c
VP
3149
3150 if (body_text && *body_text)
2ae2a0b7 3151 VEC_last (thread_item_t, data->items)->extra = xstrdup (body_text);
dc146f7c
VP
3152}
3153
3154const struct gdb_xml_attribute thread_attributes[] = {
3155 { "id", GDB_XML_AF_NONE, NULL, NULL },
3156 { "core", GDB_XML_AF_OPTIONAL, gdb_xml_parse_attr_ulongest, NULL },
79efa585 3157 { "name", GDB_XML_AF_OPTIONAL, NULL, NULL },
dc146f7c
VP
3158 { NULL, GDB_XML_AF_NONE, NULL, NULL }
3159};
3160
3161const struct gdb_xml_element thread_children[] = {
3162 { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
3163};
3164
3165const struct gdb_xml_element threads_children[] = {
3166 { "thread", thread_attributes, thread_children,
3167 GDB_XML_EF_REPEATABLE | GDB_XML_EF_OPTIONAL,
3168 start_thread, end_thread },
3169 { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
3170};
3171
3172const struct gdb_xml_element threads_elements[] = {
3173 { "threads", NULL, threads_children,
3174 GDB_XML_EF_NONE, NULL, NULL },
3175 { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
3176};
3177
3178#endif
3179
6dc54d91 3180/* List remote threads using qXfer:threads:read. */
9d1f7ab2 3181
6dc54d91
PA
3182static int
3183remote_get_threads_with_qxfer (struct target_ops *ops,
3184 struct threads_listing_context *context)
0f71a2f6 3185{
dc146f7c 3186#if defined(HAVE_LIBEXPAT)
4082afcc 3187 if (packet_support (PACKET_qXfer_threads) == PACKET_ENABLE)
dc146f7c 3188 {
6dc54d91 3189 char *xml = target_read_stralloc (ops, TARGET_OBJECT_THREADS, NULL);
dc146f7c 3190 struct cleanup *back_to = make_cleanup (xfree, xml);
efc0eabd 3191
6dc54d91 3192 if (xml != NULL && *xml != '\0')
dc146f7c 3193 {
6dc54d91
PA
3194 gdb_xml_parse_quick (_("threads"), "threads.dtd",
3195 threads_elements, xml, context);
dc146f7c
VP
3196 }
3197
3198 do_cleanups (back_to);
6dc54d91 3199 return 1;
dc146f7c
VP
3200 }
3201#endif
3202
6dc54d91
PA
3203 return 0;
3204}
3205
3206/* List remote threads using qfThreadInfo/qsThreadInfo. */
3207
3208static int
3209remote_get_threads_with_qthreadinfo (struct target_ops *ops,
3210 struct threads_listing_context *context)
3211{
3212 struct remote_state *rs = get_remote_state ();
3213
b80fafe3 3214 if (rs->use_threadinfo_query)
9d1f7ab2 3215 {
6dc54d91
PA
3216 char *bufp;
3217
9d1f7ab2 3218 putpkt ("qfThreadInfo");
6d820c5c 3219 getpkt (&rs->buf, &rs->buf_size, 0);
2e9f7625 3220 bufp = rs->buf;
9d1f7ab2 3221 if (bufp[0] != '\0') /* q packet recognized */
802188a7 3222 {
9d1f7ab2
MS
3223 while (*bufp++ == 'm') /* reply contains one or more TID */
3224 {
3225 do
3226 {
6dc54d91
PA
3227 struct thread_item item;
3228
3229 item.ptid = read_ptid (bufp, &bufp);
3230 item.core = -1;
2e3b657e 3231 item.name = NULL;
6dc54d91
PA
3232 item.extra = NULL;
3233
3234 VEC_safe_push (thread_item_t, context->items, &item);
9d1f7ab2
MS
3235 }
3236 while (*bufp++ == ','); /* comma-separated list */
3237 putpkt ("qsThreadInfo");
6d820c5c 3238 getpkt (&rs->buf, &rs->buf_size, 0);
6dc54d91 3239 bufp = rs->buf;
9d1f7ab2 3240 }
6dc54d91
PA
3241 return 1;
3242 }
3243 else
3244 {
3245 /* Packet not recognized. */
3246 rs->use_threadinfo_query = 0;
9d1f7ab2
MS
3247 }
3248 }
3249
6dc54d91
PA
3250 return 0;
3251}
3252
e8032dde 3253/* Implement the to_update_thread_list function for the remote
6dc54d91
PA
3254 targets. */
3255
3256static void
e8032dde 3257remote_update_thread_list (struct target_ops *ops)
6dc54d91 3258{
6dc54d91
PA
3259 struct threads_listing_context context;
3260 struct cleanup *old_chain;
ab970af1 3261 int got_list = 0;
e8032dde 3262
6dc54d91
PA
3263 context.items = NULL;
3264 old_chain = make_cleanup (clear_threads_listing_context, &context);
3265
3266 /* We have a few different mechanisms to fetch the thread list. Try
3267 them all, starting with the most preferred one first, falling
3268 back to older methods. */
3269 if (remote_get_threads_with_qxfer (ops, &context)
3270 || remote_get_threads_with_qthreadinfo (ops, &context)
3271 || remote_get_threads_with_ql (ops, &context))
3272 {
3273 int i;
3274 struct thread_item *item;
ab970af1
PA
3275 struct thread_info *tp, *tmp;
3276
3277 got_list = 1;
3278
7d1a114c
PA
3279 if (VEC_empty (thread_item_t, context.items)
3280 && remote_thread_always_alive (ops, inferior_ptid))
3281 {
3282 /* Some targets don't really support threads, but still
3283 reply an (empty) thread list in response to the thread
3284 listing packets, instead of replying "packet not
3285 supported". Exit early so we don't delete the main
3286 thread. */
3287 do_cleanups (old_chain);
3288 return;
3289 }
3290
ab970af1
PA
3291 /* CONTEXT now holds the current thread list on the remote
3292 target end. Delete GDB-side threads no longer found on the
3293 target. */
8a06aea7 3294 ALL_THREADS_SAFE (tp, tmp)
cbb8991c 3295 {
ab970af1
PA
3296 for (i = 0;
3297 VEC_iterate (thread_item_t, context.items, i, item);
3298 ++i)
3299 {
3300 if (ptid_equal (item->ptid, tp->ptid))
3301 break;
3302 }
3303
3304 if (i == VEC_length (thread_item_t, context.items))
3305 {
3306 /* Not found. */
3307 delete_thread (tp->ptid);
3308 }
cbb8991c
DB
3309 }
3310
3311 /* Remove any unreported fork child threads from CONTEXT so
3312 that we don't interfere with follow fork, which is where
3313 creation of such threads is handled. */
3314 remove_new_fork_children (&context);
74531fed 3315
ab970af1 3316 /* And now add threads we don't know about yet to our list. */
6dc54d91
PA
3317 for (i = 0;
3318 VEC_iterate (thread_item_t, context.items, i, item);
3319 ++i)
3320 {
3321 if (!ptid_equal (item->ptid, null_ptid))
3322 {
3323 struct private_thread_info *info;
3324 /* In non-stop mode, we assume new found threads are
0d5b594f
PA
3325 executing until proven otherwise with a stop reply.
3326 In all-stop, we can only get here if all threads are
6dc54d91 3327 stopped. */
0d5b594f 3328 int executing = target_is_non_stop_p () ? 1 : 0;
6dc54d91 3329
0d5b594f 3330 remote_notice_new_inferior (item->ptid, executing);
6dc54d91 3331
85ad3aaf 3332 info = get_private_info_ptid (item->ptid);
6dc54d91
PA
3333 info->core = item->core;
3334 info->extra = item->extra;
3335 item->extra = NULL;
79efa585
SM
3336 info->name = item->name;
3337 item->name = NULL;
6dc54d91
PA
3338 }
3339 }
3340 }
3341
ab970af1
PA
3342 if (!got_list)
3343 {
3344 /* If no thread listing method is supported, then query whether
3345 each known thread is alive, one by one, with the T packet.
3346 If the target doesn't support threads at all, then this is a
3347 no-op. See remote_thread_alive. */
3348 prune_threads ();
3349 }
3350
6dc54d91 3351 do_cleanups (old_chain);
9d1f7ab2
MS
3352}
3353
802188a7 3354/*
9d1f7ab2
MS
3355 * Collect a descriptive string about the given thread.
3356 * The target may say anything it wants to about the thread
3357 * (typically info about its blocked / runnable state, name, etc.).
3358 * This string will appear in the info threads display.
802188a7 3359 *
9d1f7ab2
MS
3360 * Optional: targets are not required to implement this function.
3361 */
3362
7a114964 3363static const char *
c15906d8 3364remote_threads_extra_info (struct target_ops *self, struct thread_info *tp)
9d1f7ab2 3365{
d01949b6 3366 struct remote_state *rs = get_remote_state ();
9d1f7ab2
MS
3367 int result;
3368 int set;
3369 threadref id;
3370 struct gdb_ext_thread_info threadinfo;
23860348 3371 static char display_buf[100]; /* arbitrary... */
9d1f7ab2
MS
3372 int n = 0; /* position in display_buf */
3373
5d93a237 3374 if (rs->remote_desc == 0) /* paranoia */
8e65ff28 3375 internal_error (__FILE__, __LINE__,
e2e0b3e5 3376 _("remote_threads_extra_info"));
9d1f7ab2 3377
60e569b9 3378 if (ptid_equal (tp->ptid, magic_null_ptid)
ba348170 3379 || (ptid_get_pid (tp->ptid) != 0 && ptid_get_lwp (tp->ptid) == 0))
60e569b9
PA
3380 /* This is the main thread which was added by GDB. The remote
3381 server doesn't know about it. */
3382 return NULL;
3383
4082afcc 3384 if (packet_support (PACKET_qXfer_threads) == PACKET_ENABLE)
dc146f7c
VP
3385 {
3386 struct thread_info *info = find_thread_ptid (tp->ptid);
a744cf53 3387
fe978cb0
PA
3388 if (info && info->priv)
3389 return info->priv->extra;
dc146f7c
VP
3390 else
3391 return NULL;
3392 }
3393
b80fafe3 3394 if (rs->use_threadextra_query)
9d1f7ab2 3395 {
82f73884
PA
3396 char *b = rs->buf;
3397 char *endb = rs->buf + get_remote_packet_size ();
3398
3399 xsnprintf (b, endb - b, "qThreadExtraInfo,");
3400 b += strlen (b);
3401 write_ptid (b, endb, tp->ptid);
3402
2e9f7625 3403 putpkt (rs->buf);
6d820c5c 3404 getpkt (&rs->buf, &rs->buf_size, 0);
2e9f7625 3405 if (rs->buf[0] != 0)
9d1f7ab2 3406 {
325fac50 3407 n = std::min (strlen (rs->buf) / 2, sizeof (display_buf));
2e9f7625 3408 result = hex2bin (rs->buf, (gdb_byte *) display_buf, n);
30559e10 3409 display_buf [result] = '\0';
9d1f7ab2
MS
3410 return display_buf;
3411 }
0f71a2f6 3412 }
9d1f7ab2
MS
3413
3414 /* If the above query fails, fall back to the old method. */
b80fafe3 3415 rs->use_threadextra_query = 0;
9d1f7ab2
MS
3416 set = TAG_THREADID | TAG_EXISTS | TAG_THREADNAME
3417 | TAG_MOREDISPLAY | TAG_DISPLAY;
ba348170 3418 int_to_threadref (&id, ptid_get_lwp (tp->ptid));
9d1f7ab2
MS
3419 if (remote_get_threadinfo (&id, set, &threadinfo))
3420 if (threadinfo.active)
0f71a2f6 3421 {
9d1f7ab2 3422 if (*threadinfo.shortname)
2bc416ba 3423 n += xsnprintf (&display_buf[0], sizeof (display_buf) - n,
ecbc58df 3424 " Name: %s,", threadinfo.shortname);
9d1f7ab2 3425 if (*threadinfo.display)
2bc416ba 3426 n += xsnprintf (&display_buf[n], sizeof (display_buf) - n,
ecbc58df 3427 " State: %s,", threadinfo.display);
9d1f7ab2 3428 if (*threadinfo.more_display)
2bc416ba 3429 n += xsnprintf (&display_buf[n], sizeof (display_buf) - n,
ecbc58df 3430 " Priority: %s", threadinfo.more_display);
9d1f7ab2
MS
3431
3432 if (n > 0)
c5aa993b 3433 {
23860348 3434 /* For purely cosmetic reasons, clear up trailing commas. */
9d1f7ab2
MS
3435 if (',' == display_buf[n-1])
3436 display_buf[n-1] = ' ';
3437 return display_buf;
c5aa993b 3438 }
0f71a2f6 3439 }
9d1f7ab2 3440 return NULL;
0f71a2f6 3441}
c906108c 3442\f
c5aa993b 3443
0fb4aa4b 3444static int
61fc905d 3445remote_static_tracepoint_marker_at (struct target_ops *self, CORE_ADDR addr,
0fb4aa4b
PA
3446 struct static_tracepoint_marker *marker)
3447{
3448 struct remote_state *rs = get_remote_state ();
3449 char *p = rs->buf;
3450
bba74b36 3451 xsnprintf (p, get_remote_packet_size (), "qTSTMat:");
0fb4aa4b
PA
3452 p += strlen (p);
3453 p += hexnumstr (p, addr);
3454 putpkt (rs->buf);
3455 getpkt (&rs->buf, &rs->buf_size, 0);
3456 p = rs->buf;
3457
3458 if (*p == 'E')
3459 error (_("Remote failure reply: %s"), p);
3460
3461 if (*p++ == 'm')
3462 {
3463 parse_static_tracepoint_marker_definition (p, &p, marker);
3464 return 1;
3465 }
3466
3467 return 0;
3468}
3469
0fb4aa4b 3470static VEC(static_tracepoint_marker_p) *
c686c57f
TT
3471remote_static_tracepoint_markers_by_strid (struct target_ops *self,
3472 const char *strid)
0fb4aa4b
PA
3473{
3474 struct remote_state *rs = get_remote_state ();
3475 VEC(static_tracepoint_marker_p) *markers = NULL;
3476 struct static_tracepoint_marker *marker = NULL;
3477 struct cleanup *old_chain;
3478 char *p;
3479
3480 /* Ask for a first packet of static tracepoint marker
3481 definition. */
3482 putpkt ("qTfSTM");
3483 getpkt (&rs->buf, &rs->buf_size, 0);
3484 p = rs->buf;
3485 if (*p == 'E')
3486 error (_("Remote failure reply: %s"), p);
3487
3488 old_chain = make_cleanup (free_current_marker, &marker);
3489
3490 while (*p++ == 'm')
3491 {
3492 if (marker == NULL)
3493 marker = XCNEW (struct static_tracepoint_marker);
3494
3495 do
3496 {
3497 parse_static_tracepoint_marker_definition (p, &p, marker);
3498
3499 if (strid == NULL || strcmp (strid, marker->str_id) == 0)
3500 {
3501 VEC_safe_push (static_tracepoint_marker_p,
3502 markers, marker);
3503 marker = NULL;
3504 }
3505 else
3506 {
3507 release_static_tracepoint_marker (marker);
3508 memset (marker, 0, sizeof (*marker));
3509 }
3510 }
3511 while (*p++ == ','); /* comma-separated list */
3512 /* Ask for another packet of static tracepoint definition. */
3513 putpkt ("qTsSTM");
3514 getpkt (&rs->buf, &rs->buf_size, 0);
3515 p = rs->buf;
3516 }
3517
3518 do_cleanups (old_chain);
3519 return markers;
3520}
3521
3522\f
10760264
JB
3523/* Implement the to_get_ada_task_ptid function for the remote targets. */
3524
3525static ptid_t
1e6b91a4 3526remote_get_ada_task_ptid (struct target_ops *self, long lwp, long thread)
10760264 3527{
ba348170 3528 return ptid_build (ptid_get_pid (inferior_ptid), lwp, 0);
10760264
JB
3529}
3530\f
3531
24b06219 3532/* Restart the remote side; this is an extended protocol operation. */
c906108c
SS
3533
3534static void
fba45db2 3535extended_remote_restart (void)
c906108c 3536{
d01949b6 3537 struct remote_state *rs = get_remote_state ();
c906108c
SS
3538
3539 /* Send the restart command; for reasons I don't understand the
3540 remote side really expects a number after the "R". */
ea9c271d 3541 xsnprintf (rs->buf, get_remote_packet_size (), "R%x", 0);
6d820c5c 3542 putpkt (rs->buf);
c906108c 3543
ad9a8f3f 3544 remote_fileio_reset ();
c906108c
SS
3545}
3546\f
3547/* Clean up connection to a remote debugger. */
3548
c906108c 3549static void
de90e03d 3550remote_close (struct target_ops *self)
c906108c 3551{
5d93a237
TT
3552 struct remote_state *rs = get_remote_state ();
3553
3554 if (rs->remote_desc == NULL)
d3fd5342
PA
3555 return; /* already closed */
3556
048094ac 3557 /* Make sure we leave stdin registered in the event loop. */
e3594fd1 3558 remote_terminal_ours (self);
ce5ce7ed 3559
5d93a237
TT
3560 serial_close (rs->remote_desc);
3561 rs->remote_desc = NULL;
ce5ce7ed
PA
3562
3563 /* We don't have a connection to the remote stub anymore. Get rid
f67fd822
PM
3564 of all the inferiors and their threads we were controlling.
3565 Reset inferior_ptid to null_ptid first, as otherwise has_stack_frame
3566 will be unable to find the thread corresponding to (pid, 0, 0). */
0f2caa1b 3567 inferior_ptid = null_ptid;
f67fd822 3568 discard_all_inferiors ();
ce5ce7ed 3569
f48ff2a7
YQ
3570 /* We are closing the remote target, so we should discard
3571 everything of this target. */
bcc75809 3572 discard_pending_stop_replies_in_queue (rs);
74531fed
PA
3573
3574 if (remote_async_inferior_event_token)
3575 delete_async_event_handler (&remote_async_inferior_event_token);
722247f1 3576
5965e028 3577 remote_notif_state_xfree (rs->notif_state);
aef525cb
YQ
3578
3579 trace_reset_local_state ();
c906108c
SS
3580}
3581
23860348 3582/* Query the remote side for the text, data and bss offsets. */
c906108c
SS
3583
3584static void
fba45db2 3585get_offsets (void)
c906108c 3586{
d01949b6 3587 struct remote_state *rs = get_remote_state ();
2e9f7625 3588 char *buf;
085dd6e6 3589 char *ptr;
31d99776
DJ
3590 int lose, num_segments = 0, do_sections, do_segments;
3591 CORE_ADDR text_addr, data_addr, bss_addr, segments[2];
c906108c 3592 struct section_offsets *offs;
31d99776
DJ
3593 struct symfile_segment_data *data;
3594
3595 if (symfile_objfile == NULL)
3596 return;
c906108c
SS
3597
3598 putpkt ("qOffsets");
6d820c5c 3599 getpkt (&rs->buf, &rs->buf_size, 0);
2e9f7625 3600 buf = rs->buf;
c906108c
SS
3601
3602 if (buf[0] == '\000')
3603 return; /* Return silently. Stub doesn't support
23860348 3604 this command. */
c906108c
SS
3605 if (buf[0] == 'E')
3606 {
8a3fe4f8 3607 warning (_("Remote failure reply: %s"), buf);
c906108c
SS
3608 return;
3609 }
3610
3611 /* Pick up each field in turn. This used to be done with scanf, but
3612 scanf will make trouble if CORE_ADDR size doesn't match
3613 conversion directives correctly. The following code will work
3614 with any size of CORE_ADDR. */
3615 text_addr = data_addr = bss_addr = 0;
3616 ptr = buf;
3617 lose = 0;
3618
61012eef 3619 if (startswith (ptr, "Text="))
c906108c
SS
3620 {
3621 ptr += 5;
3622 /* Don't use strtol, could lose on big values. */
3623 while (*ptr && *ptr != ';')
3624 text_addr = (text_addr << 4) + fromhex (*ptr++);
c906108c 3625
61012eef 3626 if (startswith (ptr, ";Data="))
31d99776
DJ
3627 {
3628 ptr += 6;
3629 while (*ptr && *ptr != ';')
3630 data_addr = (data_addr << 4) + fromhex (*ptr++);
3631 }
3632 else
3633 lose = 1;
3634
61012eef 3635 if (!lose && startswith (ptr, ";Bss="))
31d99776
DJ
3636 {
3637 ptr += 5;
3638 while (*ptr && *ptr != ';')
3639 bss_addr = (bss_addr << 4) + fromhex (*ptr++);
c906108c 3640
31d99776
DJ
3641 if (bss_addr != data_addr)
3642 warning (_("Target reported unsupported offsets: %s"), buf);
3643 }
3644 else
3645 lose = 1;
3646 }
61012eef 3647 else if (startswith (ptr, "TextSeg="))
c906108c 3648 {
31d99776
DJ
3649 ptr += 8;
3650 /* Don't use strtol, could lose on big values. */
c906108c 3651 while (*ptr && *ptr != ';')
31d99776
DJ
3652 text_addr = (text_addr << 4) + fromhex (*ptr++);
3653 num_segments = 1;
3654
61012eef 3655 if (startswith (ptr, ";DataSeg="))
31d99776
DJ
3656 {
3657 ptr += 9;
3658 while (*ptr && *ptr != ';')
3659 data_addr = (data_addr << 4) + fromhex (*ptr++);
3660 num_segments++;
3661 }
c906108c
SS
3662 }
3663 else
3664 lose = 1;
3665
3666 if (lose)
8a3fe4f8 3667 error (_("Malformed response to offset query, %s"), buf);
31d99776
DJ
3668 else if (*ptr != '\0')
3669 warning (_("Target reported unsupported offsets: %s"), buf);
c906108c 3670
802188a7 3671 offs = ((struct section_offsets *)
a39a16c4 3672 alloca (SIZEOF_N_SECTION_OFFSETS (symfile_objfile->num_sections)));
802188a7 3673 memcpy (offs, symfile_objfile->section_offsets,
a39a16c4 3674 SIZEOF_N_SECTION_OFFSETS (symfile_objfile->num_sections));
c906108c 3675
31d99776
DJ
3676 data = get_symfile_segment_data (symfile_objfile->obfd);
3677 do_segments = (data != NULL);
3678 do_sections = num_segments == 0;
c906108c 3679
28c32713 3680 if (num_segments > 0)
31d99776 3681 {
31d99776
DJ
3682 segments[0] = text_addr;
3683 segments[1] = data_addr;
3684 }
28c32713
JB
3685 /* If we have two segments, we can still try to relocate everything
3686 by assuming that the .text and .data offsets apply to the whole
3687 text and data segments. Convert the offsets given in the packet
3688 to base addresses for symfile_map_offsets_to_segments. */
3689 else if (data && data->num_segments == 2)
3690 {
3691 segments[0] = data->segment_bases[0] + text_addr;
3692 segments[1] = data->segment_bases[1] + data_addr;
3693 num_segments = 2;
3694 }
8d385431
DJ
3695 /* If the object file has only one segment, assume that it is text
3696 rather than data; main programs with no writable data are rare,
3697 but programs with no code are useless. Of course the code might
3698 have ended up in the data segment... to detect that we would need
3699 the permissions here. */
3700 else if (data && data->num_segments == 1)
3701 {
3702 segments[0] = data->segment_bases[0] + text_addr;
3703 num_segments = 1;
3704 }
28c32713
JB
3705 /* There's no way to relocate by segment. */
3706 else
3707 do_segments = 0;
31d99776
DJ
3708
3709 if (do_segments)
3710 {
3711 int ret = symfile_map_offsets_to_segments (symfile_objfile->obfd, data,
3712 offs, num_segments, segments);
3713
3714 if (ret == 0 && !do_sections)
3e43a32a
MS
3715 error (_("Can not handle qOffsets TextSeg "
3716 "response with this symbol file"));
31d99776
DJ
3717
3718 if (ret > 0)
3719 do_sections = 0;
3720 }
c906108c 3721
9ef895d6
DJ
3722 if (data)
3723 free_symfile_segment_data (data);
31d99776
DJ
3724
3725 if (do_sections)
3726 {
3727 offs->offsets[SECT_OFF_TEXT (symfile_objfile)] = text_addr;
3728
3e43a32a
MS
3729 /* This is a temporary kludge to force data and bss to use the
3730 same offsets because that's what nlmconv does now. The real
3731 solution requires changes to the stub and remote.c that I
3732 don't have time to do right now. */
31d99776
DJ
3733
3734 offs->offsets[SECT_OFF_DATA (symfile_objfile)] = data_addr;
3735 offs->offsets[SECT_OFF_BSS (symfile_objfile)] = data_addr;
3736 }
c906108c
SS
3737
3738 objfile_relocate (symfile_objfile, offs);
3739}
3740
9a7071a8
JB
3741/* Send interrupt_sequence to remote target. */
3742static void
eeae04df 3743send_interrupt_sequence (void)
9a7071a8 3744{
5d93a237
TT
3745 struct remote_state *rs = get_remote_state ();
3746
9a7071a8 3747 if (interrupt_sequence_mode == interrupt_sequence_control_c)
c33e31fd 3748 remote_serial_write ("\x03", 1);
9a7071a8 3749 else if (interrupt_sequence_mode == interrupt_sequence_break)
5d93a237 3750 serial_send_break (rs->remote_desc);
9a7071a8
JB
3751 else if (interrupt_sequence_mode == interrupt_sequence_break_g)
3752 {
5d93a237 3753 serial_send_break (rs->remote_desc);
c33e31fd 3754 remote_serial_write ("g", 1);
9a7071a8
JB
3755 }
3756 else
3757 internal_error (__FILE__, __LINE__,
3758 _("Invalid value for interrupt_sequence_mode: %s."),
3759 interrupt_sequence_mode);
3760}
3761
3405876a
PA
3762
3763/* If STOP_REPLY is a T stop reply, look for the "thread" register,
3764 and extract the PTID. Returns NULL_PTID if not found. */
3765
3766static ptid_t
3767stop_reply_extract_thread (char *stop_reply)
3768{
3769 if (stop_reply[0] == 'T' && strlen (stop_reply) > 3)
3770 {
3771 char *p;
3772
3773 /* Txx r:val ; r:val (...) */
3774 p = &stop_reply[3];
3775
3776 /* Look for "register" named "thread". */
3777 while (*p != '\0')
3778 {
3779 char *p1;
3780
3781 p1 = strchr (p, ':');
3782 if (p1 == NULL)
3783 return null_ptid;
3784
3785 if (strncmp (p, "thread", p1 - p) == 0)
3786 return read_ptid (++p1, &p);
3787
3788 p1 = strchr (p, ';');
3789 if (p1 == NULL)
3790 return null_ptid;
3791 p1++;
3792
3793 p = p1;
3794 }
3795 }
3796
3797 return null_ptid;
3798}
3799
b7ea362b
PA
3800/* Determine the remote side's current thread. If we have a stop
3801 reply handy (in WAIT_STATUS), maybe it's a T stop reply with a
3802 "thread" register we can extract the current thread from. If not,
3803 ask the remote which is the current thread with qC. The former
3804 method avoids a roundtrip. */
3805
3806static ptid_t
3807get_current_thread (char *wait_status)
3808{
6a49a997 3809 ptid_t ptid = null_ptid;
b7ea362b
PA
3810
3811 /* Note we don't use remote_parse_stop_reply as that makes use of
3812 the target architecture, which we haven't yet fully determined at
3813 this point. */
3814 if (wait_status != NULL)
3815 ptid = stop_reply_extract_thread (wait_status);
3816 if (ptid_equal (ptid, null_ptid))
3817 ptid = remote_current_thread (inferior_ptid);
3818
3819 return ptid;
3820}
3821
49c62f2e
PA
3822/* Query the remote target for which is the current thread/process,
3823 add it to our tables, and update INFERIOR_PTID. The caller is
3824 responsible for setting the state such that the remote end is ready
3405876a
PA
3825 to return the current thread.
3826
3827 This function is called after handling the '?' or 'vRun' packets,
3828 whose response is a stop reply from which we can also try
3829 extracting the thread. If the target doesn't support the explicit
3830 qC query, we infer the current thread from that stop reply, passed
3831 in in WAIT_STATUS, which may be NULL. */
49c62f2e
PA
3832
3833static void
3405876a 3834add_current_inferior_and_thread (char *wait_status)
49c62f2e
PA
3835{
3836 struct remote_state *rs = get_remote_state ();
3837 int fake_pid_p = 0;
49c62f2e
PA
3838
3839 inferior_ptid = null_ptid;
3840
b7ea362b 3841 /* Now, if we have thread information, update inferior_ptid. */
87215ad1 3842 ptid_t curr_ptid = get_current_thread (wait_status);
3405876a 3843
87215ad1 3844 if (curr_ptid != null_ptid)
49c62f2e
PA
3845 {
3846 if (!remote_multi_process_p (rs))
3847 fake_pid_p = 1;
49c62f2e
PA
3848 }
3849 else
3850 {
3851 /* Without this, some commands which require an active target
3852 (such as kill) won't work. This variable serves (at least)
3853 double duty as both the pid of the target process (if it has
3854 such), and as a flag indicating that a target is active. */
87215ad1 3855 curr_ptid = magic_null_ptid;
49c62f2e
PA
3856 fake_pid_p = 1;
3857 }
3858
87215ad1 3859 remote_add_inferior (fake_pid_p, ptid_get_pid (curr_ptid), -1, 1);
49c62f2e 3860
87215ad1
SDJ
3861 /* Add the main thread and switch to it. Don't try reading
3862 registers yet, since we haven't fetched the target description
3863 yet. */
3864 thread_info *tp = add_thread_silent (curr_ptid);
3865 switch_to_thread_no_regs (tp);
49c62f2e
PA
3866}
3867
6efcd9a8
PA
3868/* Print info about a thread that was found already stopped on
3869 connection. */
3870
3871static void
3872print_one_stopped_thread (struct thread_info *thread)
3873{
3874 struct target_waitstatus *ws = &thread->suspend.waitstatus;
3875
3876 switch_to_thread (thread->ptid);
3877 stop_pc = get_frame_pc (get_current_frame ());
3878 set_current_sal_from_frame (get_current_frame ());
3879
3880 thread->suspend.waitstatus_pending_p = 0;
3881
3882 if (ws->kind == TARGET_WAITKIND_STOPPED)
3883 {
3884 enum gdb_signal sig = ws->value.sig;
3885
3886 if (signal_print_state (sig))
3887 observer_notify_signal_received (sig);
3888 }
3889 observer_notify_normal_stop (NULL, 1);
3890}
3891
221e1a37
PA
3892/* Process all initial stop replies the remote side sent in response
3893 to the ? packet. These indicate threads that were already stopped
3894 on initial connection. We mark these threads as stopped and print
3895 their current frame before giving the user the prompt. */
3896
3897static void
6efcd9a8 3898process_initial_stop_replies (int from_tty)
221e1a37
PA
3899{
3900 int pending_stop_replies = stop_reply_queue_length ();
6efcd9a8
PA
3901 struct inferior *inf;
3902 struct thread_info *thread;
3903 struct thread_info *selected = NULL;
3904 struct thread_info *lowest_stopped = NULL;
3905 struct thread_info *first = NULL;
221e1a37
PA
3906
3907 /* Consume the initial pending events. */
3908 while (pending_stop_replies-- > 0)
3909 {
3910 ptid_t waiton_ptid = minus_one_ptid;
3911 ptid_t event_ptid;
3912 struct target_waitstatus ws;
3913 int ignore_event = 0;
6efcd9a8 3914 struct thread_info *thread;
221e1a37
PA
3915
3916 memset (&ws, 0, sizeof (ws));
3917 event_ptid = target_wait (waiton_ptid, &ws, TARGET_WNOHANG);
3918 if (remote_debug)
3919 print_target_wait_results (waiton_ptid, event_ptid, &ws);
3920
3921 switch (ws.kind)
3922 {
3923 case TARGET_WAITKIND_IGNORE:
3924 case TARGET_WAITKIND_NO_RESUMED:
3925 case TARGET_WAITKIND_SIGNALLED:
3926 case TARGET_WAITKIND_EXITED:
3927 /* We shouldn't see these, but if we do, just ignore. */
3928 if (remote_debug)
3929 fprintf_unfiltered (gdb_stdlog, "remote: event ignored\n");
3930 ignore_event = 1;
3931 break;
3932
3933 case TARGET_WAITKIND_EXECD:
3934 xfree (ws.value.execd_pathname);
3935 break;
3936 default:
3937 break;
3938 }
3939
3940 if (ignore_event)
3941 continue;
3942
6efcd9a8 3943 thread = find_thread_ptid (event_ptid);
221e1a37
PA
3944
3945 if (ws.kind == TARGET_WAITKIND_STOPPED)
3946 {
3947 enum gdb_signal sig = ws.value.sig;
3948
3949 /* Stubs traditionally report SIGTRAP as initial signal,
3950 instead of signal 0. Suppress it. */
3951 if (sig == GDB_SIGNAL_TRAP)
3952 sig = GDB_SIGNAL_0;
6efcd9a8
PA
3953 thread->suspend.stop_signal = sig;
3954 ws.value.sig = sig;
3955 }
221e1a37 3956
6efcd9a8
PA
3957 thread->suspend.waitstatus = ws;
3958
3959 if (ws.kind != TARGET_WAITKIND_STOPPED
3960 || ws.value.sig != GDB_SIGNAL_0)
3961 thread->suspend.waitstatus_pending_p = 1;
3962
3963 set_executing (event_ptid, 0);
3964 set_running (event_ptid, 0);
85ad3aaf 3965 thread->priv->vcont_resumed = 0;
6efcd9a8
PA
3966 }
3967
3968 /* "Notice" the new inferiors before anything related to
3969 registers/memory. */
3970 ALL_INFERIORS (inf)
3971 {
3972 if (inf->pid == 0)
3973 continue;
3974
3975 inf->needs_setup = 1;
3976
3977 if (non_stop)
3978 {
3979 thread = any_live_thread_of_process (inf->pid);
3980 notice_new_inferior (thread->ptid,
3981 thread->state == THREAD_RUNNING,
3982 from_tty);
3983 }
3984 }
3985
3986 /* If all-stop on top of non-stop, pause all threads. Note this
3987 records the threads' stop pc, so must be done after "noticing"
3988 the inferiors. */
3989 if (!non_stop)
3990 {
3991 stop_all_threads ();
3992
3993 /* If all threads of an inferior were already stopped, we
3994 haven't setup the inferior yet. */
3995 ALL_INFERIORS (inf)
3996 {
3997 if (inf->pid == 0)
3998 continue;
221e1a37 3999
6efcd9a8
PA
4000 if (inf->needs_setup)
4001 {
4002 thread = any_live_thread_of_process (inf->pid);
4003 switch_to_thread_no_regs (thread);
4004 setup_inferior (0);
4005 }
4006 }
221e1a37 4007 }
6efcd9a8
PA
4008
4009 /* Now go over all threads that are stopped, and print their current
4010 frame. If all-stop, then if there's a signalled thread, pick
4011 that as current. */
4012 ALL_NON_EXITED_THREADS (thread)
4013 {
6efcd9a8
PA
4014 if (first == NULL)
4015 first = thread;
4016
4017 if (!non_stop)
4018 set_running (thread->ptid, 0);
4019 else if (thread->state != THREAD_STOPPED)
4020 continue;
4021
6efcd9a8
PA
4022 if (selected == NULL
4023 && thread->suspend.waitstatus_pending_p)
4024 selected = thread;
4025
5d5658a1
PA
4026 if (lowest_stopped == NULL
4027 || thread->inf->num < lowest_stopped->inf->num
4028 || thread->per_inf_num < lowest_stopped->per_inf_num)
6efcd9a8
PA
4029 lowest_stopped = thread;
4030
4031 if (non_stop)
4032 print_one_stopped_thread (thread);
4033 }
4034
4035 /* In all-stop, we only print the status of one thread, and leave
4036 others with their status pending. */
4037 if (!non_stop)
4038 {
4039 thread = selected;
4040 if (thread == NULL)
4041 thread = lowest_stopped;
4042 if (thread == NULL)
4043 thread = first;
4044
4045 print_one_stopped_thread (thread);
4046 }
4047
4048 /* For "info program". */
4049 thread = inferior_thread ();
4050 if (thread->state == THREAD_STOPPED)
4051 set_last_target_status (inferior_ptid, thread->suspend.waitstatus);
221e1a37
PA
4052}
4053
048094ac
PA
4054/* Start the remote connection and sync state. */
4055
9cbc821d 4056static void
04bd08de 4057remote_start_remote (int from_tty, struct target_ops *target, int extended_p)
c906108c 4058{
c8d104ad
PA
4059 struct remote_state *rs = get_remote_state ();
4060 struct packet_config *noack_config;
2d717e4f 4061 char *wait_status = NULL;
8621d6a9 4062
048094ac
PA
4063 /* Signal other parts that we're going through the initial setup,
4064 and so things may not be stable yet. E.g., we don't try to
4065 install tracepoints until we've relocated symbols. Also, a
4066 Ctrl-C before we're connected and synced up can't interrupt the
4067 target. Instead, it offers to drop the (potentially wedged)
4068 connection. */
4069 rs->starting_up = 1;
4070
522002f9 4071 QUIT;
c906108c 4072
9a7071a8
JB
4073 if (interrupt_on_connect)
4074 send_interrupt_sequence ();
4075
57e12211 4076 /* Ack any packet which the remote side has already sent. */
048094ac 4077 remote_serial_write ("+", 1);
1e51243a 4078
c8d104ad
PA
4079 /* The first packet we send to the target is the optional "supported
4080 packets" request. If the target can answer this, it will tell us
4081 which later probes to skip. */
4082 remote_query_supported ();
4083
d914c394 4084 /* If the stub wants to get a QAllow, compose one and send it. */
4082afcc 4085 if (packet_support (PACKET_QAllow) != PACKET_DISABLE)
c378d69d 4086 remote_set_permissions (target);
d914c394 4087
57809e5e
JK
4088 /* gdbserver < 7.7 (before its fix from 2013-12-11) did reply to any
4089 unknown 'v' packet with string "OK". "OK" gets interpreted by GDB
4090 as a reply to known packet. For packet "vFile:setfs:" it is an
4091 invalid reply and GDB would return error in
4092 remote_hostio_set_filesystem, making remote files access impossible.
4093 Disable "vFile:setfs:" in such case. Do not disable other 'v' packets as
4094 other "vFile" packets get correctly detected even on gdbserver < 7.7. */
4095 {
4096 const char v_mustreplyempty[] = "vMustReplyEmpty";
4097
4098 putpkt (v_mustreplyempty);
4099 getpkt (&rs->buf, &rs->buf_size, 0);
4100 if (strcmp (rs->buf, "OK") == 0)
4101 remote_protocol_packets[PACKET_vFile_setfs].support = PACKET_DISABLE;
4102 else if (strcmp (rs->buf, "") != 0)
4103 error (_("Remote replied unexpectedly to '%s': %s"), v_mustreplyempty,
4104 rs->buf);
4105 }
4106
c8d104ad
PA
4107 /* Next, we possibly activate noack mode.
4108
4109 If the QStartNoAckMode packet configuration is set to AUTO,
4110 enable noack mode if the stub reported a wish for it with
4111 qSupported.
4112
4113 If set to TRUE, then enable noack mode even if the stub didn't
4114 report it in qSupported. If the stub doesn't reply OK, the
4115 session ends with an error.
4116
4117 If FALSE, then don't activate noack mode, regardless of what the
4118 stub claimed should be the default with qSupported. */
4119
4120 noack_config = &remote_protocol_packets[PACKET_QStartNoAckMode];
4082afcc 4121 if (packet_config_support (noack_config) != PACKET_DISABLE)
c8d104ad
PA
4122 {
4123 putpkt ("QStartNoAckMode");
4124 getpkt (&rs->buf, &rs->buf_size, 0);
4125 if (packet_ok (rs->buf, noack_config) == PACKET_OK)
4126 rs->noack_mode = 1;
4127 }
4128
04bd08de 4129 if (extended_p)
5fe04517
PA
4130 {
4131 /* Tell the remote that we are using the extended protocol. */
4132 putpkt ("!");
4133 getpkt (&rs->buf, &rs->buf_size, 0);
4134 }
4135
9b224c5e
PA
4136 /* Let the target know which signals it is allowed to pass down to
4137 the program. */
4138 update_signals_program_target ();
4139
d962ef82
DJ
4140 /* Next, if the target can specify a description, read it. We do
4141 this before anything involving memory or registers. */
4142 target_find_description ();
4143
6c95b8df
PA
4144 /* Next, now that we know something about the target, update the
4145 address spaces in the program spaces. */
4146 update_address_spaces ();
4147
50c71eaf
PA
4148 /* On OSs where the list of libraries is global to all
4149 processes, we fetch them early. */
f5656ead 4150 if (gdbarch_has_global_solist (target_gdbarch ()))
e696b3ad 4151 solib_add (NULL, from_tty, auto_solib_add);
50c71eaf 4152
6efcd9a8 4153 if (target_is_non_stop_p ())
74531fed 4154 {
4082afcc 4155 if (packet_support (PACKET_QNonStop) != PACKET_ENABLE)
3e43a32a
MS
4156 error (_("Non-stop mode requested, but remote "
4157 "does not support non-stop"));
74531fed
PA
4158
4159 putpkt ("QNonStop:1");
4160 getpkt (&rs->buf, &rs->buf_size, 0);
4161
4162 if (strcmp (rs->buf, "OK") != 0)
9b20d036 4163 error (_("Remote refused setting non-stop mode with: %s"), rs->buf);
74531fed
PA
4164
4165 /* Find about threads and processes the stub is already
4166 controlling. We default to adding them in the running state.
4167 The '?' query below will then tell us about which threads are
4168 stopped. */
e8032dde 4169 remote_update_thread_list (target);
74531fed 4170 }
4082afcc 4171 else if (packet_support (PACKET_QNonStop) == PACKET_ENABLE)
74531fed
PA
4172 {
4173 /* Don't assume that the stub can operate in all-stop mode.
e6f3fa52 4174 Request it explicitly. */
74531fed
PA
4175 putpkt ("QNonStop:0");
4176 getpkt (&rs->buf, &rs->buf_size, 0);
4177
4178 if (strcmp (rs->buf, "OK") != 0)
9b20d036 4179 error (_("Remote refused setting all-stop mode with: %s"), rs->buf);
74531fed
PA
4180 }
4181
a0743c90
YQ
4182 /* Upload TSVs regardless of whether the target is running or not. The
4183 remote stub, such as GDBserver, may have some predefined or builtin
4184 TSVs, even if the target is not running. */
8bd200f1 4185 if (remote_get_trace_status (target, current_trace_status ()) != -1)
a0743c90
YQ
4186 {
4187 struct uploaded_tsv *uploaded_tsvs = NULL;
4188
181e3713 4189 remote_upload_trace_state_variables (target, &uploaded_tsvs);
a0743c90
YQ
4190 merge_uploaded_trace_state_variables (&uploaded_tsvs);
4191 }
4192
2d717e4f
DJ
4193 /* Check whether the target is running now. */
4194 putpkt ("?");
4195 getpkt (&rs->buf, &rs->buf_size, 0);
4196
6efcd9a8 4197 if (!target_is_non_stop_p ())
2d717e4f 4198 {
74531fed 4199 if (rs->buf[0] == 'W' || rs->buf[0] == 'X')
2d717e4f 4200 {
04bd08de 4201 if (!extended_p)
74531fed 4202 error (_("The target is not running (try extended-remote?)"));
c35b1492
PA
4203
4204 /* We're connected, but not running. Drop out before we
4205 call start_remote. */
e278ad5b 4206 rs->starting_up = 0;
c35b1492 4207 return;
2d717e4f
DJ
4208 }
4209 else
74531fed 4210 {
74531fed 4211 /* Save the reply for later. */
224c3ddb 4212 wait_status = (char *) alloca (strlen (rs->buf) + 1);
74531fed
PA
4213 strcpy (wait_status, rs->buf);
4214 }
4215
b7ea362b 4216 /* Fetch thread list. */
e8032dde 4217 target_update_thread_list ();
b7ea362b 4218
74531fed
PA
4219 /* Let the stub know that we want it to return the thread. */
4220 set_continue_thread (minus_one_ptid);
4221
b7ea362b
PA
4222 if (thread_count () == 0)
4223 {
4224 /* Target has no concept of threads at all. GDB treats
4225 non-threaded target as single-threaded; add a main
4226 thread. */
4227 add_current_inferior_and_thread (wait_status);
4228 }
4229 else
4230 {
4231 /* We have thread information; select the thread the target
4232 says should be current. If we're reconnecting to a
4233 multi-threaded program, this will ideally be the thread
4234 that last reported an event before GDB disconnected. */
4235 inferior_ptid = get_current_thread (wait_status);
4236 if (ptid_equal (inferior_ptid, null_ptid))
4237 {
4238 /* Odd... The target was able to list threads, but not
4239 tell us which thread was current (no "thread"
4240 register in T stop reply?). Just pick the first
4241 thread in the thread list then. */
c9f35b34
KB
4242
4243 if (remote_debug)
4244 fprintf_unfiltered (gdb_stdlog,
4245 "warning: couldn't determine remote "
4246 "current thread; picking first in list.\n");
4247
b7ea362b
PA
4248 inferior_ptid = thread_list->ptid;
4249 }
4250 }
74531fed 4251
6e586cc5
YQ
4252 /* init_wait_for_inferior should be called before get_offsets in order
4253 to manage `inserted' flag in bp loc in a correct state.
4254 breakpoint_init_inferior, called from init_wait_for_inferior, set
4255 `inserted' flag to 0, while before breakpoint_re_set, called from
4256 start_remote, set `inserted' flag to 1. In the initialization of
4257 inferior, breakpoint_init_inferior should be called first, and then
4258 breakpoint_re_set can be called. If this order is broken, state of
4259 `inserted' flag is wrong, and cause some problems on breakpoint
4260 manipulation. */
4261 init_wait_for_inferior ();
4262
74531fed
PA
4263 get_offsets (); /* Get text, data & bss offsets. */
4264
d962ef82
DJ
4265 /* If we could not find a description using qXfer, and we know
4266 how to do it some other way, try again. This is not
4267 supported for non-stop; it could be, but it is tricky if
4268 there are no stopped threads when we connect. */
04bd08de 4269 if (remote_read_description_p (target)
f5656ead 4270 && gdbarch_target_desc (target_gdbarch ()) == NULL)
d962ef82
DJ
4271 {
4272 target_clear_description ();
4273 target_find_description ();
4274 }
4275
74531fed
PA
4276 /* Use the previously fetched status. */
4277 gdb_assert (wait_status != NULL);
4278 strcpy (rs->buf, wait_status);
4279 rs->cached_wait_status = 1;
4280
04bd08de 4281 start_remote (from_tty); /* Initialize gdb process mechanisms. */
2d717e4f
DJ
4282 }
4283 else
4284 {
68c97600
PA
4285 /* Clear WFI global state. Do this before finding about new
4286 threads and inferiors, and setting the current inferior.
4287 Otherwise we would clear the proceed status of the current
4288 inferior when we want its stop_soon state to be preserved
4289 (see notice_new_inferior). */
4290 init_wait_for_inferior ();
4291
74531fed
PA
4292 /* In non-stop, we will either get an "OK", meaning that there
4293 are no stopped threads at this time; or, a regular stop
4294 reply. In the latter case, there may be more than one thread
4295 stopped --- we pull them all out using the vStopped
4296 mechanism. */
4297 if (strcmp (rs->buf, "OK") != 0)
4298 {
722247f1 4299 struct notif_client *notif = &notif_client_stop;
2d717e4f 4300
722247f1
YQ
4301 /* remote_notif_get_pending_replies acks this one, and gets
4302 the rest out. */
f48ff2a7 4303 rs->notif_state->pending_event[notif_client_stop.id]
722247f1
YQ
4304 = remote_notif_parse (notif, rs->buf);
4305 remote_notif_get_pending_events (notif);
74531fed 4306 }
2d717e4f 4307
74531fed
PA
4308 if (thread_count () == 0)
4309 {
04bd08de 4310 if (!extended_p)
74531fed 4311 error (_("The target is not running (try extended-remote?)"));
82f73884 4312
c35b1492
PA
4313 /* We're connected, but not running. Drop out before we
4314 call start_remote. */
e278ad5b 4315 rs->starting_up = 0;
c35b1492
PA
4316 return;
4317 }
74531fed 4318
74531fed
PA
4319 /* In non-stop mode, any cached wait status will be stored in
4320 the stop reply queue. */
4321 gdb_assert (wait_status == NULL);
f0223081 4322
2455069d 4323 /* Report all signals during attach/startup. */
94bedb42 4324 remote_pass_signals (target, 0, NULL);
221e1a37
PA
4325
4326 /* If there are already stopped threads, mark them stopped and
4327 report their stops before giving the prompt to the user. */
6efcd9a8 4328 process_initial_stop_replies (from_tty);
221e1a37
PA
4329
4330 if (target_can_async_p ())
4331 target_async (1);
74531fed 4332 }
c8d104ad 4333
c8d104ad
PA
4334 /* If we connected to a live target, do some additional setup. */
4335 if (target_has_execution)
4336 {
f4ccffad 4337 if (symfile_objfile) /* No use without a symbol-file. */
36d25514 4338 remote_check_symbols ();
c8d104ad 4339 }
50c71eaf 4340
d5551862
SS
4341 /* Possibly the target has been engaged in a trace run started
4342 previously; find out where things are at. */
8bd200f1 4343 if (remote_get_trace_status (target, current_trace_status ()) != -1)
d5551862 4344 {
00bf0b85 4345 struct uploaded_tp *uploaded_tps = NULL;
00bf0b85 4346
00bf0b85
SS
4347 if (current_trace_status ()->running)
4348 printf_filtered (_("Trace is already running on the target.\n"));
4349
ab6617cc 4350 remote_upload_tracepoints (target, &uploaded_tps);
00bf0b85
SS
4351
4352 merge_uploaded_tracepoints (&uploaded_tps);
d5551862
SS
4353 }
4354
c0272db5
TW
4355 /* Possibly the target has been engaged in a btrace record started
4356 previously; find out where things are at. */
4357 remote_btrace_maybe_reopen ();
4358
1e51243a
PA
4359 /* The thread and inferior lists are now synchronized with the
4360 target, our symbols have been relocated, and we're merged the
4361 target's tracepoints with ours. We're done with basic start
4362 up. */
4363 rs->starting_up = 0;
4364
a25a5a45
PA
4365 /* Maybe breakpoints are global and need to be inserted now. */
4366 if (breakpoints_should_be_inserted_now ())
50c71eaf 4367 insert_breakpoints ();
c906108c
SS
4368}
4369
4370/* Open a connection to a remote debugger.
4371 NAME is the filename used for communication. */
4372
4373static void
014f9477 4374remote_open (const char *name, int from_tty)
c906108c 4375{
75c99385 4376 remote_open_1 (name, from_tty, &remote_ops, 0);
43ff13b4
JM
4377}
4378
c906108c
SS
4379/* Open a connection to a remote debugger using the extended
4380 remote gdb protocol. NAME is the filename used for communication. */
4381
4382static void
014f9477 4383extended_remote_open (const char *name, int from_tty)
c906108c 4384{
75c99385 4385 remote_open_1 (name, from_tty, &extended_remote_ops, 1 /*extended_p */);
43ff13b4
JM
4386}
4387
ca4f7f8b
PA
4388/* Reset all packets back to "unknown support". Called when opening a
4389 new connection to a remote target. */
c906108c 4390
d471ea57 4391static void
ca4f7f8b 4392reset_all_packet_configs_support (void)
d471ea57
AC
4393{
4394 int i;
a744cf53 4395
444abaca 4396 for (i = 0; i < PACKET_MAX; i++)
4082afcc 4397 remote_protocol_packets[i].support = PACKET_SUPPORT_UNKNOWN;
d471ea57
AC
4398}
4399
ca4f7f8b
PA
4400/* Initialize all packet configs. */
4401
4402static void
4403init_all_packet_configs (void)
4404{
4405 int i;
4406
4407 for (i = 0; i < PACKET_MAX; i++)
4408 {
4409 remote_protocol_packets[i].detect = AUTO_BOOLEAN_AUTO;
4410 remote_protocol_packets[i].support = PACKET_SUPPORT_UNKNOWN;
4411 }
4412}
4413
23860348 4414/* Symbol look-up. */
dc8acb97
MS
4415
4416static void
36d25514 4417remote_check_symbols (void)
dc8acb97 4418{
d01949b6 4419 struct remote_state *rs = get_remote_state ();
dc8acb97 4420 char *msg, *reply, *tmp;
dc8acb97 4421 int end;
28170b88 4422 long reply_size;
a5c0808e 4423 struct cleanup *old_chain;
dc8acb97 4424
63154eca
PA
4425 /* The remote side has no concept of inferiors that aren't running
4426 yet, it only knows about running processes. If we're connected
4427 but our current inferior is not running, we should not invite the
4428 remote target to request symbol lookups related to its
4429 (unrelated) current process. */
4430 if (!target_has_execution)
4431 return;
4432
4082afcc 4433 if (packet_support (PACKET_qSymbol) == PACKET_DISABLE)
dc8acb97
MS
4434 return;
4435
63154eca
PA
4436 /* Make sure the remote is pointing at the right process. Note
4437 there's no way to select "no process". */
3c9c4b83
PA
4438 set_general_process ();
4439
6d820c5c
DJ
4440 /* Allocate a message buffer. We can't reuse the input buffer in RS,
4441 because we need both at the same time. */
224c3ddb 4442 msg = (char *) xmalloc (get_remote_packet_size ());
a5c0808e 4443 old_chain = make_cleanup (xfree, msg);
28170b88
MK
4444 reply = (char *) xmalloc (get_remote_packet_size ());
4445 make_cleanup (free_current_contents, &reply);
4446 reply_size = get_remote_packet_size ();
6d820c5c 4447
23860348 4448 /* Invite target to request symbol lookups. */
dc8acb97
MS
4449
4450 putpkt ("qSymbol::");
28170b88
MK
4451 getpkt (&reply, &reply_size, 0);
4452 packet_ok (reply, &remote_protocol_packets[PACKET_qSymbol]);
dc8acb97 4453
61012eef 4454 while (startswith (reply, "qSymbol:"))
dc8acb97 4455 {
77e371c0
TT
4456 struct bound_minimal_symbol sym;
4457
dc8acb97 4458 tmp = &reply[8];
cfd77fa1 4459 end = hex2bin (tmp, (gdb_byte *) msg, strlen (tmp) / 2);
dc8acb97
MS
4460 msg[end] = '\0';
4461 sym = lookup_minimal_symbol (msg, NULL, NULL);
3b7344d5 4462 if (sym.minsym == NULL)
ea9c271d 4463 xsnprintf (msg, get_remote_packet_size (), "qSymbol::%s", &reply[8]);
dc8acb97 4464 else
2bbe3cc1 4465 {
f5656ead 4466 int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
77e371c0 4467 CORE_ADDR sym_addr = BMSYMBOL_VALUE_ADDRESS (sym);
2bbe3cc1
DJ
4468
4469 /* If this is a function address, return the start of code
4470 instead of any data function descriptor. */
f5656ead 4471 sym_addr = gdbarch_convert_from_func_ptr_addr (target_gdbarch (),
2bbe3cc1
DJ
4472 sym_addr,
4473 &current_target);
4474
4475 xsnprintf (msg, get_remote_packet_size (), "qSymbol:%s:%s",
5af949e3 4476 phex_nz (sym_addr, addr_size), &reply[8]);
2bbe3cc1
DJ
4477 }
4478
dc8acb97 4479 putpkt (msg);
28170b88 4480 getpkt (&reply, &reply_size, 0);
dc8acb97 4481 }
a5c0808e
PA
4482
4483 do_cleanups (old_chain);
dc8acb97
MS
4484}
4485
9db8d71f 4486static struct serial *
baa336ce 4487remote_serial_open (const char *name)
9db8d71f
DJ
4488{
4489 static int udp_warning = 0;
4490
4491 /* FIXME: Parsing NAME here is a hack. But we want to warn here instead
4492 of in ser-tcp.c, because it is the remote protocol assuming that the
4493 serial connection is reliable and not the serial connection promising
4494 to be. */
61012eef 4495 if (!udp_warning && startswith (name, "udp:"))
9db8d71f 4496 {
3e43a32a
MS
4497 warning (_("The remote protocol may be unreliable over UDP.\n"
4498 "Some events may be lost, rendering further debugging "
4499 "impossible."));
9db8d71f
DJ
4500 udp_warning = 1;
4501 }
4502
4503 return serial_open (name);
4504}
4505
d914c394
SS
4506/* Inform the target of our permission settings. The permission flags
4507 work without this, but if the target knows the settings, it can do
4508 a couple things. First, it can add its own check, to catch cases
4509 that somehow manage to get by the permissions checks in target
4510 methods. Second, if the target is wired to disallow particular
4511 settings (for instance, a system in the field that is not set up to
4512 be able to stop at a breakpoint), it can object to any unavailable
4513 permissions. */
4514
4515void
c378d69d 4516remote_set_permissions (struct target_ops *self)
d914c394
SS
4517{
4518 struct remote_state *rs = get_remote_state ();
4519
bba74b36
YQ
4520 xsnprintf (rs->buf, get_remote_packet_size (), "QAllow:"
4521 "WriteReg:%x;WriteMem:%x;"
4522 "InsertBreak:%x;InsertTrace:%x;"
4523 "InsertFastTrace:%x;Stop:%x",
4524 may_write_registers, may_write_memory,
4525 may_insert_breakpoints, may_insert_tracepoints,
4526 may_insert_fast_tracepoints, may_stop);
d914c394
SS
4527 putpkt (rs->buf);
4528 getpkt (&rs->buf, &rs->buf_size, 0);
4529
4530 /* If the target didn't like the packet, warn the user. Do not try
4531 to undo the user's settings, that would just be maddening. */
4532 if (strcmp (rs->buf, "OK") != 0)
7ea6d463 4533 warning (_("Remote refused setting permissions with: %s"), rs->buf);
d914c394
SS
4534}
4535
be2a5f71
DJ
4536/* This type describes each known response to the qSupported
4537 packet. */
4538struct protocol_feature
4539{
4540 /* The name of this protocol feature. */
4541 const char *name;
4542
4543 /* The default for this protocol feature. */
4544 enum packet_support default_support;
4545
4546 /* The function to call when this feature is reported, or after
4547 qSupported processing if the feature is not supported.
4548 The first argument points to this structure. The second
4549 argument indicates whether the packet requested support be
4550 enabled, disabled, or probed (or the default, if this function
4551 is being called at the end of processing and this feature was
4552 not reported). The third argument may be NULL; if not NULL, it
4553 is a NUL-terminated string taken from the packet following
4554 this feature's name and an equals sign. */
4555 void (*func) (const struct protocol_feature *, enum packet_support,
4556 const char *);
4557
4558 /* The corresponding packet for this feature. Only used if
4559 FUNC is remote_supported_packet. */
4560 int packet;
4561};
4562
be2a5f71
DJ
4563static void
4564remote_supported_packet (const struct protocol_feature *feature,
4565 enum packet_support support,
4566 const char *argument)
4567{
4568 if (argument)
4569 {
4570 warning (_("Remote qSupported response supplied an unexpected value for"
4571 " \"%s\"."), feature->name);
4572 return;
4573 }
4574
4082afcc 4575 remote_protocol_packets[feature->packet].support = support;
be2a5f71 4576}
be2a5f71
DJ
4577
4578static void
4579remote_packet_size (const struct protocol_feature *feature,
4580 enum packet_support support, const char *value)
4581{
4582 struct remote_state *rs = get_remote_state ();
4583
4584 int packet_size;
4585 char *value_end;
4586
4587 if (support != PACKET_ENABLE)
4588 return;
4589
4590 if (value == NULL || *value == '\0')
4591 {
4592 warning (_("Remote target reported \"%s\" without a size."),
4593 feature->name);
4594 return;
4595 }
4596
4597 errno = 0;
4598 packet_size = strtol (value, &value_end, 16);
4599 if (errno != 0 || *value_end != '\0' || packet_size < 0)
4600 {
4601 warning (_("Remote target reported \"%s\" with a bad size: \"%s\"."),
4602 feature->name, value);
4603 return;
4604 }
4605
be2a5f71
DJ
4606 /* Record the new maximum packet size. */
4607 rs->explicit_packet_size = packet_size;
4608}
4609
dc473cfb 4610static const struct protocol_feature remote_protocol_features[] = {
0876f84a 4611 { "PacketSize", PACKET_DISABLE, remote_packet_size, -1 },
40e57cf2 4612 { "qXfer:auxv:read", PACKET_DISABLE, remote_supported_packet,
fd79ecee 4613 PACKET_qXfer_auxv },
c78fa86a
GB
4614 { "qXfer:exec-file:read", PACKET_DISABLE, remote_supported_packet,
4615 PACKET_qXfer_exec_file },
23181151
DJ
4616 { "qXfer:features:read", PACKET_DISABLE, remote_supported_packet,
4617 PACKET_qXfer_features },
cfa9d6d9
DJ
4618 { "qXfer:libraries:read", PACKET_DISABLE, remote_supported_packet,
4619 PACKET_qXfer_libraries },
2268b414
JK
4620 { "qXfer:libraries-svr4:read", PACKET_DISABLE, remote_supported_packet,
4621 PACKET_qXfer_libraries_svr4 },
ced63ec0 4622 { "augmented-libraries-svr4-read", PACKET_DISABLE,
4082afcc 4623 remote_supported_packet, PACKET_augmented_libraries_svr4_read_feature },
fd79ecee 4624 { "qXfer:memory-map:read", PACKET_DISABLE, remote_supported_packet,
89be2091 4625 PACKET_qXfer_memory_map },
4de6483e
UW
4626 { "qXfer:spu:read", PACKET_DISABLE, remote_supported_packet,
4627 PACKET_qXfer_spu_read },
4628 { "qXfer:spu:write", PACKET_DISABLE, remote_supported_packet,
4629 PACKET_qXfer_spu_write },
07e059b5
VP
4630 { "qXfer:osdata:read", PACKET_DISABLE, remote_supported_packet,
4631 PACKET_qXfer_osdata },
dc146f7c
VP
4632 { "qXfer:threads:read", PACKET_DISABLE, remote_supported_packet,
4633 PACKET_qXfer_threads },
b3b9301e
PA
4634 { "qXfer:traceframe-info:read", PACKET_DISABLE, remote_supported_packet,
4635 PACKET_qXfer_traceframe_info },
89be2091
DJ
4636 { "QPassSignals", PACKET_DISABLE, remote_supported_packet,
4637 PACKET_QPassSignals },
82075af2
JS
4638 { "QCatchSyscalls", PACKET_DISABLE, remote_supported_packet,
4639 PACKET_QCatchSyscalls },
9b224c5e
PA
4640 { "QProgramSignals", PACKET_DISABLE, remote_supported_packet,
4641 PACKET_QProgramSignals },
aefd8b33
SDJ
4642 { "QStartupWithShell", PACKET_DISABLE, remote_supported_packet,
4643 PACKET_QStartupWithShell },
0a2dde4a
SDJ
4644 { "QEnvironmentHexEncoded", PACKET_DISABLE, remote_supported_packet,
4645 PACKET_QEnvironmentHexEncoded },
4646 { "QEnvironmentReset", PACKET_DISABLE, remote_supported_packet,
4647 PACKET_QEnvironmentReset },
4648 { "QEnvironmentUnset", PACKET_DISABLE, remote_supported_packet,
4649 PACKET_QEnvironmentUnset },
a6f3e723
SL
4650 { "QStartNoAckMode", PACKET_DISABLE, remote_supported_packet,
4651 PACKET_QStartNoAckMode },
4082afcc
PA
4652 { "multiprocess", PACKET_DISABLE, remote_supported_packet,
4653 PACKET_multiprocess_feature },
4654 { "QNonStop", PACKET_DISABLE, remote_supported_packet, PACKET_QNonStop },
4aa995e1
PA
4655 { "qXfer:siginfo:read", PACKET_DISABLE, remote_supported_packet,
4656 PACKET_qXfer_siginfo_read },
4657 { "qXfer:siginfo:write", PACKET_DISABLE, remote_supported_packet,
4658 PACKET_qXfer_siginfo_write },
4082afcc 4659 { "ConditionalTracepoints", PACKET_DISABLE, remote_supported_packet,
782b2b07 4660 PACKET_ConditionalTracepoints },
4082afcc 4661 { "ConditionalBreakpoints", PACKET_DISABLE, remote_supported_packet,
3788aec7 4662 PACKET_ConditionalBreakpoints },
4082afcc 4663 { "BreakpointCommands", PACKET_DISABLE, remote_supported_packet,
d3ce09f5 4664 PACKET_BreakpointCommands },
4082afcc 4665 { "FastTracepoints", PACKET_DISABLE, remote_supported_packet,
7a697b8d 4666 PACKET_FastTracepoints },
4082afcc 4667 { "StaticTracepoints", PACKET_DISABLE, remote_supported_packet,
0fb4aa4b 4668 PACKET_StaticTracepoints },
4082afcc 4669 {"InstallInTrace", PACKET_DISABLE, remote_supported_packet,
1e4d1764 4670 PACKET_InstallInTrace},
4082afcc
PA
4671 { "DisconnectedTracing", PACKET_DISABLE, remote_supported_packet,
4672 PACKET_DisconnectedTracing_feature },
40ab02ce
MS
4673 { "ReverseContinue", PACKET_DISABLE, remote_supported_packet,
4674 PACKET_bc },
4675 { "ReverseStep", PACKET_DISABLE, remote_supported_packet,
4676 PACKET_bs },
409873ef
SS
4677 { "TracepointSource", PACKET_DISABLE, remote_supported_packet,
4678 PACKET_TracepointSource },
d914c394
SS
4679 { "QAllow", PACKET_DISABLE, remote_supported_packet,
4680 PACKET_QAllow },
4082afcc
PA
4681 { "EnableDisableTracepoints", PACKET_DISABLE, remote_supported_packet,
4682 PACKET_EnableDisableTracepoints_feature },
78d85199
YQ
4683 { "qXfer:fdpic:read", PACKET_DISABLE, remote_supported_packet,
4684 PACKET_qXfer_fdpic },
169081d0
TG
4685 { "qXfer:uib:read", PACKET_DISABLE, remote_supported_packet,
4686 PACKET_qXfer_uib },
03583c20
UW
4687 { "QDisableRandomization", PACKET_DISABLE, remote_supported_packet,
4688 PACKET_QDisableRandomization },
d1feda86 4689 { "QAgent", PACKET_DISABLE, remote_supported_packet, PACKET_QAgent},
f6f899bf
HAQ
4690 { "QTBuffer:size", PACKET_DISABLE,
4691 remote_supported_packet, PACKET_QTBuffer_size},
4082afcc 4692 { "tracenz", PACKET_DISABLE, remote_supported_packet, PACKET_tracenz_feature },
9accd112
MM
4693 { "Qbtrace:off", PACKET_DISABLE, remote_supported_packet, PACKET_Qbtrace_off },
4694 { "Qbtrace:bts", PACKET_DISABLE, remote_supported_packet, PACKET_Qbtrace_bts },
b20a6524 4695 { "Qbtrace:pt", PACKET_DISABLE, remote_supported_packet, PACKET_Qbtrace_pt },
9accd112 4696 { "qXfer:btrace:read", PACKET_DISABLE, remote_supported_packet,
f4abbc16
MM
4697 PACKET_qXfer_btrace },
4698 { "qXfer:btrace-conf:read", PACKET_DISABLE, remote_supported_packet,
d33501a5
MM
4699 PACKET_qXfer_btrace_conf },
4700 { "Qbtrace-conf:bts:size", PACKET_DISABLE, remote_supported_packet,
f7e6eed5
PA
4701 PACKET_Qbtrace_conf_bts_size },
4702 { "swbreak", PACKET_DISABLE, remote_supported_packet, PACKET_swbreak_feature },
0a93529c 4703 { "hwbreak", PACKET_DISABLE, remote_supported_packet, PACKET_hwbreak_feature },
89245bc0
DB
4704 { "fork-events", PACKET_DISABLE, remote_supported_packet,
4705 PACKET_fork_event_feature },
4706 { "vfork-events", PACKET_DISABLE, remote_supported_packet,
4707 PACKET_vfork_event_feature },
94585166
DB
4708 { "exec-events", PACKET_DISABLE, remote_supported_packet,
4709 PACKET_exec_event_feature },
b20a6524 4710 { "Qbtrace-conf:pt:size", PACKET_DISABLE, remote_supported_packet,
750ce8d1 4711 PACKET_Qbtrace_conf_pt_size },
65706a29
PA
4712 { "vContSupported", PACKET_DISABLE, remote_supported_packet, PACKET_vContSupported },
4713 { "QThreadEvents", PACKET_DISABLE, remote_supported_packet, PACKET_QThreadEvents },
f2faf941 4714 { "no-resumed", PACKET_DISABLE, remote_supported_packet, PACKET_no_resumed },
be2a5f71
DJ
4715};
4716
c8d5aac9
L
4717static char *remote_support_xml;
4718
4719/* Register string appended to "xmlRegisters=" in qSupported query. */
4720
4721void
6e39997a 4722register_remote_support_xml (const char *xml)
c8d5aac9
L
4723{
4724#if defined(HAVE_LIBEXPAT)
4725 if (remote_support_xml == NULL)
c4f7c687 4726 remote_support_xml = concat ("xmlRegisters=", xml, (char *) NULL);
c8d5aac9
L
4727 else
4728 {
4729 char *copy = xstrdup (remote_support_xml + 13);
4730 char *p = strtok (copy, ",");
4731
4732 do
4733 {
4734 if (strcmp (p, xml) == 0)
4735 {
4736 /* already there */
4737 xfree (copy);
4738 return;
4739 }
4740 }
4741 while ((p = strtok (NULL, ",")) != NULL);
4742 xfree (copy);
4743
94b0dee1
PA
4744 remote_support_xml = reconcat (remote_support_xml,
4745 remote_support_xml, ",", xml,
4746 (char *) NULL);
c8d5aac9
L
4747 }
4748#endif
4749}
4750
4751static char *
4752remote_query_supported_append (char *msg, const char *append)
4753{
4754 if (msg)
94b0dee1 4755 return reconcat (msg, msg, ";", append, (char *) NULL);
c8d5aac9
L
4756 else
4757 return xstrdup (append);
4758}
4759
be2a5f71
DJ
4760static void
4761remote_query_supported (void)
4762{
4763 struct remote_state *rs = get_remote_state ();
4764 char *next;
4765 int i;
4766 unsigned char seen [ARRAY_SIZE (remote_protocol_features)];
4767
4768 /* The packet support flags are handled differently for this packet
4769 than for most others. We treat an error, a disabled packet, and
4770 an empty response identically: any features which must be reported
4771 to be used will be automatically disabled. An empty buffer
4772 accomplishes this, since that is also the representation for a list
4773 containing no features. */
4774
4775 rs->buf[0] = 0;
4082afcc 4776 if (packet_support (PACKET_qSupported) != PACKET_DISABLE)
be2a5f71 4777 {
c8d5aac9 4778 char *q = NULL;
94b0dee1 4779 struct cleanup *old_chain = make_cleanup (free_current_contents, &q);
c8d5aac9 4780
73b8c1fd
PA
4781 if (packet_set_cmd_state (PACKET_multiprocess_feature) != AUTO_BOOLEAN_FALSE)
4782 q = remote_query_supported_append (q, "multiprocess+");
c8d5aac9 4783
f7e6eed5
PA
4784 if (packet_set_cmd_state (PACKET_swbreak_feature) != AUTO_BOOLEAN_FALSE)
4785 q = remote_query_supported_append (q, "swbreak+");
4786 if (packet_set_cmd_state (PACKET_hwbreak_feature) != AUTO_BOOLEAN_FALSE)
4787 q = remote_query_supported_append (q, "hwbreak+");
4788
dde08ee1
PA
4789 q = remote_query_supported_append (q, "qRelocInsn+");
4790
8020350c
DB
4791 if (packet_set_cmd_state (PACKET_fork_event_feature)
4792 != AUTO_BOOLEAN_FALSE)
4793 q = remote_query_supported_append (q, "fork-events+");
4794 if (packet_set_cmd_state (PACKET_vfork_event_feature)
4795 != AUTO_BOOLEAN_FALSE)
4796 q = remote_query_supported_append (q, "vfork-events+");
4797 if (packet_set_cmd_state (PACKET_exec_event_feature)
4798 != AUTO_BOOLEAN_FALSE)
4799 q = remote_query_supported_append (q, "exec-events+");
89245bc0 4800
750ce8d1
YQ
4801 if (packet_set_cmd_state (PACKET_vContSupported) != AUTO_BOOLEAN_FALSE)
4802 q = remote_query_supported_append (q, "vContSupported+");
4803
65706a29
PA
4804 if (packet_set_cmd_state (PACKET_QThreadEvents) != AUTO_BOOLEAN_FALSE)
4805 q = remote_query_supported_append (q, "QThreadEvents+");
4806
f2faf941
PA
4807 if (packet_set_cmd_state (PACKET_no_resumed) != AUTO_BOOLEAN_FALSE)
4808 q = remote_query_supported_append (q, "no-resumed+");
4809
b35d5edb
PA
4810 /* Keep this one last to work around a gdbserver <= 7.10 bug in
4811 the qSupported:xmlRegisters=i386 handling. */
4812 if (remote_support_xml != NULL)
4813 q = remote_query_supported_append (q, remote_support_xml);
4814
dde08ee1
PA
4815 q = reconcat (q, "qSupported:", q, (char *) NULL);
4816 putpkt (q);
82f73884 4817
94b0dee1
PA
4818 do_cleanups (old_chain);
4819
be2a5f71
DJ
4820 getpkt (&rs->buf, &rs->buf_size, 0);
4821
4822 /* If an error occured, warn, but do not return - just reset the
4823 buffer to empty and go on to disable features. */
4824 if (packet_ok (rs->buf, &remote_protocol_packets[PACKET_qSupported])
4825 == PACKET_ERROR)
4826 {
4827 warning (_("Remote failure reply: %s"), rs->buf);
4828 rs->buf[0] = 0;
4829 }
4830 }
4831
4832 memset (seen, 0, sizeof (seen));
4833
4834 next = rs->buf;
4835 while (*next)
4836 {
4837 enum packet_support is_supported;
4838 char *p, *end, *name_end, *value;
4839
4840 /* First separate out this item from the rest of the packet. If
4841 there's another item after this, we overwrite the separator
4842 (terminated strings are much easier to work with). */
4843 p = next;
4844 end = strchr (p, ';');
4845 if (end == NULL)
4846 {
4847 end = p + strlen (p);
4848 next = end;
4849 }
4850 else
4851 {
89be2091
DJ
4852 *end = '\0';
4853 next = end + 1;
4854
be2a5f71
DJ
4855 if (end == p)
4856 {
4857 warning (_("empty item in \"qSupported\" response"));
4858 continue;
4859 }
be2a5f71
DJ
4860 }
4861
4862 name_end = strchr (p, '=');
4863 if (name_end)
4864 {
4865 /* This is a name=value entry. */
4866 is_supported = PACKET_ENABLE;
4867 value = name_end + 1;
4868 *name_end = '\0';
4869 }
4870 else
4871 {
4872 value = NULL;
4873 switch (end[-1])
4874 {
4875 case '+':
4876 is_supported = PACKET_ENABLE;
4877 break;
4878
4879 case '-':
4880 is_supported = PACKET_DISABLE;
4881 break;
4882
4883 case '?':
4884 is_supported = PACKET_SUPPORT_UNKNOWN;
4885 break;
4886
4887 default:
3e43a32a
MS
4888 warning (_("unrecognized item \"%s\" "
4889 "in \"qSupported\" response"), p);
be2a5f71
DJ
4890 continue;
4891 }
4892 end[-1] = '\0';
4893 }
4894
4895 for (i = 0; i < ARRAY_SIZE (remote_protocol_features); i++)
4896 if (strcmp (remote_protocol_features[i].name, p) == 0)
4897 {
4898 const struct protocol_feature *feature;
4899
4900 seen[i] = 1;
4901 feature = &remote_protocol_features[i];
4902 feature->func (feature, is_supported, value);
4903 break;
4904 }
4905 }
4906
4907 /* If we increased the packet size, make sure to increase the global
4908 buffer size also. We delay this until after parsing the entire
4909 qSupported packet, because this is the same buffer we were
4910 parsing. */
4911 if (rs->buf_size < rs->explicit_packet_size)
4912 {
4913 rs->buf_size = rs->explicit_packet_size;
224c3ddb 4914 rs->buf = (char *) xrealloc (rs->buf, rs->buf_size);
be2a5f71
DJ
4915 }
4916
4917 /* Handle the defaults for unmentioned features. */
4918 for (i = 0; i < ARRAY_SIZE (remote_protocol_features); i++)
4919 if (!seen[i])
4920 {
4921 const struct protocol_feature *feature;
4922
4923 feature = &remote_protocol_features[i];
4924 feature->func (feature, feature->default_support, NULL);
4925 }
4926}
4927
048094ac
PA
4928/* Serial QUIT handler for the remote serial descriptor.
4929
4930 Defers handling a Ctrl-C until we're done with the current
4931 command/response packet sequence, unless:
4932
4933 - We're setting up the connection. Don't send a remote interrupt
4934 request, as we're not fully synced yet. Quit immediately
4935 instead.
4936
4937 - The target has been resumed in the foreground
4938 (target_terminal_is_ours is false) with a synchronous resume
4939 packet, and we're blocked waiting for the stop reply, thus a
4940 Ctrl-C should be immediately sent to the target.
4941
4942 - We get a second Ctrl-C while still within the same serial read or
4943 write. In that case the serial is seemingly wedged --- offer to
4944 quit/disconnect.
4945
4946 - We see a second Ctrl-C without target response, after having
4947 previously interrupted the target. In that case the target/stub
4948 is probably wedged --- offer to quit/disconnect.
4949*/
4950
4951static void
4952remote_serial_quit_handler (void)
4953{
4954 struct remote_state *rs = get_remote_state ();
4955
4956 if (check_quit_flag ())
4957 {
4958 /* If we're starting up, we're not fully synced yet. Quit
4959 immediately. */
4960 if (rs->starting_up)
4961 quit ();
4962 else if (rs->got_ctrlc_during_io)
4963 {
4964 if (query (_("The target is not responding to GDB commands.\n"
4965 "Stop debugging it? ")))
4966 remote_unpush_and_throw ();
4967 }
4968 /* If ^C has already been sent once, offer to disconnect. */
4969 else if (!target_terminal_is_ours () && rs->ctrlc_pending_p)
4970 interrupt_query ();
4971 /* All-stop protocol, and blocked waiting for stop reply. Send
4972 an interrupt request. */
4973 else if (!target_terminal_is_ours () && rs->waiting_for_stop_reply)
4974 target_interrupt (inferior_ptid);
4975 else
4976 rs->got_ctrlc_during_io = 1;
4977 }
4978}
4979
78a095c3
JK
4980/* Remove any of the remote.c targets from target stack. Upper targets depend
4981 on it so remove them first. */
4982
4983static void
4984remote_unpush_target (void)
4985{
915ef8b1 4986 pop_all_targets_at_and_above (process_stratum);
78a095c3 4987}
be2a5f71 4988
048094ac
PA
4989static void
4990remote_unpush_and_throw (void)
4991{
4992 remote_unpush_target ();
4993 throw_error (TARGET_CLOSE_ERROR, _("Disconnected from target."));
4994}
4995
c906108c 4996static void
014f9477 4997remote_open_1 (const char *name, int from_tty,
3e43a32a 4998 struct target_ops *target, int extended_p)
c906108c 4999{
d01949b6 5000 struct remote_state *rs = get_remote_state ();
a6f3e723 5001
c906108c 5002 if (name == 0)
8a3fe4f8 5003 error (_("To open a remote debug connection, you need to specify what\n"
22e04375 5004 "serial device is attached to the remote system\n"
8a3fe4f8 5005 "(e.g. /dev/ttyS0, /dev/ttya, COM1, etc.)."));
c906108c 5006
23860348 5007 /* See FIXME above. */
c6ebd6cf 5008 if (!target_async_permitted)
92d1e331 5009 wait_forever_enabled_p = 1;
6426a772 5010
2d717e4f 5011 /* If we're connected to a running target, target_preopen will kill it.
78a095c3
JK
5012 Ask this question first, before target_preopen has a chance to kill
5013 anything. */
5d93a237 5014 if (rs->remote_desc != NULL && !have_inferiors ())
2d717e4f 5015 {
78a095c3
JK
5016 if (from_tty
5017 && !query (_("Already connected to a remote target. Disconnect? ")))
2d717e4f
DJ
5018 error (_("Still connected."));
5019 }
5020
78a095c3 5021 /* Here the possibly existing remote target gets unpushed. */
c906108c
SS
5022 target_preopen (from_tty);
5023
89be2091 5024 /* Make sure we send the passed signals list the next time we resume. */
747dc59d
TT
5025 xfree (rs->last_pass_packet);
5026 rs->last_pass_packet = NULL;
89be2091 5027
9b224c5e
PA
5028 /* Make sure we send the program signals list the next time we
5029 resume. */
5e4a05c4
TT
5030 xfree (rs->last_program_signals_packet);
5031 rs->last_program_signals_packet = NULL;
9b224c5e 5032
ad9a8f3f 5033 remote_fileio_reset ();
1dd41f16
NS
5034 reopen_exec_file ();
5035 reread_symbols ();
5036
5d93a237
TT
5037 rs->remote_desc = remote_serial_open (name);
5038 if (!rs->remote_desc)
c906108c
SS
5039 perror_with_name (name);
5040
5041 if (baud_rate != -1)
5042 {
5d93a237 5043 if (serial_setbaudrate (rs->remote_desc, baud_rate))
c906108c 5044 {
9b74d5d3
KB
5045 /* The requested speed could not be set. Error out to
5046 top level after closing remote_desc. Take care to
5047 set remote_desc to NULL to avoid closing remote_desc
5048 more than once. */
5d93a237
TT
5049 serial_close (rs->remote_desc);
5050 rs->remote_desc = NULL;
c906108c
SS
5051 perror_with_name (name);
5052 }
5053 }
5054
236af5e3 5055 serial_setparity (rs->remote_desc, serial_parity);
5d93a237 5056 serial_raw (rs->remote_desc);
c906108c
SS
5057
5058 /* If there is something sitting in the buffer we might take it as a
5059 response to a command, which would be bad. */
5d93a237 5060 serial_flush_input (rs->remote_desc);
c906108c
SS
5061
5062 if (from_tty)
5063 {
5064 puts_filtered ("Remote debugging using ");
5065 puts_filtered (name);
5066 puts_filtered ("\n");
5067 }
23860348 5068 push_target (target); /* Switch to using remote target now. */
c906108c 5069
74531fed
PA
5070 /* Register extra event sources in the event loop. */
5071 remote_async_inferior_event_token
5072 = create_async_event_handler (remote_async_inferior_event_handler,
5073 NULL);
5965e028 5074 rs->notif_state = remote_notif_state_allocate ();
74531fed 5075
be2a5f71
DJ
5076 /* Reset the target state; these things will be queried either by
5077 remote_query_supported or as they are needed. */
ca4f7f8b 5078 reset_all_packet_configs_support ();
74531fed 5079 rs->cached_wait_status = 0;
be2a5f71 5080 rs->explicit_packet_size = 0;
a6f3e723 5081 rs->noack_mode = 0;
82f73884 5082 rs->extended = extended_p;
e24a49d8 5083 rs->waiting_for_stop_reply = 0;
3a29589a 5084 rs->ctrlc_pending_p = 0;
048094ac 5085 rs->got_ctrlc_during_io = 0;
802188a7 5086
47f8a51d
TT
5087 rs->general_thread = not_sent_ptid;
5088 rs->continue_thread = not_sent_ptid;
262e1174 5089 rs->remote_traceframe_number = -1;
c906108c 5090
3a00c802
PA
5091 rs->last_resume_exec_dir = EXEC_FORWARD;
5092
9d1f7ab2 5093 /* Probe for ability to use "ThreadInfo" query, as required. */
b80fafe3
TT
5094 rs->use_threadinfo_query = 1;
5095 rs->use_threadextra_query = 1;
9d1f7ab2 5096
80152258
PA
5097 readahead_cache_invalidate ();
5098
048094ac
PA
5099 /* Start out by owning the terminal. */
5100 remote_async_terminal_ours_p = 1;
5101
c6ebd6cf 5102 if (target_async_permitted)
92d1e331 5103 {
92d1e331
DJ
5104 /* FIXME: cagney/1999-09-23: During the initial connection it is
5105 assumed that the target is already ready and able to respond to
0df8b418 5106 requests. Unfortunately remote_start_remote() eventually calls
92d1e331 5107 wait_for_inferior() with no timeout. wait_forever_enabled_p gets
0df8b418 5108 around this. Eventually a mechanism that allows
92d1e331 5109 wait_for_inferior() to expect/get timeouts will be
23860348 5110 implemented. */
92d1e331
DJ
5111 wait_forever_enabled_p = 0;
5112 }
5113
23860348 5114 /* First delete any symbols previously loaded from shared libraries. */
f78f6cf1 5115 no_shared_libraries (NULL, 0);
f78f6cf1 5116
74531fed
PA
5117 /* Start afresh. */
5118 init_thread_list ();
5119
36918e70 5120 /* Start the remote connection. If error() or QUIT, discard this
165b8e33
AC
5121 target (we'd otherwise be in an inconsistent state) and then
5122 propogate the error on up the exception chain. This ensures that
5123 the caller doesn't stumble along blindly assuming that the
5124 function succeeded. The CLI doesn't have this problem but other
5125 UI's, such as MI do.
36918e70
AC
5126
5127 FIXME: cagney/2002-05-19: Instead of re-throwing the exception,
5128 this function should return an error indication letting the
ce2826aa 5129 caller restore the previous state. Unfortunately the command
36918e70
AC
5130 ``target remote'' is directly wired to this function making that
5131 impossible. On a positive note, the CLI side of this problem has
5132 been fixed - the function set_cmd_context() makes it possible for
5133 all the ``target ....'' commands to share a common callback
5134 function. See cli-dump.c. */
109c3e39 5135 {
2d717e4f 5136
492d29ea 5137 TRY
04bd08de
TT
5138 {
5139 remote_start_remote (from_tty, target, extended_p);
5140 }
492d29ea 5141 CATCH (ex, RETURN_MASK_ALL)
109c3e39 5142 {
c8d104ad
PA
5143 /* Pop the partially set up target - unless something else did
5144 already before throwing the exception. */
5d93a237 5145 if (rs->remote_desc != NULL)
78a095c3 5146 remote_unpush_target ();
c6ebd6cf 5147 if (target_async_permitted)
109c3e39
AC
5148 wait_forever_enabled_p = 1;
5149 throw_exception (ex);
5150 }
492d29ea 5151 END_CATCH
109c3e39 5152 }
c906108c 5153
f4abbc16
MM
5154 remote_btrace_reset ();
5155
c6ebd6cf 5156 if (target_async_permitted)
92d1e331 5157 wait_forever_enabled_p = 1;
43ff13b4
JM
5158}
5159
de0d863e
DB
5160/* Detach the specified process. */
5161
5162static void
5163remote_detach_pid (int pid)
5164{
5165 struct remote_state *rs = get_remote_state ();
5166
5167 if (remote_multi_process_p (rs))
5168 xsnprintf (rs->buf, get_remote_packet_size (), "D;%x", pid);
5169 else
5170 strcpy (rs->buf, "D");
5171
5172 putpkt (rs->buf);
5173 getpkt (&rs->buf, &rs->buf_size, 0);
5174
5175 if (rs->buf[0] == 'O' && rs->buf[1] == 'K')
5176 ;
5177 else if (rs->buf[0] == '\0')
5178 error (_("Remote doesn't know how to detach"));
5179 else
5180 error (_("Can't detach process."));
5181}
5182
5183/* This detaches a program to which we previously attached, using
5184 inferior_ptid to identify the process. After this is done, GDB
5185 can be used to debug some other program. We better not have left
5186 any breakpoints in the target program or it'll die when it hits
5187 one. */
c906108c
SS
5188
5189static void
de0d863e 5190remote_detach_1 (const char *args, int from_tty)
c906108c 5191{
82f73884 5192 int pid = ptid_get_pid (inferior_ptid);
d01949b6 5193 struct remote_state *rs = get_remote_state ();
de0d863e
DB
5194 struct thread_info *tp = find_thread_ptid (inferior_ptid);
5195 int is_fork_parent;
c906108c
SS
5196
5197 if (args)
8a3fe4f8 5198 error (_("Argument given to \"detach\" when remotely debugging."));
c906108c 5199
2d717e4f
DJ
5200 if (!target_has_execution)
5201 error (_("No process to detach from."));
5202
0f48b757 5203 target_announce_detach (from_tty);
7cee1e54 5204
c906108c 5205 /* Tell the remote target to detach. */
de0d863e 5206 remote_detach_pid (pid);
82f73884 5207
8020350c
DB
5208 /* Exit only if this is the only active inferior. */
5209 if (from_tty && !rs->extended && number_of_live_inferiors () == 1)
7cee1e54 5210 puts_filtered (_("Ending remote debugging.\n"));
82f73884 5211
de0d863e
DB
5212 /* Check to see if we are detaching a fork parent. Note that if we
5213 are detaching a fork child, tp == NULL. */
5214 is_fork_parent = (tp != NULL
5215 && tp->pending_follow.kind == TARGET_WAITKIND_FORKED);
5216
5217 /* If doing detach-on-fork, we don't mourn, because that will delete
5218 breakpoints that should be available for the followed inferior. */
5219 if (!is_fork_parent)
bc1e6c81 5220 target_mourn_inferior (inferior_ptid);
de0d863e
DB
5221 else
5222 {
5223 inferior_ptid = null_ptid;
5224 detach_inferior (pid);
5225 }
2d717e4f
DJ
5226}
5227
5228static void
52554a0e 5229remote_detach (struct target_ops *ops, const char *args, int from_tty)
2d717e4f 5230{
de0d863e 5231 remote_detach_1 (args, from_tty);
2d717e4f
DJ
5232}
5233
5234static void
52554a0e 5235extended_remote_detach (struct target_ops *ops, const char *args, int from_tty)
2d717e4f 5236{
de0d863e
DB
5237 remote_detach_1 (args, from_tty);
5238}
5239
5240/* Target follow-fork function for remote targets. On entry, and
5241 at return, the current inferior is the fork parent.
5242
5243 Note that although this is currently only used for extended-remote,
5244 it is named remote_follow_fork in anticipation of using it for the
5245 remote target as well. */
5246
5247static int
5248remote_follow_fork (struct target_ops *ops, int follow_child,
5249 int detach_fork)
5250{
5251 struct remote_state *rs = get_remote_state ();
c269dbdb 5252 enum target_waitkind kind = inferior_thread ()->pending_follow.kind;
de0d863e 5253
c269dbdb
DB
5254 if ((kind == TARGET_WAITKIND_FORKED && remote_fork_event_p (rs))
5255 || (kind == TARGET_WAITKIND_VFORKED && remote_vfork_event_p (rs)))
de0d863e
DB
5256 {
5257 /* When following the parent and detaching the child, we detach
5258 the child here. For the case of following the child and
5259 detaching the parent, the detach is done in the target-
5260 independent follow fork code in infrun.c. We can't use
5261 target_detach when detaching an unfollowed child because
5262 the client side doesn't know anything about the child. */
5263 if (detach_fork && !follow_child)
5264 {
5265 /* Detach the fork child. */
5266 ptid_t child_ptid;
5267 pid_t child_pid;
5268
5269 child_ptid = inferior_thread ()->pending_follow.value.related_pid;
5270 child_pid = ptid_get_pid (child_ptid);
5271
5272 remote_detach_pid (child_pid);
5273 detach_inferior (child_pid);
5274 }
5275 }
5276 return 0;
c906108c
SS
5277}
5278
94585166
DB
5279/* Target follow-exec function for remote targets. Save EXECD_PATHNAME
5280 in the program space of the new inferior. On entry and at return the
5281 current inferior is the exec'ing inferior. INF is the new exec'd
5282 inferior, which may be the same as the exec'ing inferior unless
5283 follow-exec-mode is "new". */
5284
5285static void
5286remote_follow_exec (struct target_ops *ops,
5287 struct inferior *inf, char *execd_pathname)
5288{
5289 /* We know that this is a target file name, so if it has the "target:"
5290 prefix we strip it off before saving it in the program space. */
5291 if (is_target_filename (execd_pathname))
5292 execd_pathname += strlen (TARGET_SYSROOT_PREFIX);
5293
5294 set_pspace_remote_exec_file (inf->pspace, execd_pathname);
5295}
5296
6ad8ae5c
DJ
5297/* Same as remote_detach, but don't send the "D" packet; just disconnect. */
5298
43ff13b4 5299static void
fee354ee 5300remote_disconnect (struct target_ops *target, const char *args, int from_tty)
43ff13b4 5301{
43ff13b4 5302 if (args)
2d717e4f 5303 error (_("Argument given to \"disconnect\" when remotely debugging."));
43ff13b4 5304
8020350c
DB
5305 /* Make sure we unpush even the extended remote targets. Calling
5306 target_mourn_inferior won't unpush, and remote_mourn won't
5307 unpush if there is more than one inferior left. */
5308 unpush_target (target);
5309 generic_mourn_inferior ();
2d717e4f 5310
43ff13b4
JM
5311 if (from_tty)
5312 puts_filtered ("Ending remote debugging.\n");
5313}
5314
2d717e4f
DJ
5315/* Attach to the process specified by ARGS. If FROM_TTY is non-zero,
5316 be chatty about it. */
5317
5318static void
20f796c9
GB
5319extended_remote_attach (struct target_ops *target, const char *args,
5320 int from_tty)
2d717e4f
DJ
5321{
5322 struct remote_state *rs = get_remote_state ();
be86555c 5323 int pid;
96ef3384 5324 char *wait_status = NULL;
2d717e4f 5325
74164c56 5326 pid = parse_pid_to_attach (args);
2d717e4f 5327
74164c56
JK
5328 /* Remote PID can be freely equal to getpid, do not check it here the same
5329 way as in other targets. */
2d717e4f 5330
4082afcc 5331 if (packet_support (PACKET_vAttach) == PACKET_DISABLE)
2d717e4f
DJ
5332 error (_("This target does not support attaching to a process"));
5333
7cee1e54
PA
5334 if (from_tty)
5335 {
5336 char *exec_file = get_exec_file (0);
5337
5338 if (exec_file)
5339 printf_unfiltered (_("Attaching to program: %s, %s\n"), exec_file,
5340 target_pid_to_str (pid_to_ptid (pid)));
5341 else
5342 printf_unfiltered (_("Attaching to %s\n"),
5343 target_pid_to_str (pid_to_ptid (pid)));
5344
5345 gdb_flush (gdb_stdout);
5346 }
5347
bba74b36 5348 xsnprintf (rs->buf, get_remote_packet_size (), "vAttach;%x", pid);
2d717e4f
DJ
5349 putpkt (rs->buf);
5350 getpkt (&rs->buf, &rs->buf_size, 0);
5351
4082afcc
PA
5352 switch (packet_ok (rs->buf,
5353 &remote_protocol_packets[PACKET_vAttach]))
2d717e4f 5354 {
4082afcc 5355 case PACKET_OK:
6efcd9a8 5356 if (!target_is_non_stop_p ())
74531fed
PA
5357 {
5358 /* Save the reply for later. */
224c3ddb 5359 wait_status = (char *) alloca (strlen (rs->buf) + 1);
74531fed
PA
5360 strcpy (wait_status, rs->buf);
5361 }
5362 else if (strcmp (rs->buf, "OK") != 0)
5363 error (_("Attaching to %s failed with: %s"),
5364 target_pid_to_str (pid_to_ptid (pid)),
5365 rs->buf);
4082afcc
PA
5366 break;
5367 case PACKET_UNKNOWN:
5368 error (_("This target does not support attaching to a process"));
5369 default:
5370 error (_("Attaching to %s failed"),
5371 target_pid_to_str (pid_to_ptid (pid)));
2d717e4f 5372 }
2d717e4f 5373
1b6e6f5c 5374 set_current_inferior (remote_add_inferior (0, pid, 1, 0));
bad34192 5375
2d717e4f 5376 inferior_ptid = pid_to_ptid (pid);
79d7f229 5377
6efcd9a8 5378 if (target_is_non_stop_p ())
bad34192
PA
5379 {
5380 struct thread_info *thread;
79d7f229 5381
bad34192 5382 /* Get list of threads. */
e8032dde 5383 remote_update_thread_list (target);
82f73884 5384
bad34192
PA
5385 thread = first_thread_of_process (pid);
5386 if (thread)
5387 inferior_ptid = thread->ptid;
5388 else
5389 inferior_ptid = pid_to_ptid (pid);
5390
5391 /* Invalidate our notion of the remote current thread. */
47f8a51d 5392 record_currthread (rs, minus_one_ptid);
bad34192 5393 }
74531fed 5394 else
bad34192
PA
5395 {
5396 /* Now, if we have thread information, update inferior_ptid. */
5397 inferior_ptid = remote_current_thread (inferior_ptid);
5398
5399 /* Add the main thread to the thread list. */
5400 add_thread_silent (inferior_ptid);
5401 }
c0a2216e 5402
96ef3384
UW
5403 /* Next, if the target can specify a description, read it. We do
5404 this before anything involving memory or registers. */
5405 target_find_description ();
5406
6efcd9a8 5407 if (!target_is_non_stop_p ())
74531fed
PA
5408 {
5409 /* Use the previously fetched status. */
5410 gdb_assert (wait_status != NULL);
5411
5412 if (target_can_async_p ())
5413 {
722247f1
YQ
5414 struct notif_event *reply
5415 = remote_notif_parse (&notif_client_stop, wait_status);
74531fed 5416
722247f1 5417 push_stop_reply ((struct stop_reply *) reply);
74531fed 5418
6a3753b3 5419 target_async (1);
74531fed
PA
5420 }
5421 else
5422 {
5423 gdb_assert (wait_status != NULL);
5424 strcpy (rs->buf, wait_status);
5425 rs->cached_wait_status = 1;
5426 }
5427 }
5428 else
5429 gdb_assert (wait_status == NULL);
2d717e4f
DJ
5430}
5431
b9c1d481
AS
5432/* Implementation of the to_post_attach method. */
5433
5434static void
5435extended_remote_post_attach (struct target_ops *ops, int pid)
5436{
6efcd9a8
PA
5437 /* Get text, data & bss offsets. */
5438 get_offsets ();
5439
b9c1d481
AS
5440 /* In certain cases GDB might not have had the chance to start
5441 symbol lookup up until now. This could happen if the debugged
5442 binary is not using shared libraries, the vsyscall page is not
5443 present (on Linux) and the binary itself hadn't changed since the
5444 debugging process was started. */
5445 if (symfile_objfile != NULL)
5446 remote_check_symbols();
5447}
5448
c906108c 5449\f
506fb367
DJ
5450/* Check for the availability of vCont. This function should also check
5451 the response. */
c906108c
SS
5452
5453static void
6d820c5c 5454remote_vcont_probe (struct remote_state *rs)
c906108c 5455{
2e9f7625 5456 char *buf;
6d820c5c 5457
2e9f7625
DJ
5458 strcpy (rs->buf, "vCont?");
5459 putpkt (rs->buf);
6d820c5c 5460 getpkt (&rs->buf, &rs->buf_size, 0);
2e9f7625 5461 buf = rs->buf;
c906108c 5462
506fb367 5463 /* Make sure that the features we assume are supported. */
61012eef 5464 if (startswith (buf, "vCont"))
506fb367
DJ
5465 {
5466 char *p = &buf[5];
750ce8d1 5467 int support_c, support_C;
506fb367 5468
750ce8d1
YQ
5469 rs->supports_vCont.s = 0;
5470 rs->supports_vCont.S = 0;
506fb367
DJ
5471 support_c = 0;
5472 support_C = 0;
d458bd84 5473 rs->supports_vCont.t = 0;
c1e36e3e 5474 rs->supports_vCont.r = 0;
506fb367
DJ
5475 while (p && *p == ';')
5476 {
5477 p++;
5478 if (*p == 's' && (*(p + 1) == ';' || *(p + 1) == 0))
750ce8d1 5479 rs->supports_vCont.s = 1;
506fb367 5480 else if (*p == 'S' && (*(p + 1) == ';' || *(p + 1) == 0))
750ce8d1 5481 rs->supports_vCont.S = 1;
506fb367
DJ
5482 else if (*p == 'c' && (*(p + 1) == ';' || *(p + 1) == 0))
5483 support_c = 1;
5484 else if (*p == 'C' && (*(p + 1) == ';' || *(p + 1) == 0))
5485 support_C = 1;
74531fed 5486 else if (*p == 't' && (*(p + 1) == ';' || *(p + 1) == 0))
d458bd84 5487 rs->supports_vCont.t = 1;
c1e36e3e
PA
5488 else if (*p == 'r' && (*(p + 1) == ';' || *(p + 1) == 0))
5489 rs->supports_vCont.r = 1;
506fb367
DJ
5490
5491 p = strchr (p, ';');
5492 }
c906108c 5493
750ce8d1
YQ
5494 /* If c, and C are not all supported, we can't use vCont. Clearing
5495 BUF will make packet_ok disable the packet. */
5496 if (!support_c || !support_C)
506fb367
DJ
5497 buf[0] = 0;
5498 }
c906108c 5499
444abaca 5500 packet_ok (buf, &remote_protocol_packets[PACKET_vCont]);
506fb367 5501}
c906108c 5502
0d8f58ca
PA
5503/* Helper function for building "vCont" resumptions. Write a
5504 resumption to P. ENDP points to one-passed-the-end of the buffer
5505 we're allowed to write to. Returns BUF+CHARACTERS_WRITTEN. The
5506 thread to be resumed is PTID; STEP and SIGGNAL indicate whether the
5507 resumed thread should be single-stepped and/or signalled. If PTID
5508 equals minus_one_ptid, then all threads are resumed; if PTID
5509 represents a process, then all threads of the process are resumed;
5510 the thread to be stepped and/or signalled is given in the global
5511 INFERIOR_PTID. */
5512
5513static char *
5514append_resumption (char *p, char *endp,
2ea28649 5515 ptid_t ptid, int step, enum gdb_signal siggnal)
0d8f58ca
PA
5516{
5517 struct remote_state *rs = get_remote_state ();
5518
a493e3e2 5519 if (step && siggnal != GDB_SIGNAL_0)
0d8f58ca 5520 p += xsnprintf (p, endp - p, ";S%02x", siggnal);
c1e36e3e
PA
5521 else if (step
5522 /* GDB is willing to range step. */
5523 && use_range_stepping
5524 /* Target supports range stepping. */
5525 && rs->supports_vCont.r
5526 /* We don't currently support range stepping multiple
5527 threads with a wildcard (though the protocol allows it,
5528 so stubs shouldn't make an active effort to forbid
5529 it). */
5530 && !(remote_multi_process_p (rs) && ptid_is_pid (ptid)))
5531 {
5532 struct thread_info *tp;
5533
5534 if (ptid_equal (ptid, minus_one_ptid))
5535 {
5536 /* If we don't know about the target thread's tid, then
5537 we're resuming magic_null_ptid (see caller). */
5538 tp = find_thread_ptid (magic_null_ptid);
5539 }
5540 else
5541 tp = find_thread_ptid (ptid);
5542 gdb_assert (tp != NULL);
5543
5544 if (tp->control.may_range_step)
5545 {
5546 int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
5547
5548 p += xsnprintf (p, endp - p, ";r%s,%s",
5549 phex_nz (tp->control.step_range_start,
5550 addr_size),
5551 phex_nz (tp->control.step_range_end,
5552 addr_size));
5553 }
5554 else
5555 p += xsnprintf (p, endp - p, ";s");
5556 }
0d8f58ca
PA
5557 else if (step)
5558 p += xsnprintf (p, endp - p, ";s");
a493e3e2 5559 else if (siggnal != GDB_SIGNAL_0)
0d8f58ca
PA
5560 p += xsnprintf (p, endp - p, ";C%02x", siggnal);
5561 else
5562 p += xsnprintf (p, endp - p, ";c");
5563
5564 if (remote_multi_process_p (rs) && ptid_is_pid (ptid))
5565 {
5566 ptid_t nptid;
5567
5568 /* All (-1) threads of process. */
ba348170 5569 nptid = ptid_build (ptid_get_pid (ptid), -1, 0);
0d8f58ca
PA
5570
5571 p += xsnprintf (p, endp - p, ":");
5572 p = write_ptid (p, endp, nptid);
5573 }
5574 else if (!ptid_equal (ptid, minus_one_ptid))
5575 {
5576 p += xsnprintf (p, endp - p, ":");
5577 p = write_ptid (p, endp, ptid);
5578 }
5579
5580 return p;
5581}
5582
799a2abe
PA
5583/* Clear the thread's private info on resume. */
5584
5585static void
5586resume_clear_thread_private_info (struct thread_info *thread)
5587{
5588 if (thread->priv != NULL)
5589 {
5590 thread->priv->stop_reason = TARGET_STOPPED_BY_NO_REASON;
5591 thread->priv->watch_data_address = 0;
5592 }
5593}
5594
e5ef252a
PA
5595/* Append a vCont continue-with-signal action for threads that have a
5596 non-zero stop signal. */
5597
5598static char *
5599append_pending_thread_resumptions (char *p, char *endp, ptid_t ptid)
5600{
5601 struct thread_info *thread;
5602
034f788c 5603 ALL_NON_EXITED_THREADS (thread)
e5ef252a
PA
5604 if (ptid_match (thread->ptid, ptid)
5605 && !ptid_equal (inferior_ptid, thread->ptid)
70509625 5606 && thread->suspend.stop_signal != GDB_SIGNAL_0)
e5ef252a
PA
5607 {
5608 p = append_resumption (p, endp, thread->ptid,
5609 0, thread->suspend.stop_signal);
5610 thread->suspend.stop_signal = GDB_SIGNAL_0;
799a2abe 5611 resume_clear_thread_private_info (thread);
e5ef252a
PA
5612 }
5613
5614 return p;
5615}
5616
7b68ffbb
PA
5617/* Set the target running, using the packets that use Hc
5618 (c/s/C/S). */
5619
5620static void
5621remote_resume_with_hc (struct target_ops *ops,
5622 ptid_t ptid, int step, enum gdb_signal siggnal)
5623{
5624 struct remote_state *rs = get_remote_state ();
5625 struct thread_info *thread;
5626 char *buf;
5627
5628 rs->last_sent_signal = siggnal;
5629 rs->last_sent_step = step;
5630
5631 /* The c/s/C/S resume packets use Hc, so set the continue
5632 thread. */
5633 if (ptid_equal (ptid, minus_one_ptid))
5634 set_continue_thread (any_thread_ptid);
5635 else
5636 set_continue_thread (ptid);
5637
5638 ALL_NON_EXITED_THREADS (thread)
5639 resume_clear_thread_private_info (thread);
5640
5641 buf = rs->buf;
5642 if (execution_direction == EXEC_REVERSE)
5643 {
5644 /* We don't pass signals to the target in reverse exec mode. */
5645 if (info_verbose && siggnal != GDB_SIGNAL_0)
5646 warning (_(" - Can't pass signal %d to target in reverse: ignored."),
5647 siggnal);
5648
5649 if (step && packet_support (PACKET_bs) == PACKET_DISABLE)
5650 error (_("Remote reverse-step not supported."));
5651 if (!step && packet_support (PACKET_bc) == PACKET_DISABLE)
5652 error (_("Remote reverse-continue not supported."));
5653
5654 strcpy (buf, step ? "bs" : "bc");
5655 }
5656 else if (siggnal != GDB_SIGNAL_0)
5657 {
5658 buf[0] = step ? 'S' : 'C';
5659 buf[1] = tohex (((int) siggnal >> 4) & 0xf);
5660 buf[2] = tohex (((int) siggnal) & 0xf);
5661 buf[3] = '\0';
5662 }
5663 else
5664 strcpy (buf, step ? "s" : "c");
5665
5666 putpkt (buf);
5667}
5668
506fb367
DJ
5669/* Resume the remote inferior by using a "vCont" packet. The thread
5670 to be resumed is PTID; STEP and SIGGNAL indicate whether the
79d7f229
PA
5671 resumed thread should be single-stepped and/or signalled. If PTID
5672 equals minus_one_ptid, then all threads are resumed; the thread to
5673 be stepped and/or signalled is given in the global INFERIOR_PTID.
5674 This function returns non-zero iff it resumes the inferior.
44eaed12 5675
7b68ffbb
PA
5676 This function issues a strict subset of all possible vCont commands
5677 at the moment. */
44eaed12 5678
506fb367 5679static int
7b68ffbb 5680remote_resume_with_vcont (ptid_t ptid, int step, enum gdb_signal siggnal)
506fb367
DJ
5681{
5682 struct remote_state *rs = get_remote_state ();
82f73884
PA
5683 char *p;
5684 char *endp;
44eaed12 5685
7b68ffbb
PA
5686 /* No reverse execution actions defined for vCont. */
5687 if (execution_direction == EXEC_REVERSE)
5688 return 0;
5689
4082afcc 5690 if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
6d820c5c 5691 remote_vcont_probe (rs);
44eaed12 5692
4082afcc 5693 if (packet_support (PACKET_vCont) == PACKET_DISABLE)
6d820c5c 5694 return 0;
44eaed12 5695
82f73884
PA
5696 p = rs->buf;
5697 endp = rs->buf + get_remote_packet_size ();
5698
506fb367
DJ
5699 /* If we could generate a wider range of packets, we'd have to worry
5700 about overflowing BUF. Should there be a generic
5701 "multi-part-packet" packet? */
5702
0d8f58ca
PA
5703 p += xsnprintf (p, endp - p, "vCont");
5704
79d7f229 5705 if (ptid_equal (ptid, magic_null_ptid))
c906108c 5706 {
79d7f229
PA
5707 /* MAGIC_NULL_PTID means that we don't have any active threads,
5708 so we don't have any TID numbers the inferior will
5709 understand. Make sure to only send forms that do not specify
5710 a TID. */
a9cbf802 5711 append_resumption (p, endp, minus_one_ptid, step, siggnal);
506fb367 5712 }
0d8f58ca 5713 else if (ptid_equal (ptid, minus_one_ptid) || ptid_is_pid (ptid))
506fb367 5714 {
0d8f58ca
PA
5715 /* Resume all threads (of all processes, or of a single
5716 process), with preference for INFERIOR_PTID. This assumes
5717 inferior_ptid belongs to the set of all threads we are about
5718 to resume. */
a493e3e2 5719 if (step || siggnal != GDB_SIGNAL_0)
82f73884 5720 {
0d8f58ca
PA
5721 /* Step inferior_ptid, with or without signal. */
5722 p = append_resumption (p, endp, inferior_ptid, step, siggnal);
82f73884 5723 }
0d8f58ca 5724
e5ef252a
PA
5725 /* Also pass down any pending signaled resumption for other
5726 threads not the current. */
5727 p = append_pending_thread_resumptions (p, endp, ptid);
5728
0d8f58ca 5729 /* And continue others without a signal. */
a493e3e2 5730 append_resumption (p, endp, ptid, /*step=*/ 0, GDB_SIGNAL_0);
c906108c
SS
5731 }
5732 else
506fb367
DJ
5733 {
5734 /* Scheduler locking; resume only PTID. */
a9cbf802 5735 append_resumption (p, endp, ptid, step, siggnal);
506fb367 5736 }
c906108c 5737
82f73884
PA
5738 gdb_assert (strlen (rs->buf) < get_remote_packet_size ());
5739 putpkt (rs->buf);
506fb367 5740
6efcd9a8 5741 if (target_is_non_stop_p ())
74531fed
PA
5742 {
5743 /* In non-stop, the stub replies to vCont with "OK". The stop
5744 reply will be reported asynchronously by means of a `%Stop'
5745 notification. */
5746 getpkt (&rs->buf, &rs->buf_size, 0);
5747 if (strcmp (rs->buf, "OK") != 0)
5748 error (_("Unexpected vCont reply in non-stop mode: %s"), rs->buf);
5749 }
5750
506fb367 5751 return 1;
c906108c 5752}
43ff13b4 5753
506fb367
DJ
5754/* Tell the remote machine to resume. */
5755
43ff13b4 5756static void
28439f5e 5757remote_resume (struct target_ops *ops,
2ea28649 5758 ptid_t ptid, int step, enum gdb_signal siggnal)
43ff13b4 5759{
d01949b6 5760 struct remote_state *rs = get_remote_state ();
43ff13b4 5761
85ad3aaf
PA
5762 /* When connected in non-stop mode, the core resumes threads
5763 individually. Resuming remote threads directly in target_resume
5764 would thus result in sending one packet per thread. Instead, to
5765 minimize roundtrip latency, here we just store the resume
5766 request; the actual remote resumption will be done in
5767 target_commit_resume / remote_commit_resume, where we'll be able
5768 to do vCont action coalescing. */
5769 if (target_is_non_stop_p () && execution_direction != EXEC_REVERSE)
5770 {
5771 struct private_thread_info *remote_thr;
5772
5773 if (ptid_equal (minus_one_ptid, ptid) || ptid_is_pid (ptid))
5774 remote_thr = get_private_info_ptid (inferior_ptid);
5775 else
5776 remote_thr = get_private_info_ptid (ptid);
5777 remote_thr->last_resume_step = step;
5778 remote_thr->last_resume_sig = siggnal;
5779 return;
5780 }
5781
722247f1
YQ
5782 /* In all-stop, we can't mark REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN
5783 (explained in remote-notif.c:handle_notification) so
5784 remote_notif_process is not called. We need find a place where
5785 it is safe to start a 'vNotif' sequence. It is good to do it
5786 before resuming inferior, because inferior was stopped and no RSP
5787 traffic at that moment. */
6efcd9a8 5788 if (!target_is_non_stop_p ())
5965e028 5789 remote_notif_process (rs->notif_state, &notif_client_stop);
722247f1 5790
3a00c802
PA
5791 rs->last_resume_exec_dir = execution_direction;
5792
7b68ffbb
PA
5793 /* Prefer vCont, and fallback to s/c/S/C, which use Hc. */
5794 if (!remote_resume_with_vcont (ptid, step, siggnal))
5795 remote_resume_with_hc (ops, ptid, step, siggnal);
43ff13b4 5796
2acceee2 5797 /* We are about to start executing the inferior, let's register it
0df8b418
MS
5798 with the event loop. NOTE: this is the one place where all the
5799 execution commands end up. We could alternatively do this in each
23860348 5800 of the execution commands in infcmd.c. */
2acceee2
JM
5801 /* FIXME: ezannoni 1999-09-28: We may need to move this out of here
5802 into infcmd.c in order to allow inferior function calls to work
23860348 5803 NOT asynchronously. */
362646f5 5804 if (target_can_async_p ())
6a3753b3 5805 target_async (1);
e24a49d8
PA
5806
5807 /* We've just told the target to resume. The remote server will
5808 wait for the inferior to stop, and then send a stop reply. In
5809 the mean time, we can't start another command/query ourselves
74531fed
PA
5810 because the stub wouldn't be ready to process it. This applies
5811 only to the base all-stop protocol, however. In non-stop (which
5812 only supports vCont), the stub replies with an "OK", and is
5813 immediate able to process further serial input. */
6efcd9a8 5814 if (!target_is_non_stop_p ())
74531fed 5815 rs->waiting_for_stop_reply = 1;
43ff13b4 5816}
85ad3aaf
PA
5817
5818static void check_pending_events_prevent_wildcard_vcont
5819 (int *may_global_wildcard_vcont);
5820static int is_pending_fork_parent_thread (struct thread_info *thread);
5821
5822/* Private per-inferior info for target remote processes. */
5823
5824struct private_inferior
5825{
5826 /* Whether we can send a wildcard vCont for this process. */
5827 int may_wildcard_vcont;
5828};
5829
5830/* Structure used to track the construction of a vCont packet in the
5831 outgoing packet buffer. This is used to send multiple vCont
5832 packets if we have more actions than would fit a single packet. */
5833
5834struct vcont_builder
5835{
5836 /* Pointer to the first action. P points here if no action has been
5837 appended yet. */
5838 char *first_action;
5839
5840 /* Where the next action will be appended. */
5841 char *p;
5842
5843 /* The end of the buffer. Must never write past this. */
5844 char *endp;
5845};
5846
5847/* Prepare the outgoing buffer for a new vCont packet. */
5848
5849static void
5850vcont_builder_restart (struct vcont_builder *builder)
5851{
5852 struct remote_state *rs = get_remote_state ();
5853
5854 builder->p = rs->buf;
5855 builder->endp = rs->buf + get_remote_packet_size ();
5856 builder->p += xsnprintf (builder->p, builder->endp - builder->p, "vCont");
5857 builder->first_action = builder->p;
5858}
5859
5860/* If the vCont packet being built has any action, send it to the
5861 remote end. */
5862
5863static void
5864vcont_builder_flush (struct vcont_builder *builder)
5865{
5866 struct remote_state *rs;
5867
5868 if (builder->p == builder->first_action)
5869 return;
5870
5871 rs = get_remote_state ();
5872 putpkt (rs->buf);
5873 getpkt (&rs->buf, &rs->buf_size, 0);
5874 if (strcmp (rs->buf, "OK") != 0)
5875 error (_("Unexpected vCont reply in non-stop mode: %s"), rs->buf);
5876}
5877
5878/* The largest action is range-stepping, with its two addresses. This
5879 is more than sufficient. If a new, bigger action is created, it'll
5880 quickly trigger a failed assertion in append_resumption (and we'll
5881 just bump this). */
5882#define MAX_ACTION_SIZE 200
5883
5884/* Append a new vCont action in the outgoing packet being built. If
5885 the action doesn't fit the packet along with previous actions, push
5886 what we've got so far to the remote end and start over a new vCont
5887 packet (with the new action). */
5888
5889static void
5890vcont_builder_push_action (struct vcont_builder *builder,
5891 ptid_t ptid, int step, enum gdb_signal siggnal)
5892{
5893 char buf[MAX_ACTION_SIZE + 1];
5894 char *endp;
5895 size_t rsize;
5896
5897 endp = append_resumption (buf, buf + sizeof (buf),
5898 ptid, step, siggnal);
5899
5900 /* Check whether this new action would fit in the vCont packet along
5901 with previous actions. If not, send what we've got so far and
5902 start a new vCont packet. */
5903 rsize = endp - buf;
5904 if (rsize > builder->endp - builder->p)
5905 {
5906 vcont_builder_flush (builder);
5907 vcont_builder_restart (builder);
5908
5909 /* Should now fit. */
5910 gdb_assert (rsize <= builder->endp - builder->p);
5911 }
5912
5913 memcpy (builder->p, buf, rsize);
5914 builder->p += rsize;
5915 *builder->p = '\0';
5916}
5917
5918/* to_commit_resume implementation. */
5919
5920static void
5921remote_commit_resume (struct target_ops *ops)
5922{
5923 struct remote_state *rs = get_remote_state ();
5924 struct inferior *inf;
5925 struct thread_info *tp;
5926 int any_process_wildcard;
5927 int may_global_wildcard_vcont;
5928 struct vcont_builder vcont_builder;
5929
5930 /* If connected in all-stop mode, we'd send the remote resume
5931 request directly from remote_resume. Likewise if
5932 reverse-debugging, as there are no defined vCont actions for
5933 reverse execution. */
5934 if (!target_is_non_stop_p () || execution_direction == EXEC_REVERSE)
5935 return;
5936
5937 /* Try to send wildcard actions ("vCont;c" or "vCont;c:pPID.-1")
5938 instead of resuming all threads of each process individually.
5939 However, if any thread of a process must remain halted, we can't
5940 send wildcard resumes and must send one action per thread.
5941
5942 Care must be taken to not resume threads/processes the server
5943 side already told us are stopped, but the core doesn't know about
5944 yet, because the events are still in the vStopped notification
5945 queue. For example:
5946
5947 #1 => vCont s:p1.1;c
5948 #2 <= OK
5949 #3 <= %Stopped T05 p1.1
5950 #4 => vStopped
5951 #5 <= T05 p1.2
5952 #6 => vStopped
5953 #7 <= OK
5954 #8 (infrun handles the stop for p1.1 and continues stepping)
5955 #9 => vCont s:p1.1;c
5956
5957 The last vCont above would resume thread p1.2 by mistake, because
5958 the server has no idea that the event for p1.2 had not been
5959 handled yet.
5960
5961 The server side must similarly ignore resume actions for the
5962 thread that has a pending %Stopped notification (and any other
5963 threads with events pending), until GDB acks the notification
5964 with vStopped. Otherwise, e.g., the following case is
5965 mishandled:
5966
5967 #1 => g (or any other packet)
5968 #2 <= [registers]
5969 #3 <= %Stopped T05 p1.2
5970 #4 => vCont s:p1.1;c
5971 #5 <= OK
5972
5973 Above, the server must not resume thread p1.2. GDB can't know
5974 that p1.2 stopped until it acks the %Stopped notification, and
5975 since from GDB's perspective all threads should be running, it
5976 sends a "c" action.
5977
5978 Finally, special care must also be given to handling fork/vfork
5979 events. A (v)fork event actually tells us that two processes
5980 stopped -- the parent and the child. Until we follow the fork,
5981 we must not resume the child. Therefore, if we have a pending
5982 fork follow, we must not send a global wildcard resume action
5983 (vCont;c). We can still send process-wide wildcards though. */
5984
5985 /* Start by assuming a global wildcard (vCont;c) is possible. */
5986 may_global_wildcard_vcont = 1;
5987
5988 /* And assume every process is individually wildcard-able too. */
5989 ALL_NON_EXITED_INFERIORS (inf)
5990 {
5991 if (inf->priv == NULL)
5992 inf->priv = XNEW (struct private_inferior);
5993 inf->priv->may_wildcard_vcont = 1;
5994 }
5995
5996 /* Check for any pending events (not reported or processed yet) and
5997 disable process and global wildcard resumes appropriately. */
5998 check_pending_events_prevent_wildcard_vcont (&may_global_wildcard_vcont);
5999
6000 ALL_NON_EXITED_THREADS (tp)
6001 {
6002 /* If a thread of a process is not meant to be resumed, then we
6003 can't wildcard that process. */
6004 if (!tp->executing)
6005 {
6006 tp->inf->priv->may_wildcard_vcont = 0;
6007
6008 /* And if we can't wildcard a process, we can't wildcard
6009 everything either. */
6010 may_global_wildcard_vcont = 0;
6011 continue;
6012 }
6013
6014 /* If a thread is the parent of an unfollowed fork, then we
6015 can't do a global wildcard, as that would resume the fork
6016 child. */
6017 if (is_pending_fork_parent_thread (tp))
6018 may_global_wildcard_vcont = 0;
6019 }
6020
6021 /* Now let's build the vCont packet(s). Actions must be appended
6022 from narrower to wider scopes (thread -> process -> global). If
6023 we end up with too many actions for a single packet vcont_builder
6024 flushes the current vCont packet to the remote side and starts a
6025 new one. */
6026 vcont_builder_restart (&vcont_builder);
6027
6028 /* Threads first. */
6029 ALL_NON_EXITED_THREADS (tp)
6030 {
6031 struct private_thread_info *remote_thr = tp->priv;
6032
6033 if (!tp->executing || remote_thr->vcont_resumed)
6034 continue;
6035
6036 gdb_assert (!thread_is_in_step_over_chain (tp));
6037
6038 if (!remote_thr->last_resume_step
6039 && remote_thr->last_resume_sig == GDB_SIGNAL_0
6040 && tp->inf->priv->may_wildcard_vcont)
6041 {
6042 /* We'll send a wildcard resume instead. */
6043 remote_thr->vcont_resumed = 1;
6044 continue;
6045 }
6046
6047 vcont_builder_push_action (&vcont_builder, tp->ptid,
6048 remote_thr->last_resume_step,
6049 remote_thr->last_resume_sig);
6050 remote_thr->vcont_resumed = 1;
6051 }
6052
6053 /* Now check whether we can send any process-wide wildcard. This is
6054 to avoid sending a global wildcard in the case nothing is
6055 supposed to be resumed. */
6056 any_process_wildcard = 0;
6057
6058 ALL_NON_EXITED_INFERIORS (inf)
6059 {
6060 if (inf->priv->may_wildcard_vcont)
6061 {
6062 any_process_wildcard = 1;
6063 break;
6064 }
6065 }
6066
6067 if (any_process_wildcard)
6068 {
6069 /* If all processes are wildcard-able, then send a single "c"
6070 action, otherwise, send an "all (-1) threads of process"
6071 continue action for each running process, if any. */
6072 if (may_global_wildcard_vcont)
6073 {
6074 vcont_builder_push_action (&vcont_builder, minus_one_ptid,
6075 0, GDB_SIGNAL_0);
6076 }
6077 else
6078 {
6079 ALL_NON_EXITED_INFERIORS (inf)
6080 {
6081 if (inf->priv->may_wildcard_vcont)
6082 {
6083 vcont_builder_push_action (&vcont_builder,
6084 pid_to_ptid (inf->pid),
6085 0, GDB_SIGNAL_0);
6086 }
6087 }
6088 }
6089 }
6090
6091 vcont_builder_flush (&vcont_builder);
6092}
6093
c906108c 6094\f
43ff13b4 6095
74531fed
PA
6096/* Non-stop version of target_stop. Uses `vCont;t' to stop a remote
6097 thread, all threads of a remote process, or all threads of all
6098 processes. */
6099
6100static void
6101remote_stop_ns (ptid_t ptid)
6102{
6103 struct remote_state *rs = get_remote_state ();
6104 char *p = rs->buf;
6105 char *endp = rs->buf + get_remote_packet_size ();
74531fed 6106
4082afcc 6107 if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
74531fed
PA
6108 remote_vcont_probe (rs);
6109
d458bd84 6110 if (!rs->supports_vCont.t)
74531fed
PA
6111 error (_("Remote server does not support stopping threads"));
6112
f91d3df5
PA
6113 if (ptid_equal (ptid, minus_one_ptid)
6114 || (!remote_multi_process_p (rs) && ptid_is_pid (ptid)))
74531fed
PA
6115 p += xsnprintf (p, endp - p, "vCont;t");
6116 else
6117 {
6118 ptid_t nptid;
6119
74531fed
PA
6120 p += xsnprintf (p, endp - p, "vCont;t:");
6121
6122 if (ptid_is_pid (ptid))
6123 /* All (-1) threads of process. */
ba348170 6124 nptid = ptid_build (ptid_get_pid (ptid), -1, 0);
74531fed
PA
6125 else
6126 {
6127 /* Small optimization: if we already have a stop reply for
6128 this thread, no use in telling the stub we want this
6129 stopped. */
6130 if (peek_stop_reply (ptid))
6131 return;
6132
6133 nptid = ptid;
6134 }
6135
a9cbf802 6136 write_ptid (p, endp, nptid);
74531fed
PA
6137 }
6138
6139 /* In non-stop, we get an immediate OK reply. The stop reply will
6140 come in asynchronously by notification. */
6141 putpkt (rs->buf);
6142 getpkt (&rs->buf, &rs->buf_size, 0);
6143 if (strcmp (rs->buf, "OK") != 0)
6144 error (_("Stopping %s failed: %s"), target_pid_to_str (ptid), rs->buf);
6145}
6146
bfedc46a
PA
6147/* All-stop version of target_interrupt. Sends a break or a ^C to
6148 interrupt the remote target. It is undefined which thread of which
6149 process reports the interrupt. */
74531fed
PA
6150
6151static void
de979965 6152remote_interrupt_as (void)
74531fed
PA
6153{
6154 struct remote_state *rs = get_remote_state ();
6155
3a29589a
DJ
6156 rs->ctrlc_pending_p = 1;
6157
74531fed
PA
6158 /* If the inferior is stopped already, but the core didn't know
6159 about it yet, just ignore the request. The cached wait status
6160 will be collected in remote_wait. */
6161 if (rs->cached_wait_status)
6162 return;
6163
9a7071a8
JB
6164 /* Send interrupt_sequence to remote target. */
6165 send_interrupt_sequence ();
74531fed
PA
6166}
6167
de979965
PA
6168/* Non-stop version of target_interrupt. Uses `vCtrlC' to interrupt
6169 the remote target. It is undefined which thread of which process
e42de8c7
PA
6170 reports the interrupt. Throws an error if the packet is not
6171 supported by the server. */
de979965 6172
e42de8c7 6173static void
de979965
PA
6174remote_interrupt_ns (void)
6175{
6176 struct remote_state *rs = get_remote_state ();
6177 char *p = rs->buf;
6178 char *endp = rs->buf + get_remote_packet_size ();
6179
6180 xsnprintf (p, endp - p, "vCtrlC");
6181
6182 /* In non-stop, we get an immediate OK reply. The stop reply will
6183 come in asynchronously by notification. */
6184 putpkt (rs->buf);
6185 getpkt (&rs->buf, &rs->buf_size, 0);
6186
6187 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_vCtrlC]))
6188 {
6189 case PACKET_OK:
6190 break;
6191 case PACKET_UNKNOWN:
e42de8c7 6192 error (_("No support for interrupting the remote target."));
de979965
PA
6193 case PACKET_ERROR:
6194 error (_("Interrupting target failed: %s"), rs->buf);
6195 }
de979965
PA
6196}
6197
bfedc46a 6198/* Implement the to_stop function for the remote targets. */
74531fed 6199
c906108c 6200static void
1eab8a48 6201remote_stop (struct target_ops *self, ptid_t ptid)
c906108c 6202{
7a292a7a 6203 if (remote_debug)
0f71a2f6 6204 fprintf_unfiltered (gdb_stdlog, "remote_stop called\n");
c906108c 6205
6efcd9a8 6206 if (target_is_non_stop_p ())
74531fed 6207 remote_stop_ns (ptid);
c906108c 6208 else
bfedc46a
PA
6209 {
6210 /* We don't currently have a way to transparently pause the
6211 remote target in all-stop mode. Interrupt it instead. */
de979965 6212 remote_interrupt_as ();
bfedc46a
PA
6213 }
6214}
6215
6216/* Implement the to_interrupt function for the remote targets. */
6217
6218static void
6219remote_interrupt (struct target_ops *self, ptid_t ptid)
6220{
e42de8c7
PA
6221 struct remote_state *rs = get_remote_state ();
6222
bfedc46a
PA
6223 if (remote_debug)
6224 fprintf_unfiltered (gdb_stdlog, "remote_interrupt called\n");
6225
e42de8c7
PA
6226 if (target_is_non_stop_p ())
6227 remote_interrupt_ns ();
bfedc46a 6228 else
e42de8c7 6229 remote_interrupt_as ();
c906108c
SS
6230}
6231
93692b58
PA
6232/* Implement the to_pass_ctrlc function for the remote targets. */
6233
6234static void
6235remote_pass_ctrlc (struct target_ops *self)
6236{
6237 struct remote_state *rs = get_remote_state ();
6238
6239 if (remote_debug)
6240 fprintf_unfiltered (gdb_stdlog, "remote_pass_ctrlc called\n");
6241
6242 /* If we're starting up, we're not fully synced yet. Quit
6243 immediately. */
6244 if (rs->starting_up)
6245 quit ();
6246 /* If ^C has already been sent once, offer to disconnect. */
6247 else if (rs->ctrlc_pending_p)
6248 interrupt_query ();
6249 else
6250 target_interrupt (inferior_ptid);
6251}
6252
c906108c
SS
6253/* Ask the user what to do when an interrupt is received. */
6254
6255static void
fba45db2 6256interrupt_query (void)
c906108c 6257{
abc56d60 6258 struct remote_state *rs = get_remote_state ();
c906108c 6259
abc56d60 6260 if (rs->waiting_for_stop_reply && rs->ctrlc_pending_p)
74531fed 6261 {
abc56d60
PA
6262 if (query (_("The target is not responding to interrupt requests.\n"
6263 "Stop debugging it? ")))
74531fed 6264 {
78a095c3 6265 remote_unpush_target ();
abc56d60 6266 throw_error (TARGET_CLOSE_ERROR, _("Disconnected from target."));
74531fed
PA
6267 }
6268 }
abc56d60
PA
6269 else
6270 {
6271 if (query (_("Interrupted while waiting for the program.\n"
6272 "Give up waiting? ")))
6273 quit ();
6274 }
c906108c
SS
6275}
6276
6426a772
JM
6277/* Enable/disable target terminal ownership. Most targets can use
6278 terminal groups to control terminal ownership. Remote targets are
6279 different in that explicit transfer of ownership to/from GDB/target
23860348 6280 is required. */
6426a772
JM
6281
6282static void
d2f640d4 6283remote_terminal_inferior (struct target_ops *self)
6426a772 6284{
d9d2d8b6
PA
6285 /* FIXME: cagney/1999-09-27: Make calls to target_terminal_*()
6286 idempotent. The event-loop GDB talking to an asynchronous target
6287 with a synchronous command calls this function from both
6288 event-top.c and infrun.c/infcmd.c. Once GDB stops trying to
6289 transfer the terminal to the target when it shouldn't this guard
6290 can go away. */
6426a772
JM
6291 if (!remote_async_terminal_ours_p)
6292 return;
6426a772 6293 remote_async_terminal_ours_p = 0;
6426a772
JM
6294 /* NOTE: At this point we could also register our selves as the
6295 recipient of all input. Any characters typed could then be
23860348 6296 passed on down to the target. */
6426a772
JM
6297}
6298
6299static void
e3594fd1 6300remote_terminal_ours (struct target_ops *self)
6426a772 6301{
75c99385 6302 /* See FIXME in remote_terminal_inferior. */
6426a772
JM
6303 if (remote_async_terminal_ours_p)
6304 return;
6426a772
JM
6305 remote_async_terminal_ours_p = 1;
6306}
6307
176a6961 6308static void
917317f4 6309remote_console_output (char *msg)
c906108c
SS
6310{
6311 char *p;
6312
c5aa993b 6313 for (p = msg; p[0] && p[1]; p += 2)
c906108c
SS
6314 {
6315 char tb[2];
6316 char c = fromhex (p[0]) * 16 + fromhex (p[1]);
a744cf53 6317
c906108c
SS
6318 tb[0] = c;
6319 tb[1] = 0;
43ff13b4 6320 fputs_unfiltered (tb, gdb_stdtarg);
c906108c 6321 }
00db5b94
PA
6322 gdb_flush (gdb_stdtarg);
6323}
74531fed 6324
74531fed
PA
6325DEF_VEC_O(cached_reg_t);
6326
722247f1 6327typedef struct stop_reply
74531fed 6328{
722247f1 6329 struct notif_event base;
74531fed 6330
722247f1 6331 /* The identifier of the thread about this event */
74531fed
PA
6332 ptid_t ptid;
6333
340e3c99 6334 /* The remote state this event is associated with. When the remote
bcc75809
YQ
6335 connection, represented by a remote_state object, is closed,
6336 all the associated stop_reply events should be released. */
6337 struct remote_state *rs;
6338
74531fed
PA
6339 struct target_waitstatus ws;
6340
15148d6a
PA
6341 /* Expedited registers. This makes remote debugging a bit more
6342 efficient for those targets that provide critical registers as
6343 part of their normal status mechanism (as another roundtrip to
6344 fetch them is avoided). */
74531fed
PA
6345 VEC(cached_reg_t) *regcache;
6346
f7e6eed5
PA
6347 enum target_stop_reason stop_reason;
6348
74531fed
PA
6349 CORE_ADDR watch_data_address;
6350
dc146f7c 6351 int core;
722247f1 6352} *stop_reply_p;
a744cf53 6353
722247f1
YQ
6354DECLARE_QUEUE_P (stop_reply_p);
6355DEFINE_QUEUE_P (stop_reply_p);
6356/* The list of already fetched and acknowledged stop events. This
6357 queue is used for notification Stop, and other notifications
6358 don't need queue for their events, because the notification events
6359 of Stop can't be consumed immediately, so that events should be
6360 queued first, and be consumed by remote_wait_{ns,as} one per
6361 time. Other notifications can consume their events immediately,
6362 so queue is not needed for them. */
6363static QUEUE (stop_reply_p) *stop_reply_queue;
74531fed
PA
6364
6365static void
6366stop_reply_xfree (struct stop_reply *r)
6367{
f48ff2a7 6368 notif_event_xfree ((struct notif_event *) r);
c906108c
SS
6369}
6370
221e1a37
PA
6371/* Return the length of the stop reply queue. */
6372
6373static int
6374stop_reply_queue_length (void)
6375{
6376 return QUEUE_length (stop_reply_p, stop_reply_queue);
6377}
6378
722247f1
YQ
6379static void
6380remote_notif_stop_parse (struct notif_client *self, char *buf,
6381 struct notif_event *event)
6382{
6383 remote_parse_stop_reply (buf, (struct stop_reply *) event);
6384}
6385
6386static void
6387remote_notif_stop_ack (struct notif_client *self, char *buf,
6388 struct notif_event *event)
6389{
6390 struct stop_reply *stop_reply = (struct stop_reply *) event;
6391
6392 /* acknowledge */
f5c4fcd9 6393 putpkt (self->ack_command);
722247f1
YQ
6394
6395 if (stop_reply->ws.kind == TARGET_WAITKIND_IGNORE)
6396 /* We got an unknown stop reply. */
6397 error (_("Unknown stop reply"));
6398
6399 push_stop_reply (stop_reply);
6400}
6401
6402static int
6403remote_notif_stop_can_get_pending_events (struct notif_client *self)
6404{
6405 /* We can't get pending events in remote_notif_process for
6406 notification stop, and we have to do this in remote_wait_ns
6407 instead. If we fetch all queued events from stub, remote stub
6408 may exit and we have no chance to process them back in
6409 remote_wait_ns. */
6410 mark_async_event_handler (remote_async_inferior_event_token);
6411 return 0;
6412}
6413
6414static void
6415stop_reply_dtr (struct notif_event *event)
6416{
6417 struct stop_reply *r = (struct stop_reply *) event;
d1dff226
AH
6418 cached_reg_t *reg;
6419 int ix;
6420
6421 for (ix = 0;
6422 VEC_iterate (cached_reg_t, r->regcache, ix, reg);
6423 ix++)
6424 xfree (reg->data);
722247f1
YQ
6425
6426 VEC_free (cached_reg_t, r->regcache);
6427}
6428
6429static struct notif_event *
6430remote_notif_stop_alloc_reply (void)
6431{
8d749320
SM
6432 /* We cast to a pointer to the "base class". */
6433 struct notif_event *r = (struct notif_event *) XNEW (struct stop_reply);
722247f1
YQ
6434
6435 r->dtr = stop_reply_dtr;
6436
6437 return r;
6438}
6439
6440/* A client of notification Stop. */
6441
6442struct notif_client notif_client_stop =
6443{
6444 "Stop",
6445 "vStopped",
6446 remote_notif_stop_parse,
6447 remote_notif_stop_ack,
6448 remote_notif_stop_can_get_pending_events,
6449 remote_notif_stop_alloc_reply,
f48ff2a7 6450 REMOTE_NOTIF_STOP,
722247f1
YQ
6451};
6452
6453/* A parameter to pass data in and out. */
6454
6455struct queue_iter_param
6456{
6457 void *input;
6458 struct stop_reply *output;
6459};
6460
85ad3aaf 6461/* Determine if THREAD_PTID is a pending fork parent thread. ARG contains
cbb8991c
DB
6462 the pid of the process that owns the threads we want to check, or
6463 -1 if we want to check all threads. */
6464
6465static int
6466is_pending_fork_parent (struct target_waitstatus *ws, int event_pid,
6467 ptid_t thread_ptid)
6468{
6469 if (ws->kind == TARGET_WAITKIND_FORKED
6470 || ws->kind == TARGET_WAITKIND_VFORKED)
6471 {
6472 if (event_pid == -1 || event_pid == ptid_get_pid (thread_ptid))
6473 return 1;
6474 }
6475
6476 return 0;
6477}
6478
85ad3aaf
PA
6479/* Return the thread's pending status used to determine whether the
6480 thread is a fork parent stopped at a fork event. */
6481
6482static struct target_waitstatus *
6483thread_pending_fork_status (struct thread_info *thread)
6484{
6485 if (thread->suspend.waitstatus_pending_p)
6486 return &thread->suspend.waitstatus;
6487 else
6488 return &thread->pending_follow;
6489}
6490
6491/* Determine if THREAD is a pending fork parent thread. */
6492
6493static int
6494is_pending_fork_parent_thread (struct thread_info *thread)
6495{
6496 struct target_waitstatus *ws = thread_pending_fork_status (thread);
6497 int pid = -1;
6498
6499 return is_pending_fork_parent (ws, pid, thread->ptid);
6500}
6501
cbb8991c
DB
6502/* Check whether EVENT is a fork event, and if it is, remove the
6503 fork child from the context list passed in DATA. */
6504
6505static int
6506remove_child_of_pending_fork (QUEUE (stop_reply_p) *q,
6507 QUEUE_ITER (stop_reply_p) *iter,
6508 stop_reply_p event,
6509 void *data)
6510{
19ba03f4
SM
6511 struct queue_iter_param *param = (struct queue_iter_param *) data;
6512 struct threads_listing_context *context
6513 = (struct threads_listing_context *) param->input;
cbb8991c
DB
6514
6515 if (event->ws.kind == TARGET_WAITKIND_FORKED
65706a29
PA
6516 || event->ws.kind == TARGET_WAITKIND_VFORKED
6517 || event->ws.kind == TARGET_WAITKIND_THREAD_EXITED)
6518 threads_listing_context_remove (&event->ws, context);
cbb8991c
DB
6519
6520 return 1;
6521}
6522
6523/* If CONTEXT contains any fork child threads that have not been
6524 reported yet, remove them from the CONTEXT list. If such a
6525 thread exists it is because we are stopped at a fork catchpoint
6526 and have not yet called follow_fork, which will set up the
6527 host-side data structures for the new process. */
6528
6529static void
6530remove_new_fork_children (struct threads_listing_context *context)
6531{
6532 struct thread_info * thread;
6533 int pid = -1;
6534 struct notif_client *notif = &notif_client_stop;
6535 struct queue_iter_param param;
6536
6537 /* For any threads stopped at a fork event, remove the corresponding
6538 fork child threads from the CONTEXT list. */
6539 ALL_NON_EXITED_THREADS (thread)
6540 {
85ad3aaf 6541 struct target_waitstatus *ws = thread_pending_fork_status (thread);
cbb8991c
DB
6542
6543 if (is_pending_fork_parent (ws, pid, thread->ptid))
6544 {
6545 threads_listing_context_remove (ws, context);
6546 }
6547 }
6548
6549 /* Check for any pending fork events (not reported or processed yet)
6550 in process PID and remove those fork child threads from the
6551 CONTEXT list as well. */
6552 remote_notif_get_pending_events (notif);
6553 param.input = context;
6554 param.output = NULL;
6555 QUEUE_iterate (stop_reply_p, stop_reply_queue,
6556 remove_child_of_pending_fork, &param);
6557}
6558
85ad3aaf
PA
6559/* Check whether EVENT would prevent a global or process wildcard
6560 vCont action. */
6561
6562static int
6563check_pending_event_prevents_wildcard_vcont_callback
6564 (QUEUE (stop_reply_p) *q,
6565 QUEUE_ITER (stop_reply_p) *iter,
6566 stop_reply_p event,
6567 void *data)
6568{
6569 struct inferior *inf;
6570 int *may_global_wildcard_vcont = (int *) data;
6571
6572 if (event->ws.kind == TARGET_WAITKIND_NO_RESUMED
6573 || event->ws.kind == TARGET_WAITKIND_NO_HISTORY)
6574 return 1;
6575
6576 if (event->ws.kind == TARGET_WAITKIND_FORKED
6577 || event->ws.kind == TARGET_WAITKIND_VFORKED)
6578 *may_global_wildcard_vcont = 0;
6579
6580 inf = find_inferior_ptid (event->ptid);
6581
6582 /* This may be the first time we heard about this process.
6583 Regardless, we must not do a global wildcard resume, otherwise
6584 we'd resume this process too. */
6585 *may_global_wildcard_vcont = 0;
6586 if (inf != NULL)
6587 inf->priv->may_wildcard_vcont = 0;
6588
6589 return 1;
6590}
6591
6592/* Check whether any event pending in the vStopped queue would prevent
6593 a global or process wildcard vCont action. Clear
6594 *may_global_wildcard if we can't do a global wildcard (vCont;c),
6595 and clear the event inferior's may_wildcard_vcont flag if we can't
6596 do a process-wide wildcard resume (vCont;c:pPID.-1). */
6597
6598static void
6599check_pending_events_prevent_wildcard_vcont (int *may_global_wildcard)
6600{
6601 struct notif_client *notif = &notif_client_stop;
6602
6603 remote_notif_get_pending_events (notif);
6604 QUEUE_iterate (stop_reply_p, stop_reply_queue,
6605 check_pending_event_prevents_wildcard_vcont_callback,
6606 may_global_wildcard);
6607}
6608
f48ff2a7
YQ
6609/* Remove stop replies in the queue if its pid is equal to the given
6610 inferior's pid. */
722247f1
YQ
6611
6612static int
f48ff2a7
YQ
6613remove_stop_reply_for_inferior (QUEUE (stop_reply_p) *q,
6614 QUEUE_ITER (stop_reply_p) *iter,
6615 stop_reply_p event,
6616 void *data)
722247f1 6617{
19ba03f4
SM
6618 struct queue_iter_param *param = (struct queue_iter_param *) data;
6619 struct inferior *inf = (struct inferior *) param->input;
722247f1 6620
f48ff2a7 6621 if (ptid_get_pid (event->ptid) == inf->pid)
722247f1
YQ
6622 {
6623 stop_reply_xfree (event);
6624 QUEUE_remove_elem (stop_reply_p, q, iter);
6625 }
6626
6627 return 1;
6628}
6629
f48ff2a7 6630/* Discard all pending stop replies of inferior INF. */
c906108c 6631
74531fed 6632static void
5f4cf0bb 6633discard_pending_stop_replies (struct inferior *inf)
c906108c 6634{
722247f1 6635 struct queue_iter_param param;
f48ff2a7
YQ
6636 struct stop_reply *reply;
6637 struct remote_state *rs = get_remote_state ();
6638 struct remote_notif_state *rns = rs->notif_state;
6639
6640 /* This function can be notified when an inferior exists. When the
6641 target is not remote, the notification state is NULL. */
6642 if (rs->remote_desc == NULL)
6643 return;
6644
6645 reply = (struct stop_reply *) rns->pending_event[notif_client_stop.id];
c906108c 6646
74531fed 6647 /* Discard the in-flight notification. */
f48ff2a7 6648 if (reply != NULL && ptid_get_pid (reply->ptid) == inf->pid)
74531fed 6649 {
722247f1 6650 stop_reply_xfree (reply);
f48ff2a7 6651 rns->pending_event[notif_client_stop.id] = NULL;
74531fed 6652 }
c906108c 6653
722247f1
YQ
6654 param.input = inf;
6655 param.output = NULL;
74531fed
PA
6656 /* Discard the stop replies we have already pulled with
6657 vStopped. */
722247f1 6658 QUEUE_iterate (stop_reply_p, stop_reply_queue,
f48ff2a7
YQ
6659 remove_stop_reply_for_inferior, &param);
6660}
6661
bcc75809
YQ
6662/* If its remote state is equal to the given remote state,
6663 remove EVENT from the stop reply queue. */
6664
6665static int
6666remove_stop_reply_of_remote_state (QUEUE (stop_reply_p) *q,
6667 QUEUE_ITER (stop_reply_p) *iter,
6668 stop_reply_p event,
6669 void *data)
6670{
19ba03f4
SM
6671 struct queue_iter_param *param = (struct queue_iter_param *) data;
6672 struct remote_state *rs = (struct remote_state *) param->input;
bcc75809
YQ
6673
6674 if (event->rs == rs)
6675 {
6676 stop_reply_xfree (event);
6677 QUEUE_remove_elem (stop_reply_p, q, iter);
6678 }
6679
6680 return 1;
6681}
6682
6683/* Discard the stop replies for RS in stop_reply_queue. */
f48ff2a7
YQ
6684
6685static void
bcc75809 6686discard_pending_stop_replies_in_queue (struct remote_state *rs)
f48ff2a7
YQ
6687{
6688 struct queue_iter_param param;
6689
bcc75809 6690 param.input = rs;
f48ff2a7
YQ
6691 param.output = NULL;
6692 /* Discard the stop replies we have already pulled with
6693 vStopped. */
6694 QUEUE_iterate (stop_reply_p, stop_reply_queue,
bcc75809 6695 remove_stop_reply_of_remote_state, &param);
722247f1 6696}
74531fed 6697
722247f1
YQ
6698/* A parameter to pass data in and out. */
6699
6700static int
6701remote_notif_remove_once_on_match (QUEUE (stop_reply_p) *q,
6702 QUEUE_ITER (stop_reply_p) *iter,
6703 stop_reply_p event,
6704 void *data)
6705{
19ba03f4
SM
6706 struct queue_iter_param *param = (struct queue_iter_param *) data;
6707 ptid_t *ptid = (ptid_t *) param->input;
722247f1
YQ
6708
6709 if (ptid_match (event->ptid, *ptid))
6710 {
6711 param->output = event;
6712 QUEUE_remove_elem (stop_reply_p, q, iter);
6713 return 0;
c8e38a49 6714 }
722247f1
YQ
6715
6716 return 1;
74531fed 6717}
43ff13b4 6718
722247f1
YQ
6719/* Remove the first reply in 'stop_reply_queue' which matches
6720 PTID. */
2e9f7625 6721
722247f1
YQ
6722static struct stop_reply *
6723remote_notif_remove_queued_reply (ptid_t ptid)
74531fed 6724{
722247f1
YQ
6725 struct queue_iter_param param;
6726
6727 param.input = &ptid;
6728 param.output = NULL;
6729
6730 QUEUE_iterate (stop_reply_p, stop_reply_queue,
6731 remote_notif_remove_once_on_match, &param);
6732 if (notif_debug)
6733 fprintf_unfiltered (gdb_stdlog,
6734 "notif: discard queued event: 'Stop' in %s\n",
6735 target_pid_to_str (ptid));
a744cf53 6736
722247f1 6737 return param.output;
74531fed 6738}
75c99385 6739
74531fed
PA
6740/* Look for a queued stop reply belonging to PTID. If one is found,
6741 remove it from the queue, and return it. Returns NULL if none is
6742 found. If there are still queued events left to process, tell the
6743 event loop to get back to target_wait soon. */
e24a49d8 6744
74531fed
PA
6745static struct stop_reply *
6746queued_stop_reply (ptid_t ptid)
6747{
722247f1 6748 struct stop_reply *r = remote_notif_remove_queued_reply (ptid);
74531fed 6749
722247f1 6750 if (!QUEUE_is_empty (stop_reply_p, stop_reply_queue))
74531fed
PA
6751 /* There's still at least an event left. */
6752 mark_async_event_handler (remote_async_inferior_event_token);
6753
722247f1 6754 return r;
74531fed
PA
6755}
6756
6757/* Push a fully parsed stop reply in the stop reply queue. Since we
6758 know that we now have at least one queued event left to pass to the
6759 core side, tell the event loop to get back to target_wait soon. */
6760
6761static void
6762push_stop_reply (struct stop_reply *new_event)
6763{
722247f1 6764 QUEUE_enque (stop_reply_p, stop_reply_queue, new_event);
74531fed 6765
722247f1
YQ
6766 if (notif_debug)
6767 fprintf_unfiltered (gdb_stdlog,
6768 "notif: push 'Stop' %s to queue %d\n",
6769 target_pid_to_str (new_event->ptid),
6770 QUEUE_length (stop_reply_p,
6771 stop_reply_queue));
74531fed
PA
6772
6773 mark_async_event_handler (remote_async_inferior_event_token);
6774}
6775
722247f1
YQ
6776static int
6777stop_reply_match_ptid_and_ws (QUEUE (stop_reply_p) *q,
6778 QUEUE_ITER (stop_reply_p) *iter,
6779 struct stop_reply *event,
6780 void *data)
6781{
19ba03f4 6782 ptid_t *ptid = (ptid_t *) data;
722247f1
YQ
6783
6784 return !(ptid_equal (*ptid, event->ptid)
6785 && event->ws.kind == TARGET_WAITKIND_STOPPED);
6786}
6787
74531fed
PA
6788/* Returns true if we have a stop reply for PTID. */
6789
6790static int
6791peek_stop_reply (ptid_t ptid)
6792{
722247f1
YQ
6793 return !QUEUE_iterate (stop_reply_p, stop_reply_queue,
6794 stop_reply_match_ptid_and_ws, &ptid);
74531fed
PA
6795}
6796
26d56a93
SL
6797/* Helper for remote_parse_stop_reply. Return nonzero if the substring
6798 starting with P and ending with PEND matches PREFIX. */
6799
6800static int
6801strprefix (const char *p, const char *pend, const char *prefix)
6802{
6803 for ( ; p < pend; p++, prefix++)
6804 if (*p != *prefix)
6805 return 0;
6806 return *prefix == '\0';
6807}
6808
74531fed
PA
6809/* Parse the stop reply in BUF. Either the function succeeds, and the
6810 result is stored in EVENT, or throws an error. */
6811
6812static void
6813remote_parse_stop_reply (char *buf, struct stop_reply *event)
6814{
6815 struct remote_arch_state *rsa = get_remote_arch_state ();
6816 ULONGEST addr;
6817 char *p;
94585166 6818 int skipregs = 0;
74531fed
PA
6819
6820 event->ptid = null_ptid;
bcc75809 6821 event->rs = get_remote_state ();
74531fed
PA
6822 event->ws.kind = TARGET_WAITKIND_IGNORE;
6823 event->ws.value.integer = 0;
f7e6eed5 6824 event->stop_reason = TARGET_STOPPED_BY_NO_REASON;
74531fed 6825 event->regcache = NULL;
dc146f7c 6826 event->core = -1;
74531fed
PA
6827
6828 switch (buf[0])
6829 {
6830 case 'T': /* Status with PC, SP, FP, ... */
cea39f65
MS
6831 /* Expedited reply, containing Signal, {regno, reg} repeat. */
6832 /* format is: 'Tssn...:r...;n...:r...;n...:r...;#cc', where
6833 ss = signal number
6834 n... = register number
6835 r... = register contents
6836 */
6837
6838 p = &buf[3]; /* after Txx */
6839 while (*p)
6840 {
6841 char *p1;
cea39f65 6842 int fieldsize;
43ff13b4 6843
1f10ba14
PA
6844 p1 = strchr (p, ':');
6845 if (p1 == NULL)
6846 error (_("Malformed packet(a) (missing colon): %s\n\
6847Packet: '%s'\n"),
6848 p, buf);
6849 if (p == p1)
6850 error (_("Malformed packet(a) (missing register number): %s\n\
6851Packet: '%s'\n"),
6852 p, buf);
3c3bea1c 6853
1f10ba14
PA
6854 /* Some "registers" are actually extended stop information.
6855 Note if you're adding a new entry here: GDB 7.9 and
6856 earlier assume that all register "numbers" that start
6857 with an hex digit are real register numbers. Make sure
6858 the server only sends such a packet if it knows the
6859 client understands it. */
c8e38a49 6860
26d56a93 6861 if (strprefix (p, p1, "thread"))
1f10ba14 6862 event->ptid = read_ptid (++p1, &p);
82075af2
JS
6863 else if (strprefix (p, p1, "syscall_entry"))
6864 {
6865 ULONGEST sysno;
6866
6867 event->ws.kind = TARGET_WAITKIND_SYSCALL_ENTRY;
6868 p = unpack_varlen_hex (++p1, &sysno);
6869 event->ws.value.syscall_number = (int) sysno;
6870 }
6871 else if (strprefix (p, p1, "syscall_return"))
6872 {
6873 ULONGEST sysno;
6874
6875 event->ws.kind = TARGET_WAITKIND_SYSCALL_RETURN;
6876 p = unpack_varlen_hex (++p1, &sysno);
6877 event->ws.value.syscall_number = (int) sysno;
6878 }
26d56a93
SL
6879 else if (strprefix (p, p1, "watch")
6880 || strprefix (p, p1, "rwatch")
6881 || strprefix (p, p1, "awatch"))
cea39f65 6882 {
f7e6eed5 6883 event->stop_reason = TARGET_STOPPED_BY_WATCHPOINT;
1f10ba14
PA
6884 p = unpack_varlen_hex (++p1, &addr);
6885 event->watch_data_address = (CORE_ADDR) addr;
cea39f65 6886 }
26d56a93 6887 else if (strprefix (p, p1, "swbreak"))
f7e6eed5
PA
6888 {
6889 event->stop_reason = TARGET_STOPPED_BY_SW_BREAKPOINT;
6890
6891 /* Make sure the stub doesn't forget to indicate support
6892 with qSupported. */
6893 if (packet_support (PACKET_swbreak_feature) != PACKET_ENABLE)
6894 error (_("Unexpected swbreak stop reason"));
6895
6896 /* The value part is documented as "must be empty",
6897 though we ignore it, in case we ever decide to make
6898 use of it in a backward compatible way. */
8424cc97 6899 p = strchrnul (p1 + 1, ';');
f7e6eed5 6900 }
26d56a93 6901 else if (strprefix (p, p1, "hwbreak"))
f7e6eed5
PA
6902 {
6903 event->stop_reason = TARGET_STOPPED_BY_HW_BREAKPOINT;
6904
6905 /* Make sure the stub doesn't forget to indicate support
6906 with qSupported. */
6907 if (packet_support (PACKET_hwbreak_feature) != PACKET_ENABLE)
6908 error (_("Unexpected hwbreak stop reason"));
6909
6910 /* See above. */
8424cc97 6911 p = strchrnul (p1 + 1, ';');
f7e6eed5 6912 }
26d56a93 6913 else if (strprefix (p, p1, "library"))
cea39f65 6914 {
1f10ba14 6915 event->ws.kind = TARGET_WAITKIND_LOADED;
8424cc97 6916 p = strchrnul (p1 + 1, ';');
1f10ba14 6917 }
26d56a93 6918 else if (strprefix (p, p1, "replaylog"))
1f10ba14
PA
6919 {
6920 event->ws.kind = TARGET_WAITKIND_NO_HISTORY;
6921 /* p1 will indicate "begin" or "end", but it makes
6922 no difference for now, so ignore it. */
8424cc97 6923 p = strchrnul (p1 + 1, ';');
1f10ba14 6924 }
26d56a93 6925 else if (strprefix (p, p1, "core"))
1f10ba14
PA
6926 {
6927 ULONGEST c;
a744cf53 6928
1f10ba14
PA
6929 p = unpack_varlen_hex (++p1, &c);
6930 event->core = c;
cea39f65 6931 }
26d56a93 6932 else if (strprefix (p, p1, "fork"))
de0d863e
DB
6933 {
6934 event->ws.value.related_pid = read_ptid (++p1, &p);
6935 event->ws.kind = TARGET_WAITKIND_FORKED;
6936 }
26d56a93 6937 else if (strprefix (p, p1, "vfork"))
c269dbdb
DB
6938 {
6939 event->ws.value.related_pid = read_ptid (++p1, &p);
6940 event->ws.kind = TARGET_WAITKIND_VFORKED;
6941 }
26d56a93 6942 else if (strprefix (p, p1, "vforkdone"))
c269dbdb
DB
6943 {
6944 event->ws.kind = TARGET_WAITKIND_VFORK_DONE;
8424cc97 6945 p = strchrnul (p1 + 1, ';');
c269dbdb 6946 }
6ab24463 6947 else if (strprefix (p, p1, "exec"))
94585166
DB
6948 {
6949 ULONGEST ignored;
6950 char pathname[PATH_MAX];
6951 int pathlen;
6952
6953 /* Determine the length of the execd pathname. */
6954 p = unpack_varlen_hex (++p1, &ignored);
6955 pathlen = (p - p1) / 2;
6956
6957 /* Save the pathname for event reporting and for
6958 the next run command. */
6959 hex2bin (p1, (gdb_byte *) pathname, pathlen);
6960 pathname[pathlen] = '\0';
6961
6962 /* This is freed during event handling. */
6963 event->ws.value.execd_pathname = xstrdup (pathname);
6964 event->ws.kind = TARGET_WAITKIND_EXECD;
6965
6966 /* Skip the registers included in this packet, since
6967 they may be for an architecture different from the
6968 one used by the original program. */
6969 skipregs = 1;
6970 }
65706a29
PA
6971 else if (strprefix (p, p1, "create"))
6972 {
6973 event->ws.kind = TARGET_WAITKIND_THREAD_CREATED;
8424cc97 6974 p = strchrnul (p1 + 1, ';');
65706a29 6975 }
cea39f65
MS
6976 else
6977 {
1f10ba14
PA
6978 ULONGEST pnum;
6979 char *p_temp;
6980
94585166
DB
6981 if (skipregs)
6982 {
8424cc97 6983 p = strchrnul (p1 + 1, ';');
94585166
DB
6984 p++;
6985 continue;
6986 }
6987
1f10ba14
PA
6988 /* Maybe a real ``P'' register number. */
6989 p_temp = unpack_varlen_hex (p, &pnum);
6990 /* If the first invalid character is the colon, we got a
6991 register number. Otherwise, it's an unknown stop
6992 reason. */
6993 if (p_temp == p1)
6994 {
6995 struct packet_reg *reg = packet_reg_from_pnum (rsa, pnum);
6996 cached_reg_t cached_reg;
d1dff226 6997 struct gdbarch *gdbarch = target_gdbarch ();
43ff13b4 6998
1f10ba14
PA
6999 if (reg == NULL)
7000 error (_("Remote sent bad register number %s: %s\n\
8a3fe4f8 7001Packet: '%s'\n"),
1f10ba14 7002 hex_string (pnum), p, buf);
c8e38a49 7003
1f10ba14 7004 cached_reg.num = reg->regnum;
d1dff226
AH
7005 cached_reg.data = (gdb_byte *)
7006 xmalloc (register_size (gdbarch, reg->regnum));
4100683b 7007
1f10ba14
PA
7008 p = p1 + 1;
7009 fieldsize = hex2bin (p, cached_reg.data,
d1dff226 7010 register_size (gdbarch, reg->regnum));
1f10ba14 7011 p += 2 * fieldsize;
d1dff226 7012 if (fieldsize < register_size (gdbarch, reg->regnum))
1f10ba14 7013 warning (_("Remote reply is too short: %s"), buf);
74531fed 7014
1f10ba14
PA
7015 VEC_safe_push (cached_reg_t, event->regcache, &cached_reg);
7016 }
7017 else
7018 {
7019 /* Not a number. Silently skip unknown optional
7020 info. */
8424cc97 7021 p = strchrnul (p1 + 1, ';');
1f10ba14 7022 }
cea39f65 7023 }
c8e38a49 7024
cea39f65
MS
7025 if (*p != ';')
7026 error (_("Remote register badly formatted: %s\nhere: %s"),
7027 buf, p);
7028 ++p;
7029 }
5b5596ff
PA
7030
7031 if (event->ws.kind != TARGET_WAITKIND_IGNORE)
7032 break;
7033
c8e38a49
PA
7034 /* fall through */
7035 case 'S': /* Old style status, just signal only. */
3a09da41
PA
7036 {
7037 int sig;
7038
7039 event->ws.kind = TARGET_WAITKIND_STOPPED;
7040 sig = (fromhex (buf[1]) << 4) + fromhex (buf[2]);
7041 if (GDB_SIGNAL_FIRST <= sig && sig < GDB_SIGNAL_LAST)
7042 event->ws.value.sig = (enum gdb_signal) sig;
7043 else
7044 event->ws.value.sig = GDB_SIGNAL_UNKNOWN;
7045 }
c8e38a49 7046 break;
65706a29
PA
7047 case 'w': /* Thread exited. */
7048 {
7049 char *p;
7050 ULONGEST value;
7051
7052 event->ws.kind = TARGET_WAITKIND_THREAD_EXITED;
7053 p = unpack_varlen_hex (&buf[1], &value);
7054 event->ws.value.integer = value;
7055 if (*p != ';')
7056 error (_("stop reply packet badly formatted: %s"), buf);
974eac9d 7057 event->ptid = read_ptid (++p, NULL);
65706a29
PA
7058 break;
7059 }
c8e38a49
PA
7060 case 'W': /* Target exited. */
7061 case 'X':
7062 {
7063 char *p;
7064 int pid;
7065 ULONGEST value;
82f73884 7066
c8e38a49
PA
7067 /* GDB used to accept only 2 hex chars here. Stubs should
7068 only send more if they detect GDB supports multi-process
7069 support. */
7070 p = unpack_varlen_hex (&buf[1], &value);
82f73884 7071
c8e38a49
PA
7072 if (buf[0] == 'W')
7073 {
7074 /* The remote process exited. */
74531fed
PA
7075 event->ws.kind = TARGET_WAITKIND_EXITED;
7076 event->ws.value.integer = value;
c8e38a49
PA
7077 }
7078 else
7079 {
7080 /* The remote process exited with a signal. */
74531fed 7081 event->ws.kind = TARGET_WAITKIND_SIGNALLED;
3a09da41
PA
7082 if (GDB_SIGNAL_FIRST <= value && value < GDB_SIGNAL_LAST)
7083 event->ws.value.sig = (enum gdb_signal) value;
7084 else
7085 event->ws.value.sig = GDB_SIGNAL_UNKNOWN;
c8e38a49 7086 }
82f73884 7087
c8e38a49
PA
7088 /* If no process is specified, assume inferior_ptid. */
7089 pid = ptid_get_pid (inferior_ptid);
7090 if (*p == '\0')
7091 ;
7092 else if (*p == ';')
7093 {
7094 p++;
7095
0b24eb2d 7096 if (*p == '\0')
82f73884 7097 ;
61012eef 7098 else if (startswith (p, "process:"))
82f73884 7099 {
c8e38a49 7100 ULONGEST upid;
a744cf53 7101
c8e38a49
PA
7102 p += sizeof ("process:") - 1;
7103 unpack_varlen_hex (p, &upid);
7104 pid = upid;
82f73884
PA
7105 }
7106 else
7107 error (_("unknown stop reply packet: %s"), buf);
43ff13b4 7108 }
c8e38a49
PA
7109 else
7110 error (_("unknown stop reply packet: %s"), buf);
74531fed
PA
7111 event->ptid = pid_to_ptid (pid);
7112 }
7113 break;
f2faf941
PA
7114 case 'N':
7115 event->ws.kind = TARGET_WAITKIND_NO_RESUMED;
7116 event->ptid = minus_one_ptid;
7117 break;
74531fed
PA
7118 }
7119
6efcd9a8 7120 if (target_is_non_stop_p () && ptid_equal (event->ptid, null_ptid))
74531fed
PA
7121 error (_("No process or thread specified in stop reply: %s"), buf);
7122}
7123
722247f1
YQ
7124/* When the stub wants to tell GDB about a new notification reply, it
7125 sends a notification (%Stop, for example). Those can come it at
7126 any time, hence, we have to make sure that any pending
7127 putpkt/getpkt sequence we're making is finished, before querying
7128 the stub for more events with the corresponding ack command
7129 (vStopped, for example). E.g., if we started a vStopped sequence
7130 immediately upon receiving the notification, something like this
7131 could happen:
74531fed
PA
7132
7133 1.1) --> Hg 1
7134 1.2) <-- OK
7135 1.3) --> g
7136 1.4) <-- %Stop
7137 1.5) --> vStopped
7138 1.6) <-- (registers reply to step #1.3)
7139
7140 Obviously, the reply in step #1.6 would be unexpected to a vStopped
7141 query.
7142
796cb314 7143 To solve this, whenever we parse a %Stop notification successfully,
74531fed
PA
7144 we mark the REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN, and carry on
7145 doing whatever we were doing:
7146
7147 2.1) --> Hg 1
7148 2.2) <-- OK
7149 2.3) --> g
7150 2.4) <-- %Stop
7151 <GDB marks the REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN>
7152 2.5) <-- (registers reply to step #2.3)
7153
7154 Eventualy after step #2.5, we return to the event loop, which
7155 notices there's an event on the
7156 REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN event and calls the
7157 associated callback --- the function below. At this point, we're
7158 always safe to start a vStopped sequence. :
7159
7160 2.6) --> vStopped
7161 2.7) <-- T05 thread:2
7162 2.8) --> vStopped
7163 2.9) --> OK
7164*/
7165
722247f1
YQ
7166void
7167remote_notif_get_pending_events (struct notif_client *nc)
74531fed
PA
7168{
7169 struct remote_state *rs = get_remote_state ();
74531fed 7170
f48ff2a7 7171 if (rs->notif_state->pending_event[nc->id] != NULL)
74531fed 7172 {
722247f1
YQ
7173 if (notif_debug)
7174 fprintf_unfiltered (gdb_stdlog,
7175 "notif: process: '%s' ack pending event\n",
7176 nc->name);
74531fed 7177
722247f1 7178 /* acknowledge */
f48ff2a7
YQ
7179 nc->ack (nc, rs->buf, rs->notif_state->pending_event[nc->id]);
7180 rs->notif_state->pending_event[nc->id] = NULL;
74531fed
PA
7181
7182 while (1)
7183 {
7184 getpkt (&rs->buf, &rs->buf_size, 0);
7185 if (strcmp (rs->buf, "OK") == 0)
7186 break;
7187 else
722247f1 7188 remote_notif_ack (nc, rs->buf);
74531fed
PA
7189 }
7190 }
722247f1
YQ
7191 else
7192 {
7193 if (notif_debug)
7194 fprintf_unfiltered (gdb_stdlog,
7195 "notif: process: '%s' no pending reply\n",
7196 nc->name);
7197 }
74531fed
PA
7198}
7199
74531fed
PA
7200/* Called when it is decided that STOP_REPLY holds the info of the
7201 event that is to be returned to the core. This function always
7202 destroys STOP_REPLY. */
7203
7204static ptid_t
7205process_stop_reply (struct stop_reply *stop_reply,
7206 struct target_waitstatus *status)
7207{
7208 ptid_t ptid;
7209
7210 *status = stop_reply->ws;
7211 ptid = stop_reply->ptid;
7212
7213 /* If no thread/process was reported by the stub, assume the current
7214 inferior. */
7215 if (ptid_equal (ptid, null_ptid))
7216 ptid = inferior_ptid;
7217
5f3563ea 7218 if (status->kind != TARGET_WAITKIND_EXITED
f2faf941
PA
7219 && status->kind != TARGET_WAITKIND_SIGNALLED
7220 && status->kind != TARGET_WAITKIND_NO_RESUMED)
74531fed 7221 {
799a2abe 7222 struct private_thread_info *remote_thr;
ee154bee 7223
5f3563ea
PA
7224 /* Expedited registers. */
7225 if (stop_reply->regcache)
7226 {
217f1f79 7227 struct regcache *regcache
f5656ead 7228 = get_thread_arch_regcache (ptid, target_gdbarch ());
5f3563ea
PA
7229 cached_reg_t *reg;
7230 int ix;
7231
7232 for (ix = 0;
d1dff226 7233 VEC_iterate (cached_reg_t, stop_reply->regcache, ix, reg);
5f3563ea 7234 ix++)
d1dff226 7235 {
217f1f79 7236 regcache_raw_supply (regcache, reg->num, reg->data);
d1dff226
AH
7237 xfree (reg->data);
7238 }
7239
5f3563ea
PA
7240 VEC_free (cached_reg_t, stop_reply->regcache);
7241 }
74531fed 7242
1941c569 7243 remote_notice_new_inferior (ptid, 0);
85ad3aaf 7244 remote_thr = get_private_info_ptid (ptid);
799a2abe
PA
7245 remote_thr->core = stop_reply->core;
7246 remote_thr->stop_reason = stop_reply->stop_reason;
7247 remote_thr->watch_data_address = stop_reply->watch_data_address;
85ad3aaf 7248 remote_thr->vcont_resumed = 0;
74531fed
PA
7249 }
7250
74531fed
PA
7251 stop_reply_xfree (stop_reply);
7252 return ptid;
7253}
7254
7255/* The non-stop mode version of target_wait. */
7256
7257static ptid_t
47608cb1 7258remote_wait_ns (ptid_t ptid, struct target_waitstatus *status, int options)
74531fed
PA
7259{
7260 struct remote_state *rs = get_remote_state ();
74531fed
PA
7261 struct stop_reply *stop_reply;
7262 int ret;
fee9eda9 7263 int is_notif = 0;
74531fed
PA
7264
7265 /* If in non-stop mode, get out of getpkt even if a
7266 notification is received. */
7267
7268 ret = getpkt_or_notif_sane (&rs->buf, &rs->buf_size,
fee9eda9 7269 0 /* forever */, &is_notif);
74531fed
PA
7270 while (1)
7271 {
fee9eda9 7272 if (ret != -1 && !is_notif)
74531fed
PA
7273 switch (rs->buf[0])
7274 {
7275 case 'E': /* Error of some sort. */
7276 /* We're out of sync with the target now. Did it continue
7277 or not? We can't tell which thread it was in non-stop,
7278 so just ignore this. */
7279 warning (_("Remote failure reply: %s"), rs->buf);
7280 break;
7281 case 'O': /* Console output. */
7282 remote_console_output (rs->buf + 1);
7283 break;
7284 default:
7285 warning (_("Invalid remote reply: %s"), rs->buf);
7286 break;
7287 }
7288
7289 /* Acknowledge a pending stop reply that may have arrived in the
7290 mean time. */
f48ff2a7 7291 if (rs->notif_state->pending_event[notif_client_stop.id] != NULL)
722247f1 7292 remote_notif_get_pending_events (&notif_client_stop);
74531fed
PA
7293
7294 /* If indeed we noticed a stop reply, we're done. */
7295 stop_reply = queued_stop_reply (ptid);
7296 if (stop_reply != NULL)
7297 return process_stop_reply (stop_reply, status);
7298
47608cb1 7299 /* Still no event. If we're just polling for an event, then
74531fed 7300 return to the event loop. */
47608cb1 7301 if (options & TARGET_WNOHANG)
74531fed
PA
7302 {
7303 status->kind = TARGET_WAITKIND_IGNORE;
7304 return minus_one_ptid;
7305 }
7306
47608cb1 7307 /* Otherwise do a blocking wait. */
74531fed 7308 ret = getpkt_or_notif_sane (&rs->buf, &rs->buf_size,
fee9eda9 7309 1 /* forever */, &is_notif);
74531fed
PA
7310 }
7311}
7312
7313/* Wait until the remote machine stops, then return, storing status in
7314 STATUS just as `wait' would. */
7315
7316static ptid_t
47608cb1 7317remote_wait_as (ptid_t ptid, struct target_waitstatus *status, int options)
74531fed
PA
7318{
7319 struct remote_state *rs = get_remote_state ();
74531fed 7320 ptid_t event_ptid = null_ptid;
cea39f65 7321 char *buf;
74531fed
PA
7322 struct stop_reply *stop_reply;
7323
47608cb1
PA
7324 again:
7325
74531fed
PA
7326 status->kind = TARGET_WAITKIND_IGNORE;
7327 status->value.integer = 0;
7328
7329 stop_reply = queued_stop_reply (ptid);
7330 if (stop_reply != NULL)
7331 return process_stop_reply (stop_reply, status);
7332
7333 if (rs->cached_wait_status)
7334 /* Use the cached wait status, but only once. */
7335 rs->cached_wait_status = 0;
7336 else
7337 {
7338 int ret;
722247f1 7339 int is_notif;
567420d1
PA
7340 int forever = ((options & TARGET_WNOHANG) == 0
7341 && wait_forever_enabled_p);
7342
7343 if (!rs->waiting_for_stop_reply)
7344 {
7345 status->kind = TARGET_WAITKIND_NO_RESUMED;
7346 return minus_one_ptid;
7347 }
74531fed 7348
74531fed
PA
7349 /* FIXME: cagney/1999-09-27: If we're in async mode we should
7350 _never_ wait for ever -> test on target_is_async_p().
7351 However, before we do that we need to ensure that the caller
7352 knows how to take the target into/out of async mode. */
722247f1 7353 ret = getpkt_or_notif_sane (&rs->buf, &rs->buf_size,
567420d1 7354 forever, &is_notif);
722247f1
YQ
7355
7356 /* GDB gets a notification. Return to core as this event is
7357 not interesting. */
7358 if (ret != -1 && is_notif)
7359 return minus_one_ptid;
567420d1
PA
7360
7361 if (ret == -1 && (options & TARGET_WNOHANG) != 0)
7362 return minus_one_ptid;
74531fed
PA
7363 }
7364
7365 buf = rs->buf;
7366
3a29589a
DJ
7367 /* Assume that the target has acknowledged Ctrl-C unless we receive
7368 an 'F' or 'O' packet. */
7369 if (buf[0] != 'F' && buf[0] != 'O')
7370 rs->ctrlc_pending_p = 0;
7371
74531fed
PA
7372 switch (buf[0])
7373 {
7374 case 'E': /* Error of some sort. */
7375 /* We're out of sync with the target now. Did it continue or
7376 not? Not is more likely, so report a stop. */
29090fb6
LM
7377 rs->waiting_for_stop_reply = 0;
7378
74531fed
PA
7379 warning (_("Remote failure reply: %s"), buf);
7380 status->kind = TARGET_WAITKIND_STOPPED;
a493e3e2 7381 status->value.sig = GDB_SIGNAL_0;
74531fed
PA
7382 break;
7383 case 'F': /* File-I/O request. */
e42e5352
YQ
7384 /* GDB may access the inferior memory while handling the File-I/O
7385 request, but we don't want GDB accessing memory while waiting
7386 for a stop reply. See the comments in putpkt_binary. Set
7387 waiting_for_stop_reply to 0 temporarily. */
7388 rs->waiting_for_stop_reply = 0;
3a29589a
DJ
7389 remote_fileio_request (buf, rs->ctrlc_pending_p);
7390 rs->ctrlc_pending_p = 0;
e42e5352
YQ
7391 /* GDB handled the File-I/O request, and the target is running
7392 again. Keep waiting for events. */
7393 rs->waiting_for_stop_reply = 1;
74531fed 7394 break;
f2faf941 7395 case 'N': case 'T': case 'S': case 'X': case 'W':
74531fed 7396 {
29090fb6
LM
7397 struct stop_reply *stop_reply;
7398
7399 /* There is a stop reply to handle. */
7400 rs->waiting_for_stop_reply = 0;
7401
7402 stop_reply
722247f1
YQ
7403 = (struct stop_reply *) remote_notif_parse (&notif_client_stop,
7404 rs->buf);
74531fed 7405
74531fed 7406 event_ptid = process_stop_reply (stop_reply, status);
c8e38a49
PA
7407 break;
7408 }
7409 case 'O': /* Console output. */
7410 remote_console_output (buf + 1);
c8e38a49
PA
7411 break;
7412 case '\0':
b73be471 7413 if (rs->last_sent_signal != GDB_SIGNAL_0)
c8e38a49
PA
7414 {
7415 /* Zero length reply means that we tried 'S' or 'C' and the
7416 remote system doesn't support it. */
7417 target_terminal_ours_for_output ();
7418 printf_filtered
7419 ("Can't send signals to this remote system. %s not sent.\n",
b73be471
TT
7420 gdb_signal_to_name (rs->last_sent_signal));
7421 rs->last_sent_signal = GDB_SIGNAL_0;
c8e38a49
PA
7422 target_terminal_inferior ();
7423
f5c4fcd9
TT
7424 strcpy (buf, rs->last_sent_step ? "s" : "c");
7425 putpkt (buf);
c8e38a49 7426 break;
43ff13b4 7427 }
c8e38a49
PA
7428 /* else fallthrough */
7429 default:
7430 warning (_("Invalid remote reply: %s"), buf);
c8e38a49 7431 break;
43ff13b4 7432 }
c8e38a49 7433
f2faf941
PA
7434 if (status->kind == TARGET_WAITKIND_NO_RESUMED)
7435 return minus_one_ptid;
7436 else if (status->kind == TARGET_WAITKIND_IGNORE)
47608cb1
PA
7437 {
7438 /* Nothing interesting happened. If we're doing a non-blocking
7439 poll, we're done. Otherwise, go back to waiting. */
7440 if (options & TARGET_WNOHANG)
7441 return minus_one_ptid;
7442 else
7443 goto again;
7444 }
74531fed
PA
7445 else if (status->kind != TARGET_WAITKIND_EXITED
7446 && status->kind != TARGET_WAITKIND_SIGNALLED)
82f73884
PA
7447 {
7448 if (!ptid_equal (event_ptid, null_ptid))
47f8a51d 7449 record_currthread (rs, event_ptid);
82f73884
PA
7450 else
7451 event_ptid = inferior_ptid;
43ff13b4 7452 }
74531fed
PA
7453 else
7454 /* A process exit. Invalidate our notion of current thread. */
47f8a51d 7455 record_currthread (rs, minus_one_ptid);
79d7f229 7456
82f73884 7457 return event_ptid;
43ff13b4
JM
7458}
7459
74531fed
PA
7460/* Wait until the remote machine stops, then return, storing status in
7461 STATUS just as `wait' would. */
7462
c8e38a49 7463static ptid_t
117de6a9 7464remote_wait (struct target_ops *ops,
47608cb1 7465 ptid_t ptid, struct target_waitstatus *status, int options)
c8e38a49
PA
7466{
7467 ptid_t event_ptid;
7468
6efcd9a8 7469 if (target_is_non_stop_p ())
47608cb1 7470 event_ptid = remote_wait_ns (ptid, status, options);
74531fed 7471 else
47608cb1 7472 event_ptid = remote_wait_as (ptid, status, options);
c8e38a49 7473
d9d41e78 7474 if (target_is_async_p ())
c8e38a49 7475 {
74531fed
PA
7476 /* If there are are events left in the queue tell the event loop
7477 to return here. */
722247f1 7478 if (!QUEUE_is_empty (stop_reply_p, stop_reply_queue))
74531fed 7479 mark_async_event_handler (remote_async_inferior_event_token);
c8e38a49 7480 }
c8e38a49
PA
7481
7482 return event_ptid;
7483}
7484
74ca34ce 7485/* Fetch a single register using a 'p' packet. */
c906108c 7486
b96ec7ac 7487static int
56be3814 7488fetch_register_using_p (struct regcache *regcache, struct packet_reg *reg)
b96ec7ac 7489{
9890e433 7490 struct gdbarch *gdbarch = get_regcache_arch (regcache);
b96ec7ac 7491 struct remote_state *rs = get_remote_state ();
2e9f7625 7492 char *buf, *p;
9890e433 7493 gdb_byte *regp = (gdb_byte *) alloca (register_size (gdbarch, reg->regnum));
b96ec7ac
AC
7494 int i;
7495
4082afcc 7496 if (packet_support (PACKET_p) == PACKET_DISABLE)
74ca34ce
DJ
7497 return 0;
7498
7499 if (reg->pnum == -1)
7500 return 0;
7501
2e9f7625 7502 p = rs->buf;
fcad0fa4 7503 *p++ = 'p';
74ca34ce 7504 p += hexnumstr (p, reg->pnum);
fcad0fa4 7505 *p++ = '\0';
1f4437a4
MS
7506 putpkt (rs->buf);
7507 getpkt (&rs->buf, &rs->buf_size, 0);
3f9a994c 7508
2e9f7625
DJ
7509 buf = rs->buf;
7510
74ca34ce
DJ
7511 switch (packet_ok (buf, &remote_protocol_packets[PACKET_p]))
7512 {
7513 case PACKET_OK:
7514 break;
7515 case PACKET_UNKNOWN:
7516 return 0;
7517 case PACKET_ERROR:
27a9c0bf
MS
7518 error (_("Could not fetch register \"%s\"; remote failure reply '%s'"),
7519 gdbarch_register_name (get_regcache_arch (regcache),
7520 reg->regnum),
7521 buf);
74ca34ce 7522 }
3f9a994c
JB
7523
7524 /* If this register is unfetchable, tell the regcache. */
7525 if (buf[0] == 'x')
8480adf2 7526 {
56be3814 7527 regcache_raw_supply (regcache, reg->regnum, NULL);
8480adf2 7528 return 1;
b96ec7ac 7529 }
b96ec7ac 7530
3f9a994c
JB
7531 /* Otherwise, parse and supply the value. */
7532 p = buf;
7533 i = 0;
7534 while (p[0] != 0)
7535 {
7536 if (p[1] == 0)
74ca34ce 7537 error (_("fetch_register_using_p: early buf termination"));
3f9a994c
JB
7538
7539 regp[i++] = fromhex (p[0]) * 16 + fromhex (p[1]);
7540 p += 2;
7541 }
56be3814 7542 regcache_raw_supply (regcache, reg->regnum, regp);
3f9a994c 7543 return 1;
b96ec7ac
AC
7544}
7545
74ca34ce
DJ
7546/* Fetch the registers included in the target's 'g' packet. */
7547
29709017
DJ
7548static int
7549send_g_packet (void)
c906108c 7550{
d01949b6 7551 struct remote_state *rs = get_remote_state ();
cea39f65 7552 int buf_len;
c906108c 7553
bba74b36 7554 xsnprintf (rs->buf, get_remote_packet_size (), "g");
74ca34ce 7555 remote_send (&rs->buf, &rs->buf_size);
c906108c 7556
29709017
DJ
7557 /* We can get out of synch in various cases. If the first character
7558 in the buffer is not a hex character, assume that has happened
7559 and try to fetch another packet to read. */
7560 while ((rs->buf[0] < '0' || rs->buf[0] > '9')
7561 && (rs->buf[0] < 'A' || rs->buf[0] > 'F')
7562 && (rs->buf[0] < 'a' || rs->buf[0] > 'f')
7563 && rs->buf[0] != 'x') /* New: unavailable register value. */
7564 {
7565 if (remote_debug)
7566 fprintf_unfiltered (gdb_stdlog,
7567 "Bad register packet; fetching a new packet\n");
7568 getpkt (&rs->buf, &rs->buf_size, 0);
7569 }
7570
74ca34ce
DJ
7571 buf_len = strlen (rs->buf);
7572
7573 /* Sanity check the received packet. */
7574 if (buf_len % 2 != 0)
7575 error (_("Remote 'g' packet reply is of odd length: %s"), rs->buf);
29709017
DJ
7576
7577 return buf_len / 2;
7578}
7579
7580static void
56be3814 7581process_g_packet (struct regcache *regcache)
29709017 7582{
4a22f64d 7583 struct gdbarch *gdbarch = get_regcache_arch (regcache);
29709017
DJ
7584 struct remote_state *rs = get_remote_state ();
7585 struct remote_arch_state *rsa = get_remote_arch_state ();
7586 int i, buf_len;
7587 char *p;
7588 char *regs;
7589
7590 buf_len = strlen (rs->buf);
7591
7592 /* Further sanity checks, with knowledge of the architecture. */
74ca34ce 7593 if (buf_len > 2 * rsa->sizeof_g_packet)
fc809827
SM
7594 error (_("Remote 'g' packet reply is too long (expected %ld bytes, got %d "
7595 "bytes): %s"), rsa->sizeof_g_packet, buf_len / 2, rs->buf);
74ca34ce
DJ
7596
7597 /* Save the size of the packet sent to us by the target. It is used
7598 as a heuristic when determining the max size of packets that the
7599 target can safely receive. */
7600 if (rsa->actual_register_packet_size == 0)
7601 rsa->actual_register_packet_size = buf_len;
7602
7603 /* If this is smaller than we guessed the 'g' packet would be,
7604 update our records. A 'g' reply that doesn't include a register's
7605 value implies either that the register is not available, or that
7606 the 'p' packet must be used. */
7607 if (buf_len < 2 * rsa->sizeof_g_packet)
b323314b 7608 {
9dc193c3 7609 long sizeof_g_packet = buf_len / 2;
74ca34ce 7610
4a22f64d 7611 for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
b96ec7ac 7612 {
9dc193c3
LF
7613 long offset = rsa->regs[i].offset;
7614 long reg_size = register_size (gdbarch, i);
7615
74ca34ce
DJ
7616 if (rsa->regs[i].pnum == -1)
7617 continue;
7618
9dc193c3 7619 if (offset >= sizeof_g_packet)
74ca34ce 7620 rsa->regs[i].in_g_packet = 0;
9dc193c3
LF
7621 else if (offset + reg_size > sizeof_g_packet)
7622 error (_("Truncated register %d in remote 'g' packet"), i);
b96ec7ac 7623 else
74ca34ce 7624 rsa->regs[i].in_g_packet = 1;
b96ec7ac 7625 }
9dc193c3
LF
7626
7627 /* Looks valid enough, we can assume this is the correct length
7628 for a 'g' packet. It's important not to adjust
7629 rsa->sizeof_g_packet if we have truncated registers otherwise
7630 this "if" won't be run the next time the method is called
7631 with a packet of the same size and one of the internal errors
7632 below will trigger instead. */
7633 rsa->sizeof_g_packet = sizeof_g_packet;
74ca34ce 7634 }
b323314b 7635
224c3ddb 7636 regs = (char *) alloca (rsa->sizeof_g_packet);
c906108c
SS
7637
7638 /* Unimplemented registers read as all bits zero. */
ea9c271d 7639 memset (regs, 0, rsa->sizeof_g_packet);
c906108c 7640
c906108c
SS
7641 /* Reply describes registers byte by byte, each byte encoded as two
7642 hex characters. Suck them all up, then supply them to the
7643 register cacheing/storage mechanism. */
7644
74ca34ce 7645 p = rs->buf;
ea9c271d 7646 for (i = 0; i < rsa->sizeof_g_packet; i++)
c906108c 7647 {
74ca34ce
DJ
7648 if (p[0] == 0 || p[1] == 0)
7649 /* This shouldn't happen - we adjusted sizeof_g_packet above. */
7650 internal_error (__FILE__, __LINE__,
9b20d036 7651 _("unexpected end of 'g' packet reply"));
74ca34ce 7652
c906108c 7653 if (p[0] == 'x' && p[1] == 'x')
c5aa993b 7654 regs[i] = 0; /* 'x' */
c906108c
SS
7655 else
7656 regs[i] = fromhex (p[0]) * 16 + fromhex (p[1]);
7657 p += 2;
7658 }
7659
a744cf53
MS
7660 for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
7661 {
7662 struct packet_reg *r = &rsa->regs[i];
9dc193c3 7663 long reg_size = register_size (gdbarch, i);
a744cf53
MS
7664
7665 if (r->in_g_packet)
7666 {
9dc193c3 7667 if ((r->offset + reg_size) * 2 > strlen (rs->buf))
a744cf53
MS
7668 /* This shouldn't happen - we adjusted in_g_packet above. */
7669 internal_error (__FILE__, __LINE__,
9b20d036 7670 _("unexpected end of 'g' packet reply"));
a744cf53
MS
7671 else if (rs->buf[r->offset * 2] == 'x')
7672 {
7673 gdb_assert (r->offset * 2 < strlen (rs->buf));
7674 /* The register isn't available, mark it as such (at
7675 the same time setting the value to zero). */
7676 regcache_raw_supply (regcache, r->regnum, NULL);
7677 }
7678 else
7679 regcache_raw_supply (regcache, r->regnum,
7680 regs + r->offset);
7681 }
7682 }
c906108c
SS
7683}
7684
29709017 7685static void
56be3814 7686fetch_registers_using_g (struct regcache *regcache)
29709017
DJ
7687{
7688 send_g_packet ();
56be3814 7689 process_g_packet (regcache);
29709017
DJ
7690}
7691
e6e4e701
PA
7692/* Make the remote selected traceframe match GDB's selected
7693 traceframe. */
7694
7695static void
7696set_remote_traceframe (void)
7697{
7698 int newnum;
262e1174 7699 struct remote_state *rs = get_remote_state ();
e6e4e701 7700
262e1174 7701 if (rs->remote_traceframe_number == get_traceframe_number ())
e6e4e701
PA
7702 return;
7703
7704 /* Avoid recursion, remote_trace_find calls us again. */
262e1174 7705 rs->remote_traceframe_number = get_traceframe_number ();
e6e4e701
PA
7706
7707 newnum = target_trace_find (tfind_number,
7708 get_traceframe_number (), 0, 0, NULL);
7709
7710 /* Should not happen. If it does, all bets are off. */
7711 if (newnum != get_traceframe_number ())
7712 warning (_("could not set remote traceframe"));
7713}
7714
74ca34ce 7715static void
28439f5e
PA
7716remote_fetch_registers (struct target_ops *ops,
7717 struct regcache *regcache, int regnum)
74ca34ce 7718{
74ca34ce
DJ
7719 struct remote_arch_state *rsa = get_remote_arch_state ();
7720 int i;
7721
e6e4e701 7722 set_remote_traceframe ();
bcc0c096 7723 set_general_thread (regcache_get_ptid (regcache));
74ca34ce
DJ
7724
7725 if (regnum >= 0)
7726 {
7727 struct packet_reg *reg = packet_reg_from_regnum (rsa, regnum);
a744cf53 7728
74ca34ce
DJ
7729 gdb_assert (reg != NULL);
7730
7731 /* If this register might be in the 'g' packet, try that first -
7732 we are likely to read more than one register. If this is the
7733 first 'g' packet, we might be overly optimistic about its
7734 contents, so fall back to 'p'. */
7735 if (reg->in_g_packet)
7736 {
56be3814 7737 fetch_registers_using_g (regcache);
74ca34ce
DJ
7738 if (reg->in_g_packet)
7739 return;
7740 }
7741
56be3814 7742 if (fetch_register_using_p (regcache, reg))
74ca34ce
DJ
7743 return;
7744
7745 /* This register is not available. */
56be3814 7746 regcache_raw_supply (regcache, reg->regnum, NULL);
74ca34ce
DJ
7747
7748 return;
7749 }
7750
56be3814 7751 fetch_registers_using_g (regcache);
74ca34ce 7752
4a22f64d 7753 for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++)
74ca34ce 7754 if (!rsa->regs[i].in_g_packet)
56be3814 7755 if (!fetch_register_using_p (regcache, &rsa->regs[i]))
74ca34ce
DJ
7756 {
7757 /* This register is not available. */
56be3814 7758 regcache_raw_supply (regcache, i, NULL);
74ca34ce
DJ
7759 }
7760}
7761
c906108c
SS
7762/* Prepare to store registers. Since we may send them all (using a
7763 'G' request), we have to read out the ones we don't want to change
7764 first. */
7765
c5aa993b 7766static void
f32dbf8c 7767remote_prepare_to_store (struct target_ops *self, struct regcache *regcache)
c906108c 7768{
ea9c271d 7769 struct remote_arch_state *rsa = get_remote_arch_state ();
cf0e1e0d 7770 int i;
cf0e1e0d 7771
c906108c 7772 /* Make sure the entire registers array is valid. */
4082afcc 7773 switch (packet_support (PACKET_P))
5a2468f5
JM
7774 {
7775 case PACKET_DISABLE:
7776 case PACKET_SUPPORT_UNKNOWN:
cf0e1e0d 7777 /* Make sure all the necessary registers are cached. */
4a22f64d 7778 for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++)
ea9c271d 7779 if (rsa->regs[i].in_g_packet)
8e368124 7780 regcache_raw_update (regcache, rsa->regs[i].regnum);
5a2468f5
JM
7781 break;
7782 case PACKET_ENABLE:
7783 break;
7784 }
7785}
7786
ad10f812 7787/* Helper: Attempt to store REGNUM using the P packet. Return fail IFF
23860348 7788 packet was not recognized. */
5a2468f5
JM
7789
7790static int
1f4437a4
MS
7791store_register_using_P (const struct regcache *regcache,
7792 struct packet_reg *reg)
5a2468f5 7793{
4a22f64d 7794 struct gdbarch *gdbarch = get_regcache_arch (regcache);
d01949b6 7795 struct remote_state *rs = get_remote_state ();
5a2468f5 7796 /* Try storing a single register. */
6d820c5c 7797 char *buf = rs->buf;
9890e433 7798 gdb_byte *regp = (gdb_byte *) alloca (register_size (gdbarch, reg->regnum));
5a2468f5 7799 char *p;
5a2468f5 7800
4082afcc 7801 if (packet_support (PACKET_P) == PACKET_DISABLE)
74ca34ce
DJ
7802 return 0;
7803
7804 if (reg->pnum == -1)
7805 return 0;
7806
ea9c271d 7807 xsnprintf (buf, get_remote_packet_size (), "P%s=", phex_nz (reg->pnum, 0));
5a2468f5 7808 p = buf + strlen (buf);
56be3814 7809 regcache_raw_collect (regcache, reg->regnum, regp);
4a22f64d 7810 bin2hex (regp, p, register_size (gdbarch, reg->regnum));
1f4437a4
MS
7811 putpkt (rs->buf);
7812 getpkt (&rs->buf, &rs->buf_size, 0);
5a2468f5 7813
74ca34ce
DJ
7814 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_P]))
7815 {
7816 case PACKET_OK:
7817 return 1;
7818 case PACKET_ERROR:
27a9c0bf
MS
7819 error (_("Could not write register \"%s\"; remote failure reply '%s'"),
7820 gdbarch_register_name (gdbarch, reg->regnum), rs->buf);
74ca34ce
DJ
7821 case PACKET_UNKNOWN:
7822 return 0;
7823 default:
7824 internal_error (__FILE__, __LINE__, _("Bad result from packet_ok"));
7825 }
c906108c
SS
7826}
7827
23860348
MS
7828/* Store register REGNUM, or all registers if REGNUM == -1, from the
7829 contents of the register cache buffer. FIXME: ignores errors. */
c906108c
SS
7830
7831static void
56be3814 7832store_registers_using_G (const struct regcache *regcache)
c906108c 7833{
d01949b6 7834 struct remote_state *rs = get_remote_state ();
ea9c271d 7835 struct remote_arch_state *rsa = get_remote_arch_state ();
cfd77fa1 7836 gdb_byte *regs;
c906108c
SS
7837 char *p;
7838
193cb69f
AC
7839 /* Extract all the registers in the regcache copying them into a
7840 local buffer. */
7841 {
b323314b 7842 int i;
a744cf53 7843
224c3ddb 7844 regs = (gdb_byte *) alloca (rsa->sizeof_g_packet);
ea9c271d 7845 memset (regs, 0, rsa->sizeof_g_packet);
4a22f64d 7846 for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++)
193cb69f 7847 {
ea9c271d 7848 struct packet_reg *r = &rsa->regs[i];
a744cf53 7849
b323314b 7850 if (r->in_g_packet)
56be3814 7851 regcache_raw_collect (regcache, r->regnum, regs + r->offset);
193cb69f
AC
7852 }
7853 }
c906108c
SS
7854
7855 /* Command describes registers byte by byte,
7856 each byte encoded as two hex characters. */
6d820c5c 7857 p = rs->buf;
193cb69f 7858 *p++ = 'G';
74ca34ce 7859 bin2hex (regs, p, rsa->sizeof_g_packet);
1f4437a4
MS
7860 putpkt (rs->buf);
7861 getpkt (&rs->buf, &rs->buf_size, 0);
7862 if (packet_check_result (rs->buf) == PACKET_ERROR)
27a9c0bf
MS
7863 error (_("Could not write registers; remote failure reply '%s'"),
7864 rs->buf);
c906108c 7865}
74ca34ce
DJ
7866
7867/* Store register REGNUM, or all registers if REGNUM == -1, from the contents
7868 of the register cache buffer. FIXME: ignores errors. */
7869
7870static void
28439f5e
PA
7871remote_store_registers (struct target_ops *ops,
7872 struct regcache *regcache, int regnum)
74ca34ce 7873{
74ca34ce
DJ
7874 struct remote_arch_state *rsa = get_remote_arch_state ();
7875 int i;
7876
e6e4e701 7877 set_remote_traceframe ();
bcc0c096 7878 set_general_thread (regcache_get_ptid (regcache));
74ca34ce
DJ
7879
7880 if (regnum >= 0)
7881 {
7882 struct packet_reg *reg = packet_reg_from_regnum (rsa, regnum);
a744cf53 7883
74ca34ce
DJ
7884 gdb_assert (reg != NULL);
7885
7886 /* Always prefer to store registers using the 'P' packet if
7887 possible; we often change only a small number of registers.
7888 Sometimes we change a larger number; we'd need help from a
7889 higher layer to know to use 'G'. */
56be3814 7890 if (store_register_using_P (regcache, reg))
74ca34ce
DJ
7891 return;
7892
7893 /* For now, don't complain if we have no way to write the
7894 register. GDB loses track of unavailable registers too
7895 easily. Some day, this may be an error. We don't have
0df8b418 7896 any way to read the register, either... */
74ca34ce
DJ
7897 if (!reg->in_g_packet)
7898 return;
7899
56be3814 7900 store_registers_using_G (regcache);
74ca34ce
DJ
7901 return;
7902 }
7903
56be3814 7904 store_registers_using_G (regcache);
74ca34ce 7905
4a22f64d 7906 for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++)
74ca34ce 7907 if (!rsa->regs[i].in_g_packet)
56be3814 7908 if (!store_register_using_P (regcache, &rsa->regs[i]))
74ca34ce
DJ
7909 /* See above for why we do not issue an error here. */
7910 continue;
7911}
c906108c
SS
7912\f
7913
7914/* Return the number of hex digits in num. */
7915
7916static int
fba45db2 7917hexnumlen (ULONGEST num)
c906108c
SS
7918{
7919 int i;
7920
7921 for (i = 0; num != 0; i++)
7922 num >>= 4;
7923
325fac50 7924 return std::max (i, 1);
c906108c
SS
7925}
7926
2df3850c 7927/* Set BUF to the minimum number of hex digits representing NUM. */
c906108c
SS
7928
7929static int
fba45db2 7930hexnumstr (char *buf, ULONGEST num)
c906108c 7931{
c906108c 7932 int len = hexnumlen (num);
a744cf53 7933
2df3850c
JM
7934 return hexnumnstr (buf, num, len);
7935}
7936
c906108c 7937
2df3850c 7938/* Set BUF to the hex digits representing NUM, padded to WIDTH characters. */
c906108c 7939
2df3850c 7940static int
fba45db2 7941hexnumnstr (char *buf, ULONGEST num, int width)
2df3850c
JM
7942{
7943 int i;
7944
7945 buf[width] = '\0';
7946
7947 for (i = width - 1; i >= 0; i--)
c906108c 7948 {
c5aa993b 7949 buf[i] = "0123456789abcdef"[(num & 0xf)];
c906108c
SS
7950 num >>= 4;
7951 }
7952
2df3850c 7953 return width;
c906108c
SS
7954}
7955
23860348 7956/* Mask all but the least significant REMOTE_ADDRESS_SIZE bits. */
c906108c
SS
7957
7958static CORE_ADDR
fba45db2 7959remote_address_masked (CORE_ADDR addr)
c906108c 7960{
883b9c6c 7961 unsigned int address_size = remote_address_size;
a744cf53 7962
911c95a5
UW
7963 /* If "remoteaddresssize" was not set, default to target address size. */
7964 if (!address_size)
f5656ead 7965 address_size = gdbarch_addr_bit (target_gdbarch ());
911c95a5
UW
7966
7967 if (address_size > 0
7968 && address_size < (sizeof (ULONGEST) * 8))
c906108c
SS
7969 {
7970 /* Only create a mask when that mask can safely be constructed
23860348 7971 in a ULONGEST variable. */
c906108c 7972 ULONGEST mask = 1;
a744cf53 7973
911c95a5 7974 mask = (mask << address_size) - 1;
c906108c
SS
7975 addr &= mask;
7976 }
7977 return addr;
7978}
7979
7980/* Determine whether the remote target supports binary downloading.
7981 This is accomplished by sending a no-op memory write of zero length
7982 to the target at the specified address. It does not suffice to send
23860348
MS
7983 the whole packet, since many stubs strip the eighth bit and
7984 subsequently compute a wrong checksum, which causes real havoc with
7985 remote_write_bytes.
7a292a7a 7986
96baa820 7987 NOTE: This can still lose if the serial line is not eight-bit
0df8b418 7988 clean. In cases like this, the user should clear "remote
23860348 7989 X-packet". */
96baa820 7990
c906108c 7991static void
fba45db2 7992check_binary_download (CORE_ADDR addr)
c906108c 7993{
d01949b6 7994 struct remote_state *rs = get_remote_state ();
24b06219 7995
4082afcc 7996 switch (packet_support (PACKET_X))
c906108c 7997 {
96baa820
JM
7998 case PACKET_DISABLE:
7999 break;
8000 case PACKET_ENABLE:
8001 break;
8002 case PACKET_SUPPORT_UNKNOWN:
8003 {
96baa820 8004 char *p;
802188a7 8005
2e9f7625 8006 p = rs->buf;
96baa820
JM
8007 *p++ = 'X';
8008 p += hexnumstr (p, (ULONGEST) addr);
8009 *p++ = ',';
8010 p += hexnumstr (p, (ULONGEST) 0);
8011 *p++ = ':';
8012 *p = '\0';
802188a7 8013
2e9f7625 8014 putpkt_binary (rs->buf, (int) (p - rs->buf));
6d820c5c 8015 getpkt (&rs->buf, &rs->buf_size, 0);
c906108c 8016
2e9f7625 8017 if (rs->buf[0] == '\0')
96baa820
JM
8018 {
8019 if (remote_debug)
8020 fprintf_unfiltered (gdb_stdlog,
3e43a32a
MS
8021 "binary downloading NOT "
8022 "supported by target\n");
444abaca 8023 remote_protocol_packets[PACKET_X].support = PACKET_DISABLE;
96baa820
JM
8024 }
8025 else
8026 {
8027 if (remote_debug)
8028 fprintf_unfiltered (gdb_stdlog,
64b9b334 8029 "binary downloading supported by target\n");
444abaca 8030 remote_protocol_packets[PACKET_X].support = PACKET_ENABLE;
96baa820
JM
8031 }
8032 break;
8033 }
c906108c
SS
8034 }
8035}
8036
124e13d9
SM
8037/* Helper function to resize the payload in order to try to get a good
8038 alignment. We try to write an amount of data such that the next write will
8039 start on an address aligned on REMOTE_ALIGN_WRITES. */
8040
8041static int
8042align_for_efficient_write (int todo, CORE_ADDR memaddr)
8043{
8044 return ((memaddr + todo) & ~(REMOTE_ALIGN_WRITES - 1)) - memaddr;
8045}
8046
c906108c
SS
8047/* Write memory data directly to the remote machine.
8048 This does not inform the data cache; the data cache uses this.
a76d924d 8049 HEADER is the starting part of the packet.
c906108c
SS
8050 MEMADDR is the address in the remote memory space.
8051 MYADDR is the address of the buffer in our space.
124e13d9
SM
8052 LEN_UNITS is the number of addressable units to write.
8053 UNIT_SIZE is the length in bytes of an addressable unit.
a76d924d
DJ
8054 PACKET_FORMAT should be either 'X' or 'M', and indicates if we
8055 should send data as binary ('X'), or hex-encoded ('M').
8056
8057 The function creates packet of the form
8058 <HEADER><ADDRESS>,<LENGTH>:<DATA>
8059
124e13d9 8060 where encoding of <DATA> is terminated by PACKET_FORMAT.
a76d924d
DJ
8061
8062 If USE_LENGTH is 0, then the <LENGTH> field and the preceding comma
8063 are omitted.
8064
9b409511 8065 Return the transferred status, error or OK (an
124e13d9
SM
8066 'enum target_xfer_status' value). Save the number of addressable units
8067 transferred in *XFERED_LEN_UNITS. Only transfer a single packet.
8068
8069 On a platform with an addressable memory size of 2 bytes (UNIT_SIZE == 2), an
8070 exchange between gdb and the stub could look like (?? in place of the
8071 checksum):
8072
8073 -> $m1000,4#??
8074 <- aaaabbbbccccdddd
8075
8076 -> $M1000,3:eeeeffffeeee#??
8077 <- OK
8078
8079 -> $m1000,4#??
8080 <- eeeeffffeeeedddd */
c906108c 8081
9b409511 8082static enum target_xfer_status
a76d924d 8083remote_write_bytes_aux (const char *header, CORE_ADDR memaddr,
124e13d9
SM
8084 const gdb_byte *myaddr, ULONGEST len_units,
8085 int unit_size, ULONGEST *xfered_len_units,
8086 char packet_format, int use_length)
c906108c 8087{
6d820c5c 8088 struct remote_state *rs = get_remote_state ();
cfd77fa1 8089 char *p;
a76d924d
DJ
8090 char *plen = NULL;
8091 int plenlen = 0;
124e13d9
SM
8092 int todo_units;
8093 int units_written;
8094 int payload_capacity_bytes;
8095 int payload_length_bytes;
a76d924d
DJ
8096
8097 if (packet_format != 'X' && packet_format != 'M')
8098 internal_error (__FILE__, __LINE__,
9b20d036 8099 _("remote_write_bytes_aux: bad packet format"));
c906108c 8100
124e13d9 8101 if (len_units == 0)
9b409511 8102 return TARGET_XFER_EOF;
b2182ed2 8103
124e13d9 8104 payload_capacity_bytes = get_memory_write_packet_size ();
2bc416ba 8105
6d820c5c
DJ
8106 /* The packet buffer will be large enough for the payload;
8107 get_memory_packet_size ensures this. */
a76d924d 8108 rs->buf[0] = '\0';
c906108c 8109
a257b5bb 8110 /* Compute the size of the actual payload by subtracting out the
0df8b418
MS
8111 packet header and footer overhead: "$M<memaddr>,<len>:...#nn". */
8112
124e13d9 8113 payload_capacity_bytes -= strlen ("$,:#NN");
a76d924d 8114 if (!use_length)
0df8b418 8115 /* The comma won't be used. */
124e13d9
SM
8116 payload_capacity_bytes += 1;
8117 payload_capacity_bytes -= strlen (header);
8118 payload_capacity_bytes -= hexnumlen (memaddr);
c906108c 8119
a76d924d 8120 /* Construct the packet excluding the data: "<header><memaddr>,<len>:". */
917317f4 8121
a76d924d
DJ
8122 strcat (rs->buf, header);
8123 p = rs->buf + strlen (header);
8124
8125 /* Compute a best guess of the number of bytes actually transfered. */
8126 if (packet_format == 'X')
c906108c 8127 {
23860348 8128 /* Best guess at number of bytes that will fit. */
325fac50
PA
8129 todo_units = std::min (len_units,
8130 (ULONGEST) payload_capacity_bytes / unit_size);
a76d924d 8131 if (use_length)
124e13d9 8132 payload_capacity_bytes -= hexnumlen (todo_units);
325fac50 8133 todo_units = std::min (todo_units, payload_capacity_bytes / unit_size);
a76d924d
DJ
8134 }
8135 else
8136 {
124e13d9 8137 /* Number of bytes that will fit. */
325fac50
PA
8138 todo_units
8139 = std::min (len_units,
8140 (ULONGEST) (payload_capacity_bytes / unit_size) / 2);
a76d924d 8141 if (use_length)
124e13d9 8142 payload_capacity_bytes -= hexnumlen (todo_units);
325fac50
PA
8143 todo_units = std::min (todo_units,
8144 (payload_capacity_bytes / unit_size) / 2);
917317f4 8145 }
a76d924d 8146
124e13d9 8147 if (todo_units <= 0)
3de11b2e 8148 internal_error (__FILE__, __LINE__,
405f8e94 8149 _("minimum packet size too small to write data"));
802188a7 8150
6765f3e5
DJ
8151 /* If we already need another packet, then try to align the end
8152 of this packet to a useful boundary. */
124e13d9
SM
8153 if (todo_units > 2 * REMOTE_ALIGN_WRITES && todo_units < len_units)
8154 todo_units = align_for_efficient_write (todo_units, memaddr);
6765f3e5 8155
a257b5bb 8156 /* Append "<memaddr>". */
917317f4
JM
8157 memaddr = remote_address_masked (memaddr);
8158 p += hexnumstr (p, (ULONGEST) memaddr);
a257b5bb 8159
a76d924d
DJ
8160 if (use_length)
8161 {
8162 /* Append ",". */
8163 *p++ = ',';
802188a7 8164
124e13d9
SM
8165 /* Append the length and retain its location and size. It may need to be
8166 adjusted once the packet body has been created. */
a76d924d 8167 plen = p;
124e13d9 8168 plenlen = hexnumstr (p, (ULONGEST) todo_units);
a76d924d
DJ
8169 p += plenlen;
8170 }
a257b5bb
AC
8171
8172 /* Append ":". */
917317f4
JM
8173 *p++ = ':';
8174 *p = '\0';
802188a7 8175
a257b5bb 8176 /* Append the packet body. */
a76d924d 8177 if (packet_format == 'X')
917317f4 8178 {
917317f4
JM
8179 /* Binary mode. Send target system values byte by byte, in
8180 increasing byte addresses. Only escape certain critical
8181 characters. */
124e13d9
SM
8182 payload_length_bytes =
8183 remote_escape_output (myaddr, todo_units, unit_size, (gdb_byte *) p,
8184 &units_written, payload_capacity_bytes);
6765f3e5 8185
124e13d9 8186 /* If not all TODO units fit, then we'll need another packet. Make
9b7194bc
DJ
8187 a second try to keep the end of the packet aligned. Don't do
8188 this if the packet is tiny. */
124e13d9 8189 if (units_written < todo_units && units_written > 2 * REMOTE_ALIGN_WRITES)
6765f3e5 8190 {
124e13d9
SM
8191 int new_todo_units;
8192
8193 new_todo_units = align_for_efficient_write (units_written, memaddr);
8194
8195 if (new_todo_units != units_written)
8196 payload_length_bytes =
8197 remote_escape_output (myaddr, new_todo_units, unit_size,
8198 (gdb_byte *) p, &units_written,
8199 payload_capacity_bytes);
6765f3e5
DJ
8200 }
8201
124e13d9
SM
8202 p += payload_length_bytes;
8203 if (use_length && units_written < todo_units)
c906108c 8204 {
802188a7 8205 /* Escape chars have filled up the buffer prematurely,
124e13d9 8206 and we have actually sent fewer units than planned.
917317f4
JM
8207 Fix-up the length field of the packet. Use the same
8208 number of characters as before. */
124e13d9
SM
8209 plen += hexnumnstr (plen, (ULONGEST) units_written,
8210 plenlen);
917317f4 8211 *plen = ':'; /* overwrite \0 from hexnumnstr() */
c906108c 8212 }
a76d924d
DJ
8213 }
8214 else
8215 {
917317f4
JM
8216 /* Normal mode: Send target system values byte by byte, in
8217 increasing byte addresses. Each byte is encoded as a two hex
8218 value. */
124e13d9
SM
8219 p += 2 * bin2hex (myaddr, p, todo_units * unit_size);
8220 units_written = todo_units;
c906108c 8221 }
802188a7 8222
2e9f7625 8223 putpkt_binary (rs->buf, (int) (p - rs->buf));
6d820c5c 8224 getpkt (&rs->buf, &rs->buf_size, 0);
802188a7 8225
2e9f7625 8226 if (rs->buf[0] == 'E')
00d84524 8227 return TARGET_XFER_E_IO;
802188a7 8228
124e13d9
SM
8229 /* Return UNITS_WRITTEN, not TODO_UNITS, in case escape chars caused us to
8230 send fewer units than we'd planned. */
8231 *xfered_len_units = (ULONGEST) units_written;
9b409511 8232 return TARGET_XFER_OK;
c906108c
SS
8233}
8234
a76d924d
DJ
8235/* Write memory data directly to the remote machine.
8236 This does not inform the data cache; the data cache uses this.
8237 MEMADDR is the address in the remote memory space.
8238 MYADDR is the address of the buffer in our space.
8239 LEN is the number of bytes.
8240
9b409511
YQ
8241 Return the transferred status, error or OK (an
8242 'enum target_xfer_status' value). Save the number of bytes
8243 transferred in *XFERED_LEN. Only transfer a single packet. */
a76d924d 8244
9b409511
YQ
8245static enum target_xfer_status
8246remote_write_bytes (CORE_ADDR memaddr, const gdb_byte *myaddr, ULONGEST len,
124e13d9 8247 int unit_size, ULONGEST *xfered_len)
a76d924d 8248{
a121b7c1 8249 const char *packet_format = NULL;
a76d924d
DJ
8250
8251 /* Check whether the target supports binary download. */
8252 check_binary_download (memaddr);
8253
4082afcc 8254 switch (packet_support (PACKET_X))
a76d924d
DJ
8255 {
8256 case PACKET_ENABLE:
8257 packet_format = "X";
8258 break;
8259 case PACKET_DISABLE:
8260 packet_format = "M";
8261 break;
8262 case PACKET_SUPPORT_UNKNOWN:
8263 internal_error (__FILE__, __LINE__,
8264 _("remote_write_bytes: bad internal state"));
8265 default:
8266 internal_error (__FILE__, __LINE__, _("bad switch"));
8267 }
8268
8269 return remote_write_bytes_aux (packet_format,
124e13d9 8270 memaddr, myaddr, len, unit_size, xfered_len,
9b409511 8271 packet_format[0], 1);
a76d924d
DJ
8272}
8273
9217e74e
YQ
8274/* Read memory data directly from the remote machine.
8275 This does not use the data cache; the data cache uses this.
8276 MEMADDR is the address in the remote memory space.
8277 MYADDR is the address of the buffer in our space.
124e13d9
SM
8278 LEN_UNITS is the number of addressable memory units to read..
8279 UNIT_SIZE is the length in bytes of an addressable unit.
9217e74e
YQ
8280
8281 Return the transferred status, error or OK (an
8282 'enum target_xfer_status' value). Save the number of bytes
124e13d9
SM
8283 transferred in *XFERED_LEN_UNITS.
8284
8285 See the comment of remote_write_bytes_aux for an example of
8286 memory read/write exchange between gdb and the stub. */
9217e74e
YQ
8287
8288static enum target_xfer_status
124e13d9
SM
8289remote_read_bytes_1 (CORE_ADDR memaddr, gdb_byte *myaddr, ULONGEST len_units,
8290 int unit_size, ULONGEST *xfered_len_units)
9217e74e
YQ
8291{
8292 struct remote_state *rs = get_remote_state ();
124e13d9 8293 int buf_size_bytes; /* Max size of packet output buffer. */
9217e74e 8294 char *p;
124e13d9
SM
8295 int todo_units;
8296 int decoded_bytes;
9217e74e 8297
124e13d9 8298 buf_size_bytes = get_memory_read_packet_size ();
9217e74e
YQ
8299 /* The packet buffer will be large enough for the payload;
8300 get_memory_packet_size ensures this. */
8301
124e13d9 8302 /* Number of units that will fit. */
325fac50
PA
8303 todo_units = std::min (len_units,
8304 (ULONGEST) (buf_size_bytes / unit_size) / 2);
9217e74e
YQ
8305
8306 /* Construct "m"<memaddr>","<len>". */
8307 memaddr = remote_address_masked (memaddr);
8308 p = rs->buf;
8309 *p++ = 'm';
8310 p += hexnumstr (p, (ULONGEST) memaddr);
8311 *p++ = ',';
124e13d9 8312 p += hexnumstr (p, (ULONGEST) todo_units);
9217e74e
YQ
8313 *p = '\0';
8314 putpkt (rs->buf);
8315 getpkt (&rs->buf, &rs->buf_size, 0);
8316 if (rs->buf[0] == 'E'
8317 && isxdigit (rs->buf[1]) && isxdigit (rs->buf[2])
8318 && rs->buf[3] == '\0')
8319 return TARGET_XFER_E_IO;
8320 /* Reply describes memory byte by byte, each byte encoded as two hex
8321 characters. */
8322 p = rs->buf;
124e13d9 8323 decoded_bytes = hex2bin (p, myaddr, todo_units * unit_size);
9217e74e 8324 /* Return what we have. Let higher layers handle partial reads. */
124e13d9 8325 *xfered_len_units = (ULONGEST) (decoded_bytes / unit_size);
9217e74e
YQ
8326 return TARGET_XFER_OK;
8327}
8328
b55fbac4
YQ
8329/* Using the set of read-only target sections of remote, read live
8330 read-only memory.
8acf9577
YQ
8331
8332 For interface/parameters/return description see target.h,
8333 to_xfer_partial. */
8334
8335static enum target_xfer_status
b55fbac4
YQ
8336remote_xfer_live_readonly_partial (struct target_ops *ops, gdb_byte *readbuf,
8337 ULONGEST memaddr, ULONGEST len,
124e13d9 8338 int unit_size, ULONGEST *xfered_len)
8acf9577
YQ
8339{
8340 struct target_section *secp;
8341 struct target_section_table *table;
8342
8343 secp = target_section_by_addr (ops, memaddr);
8344 if (secp != NULL
8345 && (bfd_get_section_flags (secp->the_bfd_section->owner,
8346 secp->the_bfd_section)
8347 & SEC_READONLY))
8348 {
8349 struct target_section *p;
8350 ULONGEST memend = memaddr + len;
8351
8352 table = target_get_section_table (ops);
8353
8354 for (p = table->sections; p < table->sections_end; p++)
8355 {
8356 if (memaddr >= p->addr)
8357 {
8358 if (memend <= p->endaddr)
8359 {
8360 /* Entire transfer is within this section. */
124e13d9 8361 return remote_read_bytes_1 (memaddr, readbuf, len, unit_size,
b55fbac4 8362 xfered_len);
8acf9577
YQ
8363 }
8364 else if (memaddr >= p->endaddr)
8365 {
8366 /* This section ends before the transfer starts. */
8367 continue;
8368 }
8369 else
8370 {
8371 /* This section overlaps the transfer. Just do half. */
8372 len = p->endaddr - memaddr;
124e13d9 8373 return remote_read_bytes_1 (memaddr, readbuf, len, unit_size,
b55fbac4 8374 xfered_len);
8acf9577
YQ
8375 }
8376 }
8377 }
8378 }
8379
8380 return TARGET_XFER_EOF;
8381}
8382
9217e74e
YQ
8383/* Similar to remote_read_bytes_1, but it reads from the remote stub
8384 first if the requested memory is unavailable in traceframe.
8385 Otherwise, fall back to remote_read_bytes_1. */
c906108c 8386
9b409511 8387static enum target_xfer_status
8acf9577 8388remote_read_bytes (struct target_ops *ops, CORE_ADDR memaddr,
124e13d9
SM
8389 gdb_byte *myaddr, ULONGEST len, int unit_size,
8390 ULONGEST *xfered_len)
c906108c 8391{
6b6aa828 8392 if (len == 0)
96c4f946 8393 return TARGET_XFER_EOF;
b2182ed2 8394
8acf9577
YQ
8395 if (get_traceframe_number () != -1)
8396 {
8397 VEC(mem_range_s) *available;
8398
8399 /* If we fail to get the set of available memory, then the
8400 target does not support querying traceframe info, and so we
8401 attempt reading from the traceframe anyway (assuming the
8402 target implements the old QTro packet then). */
8403 if (traceframe_available_memory (&available, memaddr, len))
8404 {
8405 struct cleanup *old_chain;
8406
8407 old_chain = make_cleanup (VEC_cleanup(mem_range_s), &available);
8408
8409 if (VEC_empty (mem_range_s, available)
8410 || VEC_index (mem_range_s, available, 0)->start != memaddr)
8411 {
8412 enum target_xfer_status res;
8413
8414 /* Don't read into the traceframe's available
8415 memory. */
8416 if (!VEC_empty (mem_range_s, available))
8417 {
8418 LONGEST oldlen = len;
8419
8420 len = VEC_index (mem_range_s, available, 0)->start - memaddr;
8421 gdb_assert (len <= oldlen);
8422 }
8423
8424 do_cleanups (old_chain);
8425
8426 /* This goes through the topmost target again. */
b55fbac4 8427 res = remote_xfer_live_readonly_partial (ops, myaddr, memaddr,
124e13d9 8428 len, unit_size, xfered_len);
8acf9577
YQ
8429 if (res == TARGET_XFER_OK)
8430 return TARGET_XFER_OK;
8431 else
8432 {
8433 /* No use trying further, we know some memory starting
8434 at MEMADDR isn't available. */
8435 *xfered_len = len;
8436 return TARGET_XFER_UNAVAILABLE;
8437 }
8438 }
8439
8440 /* Don't try to read more than how much is available, in
8441 case the target implements the deprecated QTro packet to
8442 cater for older GDBs (the target's knowledge of read-only
8443 sections may be outdated by now). */
8444 len = VEC_index (mem_range_s, available, 0)->length;
8445
8446 do_cleanups (old_chain);
8447 }
8448 }
8449
124e13d9 8450 return remote_read_bytes_1 (memaddr, myaddr, len, unit_size, xfered_len);
c906108c 8451}
74531fed 8452
c906108c 8453\f
c906108c 8454
a76d924d
DJ
8455/* Sends a packet with content determined by the printf format string
8456 FORMAT and the remaining arguments, then gets the reply. Returns
8457 whether the packet was a success, a failure, or unknown. */
8458
77b64a49
PA
8459static enum packet_result remote_send_printf (const char *format, ...)
8460 ATTRIBUTE_PRINTF (1, 2);
8461
2c0b251b 8462static enum packet_result
a76d924d
DJ
8463remote_send_printf (const char *format, ...)
8464{
8465 struct remote_state *rs = get_remote_state ();
8466 int max_size = get_remote_packet_size ();
a76d924d 8467 va_list ap;
a744cf53 8468
a76d924d
DJ
8469 va_start (ap, format);
8470
8471 rs->buf[0] = '\0';
8472 if (vsnprintf (rs->buf, max_size, format, ap) >= max_size)
9b20d036 8473 internal_error (__FILE__, __LINE__, _("Too long remote packet."));
a76d924d
DJ
8474
8475 if (putpkt (rs->buf) < 0)
8476 error (_("Communication problem with target."));
8477
8478 rs->buf[0] = '\0';
8479 getpkt (&rs->buf, &rs->buf_size, 0);
8480
8481 return packet_check_result (rs->buf);
8482}
8483
a76d924d
DJ
8484/* Flash writing can take quite some time. We'll set
8485 effectively infinite timeout for flash operations.
8486 In future, we'll need to decide on a better approach. */
8487static const int remote_flash_timeout = 1000;
8488
8489static void
8490remote_flash_erase (struct target_ops *ops,
8491 ULONGEST address, LONGEST length)
8492{
f5656ead 8493 int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
a76d924d 8494 enum packet_result ret;
2ec845e7
TT
8495 scoped_restore restore_timeout
8496 = make_scoped_restore (&remote_timeout, remote_flash_timeout);
a76d924d
DJ
8497
8498 ret = remote_send_printf ("vFlashErase:%s,%s",
5af949e3 8499 phex (address, addr_size),
a76d924d
DJ
8500 phex (length, 4));
8501 switch (ret)
8502 {
8503 case PACKET_UNKNOWN:
8504 error (_("Remote target does not support flash erase"));
8505 case PACKET_ERROR:
8506 error (_("Error erasing flash with vFlashErase packet"));
8507 default:
8508 break;
8509 }
a76d924d
DJ
8510}
8511
9b409511
YQ
8512static enum target_xfer_status
8513remote_flash_write (struct target_ops *ops, ULONGEST address,
8514 ULONGEST length, ULONGEST *xfered_len,
8515 const gdb_byte *data)
a76d924d 8516{
2ec845e7
TT
8517 scoped_restore restore_timeout
8518 = make_scoped_restore (&remote_timeout, remote_flash_timeout);
8519 return remote_write_bytes_aux ("vFlashWrite:", address, data, length, 1,
8520 xfered_len,'X', 0);
a76d924d
DJ
8521}
8522
8523static void
8524remote_flash_done (struct target_ops *ops)
8525{
a76d924d 8526 int ret;
a76d924d 8527
2ec845e7
TT
8528 scoped_restore restore_timeout
8529 = make_scoped_restore (&remote_timeout, remote_flash_timeout);
8530
a76d924d 8531 ret = remote_send_printf ("vFlashDone");
a76d924d
DJ
8532
8533 switch (ret)
8534 {
8535 case PACKET_UNKNOWN:
8536 error (_("Remote target does not support vFlashDone"));
8537 case PACKET_ERROR:
8538 error (_("Error finishing flash operation"));
8539 default:
8540 break;
8541 }
8542}
8543
c906108c 8544static void
fba45db2 8545remote_files_info (struct target_ops *ignore)
c906108c
SS
8546{
8547 puts_filtered ("Debugging a target over a serial line.\n");
8548}
8549\f
8550/* Stuff for dealing with the packets which are part of this protocol.
8551 See comment at top of file for details. */
8552
1927e618
PA
8553/* Close/unpush the remote target, and throw a TARGET_CLOSE_ERROR
8554 error to higher layers. Called when a serial error is detected.
8555 The exception message is STRING, followed by a colon and a blank,
d6cb50a2
JK
8556 the system error message for errno at function entry and final dot
8557 for output compatibility with throw_perror_with_name. */
1927e618
PA
8558
8559static void
8560unpush_and_perror (const char *string)
8561{
d6cb50a2 8562 int saved_errno = errno;
1927e618
PA
8563
8564 remote_unpush_target ();
d6cb50a2
JK
8565 throw_error (TARGET_CLOSE_ERROR, "%s: %s.", string,
8566 safe_strerror (saved_errno));
1927e618
PA
8567}
8568
048094ac
PA
8569/* Read a single character from the remote end. The current quit
8570 handler is overridden to avoid quitting in the middle of packet
8571 sequence, as that would break communication with the remote server.
8572 See remote_serial_quit_handler for more detail. */
c906108c
SS
8573
8574static int
fba45db2 8575readchar (int timeout)
c906108c
SS
8576{
8577 int ch;
5d93a237 8578 struct remote_state *rs = get_remote_state ();
048094ac 8579
2ec845e7
TT
8580 {
8581 scoped_restore restore_quit
8582 = make_scoped_restore (&quit_handler, remote_serial_quit_handler);
c906108c 8583
2ec845e7 8584 rs->got_ctrlc_during_io = 0;
c906108c 8585
2ec845e7 8586 ch = serial_readchar (rs->remote_desc, timeout);
048094ac 8587
2ec845e7
TT
8588 if (rs->got_ctrlc_during_io)
8589 set_quit_flag ();
8590 }
048094ac 8591
2acceee2 8592 if (ch >= 0)
0876f84a 8593 return ch;
2acceee2
JM
8594
8595 switch ((enum serial_rc) ch)
c906108c
SS
8596 {
8597 case SERIAL_EOF:
78a095c3 8598 remote_unpush_target ();
598d3636 8599 throw_error (TARGET_CLOSE_ERROR, _("Remote connection closed"));
2acceee2 8600 /* no return */
c906108c 8601 case SERIAL_ERROR:
1927e618
PA
8602 unpush_and_perror (_("Remote communication error. "
8603 "Target disconnected."));
2acceee2 8604 /* no return */
c906108c 8605 case SERIAL_TIMEOUT:
2acceee2 8606 break;
c906108c 8607 }
2acceee2 8608 return ch;
c906108c
SS
8609}
8610
c33e31fd 8611/* Wrapper for serial_write that closes the target and throws if
048094ac
PA
8612 writing fails. The current quit handler is overridden to avoid
8613 quitting in the middle of packet sequence, as that would break
8614 communication with the remote server. See
8615 remote_serial_quit_handler for more detail. */
c33e31fd
PA
8616
8617static void
8618remote_serial_write (const char *str, int len)
8619{
5d93a237 8620 struct remote_state *rs = get_remote_state ();
048094ac 8621
2ec845e7
TT
8622 scoped_restore restore_quit
8623 = make_scoped_restore (&quit_handler, remote_serial_quit_handler);
048094ac
PA
8624
8625 rs->got_ctrlc_during_io = 0;
5d93a237
TT
8626
8627 if (serial_write (rs->remote_desc, str, len))
c33e31fd 8628 {
1927e618
PA
8629 unpush_and_perror (_("Remote communication error. "
8630 "Target disconnected."));
c33e31fd 8631 }
048094ac
PA
8632
8633 if (rs->got_ctrlc_during_io)
8634 set_quit_flag ();
c33e31fd
PA
8635}
8636
6d820c5c
DJ
8637/* Send the command in *BUF to the remote machine, and read the reply
8638 into *BUF. Report an error if we get an error reply. Resize
8639 *BUF using xrealloc if necessary to hold the result, and update
8640 *SIZEOF_BUF. */
c906108c
SS
8641
8642static void
6d820c5c
DJ
8643remote_send (char **buf,
8644 long *sizeof_buf)
c906108c 8645{
6d820c5c 8646 putpkt (*buf);
c2d11a7d 8647 getpkt (buf, sizeof_buf, 0);
c906108c 8648
6d820c5c
DJ
8649 if ((*buf)[0] == 'E')
8650 error (_("Remote failure reply: %s"), *buf);
c906108c
SS
8651}
8652
b3ced9ba
PA
8653/* Return a string representing an escaped version of BUF, of len N.
8654 E.g. \n is converted to \\n, \t to \\t, etc. */
6e5abd65 8655
b3ced9ba 8656static std::string
6e5abd65
PA
8657escape_buffer (const char *buf, int n)
8658{
d7e74731 8659 string_file stb;
6e5abd65 8660
d7e74731
PA
8661 stb.putstrn (buf, n, '\\');
8662 return std::move (stb.string ());
6e5abd65
PA
8663}
8664
c906108c
SS
8665/* Display a null-terminated packet on stdout, for debugging, using C
8666 string notation. */
8667
8668static void
baa336ce 8669print_packet (const char *buf)
c906108c
SS
8670{
8671 puts_filtered ("\"");
43e526b9 8672 fputstr_filtered (buf, '"', gdb_stdout);
c906108c
SS
8673 puts_filtered ("\"");
8674}
8675
8676int
baa336ce 8677putpkt (const char *buf)
c906108c
SS
8678{
8679 return putpkt_binary (buf, strlen (buf));
8680}
8681
8682/* Send a packet to the remote machine, with error checking. The data
23860348 8683 of the packet is in BUF. The string in BUF can be at most
ea9c271d 8684 get_remote_packet_size () - 5 to account for the $, # and checksum,
23860348
MS
8685 and for a possible /0 if we are debugging (remote_debug) and want
8686 to print the sent packet as a string. */
c906108c
SS
8687
8688static int
baa336ce 8689putpkt_binary (const char *buf, int cnt)
c906108c 8690{
2d717e4f 8691 struct remote_state *rs = get_remote_state ();
c906108c
SS
8692 int i;
8693 unsigned char csum = 0;
224c3ddb 8694 char *buf2 = (char *) xmalloc (cnt + 6);
a5c0808e 8695 struct cleanup *old_chain = make_cleanup (xfree, buf2);
085dd6e6 8696
c906108c
SS
8697 int ch;
8698 int tcount = 0;
8699 char *p;
8700
e24a49d8
PA
8701 /* Catch cases like trying to read memory or listing threads while
8702 we're waiting for a stop reply. The remote server wouldn't be
8703 ready to handle this request, so we'd hang and timeout. We don't
8704 have to worry about this in synchronous mode, because in that
8705 case it's not possible to issue a command while the target is
74531fed
PA
8706 running. This is not a problem in non-stop mode, because in that
8707 case, the stub is always ready to process serial input. */
6efcd9a8
PA
8708 if (!target_is_non_stop_p ()
8709 && target_is_async_p ()
8710 && rs->waiting_for_stop_reply)
9597b22a
DE
8711 {
8712 error (_("Cannot execute this command while the target is running.\n"
8713 "Use the \"interrupt\" command to stop the target\n"
8714 "and then try again."));
8715 }
e24a49d8 8716
2d717e4f
DJ
8717 /* We're sending out a new packet. Make sure we don't look at a
8718 stale cached response. */
8719 rs->cached_wait_status = 0;
8720
c906108c
SS
8721 /* Copy the packet into buffer BUF2, encapsulating it
8722 and giving it a checksum. */
8723
c906108c
SS
8724 p = buf2;
8725 *p++ = '$';
8726
8727 for (i = 0; i < cnt; i++)
8728 {
8729 csum += buf[i];
8730 *p++ = buf[i];
8731 }
8732 *p++ = '#';
8733 *p++ = tohex ((csum >> 4) & 0xf);
8734 *p++ = tohex (csum & 0xf);
8735
8736 /* Send it over and over until we get a positive ack. */
8737
8738 while (1)
8739 {
8740 int started_error_output = 0;
8741
8742 if (remote_debug)
8743 {
8744 *p = '\0';
b3ced9ba 8745
6f8976bf
YQ
8746 int len = (int) (p - buf2);
8747
8748 std::string str
8749 = escape_buffer (buf2, std::min (len, REMOTE_DEBUG_MAX_CHAR));
8750
8751 fprintf_unfiltered (gdb_stdlog, "Sending packet: %s", str.c_str ());
8752
8753 if (str.length () > REMOTE_DEBUG_MAX_CHAR)
8754 {
8755 fprintf_unfiltered (gdb_stdlog, "[%zu bytes omitted]",
8756 str.length () - REMOTE_DEBUG_MAX_CHAR);
8757 }
8758
8759 fprintf_unfiltered (gdb_stdlog, "...");
b3ced9ba 8760
0f71a2f6 8761 gdb_flush (gdb_stdlog);
c906108c 8762 }
c33e31fd 8763 remote_serial_write (buf2, p - buf2);
c906108c 8764
a6f3e723
SL
8765 /* If this is a no acks version of the remote protocol, send the
8766 packet and move on. */
8767 if (rs->noack_mode)
8768 break;
8769
74531fed
PA
8770 /* Read until either a timeout occurs (-2) or '+' is read.
8771 Handle any notification that arrives in the mean time. */
c906108c
SS
8772 while (1)
8773 {
8774 ch = readchar (remote_timeout);
8775
c5aa993b 8776 if (remote_debug)
c906108c
SS
8777 {
8778 switch (ch)
8779 {
8780 case '+':
1216fa2c 8781 case '-':
c906108c
SS
8782 case SERIAL_TIMEOUT:
8783 case '$':
74531fed 8784 case '%':
c906108c
SS
8785 if (started_error_output)
8786 {
8787 putchar_unfiltered ('\n');
8788 started_error_output = 0;
8789 }
8790 }
8791 }
8792
8793 switch (ch)
8794 {
8795 case '+':
8796 if (remote_debug)
0f71a2f6 8797 fprintf_unfiltered (gdb_stdlog, "Ack\n");
a5c0808e 8798 do_cleanups (old_chain);
c906108c 8799 return 1;
1216fa2c
AC
8800 case '-':
8801 if (remote_debug)
8802 fprintf_unfiltered (gdb_stdlog, "Nak\n");
a17d146e 8803 /* FALLTHROUGH */
c906108c 8804 case SERIAL_TIMEOUT:
c5aa993b 8805 tcount++;
c906108c 8806 if (tcount > 3)
a5c0808e
PA
8807 {
8808 do_cleanups (old_chain);
8809 return 0;
8810 }
23860348 8811 break; /* Retransmit buffer. */
c906108c
SS
8812 case '$':
8813 {
40e3f985 8814 if (remote_debug)
2bc416ba 8815 fprintf_unfiltered (gdb_stdlog,
23860348 8816 "Packet instead of Ack, ignoring it\n");
d6f7abdf
AC
8817 /* It's probably an old response sent because an ACK
8818 was lost. Gobble up the packet and ack it so it
8819 doesn't get retransmitted when we resend this
8820 packet. */
6d820c5c 8821 skip_frame ();
c33e31fd 8822 remote_serial_write ("+", 1);
23860348 8823 continue; /* Now, go look for +. */
c906108c 8824 }
74531fed
PA
8825
8826 case '%':
8827 {
8828 int val;
8829
8830 /* If we got a notification, handle it, and go back to looking
8831 for an ack. */
8832 /* We've found the start of a notification. Now
8833 collect the data. */
8834 val = read_frame (&rs->buf, &rs->buf_size);
8835 if (val >= 0)
8836 {
8837 if (remote_debug)
8838 {
b3ced9ba 8839 std::string str = escape_buffer (rs->buf, val);
6e5abd65 8840
6e5abd65
PA
8841 fprintf_unfiltered (gdb_stdlog,
8842 " Notification received: %s\n",
b3ced9ba 8843 str.c_str ());
74531fed 8844 }
5965e028 8845 handle_notification (rs->notif_state, rs->buf);
74531fed
PA
8846 /* We're in sync now, rewait for the ack. */
8847 tcount = 0;
8848 }
8849 else
8850 {
8851 if (remote_debug)
8852 {
8853 if (!started_error_output)
8854 {
8855 started_error_output = 1;
8856 fprintf_unfiltered (gdb_stdlog, "putpkt: Junk: ");
8857 }
8858 fputc_unfiltered (ch & 0177, gdb_stdlog);
8859 fprintf_unfiltered (gdb_stdlog, "%s", rs->buf);
8860 }
8861 }
8862 continue;
8863 }
8864 /* fall-through */
c906108c
SS
8865 default:
8866 if (remote_debug)
8867 {
8868 if (!started_error_output)
8869 {
8870 started_error_output = 1;
0f71a2f6 8871 fprintf_unfiltered (gdb_stdlog, "putpkt: Junk: ");
c906108c 8872 }
0f71a2f6 8873 fputc_unfiltered (ch & 0177, gdb_stdlog);
c906108c
SS
8874 }
8875 continue;
8876 }
23860348 8877 break; /* Here to retransmit. */
c906108c
SS
8878 }
8879
8880#if 0
8881 /* This is wrong. If doing a long backtrace, the user should be
c5aa993b
JM
8882 able to get out next time we call QUIT, without anything as
8883 violent as interrupt_query. If we want to provide a way out of
8884 here without getting to the next QUIT, it should be based on
8885 hitting ^C twice as in remote_wait. */
c906108c
SS
8886 if (quit_flag)
8887 {
8888 quit_flag = 0;
8889 interrupt_query ();
8890 }
8891#endif
8892 }
a5c0808e
PA
8893
8894 do_cleanups (old_chain);
a6f3e723 8895 return 0;
c906108c
SS
8896}
8897
6d820c5c
DJ
8898/* Come here after finding the start of a frame when we expected an
8899 ack. Do our best to discard the rest of this packet. */
8900
8901static void
8902skip_frame (void)
8903{
8904 int c;
8905
8906 while (1)
8907 {
8908 c = readchar (remote_timeout);
8909 switch (c)
8910 {
8911 case SERIAL_TIMEOUT:
8912 /* Nothing we can do. */
8913 return;
8914 case '#':
8915 /* Discard the two bytes of checksum and stop. */
8916 c = readchar (remote_timeout);
8917 if (c >= 0)
8918 c = readchar (remote_timeout);
8919
8920 return;
8921 case '*': /* Run length encoding. */
8922 /* Discard the repeat count. */
8923 c = readchar (remote_timeout);
8924 if (c < 0)
8925 return;
8926 break;
8927 default:
8928 /* A regular character. */
8929 break;
8930 }
8931 }
8932}
8933
c906108c 8934/* Come here after finding the start of the frame. Collect the rest
6d820c5c
DJ
8935 into *BUF, verifying the checksum, length, and handling run-length
8936 compression. NUL terminate the buffer. If there is not enough room,
8937 expand *BUF using xrealloc.
c906108c 8938
c2d11a7d
JM
8939 Returns -1 on error, number of characters in buffer (ignoring the
8940 trailing NULL) on success. (could be extended to return one of the
23860348 8941 SERIAL status indications). */
c2d11a7d
JM
8942
8943static long
6d820c5c
DJ
8944read_frame (char **buf_p,
8945 long *sizeof_buf)
c906108c
SS
8946{
8947 unsigned char csum;
c2d11a7d 8948 long bc;
c906108c 8949 int c;
6d820c5c 8950 char *buf = *buf_p;
a6f3e723 8951 struct remote_state *rs = get_remote_state ();
c906108c
SS
8952
8953 csum = 0;
c2d11a7d 8954 bc = 0;
c906108c
SS
8955
8956 while (1)
8957 {
8958 c = readchar (remote_timeout);
c906108c
SS
8959 switch (c)
8960 {
8961 case SERIAL_TIMEOUT:
8962 if (remote_debug)
0f71a2f6 8963 fputs_filtered ("Timeout in mid-packet, retrying\n", gdb_stdlog);
c2d11a7d 8964 return -1;
c906108c
SS
8965 case '$':
8966 if (remote_debug)
0f71a2f6
JM
8967 fputs_filtered ("Saw new packet start in middle of old one\n",
8968 gdb_stdlog);
23860348 8969 return -1; /* Start a new packet, count retries. */
c906108c
SS
8970 case '#':
8971 {
8972 unsigned char pktcsum;
e1b09194
AC
8973 int check_0 = 0;
8974 int check_1 = 0;
c906108c 8975
c2d11a7d 8976 buf[bc] = '\0';
c906108c 8977
e1b09194
AC
8978 check_0 = readchar (remote_timeout);
8979 if (check_0 >= 0)
8980 check_1 = readchar (remote_timeout);
802188a7 8981
e1b09194
AC
8982 if (check_0 == SERIAL_TIMEOUT || check_1 == SERIAL_TIMEOUT)
8983 {
8984 if (remote_debug)
2bc416ba 8985 fputs_filtered ("Timeout in checksum, retrying\n",
23860348 8986 gdb_stdlog);
e1b09194
AC
8987 return -1;
8988 }
8989 else if (check_0 < 0 || check_1 < 0)
40e3f985
FN
8990 {
8991 if (remote_debug)
2bc416ba 8992 fputs_filtered ("Communication error in checksum\n",
23860348 8993 gdb_stdlog);
40e3f985
FN
8994 return -1;
8995 }
c906108c 8996
a6f3e723
SL
8997 /* Don't recompute the checksum; with no ack packets we
8998 don't have any way to indicate a packet retransmission
8999 is necessary. */
9000 if (rs->noack_mode)
9001 return bc;
9002
e1b09194 9003 pktcsum = (fromhex (check_0) << 4) | fromhex (check_1);
c906108c 9004 if (csum == pktcsum)
c2d11a7d 9005 return bc;
c906108c 9006
c5aa993b 9007 if (remote_debug)
c906108c 9008 {
b3ced9ba 9009 std::string str = escape_buffer (buf, bc);
6e5abd65 9010
6e5abd65 9011 fprintf_unfiltered (gdb_stdlog,
3e43a32a
MS
9012 "Bad checksum, sentsum=0x%x, "
9013 "csum=0x%x, buf=%s\n",
b3ced9ba 9014 pktcsum, csum, str.c_str ());
c906108c 9015 }
c2d11a7d 9016 /* Number of characters in buffer ignoring trailing
23860348 9017 NULL. */
c2d11a7d 9018 return -1;
c906108c 9019 }
23860348 9020 case '*': /* Run length encoding. */
c2c6d25f
JM
9021 {
9022 int repeat;
c906108c 9023
a744cf53 9024 csum += c;
b4501125
AC
9025 c = readchar (remote_timeout);
9026 csum += c;
23860348 9027 repeat = c - ' ' + 3; /* Compute repeat count. */
c906108c 9028
23860348 9029 /* The character before ``*'' is repeated. */
c2d11a7d 9030
6d820c5c 9031 if (repeat > 0 && repeat <= 255 && bc > 0)
c2c6d25f 9032 {
6d820c5c
DJ
9033 if (bc + repeat - 1 >= *sizeof_buf - 1)
9034 {
9035 /* Make some more room in the buffer. */
9036 *sizeof_buf += repeat;
224c3ddb 9037 *buf_p = (char *) xrealloc (*buf_p, *sizeof_buf);
6d820c5c
DJ
9038 buf = *buf_p;
9039 }
9040
c2d11a7d
JM
9041 memset (&buf[bc], buf[bc - 1], repeat);
9042 bc += repeat;
c2c6d25f
JM
9043 continue;
9044 }
9045
c2d11a7d 9046 buf[bc] = '\0';
6d820c5c 9047 printf_filtered (_("Invalid run length encoding: %s\n"), buf);
c2d11a7d 9048 return -1;
c2c6d25f 9049 }
c906108c 9050 default:
6d820c5c 9051 if (bc >= *sizeof_buf - 1)
c906108c 9052 {
6d820c5c
DJ
9053 /* Make some more room in the buffer. */
9054 *sizeof_buf *= 2;
224c3ddb 9055 *buf_p = (char *) xrealloc (*buf_p, *sizeof_buf);
6d820c5c 9056 buf = *buf_p;
c906108c
SS
9057 }
9058
6d820c5c
DJ
9059 buf[bc++] = c;
9060 csum += c;
9061 continue;
c906108c
SS
9062 }
9063 }
9064}
9065
9066/* Read a packet from the remote machine, with error checking, and
6d820c5c
DJ
9067 store it in *BUF. Resize *BUF using xrealloc if necessary to hold
9068 the result, and update *SIZEOF_BUF. If FOREVER, wait forever
9069 rather than timing out; this is used (in synchronous mode) to wait
9070 for a target that is is executing user code to stop. */
d9fcf2fb
JM
9071/* FIXME: ezannoni 2000-02-01 this wrapper is necessary so that we
9072 don't have to change all the calls to getpkt to deal with the
9073 return value, because at the moment I don't know what the right
23860348 9074 thing to do it for those. */
c906108c 9075void
6d820c5c
DJ
9076getpkt (char **buf,
9077 long *sizeof_buf,
c2d11a7d 9078 int forever)
d9fcf2fb 9079{
54887903 9080 getpkt_sane (buf, sizeof_buf, forever);
d9fcf2fb
JM
9081}
9082
9083
9084/* Read a packet from the remote machine, with error checking, and
6d820c5c
DJ
9085 store it in *BUF. Resize *BUF using xrealloc if necessary to hold
9086 the result, and update *SIZEOF_BUF. If FOREVER, wait forever
9087 rather than timing out; this is used (in synchronous mode) to wait
9088 for a target that is is executing user code to stop. If FOREVER ==
9089 0, this function is allowed to time out gracefully and return an
74531fed
PA
9090 indication of this to the caller. Otherwise return the number of
9091 bytes read. If EXPECTING_NOTIF, consider receiving a notification
fee9eda9
YQ
9092 enough reason to return to the caller. *IS_NOTIF is an output
9093 boolean that indicates whether *BUF holds a notification or not
9094 (a regular packet). */
74531fed 9095
3172dc30 9096static int
74531fed 9097getpkt_or_notif_sane_1 (char **buf, long *sizeof_buf, int forever,
fee9eda9 9098 int expecting_notif, int *is_notif)
c906108c 9099{
2d717e4f 9100 struct remote_state *rs = get_remote_state ();
c906108c
SS
9101 int c;
9102 int tries;
9103 int timeout;
df4b58fe 9104 int val = -1;
c906108c 9105
2d717e4f
DJ
9106 /* We're reading a new response. Make sure we don't look at a
9107 previously cached response. */
9108 rs->cached_wait_status = 0;
9109
6d820c5c 9110 strcpy (*buf, "timeout");
c906108c
SS
9111
9112 if (forever)
74531fed
PA
9113 timeout = watchdog > 0 ? watchdog : -1;
9114 else if (expecting_notif)
9115 timeout = 0; /* There should already be a char in the buffer. If
9116 not, bail out. */
c906108c
SS
9117 else
9118 timeout = remote_timeout;
9119
9120#define MAX_TRIES 3
9121
74531fed
PA
9122 /* Process any number of notifications, and then return when
9123 we get a packet. */
9124 for (;;)
c906108c 9125 {
d9c43928 9126 /* If we get a timeout or bad checksum, retry up to MAX_TRIES
74531fed
PA
9127 times. */
9128 for (tries = 1; tries <= MAX_TRIES; tries++)
c906108c 9129 {
74531fed
PA
9130 /* This can loop forever if the remote side sends us
9131 characters continuously, but if it pauses, we'll get
9132 SERIAL_TIMEOUT from readchar because of timeout. Then
9133 we'll count that as a retry.
9134
9135 Note that even when forever is set, we will only wait
9136 forever prior to the start of a packet. After that, we
9137 expect characters to arrive at a brisk pace. They should
9138 show up within remote_timeout intervals. */
9139 do
9140 c = readchar (timeout);
9141 while (c != SERIAL_TIMEOUT && c != '$' && c != '%');
c906108c
SS
9142
9143 if (c == SERIAL_TIMEOUT)
9144 {
74531fed
PA
9145 if (expecting_notif)
9146 return -1; /* Don't complain, it's normal to not get
9147 anything in this case. */
9148
23860348 9149 if (forever) /* Watchdog went off? Kill the target. */
c906108c 9150 {
78a095c3 9151 remote_unpush_target ();
598d3636
JK
9152 throw_error (TARGET_CLOSE_ERROR,
9153 _("Watchdog timeout has expired. "
9154 "Target detached."));
c906108c 9155 }
c906108c 9156 if (remote_debug)
0f71a2f6 9157 fputs_filtered ("Timed out.\n", gdb_stdlog);
c906108c 9158 }
74531fed
PA
9159 else
9160 {
9161 /* We've found the start of a packet or notification.
9162 Now collect the data. */
9163 val = read_frame (buf, sizeof_buf);
9164 if (val >= 0)
9165 break;
9166 }
9167
c33e31fd 9168 remote_serial_write ("-", 1);
c906108c 9169 }
c906108c 9170
74531fed
PA
9171 if (tries > MAX_TRIES)
9172 {
9173 /* We have tried hard enough, and just can't receive the
9174 packet/notification. Give up. */
9175 printf_unfiltered (_("Ignoring packet error, continuing...\n"));
c906108c 9176
74531fed
PA
9177 /* Skip the ack char if we're in no-ack mode. */
9178 if (!rs->noack_mode)
c33e31fd 9179 remote_serial_write ("+", 1);
74531fed
PA
9180 return -1;
9181 }
c906108c 9182
74531fed
PA
9183 /* If we got an ordinary packet, return that to our caller. */
9184 if (c == '$')
c906108c
SS
9185 {
9186 if (remote_debug)
43e526b9 9187 {
6f8976bf
YQ
9188 std::string str
9189 = escape_buffer (*buf,
9190 std::min (val, REMOTE_DEBUG_MAX_CHAR));
9191
9192 fprintf_unfiltered (gdb_stdlog, "Packet received: %s",
9193 str.c_str ());
9194
9195 if (str.length () > REMOTE_DEBUG_MAX_CHAR)
9196 {
9197 fprintf_unfiltered (gdb_stdlog, "[%zu bytes omitted]",
9198 str.length () - REMOTE_DEBUG_MAX_CHAR);
9199 }
6e5abd65 9200
6f8976bf 9201 fprintf_unfiltered (gdb_stdlog, "\n");
43e526b9 9202 }
a6f3e723
SL
9203
9204 /* Skip the ack char if we're in no-ack mode. */
9205 if (!rs->noack_mode)
c33e31fd 9206 remote_serial_write ("+", 1);
fee9eda9
YQ
9207 if (is_notif != NULL)
9208 *is_notif = 0;
0876f84a 9209 return val;
c906108c
SS
9210 }
9211
74531fed
PA
9212 /* If we got a notification, handle it, and go back to looking
9213 for a packet. */
9214 else
9215 {
9216 gdb_assert (c == '%');
9217
9218 if (remote_debug)
9219 {
b3ced9ba 9220 std::string str = escape_buffer (*buf, val);
6e5abd65 9221
6e5abd65
PA
9222 fprintf_unfiltered (gdb_stdlog,
9223 " Notification received: %s\n",
b3ced9ba 9224 str.c_str ());
74531fed 9225 }
fee9eda9
YQ
9226 if (is_notif != NULL)
9227 *is_notif = 1;
c906108c 9228
5965e028 9229 handle_notification (rs->notif_state, *buf);
c906108c 9230
74531fed 9231 /* Notifications require no acknowledgement. */
a6f3e723 9232
74531fed 9233 if (expecting_notif)
fee9eda9 9234 return val;
74531fed
PA
9235 }
9236 }
9237}
9238
9239static int
9240getpkt_sane (char **buf, long *sizeof_buf, int forever)
9241{
fee9eda9 9242 return getpkt_or_notif_sane_1 (buf, sizeof_buf, forever, 0, NULL);
74531fed
PA
9243}
9244
9245static int
fee9eda9
YQ
9246getpkt_or_notif_sane (char **buf, long *sizeof_buf, int forever,
9247 int *is_notif)
74531fed 9248{
fee9eda9
YQ
9249 return getpkt_or_notif_sane_1 (buf, sizeof_buf, forever, 1,
9250 is_notif);
c906108c 9251}
74531fed 9252
cbb8991c
DB
9253/* Check whether EVENT is a fork event for the process specified
9254 by the pid passed in DATA, and if it is, kill the fork child. */
9255
9256static int
9257kill_child_of_pending_fork (QUEUE (stop_reply_p) *q,
9258 QUEUE_ITER (stop_reply_p) *iter,
9259 stop_reply_p event,
9260 void *data)
9261{
19ba03f4 9262 struct queue_iter_param *param = (struct queue_iter_param *) data;
cbb8991c
DB
9263 int parent_pid = *(int *) param->input;
9264
9265 if (is_pending_fork_parent (&event->ws, parent_pid, event->ptid))
9266 {
9267 struct remote_state *rs = get_remote_state ();
9268 int child_pid = ptid_get_pid (event->ws.value.related_pid);
9269 int res;
9270
9271 res = remote_vkill (child_pid, rs);
9272 if (res != 0)
9273 error (_("Can't kill fork child process %d"), child_pid);
9274 }
9275
9276 return 1;
9277}
9278
9279/* Kill any new fork children of process PID that haven't been
9280 processed by follow_fork. */
9281
9282static void
9283kill_new_fork_children (int pid, struct remote_state *rs)
9284{
9285 struct thread_info *thread;
9286 struct notif_client *notif = &notif_client_stop;
9287 struct queue_iter_param param;
9288
9289 /* Kill the fork child threads of any threads in process PID
9290 that are stopped at a fork event. */
9291 ALL_NON_EXITED_THREADS (thread)
9292 {
9293 struct target_waitstatus *ws = &thread->pending_follow;
9294
9295 if (is_pending_fork_parent (ws, pid, thread->ptid))
9296 {
9297 struct remote_state *rs = get_remote_state ();
9298 int child_pid = ptid_get_pid (ws->value.related_pid);
9299 int res;
9300
9301 res = remote_vkill (child_pid, rs);
9302 if (res != 0)
9303 error (_("Can't kill fork child process %d"), child_pid);
9304 }
9305 }
9306
9307 /* Check for any pending fork events (not reported or processed yet)
9308 in process PID and kill those fork child threads as well. */
9309 remote_notif_get_pending_events (notif);
9310 param.input = &pid;
9311 param.output = NULL;
9312 QUEUE_iterate (stop_reply_p, stop_reply_queue,
9313 kill_child_of_pending_fork, &param);
9314}
9315
c906108c 9316\f
8020350c
DB
9317/* Target hook to kill the current inferior. */
9318
c906108c 9319static void
7d85a9c0 9320remote_kill (struct target_ops *ops)
43ff13b4 9321{
8020350c
DB
9322 int res = -1;
9323 int pid = ptid_get_pid (inferior_ptid);
9324 struct remote_state *rs = get_remote_state ();
0fdf84ca 9325
8020350c 9326 if (packet_support (PACKET_vKill) != PACKET_DISABLE)
0fdf84ca 9327 {
8020350c
DB
9328 /* If we're stopped while forking and we haven't followed yet,
9329 kill the child task. We need to do this before killing the
9330 parent task because if this is a vfork then the parent will
9331 be sleeping. */
9332 kill_new_fork_children (pid, rs);
9333
9334 res = remote_vkill (pid, rs);
9335 if (res == 0)
0fdf84ca 9336 {
bc1e6c81 9337 target_mourn_inferior (inferior_ptid);
0fdf84ca
PA
9338 return;
9339 }
8020350c 9340 }
0fdf84ca 9341
8020350c
DB
9342 /* If we are in 'target remote' mode and we are killing the only
9343 inferior, then we will tell gdbserver to exit and unpush the
9344 target. */
9345 if (res == -1 && !remote_multi_process_p (rs)
9346 && number_of_live_inferiors () == 1)
9347 {
9348 remote_kill_k ();
9349
9350 /* We've killed the remote end, we get to mourn it. If we are
9351 not in extended mode, mourning the inferior also unpushes
9352 remote_ops from the target stack, which closes the remote
9353 connection. */
bc1e6c81 9354 target_mourn_inferior (inferior_ptid);
8020350c
DB
9355
9356 return;
0fdf84ca 9357 }
43ff13b4 9358
8020350c 9359 error (_("Can't kill process"));
43ff13b4
JM
9360}
9361
8020350c
DB
9362/* Send a kill request to the target using the 'vKill' packet. */
9363
82f73884
PA
9364static int
9365remote_vkill (int pid, struct remote_state *rs)
9366{
4082afcc 9367 if (packet_support (PACKET_vKill) == PACKET_DISABLE)
82f73884
PA
9368 return -1;
9369
9370 /* Tell the remote target to detach. */
bba74b36 9371 xsnprintf (rs->buf, get_remote_packet_size (), "vKill;%x", pid);
82f73884
PA
9372 putpkt (rs->buf);
9373 getpkt (&rs->buf, &rs->buf_size, 0);
9374
4082afcc
PA
9375 switch (packet_ok (rs->buf,
9376 &remote_protocol_packets[PACKET_vKill]))
9377 {
9378 case PACKET_OK:
9379 return 0;
9380 case PACKET_ERROR:
9381 return 1;
9382 case PACKET_UNKNOWN:
9383 return -1;
9384 default:
9385 internal_error (__FILE__, __LINE__, _("Bad result from packet_ok"));
9386 }
82f73884
PA
9387}
9388
8020350c
DB
9389/* Send a kill request to the target using the 'k' packet. */
9390
82f73884 9391static void
8020350c 9392remote_kill_k (void)
82f73884 9393{
8020350c
DB
9394 /* Catch errors so the user can quit from gdb even when we
9395 aren't on speaking terms with the remote system. */
9396 TRY
82f73884 9397 {
82f73884 9398 putpkt ("k");
82f73884 9399 }
8020350c
DB
9400 CATCH (ex, RETURN_MASK_ERROR)
9401 {
9402 if (ex.error == TARGET_CLOSE_ERROR)
9403 {
9404 /* If we got an (EOF) error that caused the target
9405 to go away, then we're done, that's what we wanted.
9406 "k" is susceptible to cause a premature EOF, given
9407 that the remote server isn't actually required to
9408 reply to "k", and it can happen that it doesn't
9409 even get to reply ACK to the "k". */
9410 return;
9411 }
82f73884 9412
8020350c
DB
9413 /* Otherwise, something went wrong. We didn't actually kill
9414 the target. Just propagate the exception, and let the
9415 user or higher layers decide what to do. */
9416 throw_exception (ex);
9417 }
9418 END_CATCH
82f73884
PA
9419}
9420
c906108c 9421static void
20f796c9 9422remote_mourn (struct target_ops *target)
c906108c 9423{
8020350c 9424 struct remote_state *rs = get_remote_state ();
ce5ce7ed 9425
8020350c
DB
9426 /* In 'target remote' mode with one inferior, we close the connection. */
9427 if (!rs->extended && number_of_live_inferiors () <= 1)
9428 {
9429 unpush_target (target);
c906108c 9430
8020350c
DB
9431 /* remote_close takes care of doing most of the clean up. */
9432 generic_mourn_inferior ();
9433 return;
9434 }
c906108c 9435
e24a49d8
PA
9436 /* In case we got here due to an error, but we're going to stay
9437 connected. */
9438 rs->waiting_for_stop_reply = 0;
9439
dc1981d7
PA
9440 /* If the current general thread belonged to the process we just
9441 detached from or has exited, the remote side current general
9442 thread becomes undefined. Considering a case like this:
9443
9444 - We just got here due to a detach.
9445 - The process that we're detaching from happens to immediately
9446 report a global breakpoint being hit in non-stop mode, in the
9447 same thread we had selected before.
9448 - GDB attaches to this process again.
9449 - This event happens to be the next event we handle.
9450
9451 GDB would consider that the current general thread didn't need to
9452 be set on the stub side (with Hg), since for all it knew,
9453 GENERAL_THREAD hadn't changed.
9454
9455 Notice that although in all-stop mode, the remote server always
9456 sets the current thread to the thread reporting the stop event,
9457 that doesn't happen in non-stop mode; in non-stop, the stub *must
9458 not* change the current thread when reporting a breakpoint hit,
9459 due to the decoupling of event reporting and event handling.
9460
9461 To keep things simple, we always invalidate our notion of the
9462 current thread. */
47f8a51d 9463 record_currthread (rs, minus_one_ptid);
dc1981d7 9464
8020350c 9465 /* Call common code to mark the inferior as not running. */
48aa3c27
PA
9466 generic_mourn_inferior ();
9467
d729566a 9468 if (!have_inferiors ())
2d717e4f 9469 {
82f73884
PA
9470 if (!remote_multi_process_p (rs))
9471 {
9472 /* Check whether the target is running now - some remote stubs
9473 automatically restart after kill. */
9474 putpkt ("?");
9475 getpkt (&rs->buf, &rs->buf_size, 0);
9476
9477 if (rs->buf[0] == 'S' || rs->buf[0] == 'T')
9478 {
3e43a32a
MS
9479 /* Assume that the target has been restarted. Set
9480 inferior_ptid so that bits of core GDB realizes
9481 there's something here, e.g., so that the user can
9482 say "kill" again. */
82f73884
PA
9483 inferior_ptid = magic_null_ptid;
9484 }
82f73884 9485 }
2d717e4f
DJ
9486 }
9487}
c906108c 9488
03583c20 9489static int
2bfc0540 9490extended_remote_supports_disable_randomization (struct target_ops *self)
03583c20 9491{
4082afcc 9492 return packet_support (PACKET_QDisableRandomization) == PACKET_ENABLE;
03583c20
UW
9493}
9494
9495static void
9496extended_remote_disable_randomization (int val)
9497{
9498 struct remote_state *rs = get_remote_state ();
9499 char *reply;
9500
bba74b36
YQ
9501 xsnprintf (rs->buf, get_remote_packet_size (), "QDisableRandomization:%x",
9502 val);
03583c20
UW
9503 putpkt (rs->buf);
9504 reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
9505 if (*reply == '\0')
9506 error (_("Target does not support QDisableRandomization."));
9507 if (strcmp (reply, "OK") != 0)
9508 error (_("Bogus QDisableRandomization reply from target: %s"), reply);
9509}
9510
2d717e4f 9511static int
7c5ded6a 9512extended_remote_run (const std::string &args)
2d717e4f
DJ
9513{
9514 struct remote_state *rs = get_remote_state ();
2d717e4f 9515 int len;
94585166 9516 const char *remote_exec_file = get_remote_exec_file ();
c906108c 9517
2d717e4f
DJ
9518 /* If the user has disabled vRun support, or we have detected that
9519 support is not available, do not try it. */
4082afcc 9520 if (packet_support (PACKET_vRun) == PACKET_DISABLE)
2d717e4f 9521 return -1;
424163ea 9522
2d717e4f
DJ
9523 strcpy (rs->buf, "vRun;");
9524 len = strlen (rs->buf);
c906108c 9525
2d717e4f
DJ
9526 if (strlen (remote_exec_file) * 2 + len >= get_remote_packet_size ())
9527 error (_("Remote file name too long for run packet"));
9f1b45b0
TT
9528 len += 2 * bin2hex ((gdb_byte *) remote_exec_file, rs->buf + len,
9529 strlen (remote_exec_file));
2d717e4f 9530
7c5ded6a 9531 if (!args.empty ())
2d717e4f 9532 {
2d717e4f 9533 int i;
2d717e4f 9534
773a1edc 9535 gdb_argv argv (args.c_str ());
2d717e4f
DJ
9536 for (i = 0; argv[i] != NULL; i++)
9537 {
9538 if (strlen (argv[i]) * 2 + 1 + len >= get_remote_packet_size ())
9539 error (_("Argument list too long for run packet"));
9540 rs->buf[len++] = ';';
9f1b45b0
TT
9541 len += 2 * bin2hex ((gdb_byte *) argv[i], rs->buf + len,
9542 strlen (argv[i]));
2d717e4f 9543 }
2d717e4f
DJ
9544 }
9545
9546 rs->buf[len++] = '\0';
9547
9548 putpkt (rs->buf);
9549 getpkt (&rs->buf, &rs->buf_size, 0);
9550
4082afcc 9551 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_vRun]))
2d717e4f 9552 {
4082afcc 9553 case PACKET_OK:
3405876a 9554 /* We have a wait response. All is well. */
2d717e4f 9555 return 0;
4082afcc
PA
9556 case PACKET_UNKNOWN:
9557 return -1;
9558 case PACKET_ERROR:
2d717e4f
DJ
9559 if (remote_exec_file[0] == '\0')
9560 error (_("Running the default executable on the remote target failed; "
9561 "try \"set remote exec-file\"?"));
9562 else
9563 error (_("Running \"%s\" on the remote target failed"),
9564 remote_exec_file);
4082afcc
PA
9565 default:
9566 gdb_assert_not_reached (_("bad switch"));
2d717e4f 9567 }
c906108c
SS
9568}
9569
0a2dde4a
SDJ
9570/* Helper function to send set/unset environment packets. ACTION is
9571 either "set" or "unset". PACKET is either "QEnvironmentHexEncoded"
9572 or "QEnvironmentUnsetVariable". VALUE is the variable to be
9573 sent. */
9574
9575static void
9576send_environment_packet (struct remote_state *rs,
9577 const char *action,
9578 const char *packet,
9579 const char *value)
9580{
9581 /* Convert the environment variable to an hex string, which
9582 is the best format to be transmitted over the wire. */
9583 std::string encoded_value = bin2hex ((const gdb_byte *) value,
9584 strlen (value));
9585
9586 xsnprintf (rs->buf, get_remote_packet_size (),
9587 "%s:%s", packet, encoded_value.c_str ());
9588
9589 putpkt (rs->buf);
9590 getpkt (&rs->buf, &rs->buf_size, 0);
9591 if (strcmp (rs->buf, "OK") != 0)
9592 warning (_("Unable to %s environment variable '%s' on remote."),
9593 action, value);
9594}
9595
9596/* Helper function to handle the QEnvironment* packets. */
9597
9598static void
9599extended_remote_environment_support (struct remote_state *rs)
9600{
9601 if (packet_support (PACKET_QEnvironmentReset) != PACKET_DISABLE)
9602 {
9603 putpkt ("QEnvironmentReset");
9604 getpkt (&rs->buf, &rs->buf_size, 0);
9605 if (strcmp (rs->buf, "OK") != 0)
9606 warning (_("Unable to reset environment on remote."));
9607 }
9608
9609 gdb_environ *e = &current_inferior ()->environment;
9610
9611 if (packet_support (PACKET_QEnvironmentHexEncoded) != PACKET_DISABLE)
9612 for (const std::string &el : e->user_set_env ())
9613 send_environment_packet (rs, "set", "QEnvironmentHexEncoded",
9614 el.c_str ());
9615
9616 if (packet_support (PACKET_QEnvironmentUnset) != PACKET_DISABLE)
9617 for (const std::string &el : e->user_unset_env ())
9618 send_environment_packet (rs, "unset", "QEnvironmentUnset", el.c_str ());
9619}
9620
2d717e4f
DJ
9621/* In the extended protocol we want to be able to do things like
9622 "run" and have them basically work as expected. So we need
9623 a special create_inferior function. We support changing the
9624 executable file and the command line arguments, but not the
9625 environment. */
9626
43ff13b4 9627static void
77a19445 9628extended_remote_create_inferior (struct target_ops *ops,
7c5ded6a
SDJ
9629 const char *exec_file,
9630 const std::string &args,
77a19445 9631 char **env, int from_tty)
43ff13b4 9632{
3405876a
PA
9633 int run_worked;
9634 char *stop_reply;
9635 struct remote_state *rs = get_remote_state ();
94585166 9636 const char *remote_exec_file = get_remote_exec_file ();
3405876a 9637
43ff13b4 9638 /* If running asynchronously, register the target file descriptor
23860348 9639 with the event loop. */
75c99385 9640 if (target_can_async_p ())
6a3753b3 9641 target_async (1);
43ff13b4 9642
03583c20 9643 /* Disable address space randomization if requested (and supported). */
2bfc0540 9644 if (extended_remote_supports_disable_randomization (ops))
03583c20
UW
9645 extended_remote_disable_randomization (disable_randomization);
9646
aefd8b33
SDJ
9647 /* If startup-with-shell is on, we inform gdbserver to start the
9648 remote inferior using a shell. */
9649 if (packet_support (PACKET_QStartupWithShell) != PACKET_DISABLE)
9650 {
9651 xsnprintf (rs->buf, get_remote_packet_size (),
9652 "QStartupWithShell:%d", startup_with_shell ? 1 : 0);
9653 putpkt (rs->buf);
9654 getpkt (&rs->buf, &rs->buf_size, 0);
9655 if (strcmp (rs->buf, "OK") != 0)
9656 error (_("\
9657Remote replied unexpectedly while setting startup-with-shell: %s"),
9658 rs->buf);
9659 }
9660
0a2dde4a
SDJ
9661 extended_remote_environment_support (rs);
9662
43ff13b4 9663 /* Now restart the remote server. */
3405876a
PA
9664 run_worked = extended_remote_run (args) != -1;
9665 if (!run_worked)
2d717e4f
DJ
9666 {
9667 /* vRun was not supported. Fail if we need it to do what the
9668 user requested. */
9669 if (remote_exec_file[0])
9670 error (_("Remote target does not support \"set remote exec-file\""));
7c5ded6a 9671 if (!args.empty ())
2d717e4f 9672 error (_("Remote target does not support \"set args\" or run <ARGS>"));
43ff13b4 9673
2d717e4f
DJ
9674 /* Fall back to "R". */
9675 extended_remote_restart ();
9676 }
424163ea 9677
6c95b8df
PA
9678 if (!have_inferiors ())
9679 {
9680 /* Clean up from the last time we ran, before we mark the target
9681 running again. This will mark breakpoints uninserted, and
9682 get_offsets may insert breakpoints. */
9683 init_thread_list ();
9684 init_wait_for_inferior ();
9685 }
45280a52 9686
3405876a
PA
9687 /* vRun's success return is a stop reply. */
9688 stop_reply = run_worked ? rs->buf : NULL;
9689 add_current_inferior_and_thread (stop_reply);
c0a2216e 9690
2d717e4f
DJ
9691 /* Get updated offsets, if the stub uses qOffsets. */
9692 get_offsets ();
2d717e4f 9693}
c906108c 9694\f
c5aa993b 9695
b775012e
LM
9696/* Given a location's target info BP_TGT and the packet buffer BUF, output
9697 the list of conditions (in agent expression bytecode format), if any, the
9698 target needs to evaluate. The output is placed into the packet buffer
bba74b36 9699 started from BUF and ended at BUF_END. */
b775012e
LM
9700
9701static int
9702remote_add_target_side_condition (struct gdbarch *gdbarch,
bba74b36
YQ
9703 struct bp_target_info *bp_tgt, char *buf,
9704 char *buf_end)
b775012e 9705{
3cde5c42 9706 if (bp_tgt->conditions.empty ())
b775012e
LM
9707 return 0;
9708
9709 buf += strlen (buf);
bba74b36 9710 xsnprintf (buf, buf_end - buf, "%s", ";");
b775012e
LM
9711 buf++;
9712
83621223 9713 /* Send conditions to the target. */
d538e36d 9714 for (agent_expr *aexpr : bp_tgt->conditions)
b775012e 9715 {
bba74b36 9716 xsnprintf (buf, buf_end - buf, "X%x,", aexpr->len);
b775012e 9717 buf += strlen (buf);
3cde5c42 9718 for (int i = 0; i < aexpr->len; ++i)
b775012e
LM
9719 buf = pack_hex_byte (buf, aexpr->buf[i]);
9720 *buf = '\0';
9721 }
b775012e
LM
9722 return 0;
9723}
9724
d3ce09f5
SS
9725static void
9726remote_add_target_side_commands (struct gdbarch *gdbarch,
9727 struct bp_target_info *bp_tgt, char *buf)
9728{
3cde5c42 9729 if (bp_tgt->tcommands.empty ())
d3ce09f5
SS
9730 return;
9731
9732 buf += strlen (buf);
9733
9734 sprintf (buf, ";cmds:%x,", bp_tgt->persist);
9735 buf += strlen (buf);
9736
9737 /* Concatenate all the agent expressions that are commands into the
9738 cmds parameter. */
df97be55 9739 for (agent_expr *aexpr : bp_tgt->tcommands)
d3ce09f5
SS
9740 {
9741 sprintf (buf, "X%x,", aexpr->len);
9742 buf += strlen (buf);
3cde5c42 9743 for (int i = 0; i < aexpr->len; ++i)
d3ce09f5
SS
9744 buf = pack_hex_byte (buf, aexpr->buf[i]);
9745 *buf = '\0';
9746 }
d3ce09f5
SS
9747}
9748
8181d85f
DJ
9749/* Insert a breakpoint. On targets that have software breakpoint
9750 support, we ask the remote target to do the work; on targets
9751 which don't, we insert a traditional memory breakpoint. */
c906108c
SS
9752
9753static int
3db08215
MM
9754remote_insert_breakpoint (struct target_ops *ops,
9755 struct gdbarch *gdbarch,
a6d9a66e 9756 struct bp_target_info *bp_tgt)
c906108c 9757{
d471ea57
AC
9758 /* Try the "Z" s/w breakpoint packet if it is not already disabled.
9759 If it succeeds, then set the support to PACKET_ENABLE. If it
9760 fails, and the user has explicitly requested the Z support then
23860348 9761 report an error, otherwise, mark it disabled and go on. */
802188a7 9762
4082afcc 9763 if (packet_support (PACKET_Z0) != PACKET_DISABLE)
96baa820 9764 {
0d5ed153 9765 CORE_ADDR addr = bp_tgt->reqstd_address;
4fff2411 9766 struct remote_state *rs;
bba74b36 9767 char *p, *endbuf;
7c0f6dcc 9768 int bpsize;
4fff2411 9769
28439a30
PA
9770 /* Make sure the remote is pointing at the right process, if
9771 necessary. */
9772 if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
9773 set_general_process ();
9774
4fff2411
JZ
9775 rs = get_remote_state ();
9776 p = rs->buf;
bba74b36 9777 endbuf = rs->buf + get_remote_packet_size ();
802188a7 9778
96baa820
JM
9779 *(p++) = 'Z';
9780 *(p++) = '0';
9781 *(p++) = ',';
7c0f6dcc 9782 addr = (ULONGEST) remote_address_masked (addr);
8181d85f 9783 p += hexnumstr (p, addr);
579c6ad9 9784 xsnprintf (p, endbuf - p, ",%d", bp_tgt->kind);
802188a7 9785
efcc2da7 9786 if (remote_supports_cond_breakpoints (ops))
bba74b36 9787 remote_add_target_side_condition (gdbarch, bp_tgt, p, endbuf);
b775012e 9788
78eff0ec 9789 if (remote_can_run_breakpoint_commands (ops))
d3ce09f5
SS
9790 remote_add_target_side_commands (gdbarch, bp_tgt, p);
9791
6d820c5c
DJ
9792 putpkt (rs->buf);
9793 getpkt (&rs->buf, &rs->buf_size, 0);
96baa820 9794
6d820c5c 9795 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0]))
96baa820 9796 {
d471ea57
AC
9797 case PACKET_ERROR:
9798 return -1;
9799 case PACKET_OK:
9800 return 0;
9801 case PACKET_UNKNOWN:
9802 break;
96baa820
JM
9803 }
9804 }
c906108c 9805
0000e5cc
PA
9806 /* If this breakpoint has target-side commands but this stub doesn't
9807 support Z0 packets, throw error. */
3cde5c42 9808 if (!bp_tgt->tcommands.empty ())
0000e5cc
PA
9809 throw_error (NOT_SUPPORTED_ERROR, _("\
9810Target doesn't support breakpoints that have target side commands."));
9811
3db08215 9812 return memory_insert_breakpoint (ops, gdbarch, bp_tgt);
c906108c
SS
9813}
9814
9815static int
3db08215
MM
9816remote_remove_breakpoint (struct target_ops *ops,
9817 struct gdbarch *gdbarch,
73971819
PA
9818 struct bp_target_info *bp_tgt,
9819 enum remove_bp_reason reason)
c906108c 9820{
8181d85f 9821 CORE_ADDR addr = bp_tgt->placed_address;
d01949b6 9822 struct remote_state *rs = get_remote_state ();
96baa820 9823
4082afcc 9824 if (packet_support (PACKET_Z0) != PACKET_DISABLE)
96baa820 9825 {
6d820c5c 9826 char *p = rs->buf;
bba74b36 9827 char *endbuf = rs->buf + get_remote_packet_size ();
802188a7 9828
28439a30
PA
9829 /* Make sure the remote is pointing at the right process, if
9830 necessary. */
9831 if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
9832 set_general_process ();
9833
96baa820
JM
9834 *(p++) = 'z';
9835 *(p++) = '0';
9836 *(p++) = ',';
9837
8181d85f
DJ
9838 addr = (ULONGEST) remote_address_masked (bp_tgt->placed_address);
9839 p += hexnumstr (p, addr);
579c6ad9 9840 xsnprintf (p, endbuf - p, ",%d", bp_tgt->kind);
802188a7 9841
6d820c5c
DJ
9842 putpkt (rs->buf);
9843 getpkt (&rs->buf, &rs->buf_size, 0);
96baa820 9844
6d820c5c 9845 return (rs->buf[0] == 'E');
96baa820
JM
9846 }
9847
73971819 9848 return memory_remove_breakpoint (ops, gdbarch, bp_tgt, reason);
c906108c
SS
9849}
9850
f486487f 9851static enum Z_packet_type
d471ea57
AC
9852watchpoint_to_Z_packet (int type)
9853{
9854 switch (type)
9855 {
9856 case hw_write:
bb858e6a 9857 return Z_PACKET_WRITE_WP;
d471ea57
AC
9858 break;
9859 case hw_read:
bb858e6a 9860 return Z_PACKET_READ_WP;
d471ea57
AC
9861 break;
9862 case hw_access:
bb858e6a 9863 return Z_PACKET_ACCESS_WP;
d471ea57
AC
9864 break;
9865 default:
8e65ff28 9866 internal_error (__FILE__, __LINE__,
e2e0b3e5 9867 _("hw_bp_to_z: bad watchpoint type %d"), type);
d471ea57
AC
9868 }
9869}
9870
3c3bea1c 9871static int
f486487f
SM
9872remote_insert_watchpoint (struct target_ops *self, CORE_ADDR addr, int len,
9873 enum target_hw_bp_type type, struct expression *cond)
96baa820 9874{
d01949b6 9875 struct remote_state *rs = get_remote_state ();
bba74b36 9876 char *endbuf = rs->buf + get_remote_packet_size ();
e514a9d6 9877 char *p;
d471ea57 9878 enum Z_packet_type packet = watchpoint_to_Z_packet (type);
96baa820 9879
4082afcc 9880 if (packet_support (PACKET_Z0 + packet) == PACKET_DISABLE)
85d721b8 9881 return 1;
802188a7 9882
28439a30
PA
9883 /* Make sure the remote is pointing at the right process, if
9884 necessary. */
9885 if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
9886 set_general_process ();
9887
bba74b36 9888 xsnprintf (rs->buf, endbuf - rs->buf, "Z%x,", packet);
6d820c5c 9889 p = strchr (rs->buf, '\0');
96baa820
JM
9890 addr = remote_address_masked (addr);
9891 p += hexnumstr (p, (ULONGEST) addr);
bba74b36 9892 xsnprintf (p, endbuf - p, ",%x", len);
802188a7 9893
6d820c5c
DJ
9894 putpkt (rs->buf);
9895 getpkt (&rs->buf, &rs->buf_size, 0);
96baa820 9896
6d820c5c 9897 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0 + packet]))
d471ea57
AC
9898 {
9899 case PACKET_ERROR:
d471ea57 9900 return -1;
85d721b8
PA
9901 case PACKET_UNKNOWN:
9902 return 1;
d471ea57
AC
9903 case PACKET_OK:
9904 return 0;
9905 }
8e65ff28 9906 internal_error (__FILE__, __LINE__,
e2e0b3e5 9907 _("remote_insert_watchpoint: reached end of function"));
96baa820
JM
9908}
9909
283002cf
MR
9910static int
9911remote_watchpoint_addr_within_range (struct target_ops *target, CORE_ADDR addr,
9912 CORE_ADDR start, int length)
9913{
9914 CORE_ADDR diff = remote_address_masked (addr - start);
9915
9916 return diff < length;
9917}
9918
d471ea57 9919
3c3bea1c 9920static int
f486487f
SM
9921remote_remove_watchpoint (struct target_ops *self, CORE_ADDR addr, int len,
9922 enum target_hw_bp_type type, struct expression *cond)
96baa820 9923{
d01949b6 9924 struct remote_state *rs = get_remote_state ();
bba74b36 9925 char *endbuf = rs->buf + get_remote_packet_size ();
e514a9d6 9926 char *p;
d471ea57
AC
9927 enum Z_packet_type packet = watchpoint_to_Z_packet (type);
9928
4082afcc 9929 if (packet_support (PACKET_Z0 + packet) == PACKET_DISABLE)
5cffb350 9930 return -1;
802188a7 9931
28439a30
PA
9932 /* Make sure the remote is pointing at the right process, if
9933 necessary. */
9934 if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
9935 set_general_process ();
9936
bba74b36 9937 xsnprintf (rs->buf, endbuf - rs->buf, "z%x,", packet);
6d820c5c 9938 p = strchr (rs->buf, '\0');
96baa820
JM
9939 addr = remote_address_masked (addr);
9940 p += hexnumstr (p, (ULONGEST) addr);
bba74b36 9941 xsnprintf (p, endbuf - p, ",%x", len);
6d820c5c
DJ
9942 putpkt (rs->buf);
9943 getpkt (&rs->buf, &rs->buf_size, 0);
96baa820 9944
6d820c5c 9945 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0 + packet]))
d471ea57
AC
9946 {
9947 case PACKET_ERROR:
9948 case PACKET_UNKNOWN:
9949 return -1;
9950 case PACKET_OK:
9951 return 0;
9952 }
8e65ff28 9953 internal_error (__FILE__, __LINE__,
e2e0b3e5 9954 _("remote_remove_watchpoint: reached end of function"));
96baa820
JM
9955}
9956
3c3bea1c 9957
501eef12 9958int remote_hw_watchpoint_limit = -1;
480a3f21 9959int remote_hw_watchpoint_length_limit = -1;
501eef12 9960int remote_hw_breakpoint_limit = -1;
d471ea57 9961
480a3f21 9962static int
31568a15
TT
9963remote_region_ok_for_hw_watchpoint (struct target_ops *self,
9964 CORE_ADDR addr, int len)
480a3f21
PW
9965{
9966 if (remote_hw_watchpoint_length_limit == 0)
9967 return 0;
9968 else if (remote_hw_watchpoint_length_limit < 0)
9969 return 1;
9970 else if (len <= remote_hw_watchpoint_length_limit)
9971 return 1;
9972 else
9973 return 0;
9974}
9975
b9362cc7 9976static int
5461485a 9977remote_check_watch_resources (struct target_ops *self,
f486487f 9978 enum bptype type, int cnt, int ot)
96baa820 9979{
3c3bea1c
GS
9980 if (type == bp_hardware_breakpoint)
9981 {
9982 if (remote_hw_breakpoint_limit == 0)
9983 return 0;
501eef12
AC
9984 else if (remote_hw_breakpoint_limit < 0)
9985 return 1;
3c3bea1c
GS
9986 else if (cnt <= remote_hw_breakpoint_limit)
9987 return 1;
9988 }
9989 else
9990 {
9991 if (remote_hw_watchpoint_limit == 0)
9992 return 0;
501eef12
AC
9993 else if (remote_hw_watchpoint_limit < 0)
9994 return 1;
3c3bea1c
GS
9995 else if (ot)
9996 return -1;
9997 else if (cnt <= remote_hw_watchpoint_limit)
9998 return 1;
9999 }
10000 return -1;
10001}
10002
f7e6eed5
PA
10003/* The to_stopped_by_sw_breakpoint method of target remote. */
10004
10005static int
10006remote_stopped_by_sw_breakpoint (struct target_ops *ops)
10007{
799a2abe 10008 struct thread_info *thread = inferior_thread ();
f7e6eed5 10009
799a2abe
PA
10010 return (thread->priv != NULL
10011 && thread->priv->stop_reason == TARGET_STOPPED_BY_SW_BREAKPOINT);
f7e6eed5
PA
10012}
10013
10014/* The to_supports_stopped_by_sw_breakpoint method of target
10015 remote. */
10016
10017static int
10018remote_supports_stopped_by_sw_breakpoint (struct target_ops *ops)
10019{
f7e6eed5
PA
10020 return (packet_support (PACKET_swbreak_feature) == PACKET_ENABLE);
10021}
10022
10023/* The to_stopped_by_hw_breakpoint method of target remote. */
10024
10025static int
10026remote_stopped_by_hw_breakpoint (struct target_ops *ops)
10027{
799a2abe 10028 struct thread_info *thread = inferior_thread ();
f7e6eed5 10029
799a2abe
PA
10030 return (thread->priv != NULL
10031 && thread->priv->stop_reason == TARGET_STOPPED_BY_HW_BREAKPOINT);
f7e6eed5
PA
10032}
10033
10034/* The to_supports_stopped_by_hw_breakpoint method of target
10035 remote. */
10036
10037static int
10038remote_supports_stopped_by_hw_breakpoint (struct target_ops *ops)
10039{
f7e6eed5
PA
10040 return (packet_support (PACKET_hwbreak_feature) == PACKET_ENABLE);
10041}
10042
b9362cc7 10043static int
6a109b6b 10044remote_stopped_by_watchpoint (struct target_ops *ops)
3c3bea1c 10045{
799a2abe 10046 struct thread_info *thread = inferior_thread ();
ee154bee 10047
799a2abe
PA
10048 return (thread->priv != NULL
10049 && thread->priv->stop_reason == TARGET_STOPPED_BY_WATCHPOINT);
3c3bea1c
GS
10050}
10051
4aa7a7f5
JJ
10052static int
10053remote_stopped_data_address (struct target_ops *target, CORE_ADDR *addr_p)
3c3bea1c 10054{
799a2abe 10055 struct thread_info *thread = inferior_thread ();
a744cf53 10056
799a2abe
PA
10057 if (thread->priv != NULL
10058 && thread->priv->stop_reason == TARGET_STOPPED_BY_WATCHPOINT)
4aa7a7f5 10059 {
799a2abe
PA
10060 *addr_p = thread->priv->watch_data_address;
10061 return 1;
4aa7a7f5
JJ
10062 }
10063
799a2abe 10064 return 0;
3c3bea1c
GS
10065}
10066
10067
10068static int
23a26771 10069remote_insert_hw_breakpoint (struct target_ops *self, struct gdbarch *gdbarch,
a6d9a66e 10070 struct bp_target_info *bp_tgt)
3c3bea1c 10071{
0d5ed153 10072 CORE_ADDR addr = bp_tgt->reqstd_address;
4fff2411 10073 struct remote_state *rs;
bba74b36 10074 char *p, *endbuf;
dd61ec5c 10075 char *message;
3c3bea1c 10076
4082afcc 10077 if (packet_support (PACKET_Z1) == PACKET_DISABLE)
5cffb350 10078 return -1;
2bc416ba 10079
28439a30
PA
10080 /* Make sure the remote is pointing at the right process, if
10081 necessary. */
10082 if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10083 set_general_process ();
10084
4fff2411
JZ
10085 rs = get_remote_state ();
10086 p = rs->buf;
bba74b36 10087 endbuf = rs->buf + get_remote_packet_size ();
4fff2411 10088
96baa820
JM
10089 *(p++) = 'Z';
10090 *(p++) = '1';
10091 *(p++) = ',';
802188a7 10092
0d5ed153 10093 addr = remote_address_masked (addr);
96baa820 10094 p += hexnumstr (p, (ULONGEST) addr);
579c6ad9 10095 xsnprintf (p, endbuf - p, ",%x", bp_tgt->kind);
96baa820 10096
efcc2da7 10097 if (remote_supports_cond_breakpoints (self))
bba74b36 10098 remote_add_target_side_condition (gdbarch, bp_tgt, p, endbuf);
b775012e 10099
78eff0ec 10100 if (remote_can_run_breakpoint_commands (self))
d3ce09f5
SS
10101 remote_add_target_side_commands (gdbarch, bp_tgt, p);
10102
6d820c5c
DJ
10103 putpkt (rs->buf);
10104 getpkt (&rs->buf, &rs->buf_size, 0);
96baa820 10105
6d820c5c 10106 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z1]))
d471ea57
AC
10107 {
10108 case PACKET_ERROR:
dd61ec5c
MW
10109 if (rs->buf[1] == '.')
10110 {
10111 message = strchr (rs->buf + 2, '.');
10112 if (message)
0316657e 10113 error (_("Remote failure reply: %s"), message + 1);
dd61ec5c
MW
10114 }
10115 return -1;
d471ea57
AC
10116 case PACKET_UNKNOWN:
10117 return -1;
10118 case PACKET_OK:
10119 return 0;
10120 }
8e65ff28 10121 internal_error (__FILE__, __LINE__,
e2e0b3e5 10122 _("remote_insert_hw_breakpoint: reached end of function"));
96baa820
JM
10123}
10124
d471ea57 10125
802188a7 10126static int
a64dc96c 10127remote_remove_hw_breakpoint (struct target_ops *self, struct gdbarch *gdbarch,
a6d9a66e 10128 struct bp_target_info *bp_tgt)
96baa820 10129{
8181d85f 10130 CORE_ADDR addr;
d01949b6 10131 struct remote_state *rs = get_remote_state ();
6d820c5c 10132 char *p = rs->buf;
bba74b36 10133 char *endbuf = rs->buf + get_remote_packet_size ();
c8189ed1 10134
4082afcc 10135 if (packet_support (PACKET_Z1) == PACKET_DISABLE)
5cffb350 10136 return -1;
802188a7 10137
28439a30
PA
10138 /* Make sure the remote is pointing at the right process, if
10139 necessary. */
10140 if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10141 set_general_process ();
10142
96baa820
JM
10143 *(p++) = 'z';
10144 *(p++) = '1';
10145 *(p++) = ',';
802188a7 10146
8181d85f 10147 addr = remote_address_masked (bp_tgt->placed_address);
96baa820 10148 p += hexnumstr (p, (ULONGEST) addr);
579c6ad9 10149 xsnprintf (p, endbuf - p, ",%x", bp_tgt->kind);
96baa820 10150
6d820c5c
DJ
10151 putpkt (rs->buf);
10152 getpkt (&rs->buf, &rs->buf_size, 0);
802188a7 10153
6d820c5c 10154 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z1]))
d471ea57
AC
10155 {
10156 case PACKET_ERROR:
10157 case PACKET_UNKNOWN:
10158 return -1;
10159 case PACKET_OK:
10160 return 0;
10161 }
8e65ff28 10162 internal_error (__FILE__, __LINE__,
e2e0b3e5 10163 _("remote_remove_hw_breakpoint: reached end of function"));
96baa820 10164}
96baa820 10165
4a5e7a5b
PA
10166/* Verify memory using the "qCRC:" request. */
10167
10168static int
10169remote_verify_memory (struct target_ops *ops,
10170 const gdb_byte *data, CORE_ADDR lma, ULONGEST size)
10171{
10172 struct remote_state *rs = get_remote_state ();
10173 unsigned long host_crc, target_crc;
10174 char *tmp;
10175
936d2992
PA
10176 /* It doesn't make sense to use qCRC if the remote target is
10177 connected but not running. */
10178 if (target_has_execution && packet_support (PACKET_qCRC) != PACKET_DISABLE)
10179 {
10180 enum packet_result result;
28439a30 10181
936d2992
PA
10182 /* Make sure the remote is pointing at the right process. */
10183 set_general_process ();
4a5e7a5b 10184
936d2992
PA
10185 /* FIXME: assumes lma can fit into long. */
10186 xsnprintf (rs->buf, get_remote_packet_size (), "qCRC:%lx,%lx",
10187 (long) lma, (long) size);
10188 putpkt (rs->buf);
4a5e7a5b 10189
936d2992
PA
10190 /* Be clever; compute the host_crc before waiting for target
10191 reply. */
10192 host_crc = xcrc32 (data, size, 0xffffffff);
10193
10194 getpkt (&rs->buf, &rs->buf_size, 0);
4a5e7a5b 10195
936d2992
PA
10196 result = packet_ok (rs->buf,
10197 &remote_protocol_packets[PACKET_qCRC]);
10198 if (result == PACKET_ERROR)
10199 return -1;
10200 else if (result == PACKET_OK)
10201 {
10202 for (target_crc = 0, tmp = &rs->buf[1]; *tmp; tmp++)
10203 target_crc = target_crc * 16 + fromhex (*tmp);
4a5e7a5b 10204
936d2992
PA
10205 return (host_crc == target_crc);
10206 }
10207 }
4a5e7a5b 10208
936d2992 10209 return simple_verify_memory (ops, data, lma, size);
4a5e7a5b
PA
10210}
10211
c906108c
SS
10212/* compare-sections command
10213
10214 With no arguments, compares each loadable section in the exec bfd
10215 with the same memory range on the target, and reports mismatches.
4a5e7a5b 10216 Useful for verifying the image on the target against the exec file. */
e514a9d6 10217
c906108c 10218static void
fba45db2 10219compare_sections_command (char *args, int from_tty)
c906108c
SS
10220{
10221 asection *s;
c906108c 10222 struct cleanup *old_chain;
948f8e3d 10223 gdb_byte *sectdata;
ce359b09 10224 const char *sectname;
c906108c
SS
10225 bfd_size_type size;
10226 bfd_vma lma;
10227 int matched = 0;
10228 int mismatched = 0;
4a5e7a5b 10229 int res;
95cf3b38 10230 int read_only = 0;
c906108c
SS
10231
10232 if (!exec_bfd)
8a3fe4f8 10233 error (_("command cannot be used without an exec file"));
c906108c 10234
28439a30
PA
10235 /* Make sure the remote is pointing at the right process. */
10236 set_general_process ();
10237
95cf3b38
DT
10238 if (args != NULL && strcmp (args, "-r") == 0)
10239 {
10240 read_only = 1;
10241 args = NULL;
10242 }
10243
c5aa993b 10244 for (s = exec_bfd->sections; s; s = s->next)
c906108c
SS
10245 {
10246 if (!(s->flags & SEC_LOAD))
0df8b418 10247 continue; /* Skip non-loadable section. */
c906108c 10248
95cf3b38
DT
10249 if (read_only && (s->flags & SEC_READONLY) == 0)
10250 continue; /* Skip writeable sections */
10251
2c500098 10252 size = bfd_get_section_size (s);
c906108c 10253 if (size == 0)
0df8b418 10254 continue; /* Skip zero-length section. */
c906108c 10255
ce359b09 10256 sectname = bfd_get_section_name (exec_bfd, s);
c906108c 10257 if (args && strcmp (args, sectname) != 0)
0df8b418 10258 continue; /* Not the section selected by user. */
c906108c 10259
0df8b418 10260 matched = 1; /* Do this section. */
c906108c 10261 lma = s->lma;
c906108c 10262
224c3ddb 10263 sectdata = (gdb_byte *) xmalloc (size);
b8c9b27d 10264 old_chain = make_cleanup (xfree, sectdata);
c906108c 10265 bfd_get_section_contents (exec_bfd, s, sectdata, 0, size);
c906108c 10266
4a5e7a5b
PA
10267 res = target_verify_memory (sectdata, lma, size);
10268
10269 if (res == -1)
5af949e3 10270 error (_("target memory fault, section %s, range %s -- %s"), sectname,
f5656ead
TT
10271 paddress (target_gdbarch (), lma),
10272 paddress (target_gdbarch (), lma + size));
c906108c 10273
5af949e3 10274 printf_filtered ("Section %s, range %s -- %s: ", sectname,
f5656ead
TT
10275 paddress (target_gdbarch (), lma),
10276 paddress (target_gdbarch (), lma + size));
4a5e7a5b 10277 if (res)
c906108c
SS
10278 printf_filtered ("matched.\n");
10279 else
c5aa993b
JM
10280 {
10281 printf_filtered ("MIS-MATCHED!\n");
10282 mismatched++;
10283 }
c906108c
SS
10284
10285 do_cleanups (old_chain);
10286 }
10287 if (mismatched > 0)
936d2992 10288 warning (_("One or more sections of the target image does not match\n\
8a3fe4f8 10289the loaded file\n"));
c906108c 10290 if (args && !matched)
a3f17187 10291 printf_filtered (_("No loaded section named '%s'.\n"), args);
c906108c
SS
10292}
10293
0e7f50da
UW
10294/* Write LEN bytes from WRITEBUF into OBJECT_NAME/ANNEX at OFFSET
10295 into remote target. The number of bytes written to the remote
10296 target is returned, or -1 for error. */
10297
9b409511 10298static enum target_xfer_status
0e7f50da
UW
10299remote_write_qxfer (struct target_ops *ops, const char *object_name,
10300 const char *annex, const gdb_byte *writebuf,
9b409511 10301 ULONGEST offset, LONGEST len, ULONGEST *xfered_len,
0e7f50da
UW
10302 struct packet_config *packet)
10303{
10304 int i, buf_len;
10305 ULONGEST n;
0e7f50da
UW
10306 struct remote_state *rs = get_remote_state ();
10307 int max_size = get_memory_write_packet_size ();
10308
10309 if (packet->support == PACKET_DISABLE)
2ed4b548 10310 return TARGET_XFER_E_IO;
0e7f50da
UW
10311
10312 /* Insert header. */
10313 i = snprintf (rs->buf, max_size,
10314 "qXfer:%s:write:%s:%s:",
10315 object_name, annex ? annex : "",
10316 phex_nz (offset, sizeof offset));
10317 max_size -= (i + 1);
10318
10319 /* Escape as much data as fits into rs->buf. */
10320 buf_len = remote_escape_output
124e13d9 10321 (writebuf, len, 1, (gdb_byte *) rs->buf + i, &max_size, max_size);
0e7f50da
UW
10322
10323 if (putpkt_binary (rs->buf, i + buf_len) < 0
10324 || getpkt_sane (&rs->buf, &rs->buf_size, 0) < 0
10325 || packet_ok (rs->buf, packet) != PACKET_OK)
2ed4b548 10326 return TARGET_XFER_E_IO;
0e7f50da
UW
10327
10328 unpack_varlen_hex (rs->buf, &n);
9b409511
YQ
10329
10330 *xfered_len = n;
10331 return TARGET_XFER_OK;
0e7f50da
UW
10332}
10333
0876f84a
DJ
10334/* Read OBJECT_NAME/ANNEX from the remote target using a qXfer packet.
10335 Data at OFFSET, of up to LEN bytes, is read into READBUF; the
10336 number of bytes read is returned, or 0 for EOF, or -1 for error.
10337 The number of bytes read may be less than LEN without indicating an
10338 EOF. PACKET is checked and updated to indicate whether the remote
10339 target supports this object. */
10340
9b409511 10341static enum target_xfer_status
0876f84a
DJ
10342remote_read_qxfer (struct target_ops *ops, const char *object_name,
10343 const char *annex,
10344 gdb_byte *readbuf, ULONGEST offset, LONGEST len,
9b409511 10345 ULONGEST *xfered_len,
0876f84a
DJ
10346 struct packet_config *packet)
10347{
0876f84a 10348 struct remote_state *rs = get_remote_state ();
0876f84a
DJ
10349 LONGEST i, n, packet_len;
10350
10351 if (packet->support == PACKET_DISABLE)
2ed4b548 10352 return TARGET_XFER_E_IO;
0876f84a
DJ
10353
10354 /* Check whether we've cached an end-of-object packet that matches
10355 this request. */
8e88304f 10356 if (rs->finished_object)
0876f84a 10357 {
8e88304f
TT
10358 if (strcmp (object_name, rs->finished_object) == 0
10359 && strcmp (annex ? annex : "", rs->finished_annex) == 0
10360 && offset == rs->finished_offset)
9b409511
YQ
10361 return TARGET_XFER_EOF;
10362
0876f84a
DJ
10363
10364 /* Otherwise, we're now reading something different. Discard
10365 the cache. */
8e88304f
TT
10366 xfree (rs->finished_object);
10367 xfree (rs->finished_annex);
10368 rs->finished_object = NULL;
10369 rs->finished_annex = NULL;
0876f84a
DJ
10370 }
10371
10372 /* Request only enough to fit in a single packet. The actual data
10373 may not, since we don't know how much of it will need to be escaped;
10374 the target is free to respond with slightly less data. We subtract
10375 five to account for the response type and the protocol frame. */
768adc05 10376 n = std::min<LONGEST> (get_remote_packet_size () - 5, len);
0876f84a
DJ
10377 snprintf (rs->buf, get_remote_packet_size () - 4, "qXfer:%s:read:%s:%s,%s",
10378 object_name, annex ? annex : "",
10379 phex_nz (offset, sizeof offset),
10380 phex_nz (n, sizeof n));
10381 i = putpkt (rs->buf);
10382 if (i < 0)
2ed4b548 10383 return TARGET_XFER_E_IO;
0876f84a
DJ
10384
10385 rs->buf[0] = '\0';
10386 packet_len = getpkt_sane (&rs->buf, &rs->buf_size, 0);
10387 if (packet_len < 0 || packet_ok (rs->buf, packet) != PACKET_OK)
2ed4b548 10388 return TARGET_XFER_E_IO;
0876f84a
DJ
10389
10390 if (rs->buf[0] != 'l' && rs->buf[0] != 'm')
10391 error (_("Unknown remote qXfer reply: %s"), rs->buf);
10392
10393 /* 'm' means there is (or at least might be) more data after this
10394 batch. That does not make sense unless there's at least one byte
10395 of data in this reply. */
10396 if (rs->buf[0] == 'm' && packet_len == 1)
10397 error (_("Remote qXfer reply contained no data."));
10398
10399 /* Got some data. */
bc20a4af
PA
10400 i = remote_unescape_input ((gdb_byte *) rs->buf + 1,
10401 packet_len - 1, readbuf, n);
0876f84a
DJ
10402
10403 /* 'l' is an EOF marker, possibly including a final block of data,
0e7f50da
UW
10404 or possibly empty. If we have the final block of a non-empty
10405 object, record this fact to bypass a subsequent partial read. */
10406 if (rs->buf[0] == 'l' && offset + i > 0)
0876f84a 10407 {
8e88304f
TT
10408 rs->finished_object = xstrdup (object_name);
10409 rs->finished_annex = xstrdup (annex ? annex : "");
10410 rs->finished_offset = offset + i;
0876f84a
DJ
10411 }
10412
9b409511
YQ
10413 if (i == 0)
10414 return TARGET_XFER_EOF;
10415 else
10416 {
10417 *xfered_len = i;
10418 return TARGET_XFER_OK;
10419 }
0876f84a
DJ
10420}
10421
9b409511 10422static enum target_xfer_status
4b8a223f 10423remote_xfer_partial (struct target_ops *ops, enum target_object object,
961cb7b5 10424 const char *annex, gdb_byte *readbuf,
9b409511
YQ
10425 const gdb_byte *writebuf, ULONGEST offset, ULONGEST len,
10426 ULONGEST *xfered_len)
c906108c 10427{
82f73884 10428 struct remote_state *rs;
c906108c 10429 int i;
6d820c5c 10430 char *p2;
1e3ff5ad 10431 char query_type;
124e13d9 10432 int unit_size = gdbarch_addressable_memory_unit_size (target_gdbarch ());
c906108c 10433
e6e4e701 10434 set_remote_traceframe ();
82f73884
PA
10435 set_general_thread (inferior_ptid);
10436
10437 rs = get_remote_state ();
10438
b2182ed2 10439 /* Handle memory using the standard memory routines. */
21e3b9b9
DJ
10440 if (object == TARGET_OBJECT_MEMORY)
10441 {
2d717e4f
DJ
10442 /* If the remote target is connected but not running, we should
10443 pass this request down to a lower stratum (e.g. the executable
10444 file). */
10445 if (!target_has_execution)
9b409511 10446 return TARGET_XFER_EOF;
2d717e4f 10447
21e3b9b9 10448 if (writebuf != NULL)
124e13d9
SM
10449 return remote_write_bytes (offset, writebuf, len, unit_size,
10450 xfered_len);
21e3b9b9 10451 else
124e13d9
SM
10452 return remote_read_bytes (ops, offset, readbuf, len, unit_size,
10453 xfered_len);
21e3b9b9
DJ
10454 }
10455
0df8b418 10456 /* Handle SPU memory using qxfer packets. */
0e7f50da
UW
10457 if (object == TARGET_OBJECT_SPU)
10458 {
10459 if (readbuf)
10460 return remote_read_qxfer (ops, "spu", annex, readbuf, offset, len,
9b409511
YQ
10461 xfered_len, &remote_protocol_packets
10462 [PACKET_qXfer_spu_read]);
0e7f50da
UW
10463 else
10464 return remote_write_qxfer (ops, "spu", annex, writebuf, offset, len,
9b409511
YQ
10465 xfered_len, &remote_protocol_packets
10466 [PACKET_qXfer_spu_write]);
0e7f50da
UW
10467 }
10468
4aa995e1
PA
10469 /* Handle extra signal info using qxfer packets. */
10470 if (object == TARGET_OBJECT_SIGNAL_INFO)
10471 {
10472 if (readbuf)
10473 return remote_read_qxfer (ops, "siginfo", annex, readbuf, offset, len,
9b409511 10474 xfered_len, &remote_protocol_packets
4aa995e1
PA
10475 [PACKET_qXfer_siginfo_read]);
10476 else
3e43a32a 10477 return remote_write_qxfer (ops, "siginfo", annex,
9b409511 10478 writebuf, offset, len, xfered_len,
4aa995e1
PA
10479 &remote_protocol_packets
10480 [PACKET_qXfer_siginfo_write]);
10481 }
10482
0fb4aa4b
PA
10483 if (object == TARGET_OBJECT_STATIC_TRACE_DATA)
10484 {
10485 if (readbuf)
3e43a32a 10486 return remote_read_qxfer (ops, "statictrace", annex,
9b409511 10487 readbuf, offset, len, xfered_len,
0fb4aa4b
PA
10488 &remote_protocol_packets
10489 [PACKET_qXfer_statictrace_read]);
10490 else
2ed4b548 10491 return TARGET_XFER_E_IO;
0fb4aa4b
PA
10492 }
10493
a76d924d
DJ
10494 /* Only handle flash writes. */
10495 if (writebuf != NULL)
10496 {
a76d924d
DJ
10497 switch (object)
10498 {
10499 case TARGET_OBJECT_FLASH:
9b409511
YQ
10500 return remote_flash_write (ops, offset, len, xfered_len,
10501 writebuf);
a76d924d
DJ
10502
10503 default:
2ed4b548 10504 return TARGET_XFER_E_IO;
a76d924d
DJ
10505 }
10506 }
4b8a223f 10507
1e3ff5ad
AC
10508 /* Map pre-existing objects onto letters. DO NOT do this for new
10509 objects!!! Instead specify new query packets. */
10510 switch (object)
c906108c 10511 {
1e3ff5ad
AC
10512 case TARGET_OBJECT_AVR:
10513 query_type = 'R';
10514 break;
802188a7
RM
10515
10516 case TARGET_OBJECT_AUXV:
0876f84a
DJ
10517 gdb_assert (annex == NULL);
10518 return remote_read_qxfer (ops, "auxv", annex, readbuf, offset, len,
9b409511 10519 xfered_len,
0876f84a 10520 &remote_protocol_packets[PACKET_qXfer_auxv]);
802188a7 10521
23181151
DJ
10522 case TARGET_OBJECT_AVAILABLE_FEATURES:
10523 return remote_read_qxfer
9b409511 10524 (ops, "features", annex, readbuf, offset, len, xfered_len,
23181151
DJ
10525 &remote_protocol_packets[PACKET_qXfer_features]);
10526
cfa9d6d9
DJ
10527 case TARGET_OBJECT_LIBRARIES:
10528 return remote_read_qxfer
9b409511 10529 (ops, "libraries", annex, readbuf, offset, len, xfered_len,
cfa9d6d9
DJ
10530 &remote_protocol_packets[PACKET_qXfer_libraries]);
10531
2268b414
JK
10532 case TARGET_OBJECT_LIBRARIES_SVR4:
10533 return remote_read_qxfer
9b409511 10534 (ops, "libraries-svr4", annex, readbuf, offset, len, xfered_len,
2268b414
JK
10535 &remote_protocol_packets[PACKET_qXfer_libraries_svr4]);
10536
fd79ecee
DJ
10537 case TARGET_OBJECT_MEMORY_MAP:
10538 gdb_assert (annex == NULL);
10539 return remote_read_qxfer (ops, "memory-map", annex, readbuf, offset, len,
9b409511 10540 xfered_len,
fd79ecee
DJ
10541 &remote_protocol_packets[PACKET_qXfer_memory_map]);
10542
07e059b5
VP
10543 case TARGET_OBJECT_OSDATA:
10544 /* Should only get here if we're connected. */
5d93a237 10545 gdb_assert (rs->remote_desc);
07e059b5 10546 return remote_read_qxfer
9b409511 10547 (ops, "osdata", annex, readbuf, offset, len, xfered_len,
07e059b5
VP
10548 &remote_protocol_packets[PACKET_qXfer_osdata]);
10549
dc146f7c
VP
10550 case TARGET_OBJECT_THREADS:
10551 gdb_assert (annex == NULL);
10552 return remote_read_qxfer (ops, "threads", annex, readbuf, offset, len,
9b409511 10553 xfered_len,
dc146f7c
VP
10554 &remote_protocol_packets[PACKET_qXfer_threads]);
10555
b3b9301e
PA
10556 case TARGET_OBJECT_TRACEFRAME_INFO:
10557 gdb_assert (annex == NULL);
10558 return remote_read_qxfer
9b409511 10559 (ops, "traceframe-info", annex, readbuf, offset, len, xfered_len,
b3b9301e 10560 &remote_protocol_packets[PACKET_qXfer_traceframe_info]);
78d85199
YQ
10561
10562 case TARGET_OBJECT_FDPIC:
10563 return remote_read_qxfer (ops, "fdpic", annex, readbuf, offset, len,
9b409511 10564 xfered_len,
78d85199 10565 &remote_protocol_packets[PACKET_qXfer_fdpic]);
169081d0
TG
10566
10567 case TARGET_OBJECT_OPENVMS_UIB:
10568 return remote_read_qxfer (ops, "uib", annex, readbuf, offset, len,
9b409511 10569 xfered_len,
169081d0
TG
10570 &remote_protocol_packets[PACKET_qXfer_uib]);
10571
9accd112
MM
10572 case TARGET_OBJECT_BTRACE:
10573 return remote_read_qxfer (ops, "btrace", annex, readbuf, offset, len,
9b409511 10574 xfered_len,
9accd112
MM
10575 &remote_protocol_packets[PACKET_qXfer_btrace]);
10576
f4abbc16
MM
10577 case TARGET_OBJECT_BTRACE_CONF:
10578 return remote_read_qxfer (ops, "btrace-conf", annex, readbuf, offset,
10579 len, xfered_len,
10580 &remote_protocol_packets[PACKET_qXfer_btrace_conf]);
10581
c78fa86a
GB
10582 case TARGET_OBJECT_EXEC_FILE:
10583 return remote_read_qxfer (ops, "exec-file", annex, readbuf, offset,
10584 len, xfered_len,
10585 &remote_protocol_packets[PACKET_qXfer_exec_file]);
10586
1e3ff5ad 10587 default:
2ed4b548 10588 return TARGET_XFER_E_IO;
c906108c
SS
10589 }
10590
0df8b418 10591 /* Minimum outbuf size is get_remote_packet_size (). If LEN is not
24b06219 10592 large enough let the caller deal with it. */
ea9c271d 10593 if (len < get_remote_packet_size ())
2ed4b548 10594 return TARGET_XFER_E_IO;
ea9c271d 10595 len = get_remote_packet_size ();
1e3ff5ad 10596
23860348 10597 /* Except for querying the minimum buffer size, target must be open. */
5d93a237 10598 if (!rs->remote_desc)
8a3fe4f8 10599 error (_("remote query is only available after target open"));
c906108c 10600
1e3ff5ad 10601 gdb_assert (annex != NULL);
4b8a223f 10602 gdb_assert (readbuf != NULL);
c906108c 10603
6d820c5c 10604 p2 = rs->buf;
c906108c
SS
10605 *p2++ = 'q';
10606 *p2++ = query_type;
10607
23860348
MS
10608 /* We used one buffer char for the remote protocol q command and
10609 another for the query type. As the remote protocol encapsulation
10610 uses 4 chars plus one extra in case we are debugging
10611 (remote_debug), we have PBUFZIZ - 7 left to pack the query
10612 string. */
c906108c 10613 i = 0;
ea9c271d 10614 while (annex[i] && (i < (get_remote_packet_size () - 8)))
c906108c 10615 {
1e3ff5ad
AC
10616 /* Bad caller may have sent forbidden characters. */
10617 gdb_assert (isprint (annex[i]) && annex[i] != '$' && annex[i] != '#');
10618 *p2++ = annex[i];
c906108c
SS
10619 i++;
10620 }
1e3ff5ad
AC
10621 *p2 = '\0';
10622 gdb_assert (annex[i] == '\0');
c906108c 10623
6d820c5c 10624 i = putpkt (rs->buf);
c5aa993b 10625 if (i < 0)
2ed4b548 10626 return TARGET_XFER_E_IO;
c906108c 10627
6d820c5c
DJ
10628 getpkt (&rs->buf, &rs->buf_size, 0);
10629 strcpy ((char *) readbuf, rs->buf);
c906108c 10630
9b409511
YQ
10631 *xfered_len = strlen ((char *) readbuf);
10632 return TARGET_XFER_OK;
c906108c
SS
10633}
10634
09c98b44
DB
10635/* Implementation of to_get_memory_xfer_limit. */
10636
10637static ULONGEST
10638remote_get_memory_xfer_limit (struct target_ops *ops)
10639{
10640 return get_memory_write_packet_size ();
10641}
10642
08388c79
DE
10643static int
10644remote_search_memory (struct target_ops* ops,
10645 CORE_ADDR start_addr, ULONGEST search_space_len,
10646 const gdb_byte *pattern, ULONGEST pattern_len,
10647 CORE_ADDR *found_addrp)
10648{
f5656ead 10649 int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
08388c79
DE
10650 struct remote_state *rs = get_remote_state ();
10651 int max_size = get_memory_write_packet_size ();
10652 struct packet_config *packet =
10653 &remote_protocol_packets[PACKET_qSearch_memory];
0df8b418
MS
10654 /* Number of packet bytes used to encode the pattern;
10655 this could be more than PATTERN_LEN due to escape characters. */
08388c79 10656 int escaped_pattern_len;
0df8b418 10657 /* Amount of pattern that was encodable in the packet. */
08388c79
DE
10658 int used_pattern_len;
10659 int i;
10660 int found;
10661 ULONGEST found_addr;
10662
10663 /* Don't go to the target if we don't have to.
10664 This is done before checking packet->support to avoid the possibility that
10665 a success for this edge case means the facility works in general. */
10666 if (pattern_len > search_space_len)
10667 return 0;
10668 if (pattern_len == 0)
10669 {
10670 *found_addrp = start_addr;
10671 return 1;
10672 }
10673
10674 /* If we already know the packet isn't supported, fall back to the simple
10675 way of searching memory. */
10676
4082afcc 10677 if (packet_config_support (packet) == PACKET_DISABLE)
08388c79
DE
10678 {
10679 /* Target doesn't provided special support, fall back and use the
10680 standard support (copy memory and do the search here). */
10681 return simple_search_memory (ops, start_addr, search_space_len,
10682 pattern, pattern_len, found_addrp);
10683 }
10684
28439a30
PA
10685 /* Make sure the remote is pointing at the right process. */
10686 set_general_process ();
10687
08388c79
DE
10688 /* Insert header. */
10689 i = snprintf (rs->buf, max_size,
10690 "qSearch:memory:%s;%s;",
5af949e3 10691 phex_nz (start_addr, addr_size),
08388c79
DE
10692 phex_nz (search_space_len, sizeof (search_space_len)));
10693 max_size -= (i + 1);
10694
10695 /* Escape as much data as fits into rs->buf. */
10696 escaped_pattern_len =
124e13d9 10697 remote_escape_output (pattern, pattern_len, 1, (gdb_byte *) rs->buf + i,
08388c79
DE
10698 &used_pattern_len, max_size);
10699
10700 /* Bail if the pattern is too large. */
10701 if (used_pattern_len != pattern_len)
9b20d036 10702 error (_("Pattern is too large to transmit to remote target."));
08388c79
DE
10703
10704 if (putpkt_binary (rs->buf, i + escaped_pattern_len) < 0
10705 || getpkt_sane (&rs->buf, &rs->buf_size, 0) < 0
10706 || packet_ok (rs->buf, packet) != PACKET_OK)
10707 {
10708 /* The request may not have worked because the command is not
10709 supported. If so, fall back to the simple way. */
10710 if (packet->support == PACKET_DISABLE)
10711 {
10712 return simple_search_memory (ops, start_addr, search_space_len,
10713 pattern, pattern_len, found_addrp);
10714 }
10715 return -1;
10716 }
10717
10718 if (rs->buf[0] == '0')
10719 found = 0;
10720 else if (rs->buf[0] == '1')
10721 {
10722 found = 1;
10723 if (rs->buf[1] != ',')
10e0fa18 10724 error (_("Unknown qSearch:memory reply: %s"), rs->buf);
08388c79
DE
10725 unpack_varlen_hex (rs->buf + 2, &found_addr);
10726 *found_addrp = found_addr;
10727 }
10728 else
10e0fa18 10729 error (_("Unknown qSearch:memory reply: %s"), rs->buf);
08388c79
DE
10730
10731 return found;
10732}
10733
96baa820 10734static void
a30bf1f1 10735remote_rcmd (struct target_ops *self, const char *command,
d9fcf2fb 10736 struct ui_file *outbuf)
96baa820 10737{
d01949b6 10738 struct remote_state *rs = get_remote_state ();
2e9f7625 10739 char *p = rs->buf;
96baa820 10740
5d93a237 10741 if (!rs->remote_desc)
8a3fe4f8 10742 error (_("remote rcmd is only available after target open"));
96baa820 10743
23860348 10744 /* Send a NULL command across as an empty command. */
7be570e7
JM
10745 if (command == NULL)
10746 command = "";
10747
23860348 10748 /* The query prefix. */
2e9f7625
DJ
10749 strcpy (rs->buf, "qRcmd,");
10750 p = strchr (rs->buf, '\0');
96baa820 10751
3e43a32a
MS
10752 if ((strlen (rs->buf) + strlen (command) * 2 + 8/*misc*/)
10753 > get_remote_packet_size ())
8a3fe4f8 10754 error (_("\"monitor\" command ``%s'' is too long."), command);
96baa820 10755
23860348 10756 /* Encode the actual command. */
a30bf1f1 10757 bin2hex ((const gdb_byte *) command, p, strlen (command));
96baa820 10758
6d820c5c 10759 if (putpkt (rs->buf) < 0)
8a3fe4f8 10760 error (_("Communication problem with target."));
96baa820
JM
10761
10762 /* get/display the response */
10763 while (1)
10764 {
2e9f7625
DJ
10765 char *buf;
10766
00bf0b85 10767 /* XXX - see also remote_get_noisy_reply(). */
5b37825d 10768 QUIT; /* Allow user to bail out with ^C. */
2e9f7625 10769 rs->buf[0] = '\0';
5b37825d
PW
10770 if (getpkt_sane (&rs->buf, &rs->buf_size, 0) == -1)
10771 {
10772 /* Timeout. Continue to (try to) read responses.
10773 This is better than stopping with an error, assuming the stub
10774 is still executing the (long) monitor command.
10775 If needed, the user can interrupt gdb using C-c, obtaining
10776 an effect similar to stop on timeout. */
10777 continue;
10778 }
2e9f7625 10779 buf = rs->buf;
96baa820 10780 if (buf[0] == '\0')
8a3fe4f8 10781 error (_("Target does not support this command."));
96baa820
JM
10782 if (buf[0] == 'O' && buf[1] != 'K')
10783 {
23860348 10784 remote_console_output (buf + 1); /* 'O' message from stub. */
96baa820
JM
10785 continue;
10786 }
10787 if (strcmp (buf, "OK") == 0)
10788 break;
7be570e7
JM
10789 if (strlen (buf) == 3 && buf[0] == 'E'
10790 && isdigit (buf[1]) && isdigit (buf[2]))
10791 {
8a3fe4f8 10792 error (_("Protocol error with Rcmd"));
7be570e7 10793 }
96baa820
JM
10794 for (p = buf; p[0] != '\0' && p[1] != '\0'; p += 2)
10795 {
10796 char c = (fromhex (p[0]) << 4) + fromhex (p[1]);
a744cf53 10797
96baa820
JM
10798 fputc_unfiltered (c, outbuf);
10799 }
10800 break;
10801 }
10802}
10803
fd79ecee
DJ
10804static VEC(mem_region_s) *
10805remote_memory_map (struct target_ops *ops)
10806{
10807 VEC(mem_region_s) *result = NULL;
10808 char *text = target_read_stralloc (&current_target,
10809 TARGET_OBJECT_MEMORY_MAP, NULL);
10810
10811 if (text)
10812 {
10813 struct cleanup *back_to = make_cleanup (xfree, text);
a744cf53 10814
fd79ecee
DJ
10815 result = parse_memory_map (text);
10816 do_cleanups (back_to);
10817 }
10818
10819 return result;
10820}
10821
c906108c 10822static void
fba45db2 10823packet_command (char *args, int from_tty)
c906108c 10824{
d01949b6 10825 struct remote_state *rs = get_remote_state ();
c906108c 10826
5d93a237 10827 if (!rs->remote_desc)
8a3fe4f8 10828 error (_("command can only be used with remote target"));
c906108c 10829
c5aa993b 10830 if (!args)
8a3fe4f8 10831 error (_("remote-packet command requires packet text as argument"));
c906108c
SS
10832
10833 puts_filtered ("sending: ");
10834 print_packet (args);
10835 puts_filtered ("\n");
10836 putpkt (args);
10837
6d820c5c 10838 getpkt (&rs->buf, &rs->buf_size, 0);
c906108c 10839 puts_filtered ("received: ");
6d820c5c 10840 print_packet (rs->buf);
c906108c
SS
10841 puts_filtered ("\n");
10842}
10843
10844#if 0
23860348 10845/* --------- UNIT_TEST for THREAD oriented PACKETS ------------------- */
c906108c 10846
a14ed312 10847static void display_thread_info (struct gdb_ext_thread_info *info);
c906108c 10848
a14ed312 10849static void threadset_test_cmd (char *cmd, int tty);
c906108c 10850
a14ed312 10851static void threadalive_test (char *cmd, int tty);
c906108c 10852
a14ed312 10853static void threadlist_test_cmd (char *cmd, int tty);
c906108c 10854
23860348 10855int get_and_display_threadinfo (threadref *ref);
c906108c 10856
a14ed312 10857static void threadinfo_test_cmd (char *cmd, int tty);
c906108c 10858
23860348 10859static int thread_display_step (threadref *ref, void *context);
c906108c 10860
a14ed312 10861static void threadlist_update_test_cmd (char *cmd, int tty);
c906108c 10862
a14ed312 10863static void init_remote_threadtests (void);
c906108c 10864
23860348 10865#define SAMPLE_THREAD 0x05060708 /* Truncated 64 bit threadid. */
c906108c
SS
10866
10867static void
fba45db2 10868threadset_test_cmd (char *cmd, int tty)
c906108c
SS
10869{
10870 int sample_thread = SAMPLE_THREAD;
10871
a3f17187 10872 printf_filtered (_("Remote threadset test\n"));
79d7f229 10873 set_general_thread (sample_thread);
c906108c
SS
10874}
10875
10876
10877static void
fba45db2 10878threadalive_test (char *cmd, int tty)
c906108c
SS
10879{
10880 int sample_thread = SAMPLE_THREAD;
79d7f229 10881 int pid = ptid_get_pid (inferior_ptid);
ba348170 10882 ptid_t ptid = ptid_build (pid, sample_thread, 0);
c906108c 10883
79d7f229 10884 if (remote_thread_alive (ptid))
c906108c
SS
10885 printf_filtered ("PASS: Thread alive test\n");
10886 else
10887 printf_filtered ("FAIL: Thread alive test\n");
10888}
10889
23860348 10890void output_threadid (char *title, threadref *ref);
c906108c
SS
10891
10892void
fba45db2 10893output_threadid (char *title, threadref *ref)
c906108c
SS
10894{
10895 char hexid[20];
10896
23860348 10897 pack_threadid (&hexid[0], ref); /* Convert threead id into hex. */
c906108c
SS
10898 hexid[16] = 0;
10899 printf_filtered ("%s %s\n", title, (&hexid[0]));
10900}
10901
10902static void
fba45db2 10903threadlist_test_cmd (char *cmd, int tty)
c906108c
SS
10904{
10905 int startflag = 1;
10906 threadref nextthread;
10907 int done, result_count;
10908 threadref threadlist[3];
10909
10910 printf_filtered ("Remote Threadlist test\n");
10911 if (!remote_get_threadlist (startflag, &nextthread, 3, &done,
10912 &result_count, &threadlist[0]))
10913 printf_filtered ("FAIL: threadlist test\n");
10914 else
10915 {
10916 threadref *scan = threadlist;
10917 threadref *limit = scan + result_count;
10918
10919 while (scan < limit)
10920 output_threadid (" thread ", scan++);
10921 }
10922}
10923
10924void
fba45db2 10925display_thread_info (struct gdb_ext_thread_info *info)
c906108c
SS
10926{
10927 output_threadid ("Threadid: ", &info->threadid);
10928 printf_filtered ("Name: %s\n ", info->shortname);
10929 printf_filtered ("State: %s\n", info->display);
10930 printf_filtered ("other: %s\n\n", info->more_display);
10931}
10932
10933int
fba45db2 10934get_and_display_threadinfo (threadref *ref)
c906108c
SS
10935{
10936 int result;
10937 int set;
10938 struct gdb_ext_thread_info threadinfo;
10939
10940 set = TAG_THREADID | TAG_EXISTS | TAG_THREADNAME
10941 | TAG_MOREDISPLAY | TAG_DISPLAY;
10942 if (0 != (result = remote_get_threadinfo (ref, set, &threadinfo)))
10943 display_thread_info (&threadinfo);
10944 return result;
10945}
10946
10947static void
fba45db2 10948threadinfo_test_cmd (char *cmd, int tty)
c906108c
SS
10949{
10950 int athread = SAMPLE_THREAD;
10951 threadref thread;
10952 int set;
10953
10954 int_to_threadref (&thread, athread);
10955 printf_filtered ("Remote Threadinfo test\n");
10956 if (!get_and_display_threadinfo (&thread))
10957 printf_filtered ("FAIL cannot get thread info\n");
10958}
10959
10960static int
fba45db2 10961thread_display_step (threadref *ref, void *context)
c906108c
SS
10962{
10963 /* output_threadid(" threadstep ",ref); *//* simple test */
10964 return get_and_display_threadinfo (ref);
10965}
10966
10967static void
fba45db2 10968threadlist_update_test_cmd (char *cmd, int tty)
c906108c
SS
10969{
10970 printf_filtered ("Remote Threadlist update test\n");
10971 remote_threadlist_iterator (thread_display_step, 0, CRAZY_MAX_THREADS);
10972}
10973
10974static void
10975init_remote_threadtests (void)
10976{
3e43a32a
MS
10977 add_com ("tlist", class_obscure, threadlist_test_cmd,
10978 _("Fetch and print the remote list of "
10979 "thread identifiers, one pkt only"));
c906108c 10980 add_com ("tinfo", class_obscure, threadinfo_test_cmd,
1bedd215 10981 _("Fetch and display info about one thread"));
c906108c 10982 add_com ("tset", class_obscure, threadset_test_cmd,
1bedd215 10983 _("Test setting to a different thread"));
c906108c 10984 add_com ("tupd", class_obscure, threadlist_update_test_cmd,
1bedd215 10985 _("Iterate through updating all remote thread info"));
c906108c 10986 add_com ("talive", class_obscure, threadalive_test,
1bedd215 10987 _(" Remote thread alive test "));
c906108c
SS
10988}
10989
10990#endif /* 0 */
10991
f3fb8c85
MS
10992/* Convert a thread ID to a string. Returns the string in a static
10993 buffer. */
10994
7a114964 10995static const char *
117de6a9 10996remote_pid_to_str (struct target_ops *ops, ptid_t ptid)
f3fb8c85 10997{
79d7f229 10998 static char buf[64];
82f73884 10999 struct remote_state *rs = get_remote_state ();
f3fb8c85 11000
7cee1e54
PA
11001 if (ptid_equal (ptid, null_ptid))
11002 return normal_pid_to_str (ptid);
11003 else if (ptid_is_pid (ptid))
ecd0ada5
PA
11004 {
11005 /* Printing an inferior target id. */
11006
11007 /* When multi-process extensions are off, there's no way in the
11008 remote protocol to know the remote process id, if there's any
11009 at all. There's one exception --- when we're connected with
11010 target extended-remote, and we manually attached to a process
11011 with "attach PID". We don't record anywhere a flag that
11012 allows us to distinguish that case from the case of
11013 connecting with extended-remote and the stub already being
11014 attached to a process, and reporting yes to qAttached, hence
11015 no smart special casing here. */
11016 if (!remote_multi_process_p (rs))
11017 {
11018 xsnprintf (buf, sizeof buf, "Remote target");
11019 return buf;
11020 }
11021
11022 return normal_pid_to_str (ptid);
82f73884 11023 }
ecd0ada5 11024 else
79d7f229 11025 {
ecd0ada5
PA
11026 if (ptid_equal (magic_null_ptid, ptid))
11027 xsnprintf (buf, sizeof buf, "Thread <main>");
8020350c 11028 else if (remote_multi_process_p (rs))
de0d863e
DB
11029 if (ptid_get_lwp (ptid) == 0)
11030 return normal_pid_to_str (ptid);
11031 else
11032 xsnprintf (buf, sizeof buf, "Thread %d.%ld",
11033 ptid_get_pid (ptid), ptid_get_lwp (ptid));
ecd0ada5
PA
11034 else
11035 xsnprintf (buf, sizeof buf, "Thread %ld",
ba348170 11036 ptid_get_lwp (ptid));
79d7f229
PA
11037 return buf;
11038 }
f3fb8c85
MS
11039}
11040
38691318
KB
11041/* Get the address of the thread local variable in OBJFILE which is
11042 stored at OFFSET within the thread local storage for thread PTID. */
11043
11044static CORE_ADDR
117de6a9
PA
11045remote_get_thread_local_address (struct target_ops *ops,
11046 ptid_t ptid, CORE_ADDR lm, CORE_ADDR offset)
38691318 11047{
4082afcc 11048 if (packet_support (PACKET_qGetTLSAddr) != PACKET_DISABLE)
38691318
KB
11049 {
11050 struct remote_state *rs = get_remote_state ();
6d820c5c 11051 char *p = rs->buf;
82f73884 11052 char *endp = rs->buf + get_remote_packet_size ();
571dd617 11053 enum packet_result result;
38691318
KB
11054
11055 strcpy (p, "qGetTLSAddr:");
11056 p += strlen (p);
82f73884 11057 p = write_ptid (p, endp, ptid);
38691318
KB
11058 *p++ = ',';
11059 p += hexnumstr (p, offset);
11060 *p++ = ',';
11061 p += hexnumstr (p, lm);
11062 *p++ = '\0';
11063
6d820c5c
DJ
11064 putpkt (rs->buf);
11065 getpkt (&rs->buf, &rs->buf_size, 0);
3e43a32a
MS
11066 result = packet_ok (rs->buf,
11067 &remote_protocol_packets[PACKET_qGetTLSAddr]);
571dd617 11068 if (result == PACKET_OK)
38691318
KB
11069 {
11070 ULONGEST result;
11071
6d820c5c 11072 unpack_varlen_hex (rs->buf, &result);
38691318
KB
11073 return result;
11074 }
571dd617 11075 else if (result == PACKET_UNKNOWN)
109c3e39
AC
11076 throw_error (TLS_GENERIC_ERROR,
11077 _("Remote target doesn't support qGetTLSAddr packet"));
38691318 11078 else
109c3e39
AC
11079 throw_error (TLS_GENERIC_ERROR,
11080 _("Remote target failed to process qGetTLSAddr request"));
38691318
KB
11081 }
11082 else
109c3e39
AC
11083 throw_error (TLS_GENERIC_ERROR,
11084 _("TLS not supported or disabled on this target"));
38691318
KB
11085 /* Not reached. */
11086 return 0;
11087}
11088
711e434b
PM
11089/* Provide thread local base, i.e. Thread Information Block address.
11090 Returns 1 if ptid is found and thread_local_base is non zero. */
11091
70221824 11092static int
bd7ae0f5 11093remote_get_tib_address (struct target_ops *self, ptid_t ptid, CORE_ADDR *addr)
711e434b 11094{
4082afcc 11095 if (packet_support (PACKET_qGetTIBAddr) != PACKET_DISABLE)
711e434b
PM
11096 {
11097 struct remote_state *rs = get_remote_state ();
11098 char *p = rs->buf;
11099 char *endp = rs->buf + get_remote_packet_size ();
11100 enum packet_result result;
11101
11102 strcpy (p, "qGetTIBAddr:");
11103 p += strlen (p);
11104 p = write_ptid (p, endp, ptid);
11105 *p++ = '\0';
11106
11107 putpkt (rs->buf);
11108 getpkt (&rs->buf, &rs->buf_size, 0);
11109 result = packet_ok (rs->buf,
11110 &remote_protocol_packets[PACKET_qGetTIBAddr]);
11111 if (result == PACKET_OK)
11112 {
11113 ULONGEST result;
11114
11115 unpack_varlen_hex (rs->buf, &result);
11116 if (addr)
11117 *addr = (CORE_ADDR) result;
11118 return 1;
11119 }
11120 else if (result == PACKET_UNKNOWN)
11121 error (_("Remote target doesn't support qGetTIBAddr packet"));
11122 else
11123 error (_("Remote target failed to process qGetTIBAddr request"));
11124 }
11125 else
11126 error (_("qGetTIBAddr not supported or disabled on this target"));
11127 /* Not reached. */
11128 return 0;
11129}
11130
29709017
DJ
11131/* Support for inferring a target description based on the current
11132 architecture and the size of a 'g' packet. While the 'g' packet
11133 can have any size (since optional registers can be left off the
11134 end), some sizes are easily recognizable given knowledge of the
11135 approximate architecture. */
11136
11137struct remote_g_packet_guess
11138{
11139 int bytes;
11140 const struct target_desc *tdesc;
11141};
11142typedef struct remote_g_packet_guess remote_g_packet_guess_s;
11143DEF_VEC_O(remote_g_packet_guess_s);
11144
11145struct remote_g_packet_data
11146{
11147 VEC(remote_g_packet_guess_s) *guesses;
11148};
11149
11150static struct gdbarch_data *remote_g_packet_data_handle;
11151
11152static void *
11153remote_g_packet_data_init (struct obstack *obstack)
11154{
11155 return OBSTACK_ZALLOC (obstack, struct remote_g_packet_data);
11156}
11157
11158void
11159register_remote_g_packet_guess (struct gdbarch *gdbarch, int bytes,
11160 const struct target_desc *tdesc)
11161{
11162 struct remote_g_packet_data *data
19ba03f4
SM
11163 = ((struct remote_g_packet_data *)
11164 gdbarch_data (gdbarch, remote_g_packet_data_handle));
29709017
DJ
11165 struct remote_g_packet_guess new_guess, *guess;
11166 int ix;
11167
11168 gdb_assert (tdesc != NULL);
11169
11170 for (ix = 0;
11171 VEC_iterate (remote_g_packet_guess_s, data->guesses, ix, guess);
11172 ix++)
11173 if (guess->bytes == bytes)
11174 internal_error (__FILE__, __LINE__,
9b20d036 11175 _("Duplicate g packet description added for size %d"),
29709017
DJ
11176 bytes);
11177
11178 new_guess.bytes = bytes;
11179 new_guess.tdesc = tdesc;
11180 VEC_safe_push (remote_g_packet_guess_s, data->guesses, &new_guess);
11181}
11182
d962ef82
DJ
11183/* Return 1 if remote_read_description would do anything on this target
11184 and architecture, 0 otherwise. */
11185
11186static int
11187remote_read_description_p (struct target_ops *target)
11188{
11189 struct remote_g_packet_data *data
19ba03f4
SM
11190 = ((struct remote_g_packet_data *)
11191 gdbarch_data (target_gdbarch (), remote_g_packet_data_handle));
d962ef82
DJ
11192
11193 if (!VEC_empty (remote_g_packet_guess_s, data->guesses))
11194 return 1;
11195
11196 return 0;
11197}
11198
29709017
DJ
11199static const struct target_desc *
11200remote_read_description (struct target_ops *target)
11201{
11202 struct remote_g_packet_data *data
19ba03f4
SM
11203 = ((struct remote_g_packet_data *)
11204 gdbarch_data (target_gdbarch (), remote_g_packet_data_handle));
29709017 11205
d962ef82
DJ
11206 /* Do not try this during initial connection, when we do not know
11207 whether there is a running but stopped thread. */
11208 if (!target_has_execution || ptid_equal (inferior_ptid, null_ptid))
2117c711 11209 return target->beneath->to_read_description (target->beneath);
d962ef82 11210
29709017
DJ
11211 if (!VEC_empty (remote_g_packet_guess_s, data->guesses))
11212 {
11213 struct remote_g_packet_guess *guess;
11214 int ix;
11215 int bytes = send_g_packet ();
11216
11217 for (ix = 0;
11218 VEC_iterate (remote_g_packet_guess_s, data->guesses, ix, guess);
11219 ix++)
11220 if (guess->bytes == bytes)
11221 return guess->tdesc;
11222
11223 /* We discard the g packet. A minor optimization would be to
11224 hold on to it, and fill the register cache once we have selected
11225 an architecture, but it's too tricky to do safely. */
11226 }
11227
2117c711 11228 return target->beneath->to_read_description (target->beneath);
29709017
DJ
11229}
11230
a6b151f1
DJ
11231/* Remote file transfer support. This is host-initiated I/O, not
11232 target-initiated; for target-initiated, see remote-fileio.c. */
11233
11234/* If *LEFT is at least the length of STRING, copy STRING to
11235 *BUFFER, update *BUFFER to point to the new end of the buffer, and
11236 decrease *LEFT. Otherwise raise an error. */
11237
11238static void
a121b7c1 11239remote_buffer_add_string (char **buffer, int *left, const char *string)
a6b151f1
DJ
11240{
11241 int len = strlen (string);
11242
11243 if (len > *left)
11244 error (_("Packet too long for target."));
11245
11246 memcpy (*buffer, string, len);
11247 *buffer += len;
11248 *left -= len;
11249
11250 /* NUL-terminate the buffer as a convenience, if there is
11251 room. */
11252 if (*left)
11253 **buffer = '\0';
11254}
11255
11256/* If *LEFT is large enough, hex encode LEN bytes from BYTES into
11257 *BUFFER, update *BUFFER to point to the new end of the buffer, and
11258 decrease *LEFT. Otherwise raise an error. */
11259
11260static void
11261remote_buffer_add_bytes (char **buffer, int *left, const gdb_byte *bytes,
11262 int len)
11263{
11264 if (2 * len > *left)
11265 error (_("Packet too long for target."));
11266
11267 bin2hex (bytes, *buffer, len);
11268 *buffer += 2 * len;
11269 *left -= 2 * len;
11270
11271 /* NUL-terminate the buffer as a convenience, if there is
11272 room. */
11273 if (*left)
11274 **buffer = '\0';
11275}
11276
11277/* If *LEFT is large enough, convert VALUE to hex and add it to
11278 *BUFFER, update *BUFFER to point to the new end of the buffer, and
11279 decrease *LEFT. Otherwise raise an error. */
11280
11281static void
11282remote_buffer_add_int (char **buffer, int *left, ULONGEST value)
11283{
11284 int len = hexnumlen (value);
11285
11286 if (len > *left)
11287 error (_("Packet too long for target."));
11288
11289 hexnumstr (*buffer, value);
11290 *buffer += len;
11291 *left -= len;
11292
11293 /* NUL-terminate the buffer as a convenience, if there is
11294 room. */
11295 if (*left)
11296 **buffer = '\0';
11297}
11298
11299/* Parse an I/O result packet from BUFFER. Set RETCODE to the return
11300 value, *REMOTE_ERRNO to the remote error number or zero if none
11301 was included, and *ATTACHMENT to point to the start of the annex
11302 if any. The length of the packet isn't needed here; there may
11303 be NUL bytes in BUFFER, but they will be after *ATTACHMENT.
11304
11305 Return 0 if the packet could be parsed, -1 if it could not. If
11306 -1 is returned, the other variables may not be initialized. */
11307
11308static int
11309remote_hostio_parse_result (char *buffer, int *retcode,
11310 int *remote_errno, char **attachment)
11311{
11312 char *p, *p2;
11313
11314 *remote_errno = 0;
11315 *attachment = NULL;
11316
11317 if (buffer[0] != 'F')
11318 return -1;
11319
11320 errno = 0;
11321 *retcode = strtol (&buffer[1], &p, 16);
11322 if (errno != 0 || p == &buffer[1])
11323 return -1;
11324
11325 /* Check for ",errno". */
11326 if (*p == ',')
11327 {
11328 errno = 0;
11329 *remote_errno = strtol (p + 1, &p2, 16);
11330 if (errno != 0 || p + 1 == p2)
11331 return -1;
11332 p = p2;
11333 }
11334
11335 /* Check for ";attachment". If there is no attachment, the
11336 packet should end here. */
11337 if (*p == ';')
11338 {
11339 *attachment = p + 1;
11340 return 0;
11341 }
11342 else if (*p == '\0')
11343 return 0;
11344 else
11345 return -1;
11346}
11347
11348/* Send a prepared I/O packet to the target and read its response.
11349 The prepared packet is in the global RS->BUF before this function
11350 is called, and the answer is there when we return.
11351
11352 COMMAND_BYTES is the length of the request to send, which may include
11353 binary data. WHICH_PACKET is the packet configuration to check
11354 before attempting a packet. If an error occurs, *REMOTE_ERRNO
11355 is set to the error number and -1 is returned. Otherwise the value
11356 returned by the function is returned.
11357
11358 ATTACHMENT and ATTACHMENT_LEN should be non-NULL if and only if an
11359 attachment is expected; an error will be reported if there's a
11360 mismatch. If one is found, *ATTACHMENT will be set to point into
11361 the packet buffer and *ATTACHMENT_LEN will be set to the
11362 attachment's length. */
11363
11364static int
11365remote_hostio_send_command (int command_bytes, int which_packet,
11366 int *remote_errno, char **attachment,
11367 int *attachment_len)
11368{
11369 struct remote_state *rs = get_remote_state ();
11370 int ret, bytes_read;
11371 char *attachment_tmp;
11372
5d93a237 11373 if (!rs->remote_desc
4082afcc 11374 || packet_support (which_packet) == PACKET_DISABLE)
a6b151f1
DJ
11375 {
11376 *remote_errno = FILEIO_ENOSYS;
11377 return -1;
11378 }
11379
11380 putpkt_binary (rs->buf, command_bytes);
11381 bytes_read = getpkt_sane (&rs->buf, &rs->buf_size, 0);
11382
11383 /* If it timed out, something is wrong. Don't try to parse the
11384 buffer. */
11385 if (bytes_read < 0)
11386 {
11387 *remote_errno = FILEIO_EINVAL;
11388 return -1;
11389 }
11390
11391 switch (packet_ok (rs->buf, &remote_protocol_packets[which_packet]))
11392 {
11393 case PACKET_ERROR:
11394 *remote_errno = FILEIO_EINVAL;
11395 return -1;
11396 case PACKET_UNKNOWN:
11397 *remote_errno = FILEIO_ENOSYS;
11398 return -1;
11399 case PACKET_OK:
11400 break;
11401 }
11402
11403 if (remote_hostio_parse_result (rs->buf, &ret, remote_errno,
11404 &attachment_tmp))
11405 {
11406 *remote_errno = FILEIO_EINVAL;
11407 return -1;
11408 }
11409
11410 /* Make sure we saw an attachment if and only if we expected one. */
11411 if ((attachment_tmp == NULL && attachment != NULL)
11412 || (attachment_tmp != NULL && attachment == NULL))
11413 {
11414 *remote_errno = FILEIO_EINVAL;
11415 return -1;
11416 }
11417
11418 /* If an attachment was found, it must point into the packet buffer;
11419 work out how many bytes there were. */
11420 if (attachment_tmp != NULL)
11421 {
11422 *attachment = attachment_tmp;
11423 *attachment_len = bytes_read - (*attachment - rs->buf);
11424 }
11425
11426 return ret;
11427}
11428
80152258
PA
11429/* Invalidate the readahead cache. */
11430
11431static void
11432readahead_cache_invalidate (void)
11433{
11434 struct remote_state *rs = get_remote_state ();
11435
11436 rs->readahead_cache.fd = -1;
11437}
11438
11439/* Invalidate the readahead cache if it is holding data for FD. */
11440
11441static void
11442readahead_cache_invalidate_fd (int fd)
11443{
11444 struct remote_state *rs = get_remote_state ();
11445
11446 if (rs->readahead_cache.fd == fd)
11447 rs->readahead_cache.fd = -1;
11448}
11449
15a201c8
GB
11450/* Set the filesystem remote_hostio functions that take FILENAME
11451 arguments will use. Return 0 on success, or -1 if an error
11452 occurs (and set *REMOTE_ERRNO). */
11453
11454static int
11455remote_hostio_set_filesystem (struct inferior *inf, int *remote_errno)
11456{
11457 struct remote_state *rs = get_remote_state ();
11458 int required_pid = (inf == NULL || inf->fake_pid_p) ? 0 : inf->pid;
11459 char *p = rs->buf;
11460 int left = get_remote_packet_size () - 1;
11461 char arg[9];
11462 int ret;
11463
11464 if (packet_support (PACKET_vFile_setfs) == PACKET_DISABLE)
11465 return 0;
11466
11467 if (rs->fs_pid != -1 && required_pid == rs->fs_pid)
11468 return 0;
11469
11470 remote_buffer_add_string (&p, &left, "vFile:setfs:");
11471
11472 xsnprintf (arg, sizeof (arg), "%x", required_pid);
11473 remote_buffer_add_string (&p, &left, arg);
11474
11475 ret = remote_hostio_send_command (p - rs->buf, PACKET_vFile_setfs,
11476 remote_errno, NULL, NULL);
11477
11478 if (packet_support (PACKET_vFile_setfs) == PACKET_DISABLE)
11479 return 0;
11480
11481 if (ret == 0)
11482 rs->fs_pid = required_pid;
11483
11484 return ret;
11485}
11486
12e2a5fd 11487/* Implementation of to_fileio_open. */
a6b151f1
DJ
11488
11489static int
cd897586 11490remote_hostio_open (struct target_ops *self,
07c138c8 11491 struct inferior *inf, const char *filename,
4313b8c0
GB
11492 int flags, int mode, int warn_if_slow,
11493 int *remote_errno)
a6b151f1
DJ
11494{
11495 struct remote_state *rs = get_remote_state ();
11496 char *p = rs->buf;
11497 int left = get_remote_packet_size () - 1;
11498
4313b8c0
GB
11499 if (warn_if_slow)
11500 {
11501 static int warning_issued = 0;
11502
11503 printf_unfiltered (_("Reading %s from remote target...\n"),
11504 filename);
11505
11506 if (!warning_issued)
11507 {
11508 warning (_("File transfers from remote targets can be slow."
11509 " Use \"set sysroot\" to access files locally"
11510 " instead."));
11511 warning_issued = 1;
11512 }
11513 }
11514
15a201c8
GB
11515 if (remote_hostio_set_filesystem (inf, remote_errno) != 0)
11516 return -1;
11517
a6b151f1
DJ
11518 remote_buffer_add_string (&p, &left, "vFile:open:");
11519
11520 remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
11521 strlen (filename));
11522 remote_buffer_add_string (&p, &left, ",");
11523
11524 remote_buffer_add_int (&p, &left, flags);
11525 remote_buffer_add_string (&p, &left, ",");
11526
11527 remote_buffer_add_int (&p, &left, mode);
11528
11529 return remote_hostio_send_command (p - rs->buf, PACKET_vFile_open,
11530 remote_errno, NULL, NULL);
11531}
11532
12e2a5fd 11533/* Implementation of to_fileio_pwrite. */
a6b151f1
DJ
11534
11535static int
0d866f62
TT
11536remote_hostio_pwrite (struct target_ops *self,
11537 int fd, const gdb_byte *write_buf, int len,
a6b151f1
DJ
11538 ULONGEST offset, int *remote_errno)
11539{
11540 struct remote_state *rs = get_remote_state ();
11541 char *p = rs->buf;
11542 int left = get_remote_packet_size ();
11543 int out_len;
11544
80152258
PA
11545 readahead_cache_invalidate_fd (fd);
11546
a6b151f1
DJ
11547 remote_buffer_add_string (&p, &left, "vFile:pwrite:");
11548
11549 remote_buffer_add_int (&p, &left, fd);
11550 remote_buffer_add_string (&p, &left, ",");
11551
11552 remote_buffer_add_int (&p, &left, offset);
11553 remote_buffer_add_string (&p, &left, ",");
11554
124e13d9 11555 p += remote_escape_output (write_buf, len, 1, (gdb_byte *) p, &out_len,
a6b151f1
DJ
11556 get_remote_packet_size () - (p - rs->buf));
11557
11558 return remote_hostio_send_command (p - rs->buf, PACKET_vFile_pwrite,
11559 remote_errno, NULL, NULL);
11560}
11561
80152258
PA
11562/* Helper for the implementation of to_fileio_pread. Read the file
11563 from the remote side with vFile:pread. */
a6b151f1
DJ
11564
11565static int
80152258
PA
11566remote_hostio_pread_vFile (struct target_ops *self,
11567 int fd, gdb_byte *read_buf, int len,
11568 ULONGEST offset, int *remote_errno)
a6b151f1
DJ
11569{
11570 struct remote_state *rs = get_remote_state ();
11571 char *p = rs->buf;
11572 char *attachment;
11573 int left = get_remote_packet_size ();
11574 int ret, attachment_len;
11575 int read_len;
11576
11577 remote_buffer_add_string (&p, &left, "vFile:pread:");
11578
11579 remote_buffer_add_int (&p, &left, fd);
11580 remote_buffer_add_string (&p, &left, ",");
11581
11582 remote_buffer_add_int (&p, &left, len);
11583 remote_buffer_add_string (&p, &left, ",");
11584
11585 remote_buffer_add_int (&p, &left, offset);
11586
11587 ret = remote_hostio_send_command (p - rs->buf, PACKET_vFile_pread,
11588 remote_errno, &attachment,
11589 &attachment_len);
11590
11591 if (ret < 0)
11592 return ret;
11593
bc20a4af 11594 read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len,
a6b151f1
DJ
11595 read_buf, len);
11596 if (read_len != ret)
11597 error (_("Read returned %d, but %d bytes."), ret, (int) read_len);
11598
11599 return ret;
11600}
11601
80152258
PA
11602/* Serve pread from the readahead cache. Returns number of bytes
11603 read, or 0 if the request can't be served from the cache. */
11604
11605static int
11606remote_hostio_pread_from_cache (struct remote_state *rs,
11607 int fd, gdb_byte *read_buf, size_t len,
11608 ULONGEST offset)
11609{
11610 struct readahead_cache *cache = &rs->readahead_cache;
11611
11612 if (cache->fd == fd
11613 && cache->offset <= offset
11614 && offset < cache->offset + cache->bufsize)
11615 {
11616 ULONGEST max = cache->offset + cache->bufsize;
11617
11618 if (offset + len > max)
11619 len = max - offset;
11620
11621 memcpy (read_buf, cache->buf + offset - cache->offset, len);
11622 return len;
11623 }
11624
11625 return 0;
11626}
11627
11628/* Implementation of to_fileio_pread. */
11629
11630static int
11631remote_hostio_pread (struct target_ops *self,
11632 int fd, gdb_byte *read_buf, int len,
11633 ULONGEST offset, int *remote_errno)
11634{
11635 int ret;
11636 struct remote_state *rs = get_remote_state ();
11637 struct readahead_cache *cache = &rs->readahead_cache;
11638
11639 ret = remote_hostio_pread_from_cache (rs, fd, read_buf, len, offset);
11640 if (ret > 0)
11641 {
11642 cache->hit_count++;
11643
11644 if (remote_debug)
11645 fprintf_unfiltered (gdb_stdlog, "readahead cache hit %s\n",
11646 pulongest (cache->hit_count));
11647 return ret;
11648 }
11649
11650 cache->miss_count++;
11651 if (remote_debug)
11652 fprintf_unfiltered (gdb_stdlog, "readahead cache miss %s\n",
11653 pulongest (cache->miss_count));
11654
11655 cache->fd = fd;
11656 cache->offset = offset;
11657 cache->bufsize = get_remote_packet_size ();
224c3ddb 11658 cache->buf = (gdb_byte *) xrealloc (cache->buf, cache->bufsize);
80152258
PA
11659
11660 ret = remote_hostio_pread_vFile (self, cache->fd, cache->buf, cache->bufsize,
11661 cache->offset, remote_errno);
11662 if (ret <= 0)
11663 {
11664 readahead_cache_invalidate_fd (fd);
11665 return ret;
11666 }
11667
11668 cache->bufsize = ret;
11669 return remote_hostio_pread_from_cache (rs, fd, read_buf, len, offset);
11670}
11671
12e2a5fd 11672/* Implementation of to_fileio_close. */
a6b151f1
DJ
11673
11674static int
df39ea25 11675remote_hostio_close (struct target_ops *self, int fd, int *remote_errno)
a6b151f1
DJ
11676{
11677 struct remote_state *rs = get_remote_state ();
11678 char *p = rs->buf;
11679 int left = get_remote_packet_size () - 1;
11680
80152258
PA
11681 readahead_cache_invalidate_fd (fd);
11682
a6b151f1
DJ
11683 remote_buffer_add_string (&p, &left, "vFile:close:");
11684
11685 remote_buffer_add_int (&p, &left, fd);
11686
11687 return remote_hostio_send_command (p - rs->buf, PACKET_vFile_close,
11688 remote_errno, NULL, NULL);
11689}
11690
12e2a5fd 11691/* Implementation of to_fileio_unlink. */
a6b151f1
DJ
11692
11693static int
dbbca37d 11694remote_hostio_unlink (struct target_ops *self,
07c138c8
GB
11695 struct inferior *inf, const char *filename,
11696 int *remote_errno)
a6b151f1
DJ
11697{
11698 struct remote_state *rs = get_remote_state ();
11699 char *p = rs->buf;
11700 int left = get_remote_packet_size () - 1;
11701
15a201c8
GB
11702 if (remote_hostio_set_filesystem (inf, remote_errno) != 0)
11703 return -1;
11704
a6b151f1
DJ
11705 remote_buffer_add_string (&p, &left, "vFile:unlink:");
11706
11707 remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
11708 strlen (filename));
11709
11710 return remote_hostio_send_command (p - rs->buf, PACKET_vFile_unlink,
11711 remote_errno, NULL, NULL);
11712}
11713
12e2a5fd 11714/* Implementation of to_fileio_readlink. */
b9e7b9c3
UW
11715
11716static char *
fab5aa7c 11717remote_hostio_readlink (struct target_ops *self,
07c138c8
GB
11718 struct inferior *inf, const char *filename,
11719 int *remote_errno)
b9e7b9c3
UW
11720{
11721 struct remote_state *rs = get_remote_state ();
11722 char *p = rs->buf;
11723 char *attachment;
11724 int left = get_remote_packet_size ();
11725 int len, attachment_len;
11726 int read_len;
11727 char *ret;
11728
15a201c8
GB
11729 if (remote_hostio_set_filesystem (inf, remote_errno) != 0)
11730 return NULL;
11731
b9e7b9c3
UW
11732 remote_buffer_add_string (&p, &left, "vFile:readlink:");
11733
11734 remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
11735 strlen (filename));
11736
11737 len = remote_hostio_send_command (p - rs->buf, PACKET_vFile_readlink,
11738 remote_errno, &attachment,
11739 &attachment_len);
11740
11741 if (len < 0)
11742 return NULL;
11743
224c3ddb 11744 ret = (char *) xmalloc (len + 1);
b9e7b9c3 11745
bc20a4af
PA
11746 read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len,
11747 (gdb_byte *) ret, len);
b9e7b9c3
UW
11748 if (read_len != len)
11749 error (_("Readlink returned %d, but %d bytes."), len, read_len);
11750
11751 ret[len] = '\0';
11752 return ret;
11753}
11754
12e2a5fd 11755/* Implementation of to_fileio_fstat. */
0a93529c
GB
11756
11757static int
11758remote_hostio_fstat (struct target_ops *self,
11759 int fd, struct stat *st,
11760 int *remote_errno)
11761{
11762 struct remote_state *rs = get_remote_state ();
11763 char *p = rs->buf;
11764 int left = get_remote_packet_size ();
11765 int attachment_len, ret;
11766 char *attachment;
11767 struct fio_stat fst;
11768 int read_len;
11769
464b0089
GB
11770 remote_buffer_add_string (&p, &left, "vFile:fstat:");
11771
11772 remote_buffer_add_int (&p, &left, fd);
11773
11774 ret = remote_hostio_send_command (p - rs->buf, PACKET_vFile_fstat,
11775 remote_errno, &attachment,
11776 &attachment_len);
11777 if (ret < 0)
0a93529c 11778 {
464b0089
GB
11779 if (*remote_errno != FILEIO_ENOSYS)
11780 return ret;
11781
0a93529c
GB
11782 /* Strictly we should return -1, ENOSYS here, but when
11783 "set sysroot remote:" was implemented in August 2008
11784 BFD's need for a stat function was sidestepped with
11785 this hack. This was not remedied until March 2015
11786 so we retain the previous behavior to avoid breaking
11787 compatibility.
11788
11789 Note that the memset is a March 2015 addition; older
11790 GDBs set st_size *and nothing else* so the structure
11791 would have garbage in all other fields. This might
11792 break something but retaining the previous behavior
11793 here would be just too wrong. */
11794
11795 memset (st, 0, sizeof (struct stat));
11796 st->st_size = INT_MAX;
11797 return 0;
11798 }
11799
0a93529c
GB
11800 read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len,
11801 (gdb_byte *) &fst, sizeof (fst));
11802
11803 if (read_len != ret)
11804 error (_("vFile:fstat returned %d, but %d bytes."), ret, read_len);
11805
11806 if (read_len != sizeof (fst))
11807 error (_("vFile:fstat returned %d bytes, but expecting %d."),
11808 read_len, (int) sizeof (fst));
11809
11810 remote_fileio_to_host_stat (&fst, st);
11811
11812 return 0;
11813}
11814
12e2a5fd 11815/* Implementation of to_filesystem_is_local. */
e3dd7556
GB
11816
11817static int
11818remote_filesystem_is_local (struct target_ops *self)
11819{
11820 /* Valgrind GDB presents itself as a remote target but works
11821 on the local filesystem: it does not implement remote get
11822 and users are not expected to set a sysroot. To handle
11823 this case we treat the remote filesystem as local if the
11824 sysroot is exactly TARGET_SYSROOT_PREFIX and if the stub
11825 does not support vFile:open. */
a3be80c3 11826 if (strcmp (gdb_sysroot, TARGET_SYSROOT_PREFIX) == 0)
e3dd7556
GB
11827 {
11828 enum packet_support ps = packet_support (PACKET_vFile_open);
11829
11830 if (ps == PACKET_SUPPORT_UNKNOWN)
11831 {
11832 int fd, remote_errno;
11833
11834 /* Try opening a file to probe support. The supplied
11835 filename is irrelevant, we only care about whether
11836 the stub recognizes the packet or not. */
07c138c8 11837 fd = remote_hostio_open (self, NULL, "just probing",
4313b8c0 11838 FILEIO_O_RDONLY, 0700, 0,
e3dd7556
GB
11839 &remote_errno);
11840
11841 if (fd >= 0)
11842 remote_hostio_close (self, fd, &remote_errno);
11843
11844 ps = packet_support (PACKET_vFile_open);
11845 }
11846
11847 if (ps == PACKET_DISABLE)
11848 {
11849 static int warning_issued = 0;
11850
11851 if (!warning_issued)
11852 {
11853 warning (_("remote target does not support file"
11854 " transfer, attempting to access files"
11855 " from local filesystem."));
11856 warning_issued = 1;
11857 }
11858
11859 return 1;
11860 }
11861 }
11862
11863 return 0;
11864}
11865
a6b151f1
DJ
11866static int
11867remote_fileio_errno_to_host (int errnum)
11868{
11869 switch (errnum)
11870 {
11871 case FILEIO_EPERM:
11872 return EPERM;
11873 case FILEIO_ENOENT:
11874 return ENOENT;
11875 case FILEIO_EINTR:
11876 return EINTR;
11877 case FILEIO_EIO:
11878 return EIO;
11879 case FILEIO_EBADF:
11880 return EBADF;
11881 case FILEIO_EACCES:
11882 return EACCES;
11883 case FILEIO_EFAULT:
11884 return EFAULT;
11885 case FILEIO_EBUSY:
11886 return EBUSY;
11887 case FILEIO_EEXIST:
11888 return EEXIST;
11889 case FILEIO_ENODEV:
11890 return ENODEV;
11891 case FILEIO_ENOTDIR:
11892 return ENOTDIR;
11893 case FILEIO_EISDIR:
11894 return EISDIR;
11895 case FILEIO_EINVAL:
11896 return EINVAL;
11897 case FILEIO_ENFILE:
11898 return ENFILE;
11899 case FILEIO_EMFILE:
11900 return EMFILE;
11901 case FILEIO_EFBIG:
11902 return EFBIG;
11903 case FILEIO_ENOSPC:
11904 return ENOSPC;
11905 case FILEIO_ESPIPE:
11906 return ESPIPE;
11907 case FILEIO_EROFS:
11908 return EROFS;
11909 case FILEIO_ENOSYS:
11910 return ENOSYS;
11911 case FILEIO_ENAMETOOLONG:
11912 return ENAMETOOLONG;
11913 }
11914 return -1;
11915}
11916
11917static char *
11918remote_hostio_error (int errnum)
11919{
11920 int host_error = remote_fileio_errno_to_host (errnum);
11921
11922 if (host_error == -1)
11923 error (_("Unknown remote I/O error %d"), errnum);
11924 else
11925 error (_("Remote I/O error: %s"), safe_strerror (host_error));
11926}
11927
a6b151f1
DJ
11928static void
11929remote_hostio_close_cleanup (void *opaque)
11930{
11931 int fd = *(int *) opaque;
11932 int remote_errno;
11933
df39ea25 11934 remote_hostio_close (find_target_at (process_stratum), fd, &remote_errno);
a6b151f1
DJ
11935}
11936
11937void
11938remote_file_put (const char *local_file, const char *remote_file, int from_tty)
11939{
11940 struct cleanup *back_to, *close_cleanup;
11941 int retcode, fd, remote_errno, bytes, io_size;
a6b151f1
DJ
11942 gdb_byte *buffer;
11943 int bytes_in_buffer;
11944 int saw_eof;
11945 ULONGEST offset;
5d93a237 11946 struct remote_state *rs = get_remote_state ();
a6b151f1 11947
5d93a237 11948 if (!rs->remote_desc)
a6b151f1
DJ
11949 error (_("command can only be used with remote target"));
11950
d419f42d 11951 gdb_file_up file = gdb_fopen_cloexec (local_file, "rb");
a6b151f1
DJ
11952 if (file == NULL)
11953 perror_with_name (local_file);
a6b151f1 11954
07c138c8 11955 fd = remote_hostio_open (find_target_at (process_stratum), NULL,
cd897586 11956 remote_file, (FILEIO_O_WRONLY | FILEIO_O_CREAT
a6b151f1 11957 | FILEIO_O_TRUNC),
4313b8c0 11958 0700, 0, &remote_errno);
a6b151f1
DJ
11959 if (fd == -1)
11960 remote_hostio_error (remote_errno);
11961
11962 /* Send up to this many bytes at once. They won't all fit in the
11963 remote packet limit, so we'll transfer slightly fewer. */
11964 io_size = get_remote_packet_size ();
224c3ddb 11965 buffer = (gdb_byte *) xmalloc (io_size);
d419f42d 11966 back_to = make_cleanup (xfree, buffer);
a6b151f1
DJ
11967
11968 close_cleanup = make_cleanup (remote_hostio_close_cleanup, &fd);
11969
11970 bytes_in_buffer = 0;
11971 saw_eof = 0;
11972 offset = 0;
11973 while (bytes_in_buffer || !saw_eof)
11974 {
11975 if (!saw_eof)
11976 {
3e43a32a
MS
11977 bytes = fread (buffer + bytes_in_buffer, 1,
11978 io_size - bytes_in_buffer,
d419f42d 11979 file.get ());
a6b151f1
DJ
11980 if (bytes == 0)
11981 {
d419f42d 11982 if (ferror (file.get ()))
a6b151f1
DJ
11983 error (_("Error reading %s."), local_file);
11984 else
11985 {
11986 /* EOF. Unless there is something still in the
11987 buffer from the last iteration, we are done. */
11988 saw_eof = 1;
11989 if (bytes_in_buffer == 0)
11990 break;
11991 }
11992 }
11993 }
11994 else
11995 bytes = 0;
11996
11997 bytes += bytes_in_buffer;
11998 bytes_in_buffer = 0;
11999
0d866f62
TT
12000 retcode = remote_hostio_pwrite (find_target_at (process_stratum),
12001 fd, buffer, bytes,
3e43a32a 12002 offset, &remote_errno);
a6b151f1
DJ
12003
12004 if (retcode < 0)
12005 remote_hostio_error (remote_errno);
12006 else if (retcode == 0)
12007 error (_("Remote write of %d bytes returned 0!"), bytes);
12008 else if (retcode < bytes)
12009 {
12010 /* Short write. Save the rest of the read data for the next
12011 write. */
12012 bytes_in_buffer = bytes - retcode;
12013 memmove (buffer, buffer + retcode, bytes_in_buffer);
12014 }
12015
12016 offset += retcode;
12017 }
12018
12019 discard_cleanups (close_cleanup);
df39ea25 12020 if (remote_hostio_close (find_target_at (process_stratum), fd, &remote_errno))
a6b151f1
DJ
12021 remote_hostio_error (remote_errno);
12022
12023 if (from_tty)
12024 printf_filtered (_("Successfully sent file \"%s\".\n"), local_file);
12025 do_cleanups (back_to);
12026}
12027
12028void
12029remote_file_get (const char *remote_file, const char *local_file, int from_tty)
12030{
12031 struct cleanup *back_to, *close_cleanup;
cea39f65 12032 int fd, remote_errno, bytes, io_size;
a6b151f1
DJ
12033 gdb_byte *buffer;
12034 ULONGEST offset;
5d93a237 12035 struct remote_state *rs = get_remote_state ();
a6b151f1 12036
5d93a237 12037 if (!rs->remote_desc)
a6b151f1
DJ
12038 error (_("command can only be used with remote target"));
12039
07c138c8 12040 fd = remote_hostio_open (find_target_at (process_stratum), NULL,
4313b8c0
GB
12041 remote_file, FILEIO_O_RDONLY, 0, 0,
12042 &remote_errno);
a6b151f1
DJ
12043 if (fd == -1)
12044 remote_hostio_error (remote_errno);
12045
d419f42d 12046 gdb_file_up file = gdb_fopen_cloexec (local_file, "wb");
a6b151f1
DJ
12047 if (file == NULL)
12048 perror_with_name (local_file);
a6b151f1
DJ
12049
12050 /* Send up to this many bytes at once. They won't all fit in the
12051 remote packet limit, so we'll transfer slightly fewer. */
12052 io_size = get_remote_packet_size ();
224c3ddb 12053 buffer = (gdb_byte *) xmalloc (io_size);
d419f42d 12054 back_to = make_cleanup (xfree, buffer);
a6b151f1
DJ
12055
12056 close_cleanup = make_cleanup (remote_hostio_close_cleanup, &fd);
12057
12058 offset = 0;
12059 while (1)
12060 {
a3be983c
TT
12061 bytes = remote_hostio_pread (find_target_at (process_stratum),
12062 fd, buffer, io_size, offset, &remote_errno);
a6b151f1
DJ
12063 if (bytes == 0)
12064 /* Success, but no bytes, means end-of-file. */
12065 break;
12066 if (bytes == -1)
12067 remote_hostio_error (remote_errno);
12068
12069 offset += bytes;
12070
d419f42d 12071 bytes = fwrite (buffer, 1, bytes, file.get ());
a6b151f1
DJ
12072 if (bytes == 0)
12073 perror_with_name (local_file);
12074 }
12075
12076 discard_cleanups (close_cleanup);
df39ea25 12077 if (remote_hostio_close (find_target_at (process_stratum), fd, &remote_errno))
a6b151f1
DJ
12078 remote_hostio_error (remote_errno);
12079
12080 if (from_tty)
12081 printf_filtered (_("Successfully fetched file \"%s\".\n"), remote_file);
12082 do_cleanups (back_to);
12083}
12084
12085void
12086remote_file_delete (const char *remote_file, int from_tty)
12087{
12088 int retcode, remote_errno;
5d93a237 12089 struct remote_state *rs = get_remote_state ();
a6b151f1 12090
5d93a237 12091 if (!rs->remote_desc)
a6b151f1
DJ
12092 error (_("command can only be used with remote target"));
12093
dbbca37d 12094 retcode = remote_hostio_unlink (find_target_at (process_stratum),
07c138c8 12095 NULL, remote_file, &remote_errno);
a6b151f1
DJ
12096 if (retcode == -1)
12097 remote_hostio_error (remote_errno);
12098
12099 if (from_tty)
12100 printf_filtered (_("Successfully deleted file \"%s\".\n"), remote_file);
12101}
12102
12103static void
12104remote_put_command (char *args, int from_tty)
12105{
d1a41061
PP
12106 if (args == NULL)
12107 error_no_arg (_("file to put"));
12108
773a1edc 12109 gdb_argv argv (args);
a6b151f1
DJ
12110 if (argv[0] == NULL || argv[1] == NULL || argv[2] != NULL)
12111 error (_("Invalid parameters to remote put"));
12112
12113 remote_file_put (argv[0], argv[1], from_tty);
a6b151f1
DJ
12114}
12115
12116static void
12117remote_get_command (char *args, int from_tty)
12118{
d1a41061
PP
12119 if (args == NULL)
12120 error_no_arg (_("file to get"));
12121
773a1edc 12122 gdb_argv argv (args);
a6b151f1
DJ
12123 if (argv[0] == NULL || argv[1] == NULL || argv[2] != NULL)
12124 error (_("Invalid parameters to remote get"));
12125
12126 remote_file_get (argv[0], argv[1], from_tty);
a6b151f1
DJ
12127}
12128
12129static void
12130remote_delete_command (char *args, int from_tty)
12131{
d1a41061
PP
12132 if (args == NULL)
12133 error_no_arg (_("file to delete"));
12134
773a1edc 12135 gdb_argv argv (args);
a6b151f1
DJ
12136 if (argv[0] == NULL || argv[1] != NULL)
12137 error (_("Invalid parameters to remote delete"));
12138
12139 remote_file_delete (argv[0], from_tty);
a6b151f1
DJ
12140}
12141
12142static void
12143remote_command (char *args, int from_tty)
12144{
635c7e8a 12145 help_list (remote_cmdlist, "remote ", all_commands, gdb_stdout);
a6b151f1
DJ
12146}
12147
b2175913 12148static int
19db3e69 12149remote_can_execute_reverse (struct target_ops *self)
b2175913 12150{
4082afcc
PA
12151 if (packet_support (PACKET_bs) == PACKET_ENABLE
12152 || packet_support (PACKET_bc) == PACKET_ENABLE)
40ab02ce
MS
12153 return 1;
12154 else
12155 return 0;
b2175913
MS
12156}
12157
74531fed 12158static int
2a9a2795 12159remote_supports_non_stop (struct target_ops *self)
74531fed
PA
12160{
12161 return 1;
12162}
12163
03583c20 12164static int
2bfc0540 12165remote_supports_disable_randomization (struct target_ops *self)
03583c20
UW
12166{
12167 /* Only supported in extended mode. */
12168 return 0;
12169}
12170
8a305172 12171static int
86ce2668 12172remote_supports_multi_process (struct target_ops *self)
8a305172
PA
12173{
12174 struct remote_state *rs = get_remote_state ();
a744cf53 12175
8020350c 12176 return remote_multi_process_p (rs);
8a305172
PA
12177}
12178
70221824 12179static int
782b2b07
SS
12180remote_supports_cond_tracepoints (void)
12181{
4082afcc 12182 return packet_support (PACKET_ConditionalTracepoints) == PACKET_ENABLE;
782b2b07
SS
12183}
12184
3788aec7 12185static int
efcc2da7 12186remote_supports_cond_breakpoints (struct target_ops *self)
3788aec7 12187{
4082afcc 12188 return packet_support (PACKET_ConditionalBreakpoints) == PACKET_ENABLE;
3788aec7
LM
12189}
12190
70221824 12191static int
7a697b8d
SS
12192remote_supports_fast_tracepoints (void)
12193{
4082afcc 12194 return packet_support (PACKET_FastTracepoints) == PACKET_ENABLE;
7a697b8d
SS
12195}
12196
0fb4aa4b
PA
12197static int
12198remote_supports_static_tracepoints (void)
12199{
4082afcc 12200 return packet_support (PACKET_StaticTracepoints) == PACKET_ENABLE;
0fb4aa4b
PA
12201}
12202
1e4d1764
YQ
12203static int
12204remote_supports_install_in_trace (void)
12205{
4082afcc 12206 return packet_support (PACKET_InstallInTrace) == PACKET_ENABLE;
1e4d1764
YQ
12207}
12208
d248b706 12209static int
7d178d6a 12210remote_supports_enable_disable_tracepoint (struct target_ops *self)
d248b706 12211{
4082afcc
PA
12212 return (packet_support (PACKET_EnableDisableTracepoints_feature)
12213 == PACKET_ENABLE);
d248b706
KY
12214}
12215
3065dfb6 12216static int
6de37a3a 12217remote_supports_string_tracing (struct target_ops *self)
3065dfb6 12218{
4082afcc 12219 return packet_support (PACKET_tracenz_feature) == PACKET_ENABLE;
3065dfb6
SS
12220}
12221
d3ce09f5 12222static int
78eff0ec 12223remote_can_run_breakpoint_commands (struct target_ops *self)
d3ce09f5 12224{
4082afcc 12225 return packet_support (PACKET_BreakpointCommands) == PACKET_ENABLE;
d3ce09f5
SS
12226}
12227
35b1e5cc 12228static void
ecae04e1 12229remote_trace_init (struct target_ops *self)
35b1e5cc
SS
12230{
12231 putpkt ("QTinit");
12232 remote_get_noisy_reply (&target_buf, &target_buf_size);
ad91cd99 12233 if (strcmp (target_buf, "OK") != 0)
35b1e5cc
SS
12234 error (_("Target does not support this command."));
12235}
12236
12237static void free_actions_list (char **actions_list);
12238static void free_actions_list_cleanup_wrapper (void *);
12239static void
12240free_actions_list_cleanup_wrapper (void *al)
12241{
19ba03f4 12242 free_actions_list ((char **) al);
35b1e5cc
SS
12243}
12244
12245static void
12246free_actions_list (char **actions_list)
12247{
12248 int ndx;
12249
12250 if (actions_list == 0)
12251 return;
12252
12253 for (ndx = 0; actions_list[ndx]; ndx++)
12254 xfree (actions_list[ndx]);
12255
12256 xfree (actions_list);
12257}
12258
409873ef
SS
12259/* Recursive routine to walk through command list including loops, and
12260 download packets for each command. */
12261
12262static void
12263remote_download_command_source (int num, ULONGEST addr,
12264 struct command_line *cmds)
12265{
12266 struct remote_state *rs = get_remote_state ();
12267 struct command_line *cmd;
12268
12269 for (cmd = cmds; cmd; cmd = cmd->next)
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", cmd->line,
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 if (cmd->control_type == while_control
12282 || cmd->control_type == while_stepping_control)
12283 {
12284 remote_download_command_source (num, addr, *cmd->body_list);
12285
0df8b418 12286 QUIT; /* Allow user to bail out with ^C. */
409873ef
SS
12287 strcpy (rs->buf, "QTDPsrc:");
12288 encode_source_string (num, addr, "cmd", "end",
12289 rs->buf + strlen (rs->buf),
12290 rs->buf_size - strlen (rs->buf));
12291 putpkt (rs->buf);
12292 remote_get_noisy_reply (&target_buf, &target_buf_size);
12293 if (strcmp (target_buf, "OK"))
12294 warning (_("Target does not support source download."));
12295 }
12296 }
12297}
12298
35b1e5cc 12299static void
548f7808 12300remote_download_tracepoint (struct target_ops *self, struct bp_location *loc)
35b1e5cc 12301{
bba74b36 12302#define BUF_SIZE 2048
e8ba3115 12303
35b1e5cc 12304 CORE_ADDR tpaddr;
409873ef 12305 char addrbuf[40];
bba74b36 12306 char buf[BUF_SIZE];
35b1e5cc
SS
12307 char **tdp_actions;
12308 char **stepping_actions;
12309 int ndx;
12310 struct cleanup *old_chain = NULL;
35b1e5cc 12311 char *pkt;
e8ba3115 12312 struct breakpoint *b = loc->owner;
d9b3f62e 12313 struct tracepoint *t = (struct tracepoint *) b;
35b1e5cc 12314
dc673c81 12315 encode_actions_rsp (loc, &tdp_actions, &stepping_actions);
e8ba3115
YQ
12316 old_chain = make_cleanup (free_actions_list_cleanup_wrapper,
12317 tdp_actions);
12318 (void) make_cleanup (free_actions_list_cleanup_wrapper,
12319 stepping_actions);
12320
12321 tpaddr = loc->address;
12322 sprintf_vma (addrbuf, tpaddr);
bba74b36
YQ
12323 xsnprintf (buf, BUF_SIZE, "QTDP:%x:%s:%c:%lx:%x", b->number,
12324 addrbuf, /* address */
12325 (b->enable_state == bp_enabled ? 'E' : 'D'),
12326 t->step_count, t->pass_count);
e8ba3115
YQ
12327 /* Fast tracepoints are mostly handled by the target, but we can
12328 tell the target how big of an instruction block should be moved
12329 around. */
12330 if (b->type == bp_fast_tracepoint)
12331 {
12332 /* Only test for support at download time; we may not know
12333 target capabilities at definition time. */
12334 if (remote_supports_fast_tracepoints ())
35b1e5cc 12335 {
6b940e6a
PL
12336 if (gdbarch_fast_tracepoint_valid_at (loc->gdbarch, tpaddr,
12337 NULL))
bba74b36 12338 xsnprintf (buf + strlen (buf), BUF_SIZE - strlen (buf), ":F%x",
6b940e6a 12339 gdb_insn_length (loc->gdbarch, tpaddr));
35b1e5cc 12340 else
e8ba3115
YQ
12341 /* If it passed validation at definition but fails now,
12342 something is very wrong. */
12343 internal_error (__FILE__, __LINE__,
12344 _("Fast tracepoint not "
12345 "valid during download"));
35b1e5cc 12346 }
e8ba3115
YQ
12347 else
12348 /* Fast tracepoints are functionally identical to regular
12349 tracepoints, so don't take lack of support as a reason to
12350 give up on the trace run. */
12351 warning (_("Target does not support fast tracepoints, "
12352 "downloading %d as regular tracepoint"), b->number);
12353 }
12354 else if (b->type == bp_static_tracepoint)
12355 {
12356 /* Only test for support at download time; we may not know
12357 target capabilities at definition time. */
12358 if (remote_supports_static_tracepoints ())
0fb4aa4b 12359 {
e8ba3115 12360 struct static_tracepoint_marker marker;
0fb4aa4b 12361
e8ba3115
YQ
12362 if (target_static_tracepoint_marker_at (tpaddr, &marker))
12363 strcat (buf, ":S");
0fb4aa4b 12364 else
e8ba3115 12365 error (_("Static tracepoint not valid during download"));
0fb4aa4b 12366 }
e8ba3115
YQ
12367 else
12368 /* Fast tracepoints are functionally identical to regular
12369 tracepoints, so don't take lack of support as a reason
12370 to give up on the trace run. */
12371 error (_("Target does not support static tracepoints"));
12372 }
12373 /* If the tracepoint has a conditional, make it into an agent
12374 expression and append to the definition. */
12375 if (loc->cond)
12376 {
12377 /* Only test support at download time, we may not know target
12378 capabilities at definition time. */
12379 if (remote_supports_cond_tracepoints ())
35b1e5cc 12380 {
833177a4 12381 agent_expr_up aexpr = gen_eval_for_expr (tpaddr, loc->cond.get ());
bba74b36
YQ
12382 xsnprintf (buf + strlen (buf), BUF_SIZE - strlen (buf), ":X%x,",
12383 aexpr->len);
e8ba3115
YQ
12384 pkt = buf + strlen (buf);
12385 for (ndx = 0; ndx < aexpr->len; ++ndx)
12386 pkt = pack_hex_byte (pkt, aexpr->buf[ndx]);
12387 *pkt = '\0';
35b1e5cc 12388 }
e8ba3115
YQ
12389 else
12390 warning (_("Target does not support conditional tracepoints, "
12391 "ignoring tp %d cond"), b->number);
12392 }
35b1e5cc 12393
d9b3f62e 12394 if (b->commands || *default_collect)
e8ba3115
YQ
12395 strcat (buf, "-");
12396 putpkt (buf);
12397 remote_get_noisy_reply (&target_buf, &target_buf_size);
12398 if (strcmp (target_buf, "OK"))
12399 error (_("Target does not support tracepoints."));
35b1e5cc 12400
e8ba3115
YQ
12401 /* do_single_steps (t); */
12402 if (tdp_actions)
12403 {
12404 for (ndx = 0; tdp_actions[ndx]; ndx++)
35b1e5cc 12405 {
e8ba3115 12406 QUIT; /* Allow user to bail out with ^C. */
bba74b36
YQ
12407 xsnprintf (buf, BUF_SIZE, "QTDP:-%x:%s:%s%c",
12408 b->number, addrbuf, /* address */
12409 tdp_actions[ndx],
12410 ((tdp_actions[ndx + 1] || stepping_actions)
12411 ? '-' : 0));
e8ba3115
YQ
12412 putpkt (buf);
12413 remote_get_noisy_reply (&target_buf,
12414 &target_buf_size);
12415 if (strcmp (target_buf, "OK"))
12416 error (_("Error on target while setting tracepoints."));
35b1e5cc 12417 }
e8ba3115
YQ
12418 }
12419 if (stepping_actions)
12420 {
12421 for (ndx = 0; stepping_actions[ndx]; ndx++)
35b1e5cc 12422 {
e8ba3115 12423 QUIT; /* Allow user to bail out with ^C. */
bba74b36
YQ
12424 xsnprintf (buf, BUF_SIZE, "QTDP:-%x:%s:%s%s%s",
12425 b->number, addrbuf, /* address */
12426 ((ndx == 0) ? "S" : ""),
12427 stepping_actions[ndx],
12428 (stepping_actions[ndx + 1] ? "-" : ""));
e8ba3115
YQ
12429 putpkt (buf);
12430 remote_get_noisy_reply (&target_buf,
12431 &target_buf_size);
12432 if (strcmp (target_buf, "OK"))
12433 error (_("Error on target while setting tracepoints."));
35b1e5cc 12434 }
e8ba3115 12435 }
409873ef 12436
4082afcc 12437 if (packet_support (PACKET_TracepointSource) == PACKET_ENABLE)
e8ba3115 12438 {
f00aae0f 12439 if (b->location != NULL)
409873ef 12440 {
e8ba3115 12441 strcpy (buf, "QTDPsrc:");
f00aae0f 12442 encode_source_string (b->number, loc->address, "at",
d28cd78a 12443 event_location_to_string (b->location.get ()),
f00aae0f 12444 buf + strlen (buf), 2048 - strlen (buf));
e8ba3115
YQ
12445 putpkt (buf);
12446 remote_get_noisy_reply (&target_buf, &target_buf_size);
12447 if (strcmp (target_buf, "OK"))
12448 warning (_("Target does not support source download."));
409873ef 12449 }
e8ba3115
YQ
12450 if (b->cond_string)
12451 {
12452 strcpy (buf, "QTDPsrc:");
12453 encode_source_string (b->number, loc->address,
12454 "cond", b->cond_string, buf + strlen (buf),
12455 2048 - strlen (buf));
12456 putpkt (buf);
12457 remote_get_noisy_reply (&target_buf, &target_buf_size);
12458 if (strcmp (target_buf, "OK"))
12459 warning (_("Target does not support source download."));
12460 }
12461 remote_download_command_source (b->number, loc->address,
12462 breakpoint_commands (b));
35b1e5cc 12463 }
e8ba3115
YQ
12464
12465 do_cleanups (old_chain);
35b1e5cc
SS
12466}
12467
1e4d1764 12468static int
a52a8357 12469remote_can_download_tracepoint (struct target_ops *self)
1e4d1764 12470{
1e51243a
PA
12471 struct remote_state *rs = get_remote_state ();
12472 struct trace_status *ts;
12473 int status;
12474
12475 /* Don't try to install tracepoints until we've relocated our
12476 symbols, and fetched and merged the target's tracepoint list with
12477 ours. */
12478 if (rs->starting_up)
12479 return 0;
12480
12481 ts = current_trace_status ();
8bd200f1 12482 status = remote_get_trace_status (self, ts);
1e4d1764
YQ
12483
12484 if (status == -1 || !ts->running_known || !ts->running)
12485 return 0;
12486
12487 /* If we are in a tracing experiment, but remote stub doesn't support
12488 installing tracepoint in trace, we have to return. */
12489 if (!remote_supports_install_in_trace ())
12490 return 0;
12491
12492 return 1;
12493}
12494
12495
35b1e5cc 12496static void
559d2b81
TT
12497remote_download_trace_state_variable (struct target_ops *self,
12498 struct trace_state_variable *tsv)
35b1e5cc
SS
12499{
12500 struct remote_state *rs = get_remote_state ();
00bf0b85 12501 char *p;
35b1e5cc 12502
bba74b36
YQ
12503 xsnprintf (rs->buf, get_remote_packet_size (), "QTDV:%x:%s:%x:",
12504 tsv->number, phex ((ULONGEST) tsv->initial_value, 8),
12505 tsv->builtin);
00bf0b85
SS
12506 p = rs->buf + strlen (rs->buf);
12507 if ((p - rs->buf) + strlen (tsv->name) * 2 >= get_remote_packet_size ())
12508 error (_("Trace state variable name too long for tsv definition packet"));
9f1b45b0 12509 p += 2 * bin2hex ((gdb_byte *) (tsv->name), p, strlen (tsv->name));
00bf0b85 12510 *p++ = '\0';
35b1e5cc
SS
12511 putpkt (rs->buf);
12512 remote_get_noisy_reply (&target_buf, &target_buf_size);
ad91cd99
PA
12513 if (*target_buf == '\0')
12514 error (_("Target does not support this command."));
12515 if (strcmp (target_buf, "OK") != 0)
12516 error (_("Error on target while downloading trace state variable."));
35b1e5cc
SS
12517}
12518
d248b706 12519static void
46670d57
TT
12520remote_enable_tracepoint (struct target_ops *self,
12521 struct bp_location *location)
d248b706
KY
12522{
12523 struct remote_state *rs = get_remote_state ();
12524 char addr_buf[40];
12525
12526 sprintf_vma (addr_buf, location->address);
bba74b36
YQ
12527 xsnprintf (rs->buf, get_remote_packet_size (), "QTEnable:%x:%s",
12528 location->owner->number, addr_buf);
d248b706
KY
12529 putpkt (rs->buf);
12530 remote_get_noisy_reply (&rs->buf, &rs->buf_size);
12531 if (*rs->buf == '\0')
12532 error (_("Target does not support enabling tracepoints while a trace run is ongoing."));
12533 if (strcmp (rs->buf, "OK") != 0)
12534 error (_("Error on target while enabling tracepoint."));
12535}
12536
12537static void
780b049c
TT
12538remote_disable_tracepoint (struct target_ops *self,
12539 struct bp_location *location)
d248b706
KY
12540{
12541 struct remote_state *rs = get_remote_state ();
12542 char addr_buf[40];
12543
12544 sprintf_vma (addr_buf, location->address);
bba74b36
YQ
12545 xsnprintf (rs->buf, get_remote_packet_size (), "QTDisable:%x:%s",
12546 location->owner->number, addr_buf);
d248b706
KY
12547 putpkt (rs->buf);
12548 remote_get_noisy_reply (&rs->buf, &rs->buf_size);
12549 if (*rs->buf == '\0')
12550 error (_("Target does not support disabling tracepoints while a trace run is ongoing."));
12551 if (strcmp (rs->buf, "OK") != 0)
12552 error (_("Error on target while disabling tracepoint."));
12553}
12554
35b1e5cc 12555static void
583f9a86 12556remote_trace_set_readonly_regions (struct target_ops *self)
35b1e5cc
SS
12557{
12558 asection *s;
81b9b86e 12559 bfd *abfd = NULL;
35b1e5cc 12560 bfd_size_type size;
608bcef2 12561 bfd_vma vma;
35b1e5cc 12562 int anysecs = 0;
c2fa21f1 12563 int offset = 0;
35b1e5cc
SS
12564
12565 if (!exec_bfd)
12566 return; /* No information to give. */
12567
12568 strcpy (target_buf, "QTro");
9779ab84 12569 offset = strlen (target_buf);
35b1e5cc
SS
12570 for (s = exec_bfd->sections; s; s = s->next)
12571 {
12572 char tmp1[40], tmp2[40];
c2fa21f1 12573 int sec_length;
35b1e5cc
SS
12574
12575 if ((s->flags & SEC_LOAD) == 0 ||
0df8b418 12576 /* (s->flags & SEC_CODE) == 0 || */
35b1e5cc
SS
12577 (s->flags & SEC_READONLY) == 0)
12578 continue;
12579
12580 anysecs = 1;
81b9b86e 12581 vma = bfd_get_section_vma (abfd, s);
35b1e5cc 12582 size = bfd_get_section_size (s);
608bcef2
HZ
12583 sprintf_vma (tmp1, vma);
12584 sprintf_vma (tmp2, vma + size);
c2fa21f1
HZ
12585 sec_length = 1 + strlen (tmp1) + 1 + strlen (tmp2);
12586 if (offset + sec_length + 1 > target_buf_size)
12587 {
4082afcc 12588 if (packet_support (PACKET_qXfer_traceframe_info) != PACKET_ENABLE)
864ac8a7 12589 warning (_("\
c2fa21f1
HZ
12590Too many sections for read-only sections definition packet."));
12591 break;
12592 }
bba74b36
YQ
12593 xsnprintf (target_buf + offset, target_buf_size - offset, ":%s,%s",
12594 tmp1, tmp2);
c2fa21f1 12595 offset += sec_length;
35b1e5cc
SS
12596 }
12597 if (anysecs)
12598 {
12599 putpkt (target_buf);
12600 getpkt (&target_buf, &target_buf_size, 0);
12601 }
12602}
12603
12604static void
e2d1aae3 12605remote_trace_start (struct target_ops *self)
35b1e5cc
SS
12606{
12607 putpkt ("QTStart");
12608 remote_get_noisy_reply (&target_buf, &target_buf_size);
ad91cd99
PA
12609 if (*target_buf == '\0')
12610 error (_("Target does not support this command."));
12611 if (strcmp (target_buf, "OK") != 0)
35b1e5cc
SS
12612 error (_("Bogus reply from target: %s"), target_buf);
12613}
12614
12615static int
8bd200f1 12616remote_get_trace_status (struct target_ops *self, struct trace_status *ts)
35b1e5cc 12617{
953b98d1 12618 /* Initialize it just to avoid a GCC false warning. */
f652de6f 12619 char *p = NULL;
0df8b418 12620 /* FIXME we need to get register block size some other way. */
00bf0b85 12621 extern int trace_regblock_size;
bd3eecc3
PA
12622 enum packet_result result;
12623
4082afcc 12624 if (packet_support (PACKET_qTStatus) == PACKET_DISABLE)
bd3eecc3 12625 return -1;
a744cf53 12626
00bf0b85
SS
12627 trace_regblock_size = get_remote_arch_state ()->sizeof_g_packet;
12628
049dc89b
JK
12629 putpkt ("qTStatus");
12630
492d29ea 12631 TRY
67f41397
JK
12632 {
12633 p = remote_get_noisy_reply (&target_buf, &target_buf_size);
12634 }
492d29ea 12635 CATCH (ex, RETURN_MASK_ERROR)
67f41397 12636 {
598d3636
JK
12637 if (ex.error != TARGET_CLOSE_ERROR)
12638 {
12639 exception_fprintf (gdb_stderr, ex, "qTStatus: ");
12640 return -1;
12641 }
12642 throw_exception (ex);
67f41397 12643 }
492d29ea 12644 END_CATCH
00bf0b85 12645
bd3eecc3
PA
12646 result = packet_ok (p, &remote_protocol_packets[PACKET_qTStatus]);
12647
00bf0b85 12648 /* If the remote target doesn't do tracing, flag it. */
bd3eecc3 12649 if (result == PACKET_UNKNOWN)
00bf0b85 12650 return -1;
35b1e5cc 12651
00bf0b85 12652 /* We're working with a live target. */
f5911ea1 12653 ts->filename = NULL;
00bf0b85 12654
00bf0b85 12655 if (*p++ != 'T')
35b1e5cc
SS
12656 error (_("Bogus trace status reply from target: %s"), target_buf);
12657
84cebc4a
YQ
12658 /* Function 'parse_trace_status' sets default value of each field of
12659 'ts' at first, so we don't have to do it here. */
00bf0b85
SS
12660 parse_trace_status (p, ts);
12661
12662 return ts->running;
35b1e5cc
SS
12663}
12664
70221824 12665static void
db90e85c 12666remote_get_tracepoint_status (struct target_ops *self, struct breakpoint *bp,
f196051f
SS
12667 struct uploaded_tp *utp)
12668{
12669 struct remote_state *rs = get_remote_state ();
f196051f
SS
12670 char *reply;
12671 struct bp_location *loc;
12672 struct tracepoint *tp = (struct tracepoint *) bp;
bba74b36 12673 size_t size = get_remote_packet_size ();
f196051f
SS
12674
12675 if (tp)
12676 {
c1fc2657 12677 tp->hit_count = 0;
f196051f 12678 tp->traceframe_usage = 0;
c1fc2657 12679 for (loc = tp->loc; loc; loc = loc->next)
f196051f
SS
12680 {
12681 /* If the tracepoint was never downloaded, don't go asking for
12682 any status. */
12683 if (tp->number_on_target == 0)
12684 continue;
bba74b36
YQ
12685 xsnprintf (rs->buf, size, "qTP:%x:%s", tp->number_on_target,
12686 phex_nz (loc->address, 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 else if (utp)
12697 {
12698 utp->hit_count = 0;
12699 utp->traceframe_usage = 0;
bba74b36
YQ
12700 xsnprintf (rs->buf, size, "qTP:%x:%s", utp->number,
12701 phex_nz (utp->addr, 0));
f196051f
SS
12702 putpkt (rs->buf);
12703 reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
12704 if (reply && *reply)
12705 {
12706 if (*reply == 'V')
12707 parse_tracepoint_status (reply + 1, bp, utp);
12708 }
12709 }
12710}
12711
35b1e5cc 12712static void
74499f1b 12713remote_trace_stop (struct target_ops *self)
35b1e5cc
SS
12714{
12715 putpkt ("QTStop");
12716 remote_get_noisy_reply (&target_buf, &target_buf_size);
ad91cd99
PA
12717 if (*target_buf == '\0')
12718 error (_("Target does not support this command."));
12719 if (strcmp (target_buf, "OK") != 0)
35b1e5cc
SS
12720 error (_("Bogus reply from target: %s"), target_buf);
12721}
12722
12723static int
bd4c6793
TT
12724remote_trace_find (struct target_ops *self,
12725 enum trace_find_type type, int num,
cc5925ad 12726 CORE_ADDR addr1, CORE_ADDR addr2,
35b1e5cc
SS
12727 int *tpp)
12728{
12729 struct remote_state *rs = get_remote_state ();
bba74b36 12730 char *endbuf = rs->buf + get_remote_packet_size ();
35b1e5cc
SS
12731 char *p, *reply;
12732 int target_frameno = -1, target_tracept = -1;
12733
e6e4e701
PA
12734 /* Lookups other than by absolute frame number depend on the current
12735 trace selected, so make sure it is correct on the remote end
12736 first. */
12737 if (type != tfind_number)
12738 set_remote_traceframe ();
12739
35b1e5cc
SS
12740 p = rs->buf;
12741 strcpy (p, "QTFrame:");
12742 p = strchr (p, '\0');
12743 switch (type)
12744 {
12745 case tfind_number:
bba74b36 12746 xsnprintf (p, endbuf - p, "%x", num);
35b1e5cc
SS
12747 break;
12748 case tfind_pc:
bba74b36 12749 xsnprintf (p, endbuf - p, "pc:%s", phex_nz (addr1, 0));
35b1e5cc
SS
12750 break;
12751 case tfind_tp:
bba74b36 12752 xsnprintf (p, endbuf - p, "tdp:%x", num);
35b1e5cc
SS
12753 break;
12754 case tfind_range:
bba74b36
YQ
12755 xsnprintf (p, endbuf - p, "range:%s:%s", phex_nz (addr1, 0),
12756 phex_nz (addr2, 0));
35b1e5cc
SS
12757 break;
12758 case tfind_outside:
bba74b36
YQ
12759 xsnprintf (p, endbuf - p, "outside:%s:%s", phex_nz (addr1, 0),
12760 phex_nz (addr2, 0));
35b1e5cc
SS
12761 break;
12762 default:
9b20d036 12763 error (_("Unknown trace find type %d"), type);
35b1e5cc
SS
12764 }
12765
12766 putpkt (rs->buf);
2f65bcb7 12767 reply = remote_get_noisy_reply (&(rs->buf), &rs->buf_size);
ad91cd99
PA
12768 if (*reply == '\0')
12769 error (_("Target does not support this command."));
35b1e5cc
SS
12770
12771 while (reply && *reply)
12772 switch (*reply)
12773 {
12774 case 'F':
f197e0f1
VP
12775 p = ++reply;
12776 target_frameno = (int) strtol (p, &reply, 16);
12777 if (reply == p)
12778 error (_("Unable to parse trace frame number"));
e6e4e701
PA
12779 /* Don't update our remote traceframe number cache on failure
12780 to select a remote traceframe. */
f197e0f1
VP
12781 if (target_frameno == -1)
12782 return -1;
35b1e5cc
SS
12783 break;
12784 case 'T':
f197e0f1
VP
12785 p = ++reply;
12786 target_tracept = (int) strtol (p, &reply, 16);
12787 if (reply == p)
12788 error (_("Unable to parse tracepoint number"));
35b1e5cc
SS
12789 break;
12790 case 'O': /* "OK"? */
12791 if (reply[1] == 'K' && reply[2] == '\0')
12792 reply += 2;
12793 else
12794 error (_("Bogus reply from target: %s"), reply);
12795 break;
12796 default:
12797 error (_("Bogus reply from target: %s"), reply);
12798 }
12799 if (tpp)
12800 *tpp = target_tracept;
e6e4e701 12801
262e1174 12802 rs->remote_traceframe_number = target_frameno;
35b1e5cc
SS
12803 return target_frameno;
12804}
12805
12806static int
4011015b
TT
12807remote_get_trace_state_variable_value (struct target_ops *self,
12808 int tsvnum, LONGEST *val)
35b1e5cc
SS
12809{
12810 struct remote_state *rs = get_remote_state ();
12811 char *reply;
12812 ULONGEST uval;
12813
e6e4e701
PA
12814 set_remote_traceframe ();
12815
bba74b36 12816 xsnprintf (rs->buf, get_remote_packet_size (), "qTV:%x", tsvnum);
35b1e5cc
SS
12817 putpkt (rs->buf);
12818 reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
12819 if (reply && *reply)
12820 {
12821 if (*reply == 'V')
12822 {
12823 unpack_varlen_hex (reply + 1, &uval);
12824 *val = (LONGEST) uval;
12825 return 1;
12826 }
12827 }
12828 return 0;
12829}
12830
00bf0b85 12831static int
dc3decaf 12832remote_save_trace_data (struct target_ops *self, const char *filename)
00bf0b85
SS
12833{
12834 struct remote_state *rs = get_remote_state ();
12835 char *p, *reply;
12836
12837 p = rs->buf;
12838 strcpy (p, "QTSave:");
12839 p += strlen (p);
12840 if ((p - rs->buf) + strlen (filename) * 2 >= get_remote_packet_size ())
12841 error (_("Remote file name too long for trace save packet"));
9f1b45b0 12842 p += 2 * bin2hex ((gdb_byte *) filename, p, strlen (filename));
00bf0b85
SS
12843 *p++ = '\0';
12844 putpkt (rs->buf);
ad91cd99 12845 reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
d6c5869f 12846 if (*reply == '\0')
ad91cd99
PA
12847 error (_("Target does not support this command."));
12848 if (strcmp (reply, "OK") != 0)
12849 error (_("Bogus reply from target: %s"), reply);
00bf0b85
SS
12850 return 0;
12851}
12852
12853/* This is basically a memory transfer, but needs to be its own packet
12854 because we don't know how the target actually organizes its trace
12855 memory, plus we want to be able to ask for as much as possible, but
12856 not be unhappy if we don't get as much as we ask for. */
12857
12858static LONGEST
88ee6f45
TT
12859remote_get_raw_trace_data (struct target_ops *self,
12860 gdb_byte *buf, ULONGEST offset, LONGEST len)
00bf0b85
SS
12861{
12862 struct remote_state *rs = get_remote_state ();
12863 char *reply;
12864 char *p;
12865 int rslt;
12866
12867 p = rs->buf;
12868 strcpy (p, "qTBuffer:");
12869 p += strlen (p);
12870 p += hexnumstr (p, offset);
12871 *p++ = ',';
12872 p += hexnumstr (p, len);
12873 *p++ = '\0';
12874
12875 putpkt (rs->buf);
12876 reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
12877 if (reply && *reply)
12878 {
12879 /* 'l' by itself means we're at the end of the buffer and
12880 there is nothing more to get. */
12881 if (*reply == 'l')
12882 return 0;
12883
12884 /* Convert the reply into binary. Limit the number of bytes to
12885 convert according to our passed-in buffer size, rather than
12886 what was returned in the packet; if the target is
12887 unexpectedly generous and gives us a bigger reply than we
12888 asked for, we don't want to crash. */
12889 rslt = hex2bin (target_buf, buf, len);
12890 return rslt;
12891 }
12892
12893 /* Something went wrong, flag as an error. */
12894 return -1;
12895}
12896
35b1e5cc 12897static void
37b25738 12898remote_set_disconnected_tracing (struct target_ops *self, int val)
35b1e5cc
SS
12899{
12900 struct remote_state *rs = get_remote_state ();
12901
4082afcc 12902 if (packet_support (PACKET_DisconnectedTracing_feature) == PACKET_ENABLE)
33da3f1c 12903 {
ad91cd99
PA
12904 char *reply;
12905
bba74b36 12906 xsnprintf (rs->buf, get_remote_packet_size (), "QTDisconnected:%x", val);
33da3f1c 12907 putpkt (rs->buf);
ad91cd99
PA
12908 reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
12909 if (*reply == '\0')
33da3f1c 12910 error (_("Target does not support this command."));
ad91cd99
PA
12911 if (strcmp (reply, "OK") != 0)
12912 error (_("Bogus reply from target: %s"), reply);
33da3f1c
SS
12913 }
12914 else if (val)
12915 warning (_("Target does not support disconnected tracing."));
35b1e5cc
SS
12916}
12917
dc146f7c
VP
12918static int
12919remote_core_of_thread (struct target_ops *ops, ptid_t ptid)
12920{
12921 struct thread_info *info = find_thread_ptid (ptid);
a744cf53 12922
fe978cb0
PA
12923 if (info && info->priv)
12924 return info->priv->core;
dc146f7c
VP
12925 return -1;
12926}
12927
4daf5ac0 12928static void
736d5b1f 12929remote_set_circular_trace_buffer (struct target_ops *self, int val)
4daf5ac0
SS
12930{
12931 struct remote_state *rs = get_remote_state ();
ad91cd99 12932 char *reply;
4daf5ac0 12933
bba74b36 12934 xsnprintf (rs->buf, get_remote_packet_size (), "QTBuffer:circular:%x", val);
4daf5ac0 12935 putpkt (rs->buf);
ad91cd99
PA
12936 reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
12937 if (*reply == '\0')
4daf5ac0 12938 error (_("Target does not support this command."));
ad91cd99
PA
12939 if (strcmp (reply, "OK") != 0)
12940 error (_("Bogus reply from target: %s"), reply);
4daf5ac0
SS
12941}
12942
b3b9301e 12943static struct traceframe_info *
a893e81f 12944remote_traceframe_info (struct target_ops *self)
b3b9301e
PA
12945{
12946 char *text;
12947
12948 text = target_read_stralloc (&current_target,
12949 TARGET_OBJECT_TRACEFRAME_INFO, NULL);
12950 if (text != NULL)
12951 {
12952 struct traceframe_info *info;
12953 struct cleanup *back_to = make_cleanup (xfree, text);
12954
12955 info = parse_traceframe_info (text);
12956 do_cleanups (back_to);
12957 return info;
12958 }
12959
12960 return NULL;
12961}
12962
405f8e94
SS
12963/* Handle the qTMinFTPILen packet. Returns the minimum length of
12964 instruction on which a fast tracepoint may be placed. Returns -1
12965 if the packet is not supported, and 0 if the minimum instruction
12966 length is unknown. */
12967
12968static int
0e67620a 12969remote_get_min_fast_tracepoint_insn_len (struct target_ops *self)
405f8e94
SS
12970{
12971 struct remote_state *rs = get_remote_state ();
12972 char *reply;
12973
e886a173
PA
12974 /* If we're not debugging a process yet, the IPA can't be
12975 loaded. */
12976 if (!target_has_execution)
12977 return 0;
12978
12979 /* Make sure the remote is pointing at the right process. */
12980 set_general_process ();
12981
bba74b36 12982 xsnprintf (rs->buf, get_remote_packet_size (), "qTMinFTPILen");
405f8e94
SS
12983 putpkt (rs->buf);
12984 reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
12985 if (*reply == '\0')
12986 return -1;
12987 else
12988 {
12989 ULONGEST min_insn_len;
12990
12991 unpack_varlen_hex (reply, &min_insn_len);
12992
12993 return (int) min_insn_len;
12994 }
12995}
12996
f6f899bf 12997static void
4da384be 12998remote_set_trace_buffer_size (struct target_ops *self, LONGEST val)
f6f899bf 12999{
4082afcc 13000 if (packet_support (PACKET_QTBuffer_size) != PACKET_DISABLE)
f6f899bf
HAQ
13001 {
13002 struct remote_state *rs = get_remote_state ();
13003 char *buf = rs->buf;
13004 char *endbuf = rs->buf + get_remote_packet_size ();
13005 enum packet_result result;
13006
13007 gdb_assert (val >= 0 || val == -1);
13008 buf += xsnprintf (buf, endbuf - buf, "QTBuffer:size:");
13009 /* Send -1 as literal "-1" to avoid host size dependency. */
13010 if (val < 0)
13011 {
13012 *buf++ = '-';
13013 buf += hexnumstr (buf, (ULONGEST) -val);
13014 }
13015 else
13016 buf += hexnumstr (buf, (ULONGEST) val);
13017
13018 putpkt (rs->buf);
13019 remote_get_noisy_reply (&rs->buf, &rs->buf_size);
13020 result = packet_ok (rs->buf,
13021 &remote_protocol_packets[PACKET_QTBuffer_size]);
13022
13023 if (result != PACKET_OK)
13024 warning (_("Bogus reply from target: %s"), rs->buf);
13025 }
13026}
13027
f196051f 13028static int
d9e68a2c
TT
13029remote_set_trace_notes (struct target_ops *self,
13030 const char *user, const char *notes,
ca623f82 13031 const char *stop_notes)
f196051f
SS
13032{
13033 struct remote_state *rs = get_remote_state ();
13034 char *reply;
13035 char *buf = rs->buf;
13036 char *endbuf = rs->buf + get_remote_packet_size ();
13037 int nbytes;
13038
13039 buf += xsnprintf (buf, endbuf - buf, "QTNotes:");
13040 if (user)
13041 {
13042 buf += xsnprintf (buf, endbuf - buf, "user:");
9f1b45b0 13043 nbytes = bin2hex ((gdb_byte *) user, buf, strlen (user));
f196051f
SS
13044 buf += 2 * nbytes;
13045 *buf++ = ';';
13046 }
13047 if (notes)
13048 {
13049 buf += xsnprintf (buf, endbuf - buf, "notes:");
9f1b45b0 13050 nbytes = bin2hex ((gdb_byte *) notes, buf, strlen (notes));
f196051f
SS
13051 buf += 2 * nbytes;
13052 *buf++ = ';';
13053 }
13054 if (stop_notes)
13055 {
13056 buf += xsnprintf (buf, endbuf - buf, "tstop:");
9f1b45b0 13057 nbytes = bin2hex ((gdb_byte *) stop_notes, buf, strlen (stop_notes));
f196051f
SS
13058 buf += 2 * nbytes;
13059 *buf++ = ';';
13060 }
13061 /* Ensure the buffer is terminated. */
13062 *buf = '\0';
13063
13064 putpkt (rs->buf);
13065 reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
13066 if (*reply == '\0')
13067 return 0;
13068
13069 if (strcmp (reply, "OK") != 0)
13070 error (_("Bogus reply from target: %s"), reply);
13071
13072 return 1;
13073}
13074
d1feda86 13075static int
2c152180 13076remote_use_agent (struct target_ops *self, int use)
d1feda86 13077{
4082afcc 13078 if (packet_support (PACKET_QAgent) != PACKET_DISABLE)
d1feda86
YQ
13079 {
13080 struct remote_state *rs = get_remote_state ();
13081
13082 /* If the stub supports QAgent. */
bba74b36 13083 xsnprintf (rs->buf, get_remote_packet_size (), "QAgent:%d", use);
d1feda86
YQ
13084 putpkt (rs->buf);
13085 getpkt (&rs->buf, &rs->buf_size, 0);
13086
13087 if (strcmp (rs->buf, "OK") == 0)
13088 {
13089 use_agent = use;
13090 return 1;
13091 }
13092 }
13093
13094 return 0;
13095}
13096
13097static int
fe38f897 13098remote_can_use_agent (struct target_ops *self)
d1feda86 13099{
4082afcc 13100 return (packet_support (PACKET_QAgent) != PACKET_DISABLE);
d1feda86
YQ
13101}
13102
9accd112
MM
13103struct btrace_target_info
13104{
13105 /* The ptid of the traced thread. */
13106 ptid_t ptid;
f4abbc16
MM
13107
13108 /* The obtained branch trace configuration. */
13109 struct btrace_config conf;
9accd112
MM
13110};
13111
f4abbc16
MM
13112/* Reset our idea of our target's btrace configuration. */
13113
13114static void
13115remote_btrace_reset (void)
13116{
13117 struct remote_state *rs = get_remote_state ();
13118
13119 memset (&rs->btrace_config, 0, sizeof (rs->btrace_config));
13120}
13121
9accd112
MM
13122/* Check whether the target supports branch tracing. */
13123
13124static int
043c3577 13125remote_supports_btrace (struct target_ops *self, enum btrace_format format)
9accd112 13126{
4082afcc 13127 if (packet_support (PACKET_Qbtrace_off) != PACKET_ENABLE)
9accd112 13128 return 0;
4082afcc 13129 if (packet_support (PACKET_qXfer_btrace) != PACKET_ENABLE)
9accd112
MM
13130 return 0;
13131
043c3577
MM
13132 switch (format)
13133 {
13134 case BTRACE_FORMAT_NONE:
13135 return 0;
13136
13137 case BTRACE_FORMAT_BTS:
13138 return (packet_support (PACKET_Qbtrace_bts) == PACKET_ENABLE);
b20a6524
MM
13139
13140 case BTRACE_FORMAT_PT:
13141 /* The trace is decoded on the host. Even if our target supports it,
13142 we still need to have libipt to decode the trace. */
13143#if defined (HAVE_LIBIPT)
13144 return (packet_support (PACKET_Qbtrace_pt) == PACKET_ENABLE);
13145#else /* !defined (HAVE_LIBIPT) */
13146 return 0;
13147#endif /* !defined (HAVE_LIBIPT) */
043c3577
MM
13148 }
13149
13150 internal_error (__FILE__, __LINE__, _("Unknown branch trace format"));
9accd112
MM
13151}
13152
f4abbc16
MM
13153/* Synchronize the configuration with the target. */
13154
13155static void
13156btrace_sync_conf (const struct btrace_config *conf)
13157{
d33501a5
MM
13158 struct packet_config *packet;
13159 struct remote_state *rs;
13160 char *buf, *pos, *endbuf;
13161
13162 rs = get_remote_state ();
13163 buf = rs->buf;
13164 endbuf = buf + get_remote_packet_size ();
13165
13166 packet = &remote_protocol_packets[PACKET_Qbtrace_conf_bts_size];
13167 if (packet_config_support (packet) == PACKET_ENABLE
13168 && conf->bts.size != rs->btrace_config.bts.size)
13169 {
13170 pos = buf;
13171 pos += xsnprintf (pos, endbuf - pos, "%s=0x%x", packet->name,
13172 conf->bts.size);
13173
13174 putpkt (buf);
13175 getpkt (&buf, &rs->buf_size, 0);
13176
13177 if (packet_ok (buf, packet) == PACKET_ERROR)
13178 {
13179 if (buf[0] == 'E' && buf[1] == '.')
13180 error (_("Failed to configure the BTS buffer size: %s"), buf + 2);
13181 else
13182 error (_("Failed to configure the BTS buffer size."));
13183 }
13184
13185 rs->btrace_config.bts.size = conf->bts.size;
13186 }
b20a6524
MM
13187
13188 packet = &remote_protocol_packets[PACKET_Qbtrace_conf_pt_size];
13189 if (packet_config_support (packet) == PACKET_ENABLE
13190 && conf->pt.size != rs->btrace_config.pt.size)
13191 {
13192 pos = buf;
13193 pos += xsnprintf (pos, endbuf - pos, "%s=0x%x", packet->name,
13194 conf->pt.size);
13195
13196 putpkt (buf);
13197 getpkt (&buf, &rs->buf_size, 0);
13198
13199 if (packet_ok (buf, packet) == PACKET_ERROR)
13200 {
13201 if (buf[0] == 'E' && buf[1] == '.')
13202 error (_("Failed to configure the trace buffer size: %s"), buf + 2);
13203 else
13204 error (_("Failed to configure the trace buffer size."));
13205 }
13206
13207 rs->btrace_config.pt.size = conf->pt.size;
13208 }
f4abbc16
MM
13209}
13210
13211/* Read the current thread's btrace configuration from the target and
13212 store it into CONF. */
13213
13214static void
13215btrace_read_config (struct btrace_config *conf)
13216{
13217 char *xml;
13218
13219 xml = target_read_stralloc (&current_target,
b20a6524 13220 TARGET_OBJECT_BTRACE_CONF, "");
f4abbc16
MM
13221 if (xml != NULL)
13222 {
13223 struct cleanup *cleanup;
13224
13225 cleanup = make_cleanup (xfree, xml);
13226 parse_xml_btrace_conf (conf, xml);
13227 do_cleanups (cleanup);
13228 }
13229}
13230
c0272db5
TW
13231/* Maybe reopen target btrace. */
13232
13233static void
13234remote_btrace_maybe_reopen (void)
13235{
13236 struct remote_state *rs = get_remote_state ();
c0272db5
TW
13237 struct thread_info *tp;
13238 int btrace_target_pushed = 0;
13239 int warned = 0;
13240
5ed8105e
PA
13241 scoped_restore_current_thread restore_thread;
13242
c0272db5
TW
13243 ALL_NON_EXITED_THREADS (tp)
13244 {
13245 set_general_thread (tp->ptid);
13246
13247 memset (&rs->btrace_config, 0x00, sizeof (struct btrace_config));
13248 btrace_read_config (&rs->btrace_config);
13249
13250 if (rs->btrace_config.format == BTRACE_FORMAT_NONE)
13251 continue;
13252
13253#if !defined (HAVE_LIBIPT)
13254 if (rs->btrace_config.format == BTRACE_FORMAT_PT)
13255 {
13256 if (!warned)
13257 {
13258 warned = 1;
13259 warning (_("GDB does not support Intel Processor Trace. "
13260 "\"record\" will not work in this session."));
13261 }
13262
13263 continue;
13264 }
13265#endif /* !defined (HAVE_LIBIPT) */
13266
13267 /* Push target, once, but before anything else happens. This way our
13268 changes to the threads will be cleaned up by unpushing the target
13269 in case btrace_read_config () throws. */
13270 if (!btrace_target_pushed)
13271 {
13272 btrace_target_pushed = 1;
13273 record_btrace_push_target ();
13274 printf_filtered (_("Target is recording using %s.\n"),
13275 btrace_format_string (rs->btrace_config.format));
13276 }
13277
13278 tp->btrace.target = XCNEW (struct btrace_target_info);
13279 tp->btrace.target->ptid = tp->ptid;
13280 tp->btrace.target->conf = rs->btrace_config;
13281 }
c0272db5
TW
13282}
13283
9accd112
MM
13284/* Enable branch tracing. */
13285
13286static struct btrace_target_info *
f4abbc16
MM
13287remote_enable_btrace (struct target_ops *self, ptid_t ptid,
13288 const struct btrace_config *conf)
9accd112
MM
13289{
13290 struct btrace_target_info *tinfo = NULL;
b20a6524 13291 struct packet_config *packet = NULL;
9accd112
MM
13292 struct remote_state *rs = get_remote_state ();
13293 char *buf = rs->buf;
13294 char *endbuf = rs->buf + get_remote_packet_size ();
13295
b20a6524
MM
13296 switch (conf->format)
13297 {
13298 case BTRACE_FORMAT_BTS:
13299 packet = &remote_protocol_packets[PACKET_Qbtrace_bts];
13300 break;
13301
13302 case BTRACE_FORMAT_PT:
13303 packet = &remote_protocol_packets[PACKET_Qbtrace_pt];
13304 break;
13305 }
13306
13307 if (packet == NULL || packet_config_support (packet) != PACKET_ENABLE)
9accd112
MM
13308 error (_("Target does not support branch tracing."));
13309
f4abbc16
MM
13310 btrace_sync_conf (conf);
13311
9accd112
MM
13312 set_general_thread (ptid);
13313
13314 buf += xsnprintf (buf, endbuf - buf, "%s", packet->name);
13315 putpkt (rs->buf);
13316 getpkt (&rs->buf, &rs->buf_size, 0);
13317
13318 if (packet_ok (rs->buf, packet) == PACKET_ERROR)
13319 {
13320 if (rs->buf[0] == 'E' && rs->buf[1] == '.')
13321 error (_("Could not enable branch tracing for %s: %s"),
13322 target_pid_to_str (ptid), rs->buf + 2);
13323 else
13324 error (_("Could not enable branch tracing for %s."),
13325 target_pid_to_str (ptid));
13326 }
13327
8d749320 13328 tinfo = XCNEW (struct btrace_target_info);
9accd112
MM
13329 tinfo->ptid = ptid;
13330
f4abbc16
MM
13331 /* If we fail to read the configuration, we lose some information, but the
13332 tracing itself is not impacted. */
492d29ea
PA
13333 TRY
13334 {
13335 btrace_read_config (&tinfo->conf);
13336 }
13337 CATCH (err, RETURN_MASK_ERROR)
13338 {
13339 if (err.message != NULL)
13340 warning ("%s", err.message);
13341 }
13342 END_CATCH
f4abbc16 13343
9accd112
MM
13344 return tinfo;
13345}
13346
13347/* Disable branch tracing. */
13348
13349static void
25e95349
TT
13350remote_disable_btrace (struct target_ops *self,
13351 struct btrace_target_info *tinfo)
9accd112
MM
13352{
13353 struct packet_config *packet = &remote_protocol_packets[PACKET_Qbtrace_off];
13354 struct remote_state *rs = get_remote_state ();
13355 char *buf = rs->buf;
13356 char *endbuf = rs->buf + get_remote_packet_size ();
13357
4082afcc 13358 if (packet_config_support (packet) != PACKET_ENABLE)
9accd112
MM
13359 error (_("Target does not support branch tracing."));
13360
13361 set_general_thread (tinfo->ptid);
13362
13363 buf += xsnprintf (buf, endbuf - buf, "%s", packet->name);
13364 putpkt (rs->buf);
13365 getpkt (&rs->buf, &rs->buf_size, 0);
13366
13367 if (packet_ok (rs->buf, packet) == PACKET_ERROR)
13368 {
13369 if (rs->buf[0] == 'E' && rs->buf[1] == '.')
13370 error (_("Could not disable branch tracing for %s: %s"),
13371 target_pid_to_str (tinfo->ptid), rs->buf + 2);
13372 else
13373 error (_("Could not disable branch tracing for %s."),
13374 target_pid_to_str (tinfo->ptid));
13375 }
13376
13377 xfree (tinfo);
13378}
13379
13380/* Teardown branch tracing. */
13381
13382static void
1777056d
TT
13383remote_teardown_btrace (struct target_ops *self,
13384 struct btrace_target_info *tinfo)
9accd112
MM
13385{
13386 /* We must not talk to the target during teardown. */
13387 xfree (tinfo);
13388}
13389
13390/* Read the branch trace. */
13391
969c39fb 13392static enum btrace_error
39c49f83 13393remote_read_btrace (struct target_ops *self,
734b0e4b 13394 struct btrace_data *btrace,
969c39fb 13395 struct btrace_target_info *tinfo,
9accd112
MM
13396 enum btrace_read_type type)
13397{
13398 struct packet_config *packet = &remote_protocol_packets[PACKET_qXfer_btrace];
969c39fb 13399 struct cleanup *cleanup;
9accd112
MM
13400 const char *annex;
13401 char *xml;
13402
4082afcc 13403 if (packet_config_support (packet) != PACKET_ENABLE)
9accd112
MM
13404 error (_("Target does not support branch tracing."));
13405
13406#if !defined(HAVE_LIBEXPAT)
13407 error (_("Cannot process branch tracing result. XML parsing not supported."));
13408#endif
13409
13410 switch (type)
13411 {
864089d2 13412 case BTRACE_READ_ALL:
9accd112
MM
13413 annex = "all";
13414 break;
864089d2 13415 case BTRACE_READ_NEW:
9accd112
MM
13416 annex = "new";
13417 break;
969c39fb
MM
13418 case BTRACE_READ_DELTA:
13419 annex = "delta";
13420 break;
9accd112
MM
13421 default:
13422 internal_error (__FILE__, __LINE__,
13423 _("Bad branch tracing read type: %u."),
13424 (unsigned int) type);
13425 }
13426
13427 xml = target_read_stralloc (&current_target,
b20a6524 13428 TARGET_OBJECT_BTRACE, annex);
969c39fb
MM
13429 if (xml == NULL)
13430 return BTRACE_ERR_UNKNOWN;
9accd112 13431
969c39fb 13432 cleanup = make_cleanup (xfree, xml);
734b0e4b 13433 parse_xml_btrace (btrace, xml);
969c39fb 13434 do_cleanups (cleanup);
9accd112 13435
969c39fb 13436 return BTRACE_ERR_NONE;
9accd112
MM
13437}
13438
f4abbc16
MM
13439static const struct btrace_config *
13440remote_btrace_conf (struct target_ops *self,
13441 const struct btrace_target_info *tinfo)
13442{
13443 return &tinfo->conf;
13444}
13445
ced63ec0 13446static int
5436ff03 13447remote_augmented_libraries_svr4_read (struct target_ops *self)
ced63ec0 13448{
4082afcc
PA
13449 return (packet_support (PACKET_augmented_libraries_svr4_read_feature)
13450 == PACKET_ENABLE);
ced63ec0
GB
13451}
13452
9dd130a0
TT
13453/* Implementation of to_load. */
13454
13455static void
9cbe5fff 13456remote_load (struct target_ops *self, const char *name, int from_tty)
9dd130a0
TT
13457{
13458 generic_load (name, from_tty);
13459}
13460
c78fa86a
GB
13461/* Accepts an integer PID; returns a string representing a file that
13462 can be opened on the remote side to get the symbols for the child
13463 process. Returns NULL if the operation is not supported. */
13464
13465static char *
13466remote_pid_to_exec_file (struct target_ops *self, int pid)
13467{
13468 static char *filename = NULL;
835205d0
GB
13469 struct inferior *inf;
13470 char *annex = NULL;
c78fa86a
GB
13471
13472 if (packet_support (PACKET_qXfer_exec_file) != PACKET_ENABLE)
13473 return NULL;
13474
13475 if (filename != NULL)
13476 xfree (filename);
13477
835205d0
GB
13478 inf = find_inferior_pid (pid);
13479 if (inf == NULL)
13480 internal_error (__FILE__, __LINE__,
13481 _("not currently attached to process %d"), pid);
13482
13483 if (!inf->fake_pid_p)
13484 {
13485 const int annex_size = 9;
13486
224c3ddb 13487 annex = (char *) alloca (annex_size);
835205d0
GB
13488 xsnprintf (annex, annex_size, "%x", pid);
13489 }
13490
c78fa86a
GB
13491 filename = target_read_stralloc (&current_target,
13492 TARGET_OBJECT_EXEC_FILE, annex);
13493
13494 return filename;
13495}
13496
750ce8d1
YQ
13497/* Implement the to_can_do_single_step target_ops method. */
13498
13499static int
13500remote_can_do_single_step (struct target_ops *ops)
13501{
13502 /* We can only tell whether target supports single step or not by
13503 supported s and S vCont actions if the stub supports vContSupported
13504 feature. If the stub doesn't support vContSupported feature,
13505 we have conservatively to think target doesn't supports single
13506 step. */
13507 if (packet_support (PACKET_vContSupported) == PACKET_ENABLE)
13508 {
13509 struct remote_state *rs = get_remote_state ();
13510
13511 if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
13512 remote_vcont_probe (rs);
13513
13514 return rs->supports_vCont.s && rs->supports_vCont.S;
13515 }
13516 else
13517 return 0;
13518}
13519
3a00c802
PA
13520/* Implementation of the to_execution_direction method for the remote
13521 target. */
13522
13523static enum exec_direction_kind
13524remote_execution_direction (struct target_ops *self)
13525{
13526 struct remote_state *rs = get_remote_state ();
13527
13528 return rs->last_resume_exec_dir;
13529}
13530
c906108c 13531static void
fba45db2 13532init_remote_ops (void)
c906108c 13533{
c5aa993b 13534 remote_ops.to_shortname = "remote";
c906108c 13535 remote_ops.to_longname = "Remote serial target in gdb-specific protocol";
c5aa993b 13536 remote_ops.to_doc =
c906108c 13537 "Use a remote computer via a serial line, using a gdb-specific protocol.\n\
0d06e24b
JM
13538Specify the serial device it is connected to\n\
13539(e.g. /dev/ttyS0, /dev/ttya, COM1, etc.).";
c5aa993b
JM
13540 remote_ops.to_open = remote_open;
13541 remote_ops.to_close = remote_close;
c906108c 13542 remote_ops.to_detach = remote_detach;
6ad8ae5c 13543 remote_ops.to_disconnect = remote_disconnect;
c5aa993b 13544 remote_ops.to_resume = remote_resume;
85ad3aaf 13545 remote_ops.to_commit_resume = remote_commit_resume;
c906108c
SS
13546 remote_ops.to_wait = remote_wait;
13547 remote_ops.to_fetch_registers = remote_fetch_registers;
13548 remote_ops.to_store_registers = remote_store_registers;
13549 remote_ops.to_prepare_to_store = remote_prepare_to_store;
c5aa993b 13550 remote_ops.to_files_info = remote_files_info;
c906108c
SS
13551 remote_ops.to_insert_breakpoint = remote_insert_breakpoint;
13552 remote_ops.to_remove_breakpoint = remote_remove_breakpoint;
f7e6eed5
PA
13553 remote_ops.to_stopped_by_sw_breakpoint = remote_stopped_by_sw_breakpoint;
13554 remote_ops.to_supports_stopped_by_sw_breakpoint = remote_supports_stopped_by_sw_breakpoint;
13555 remote_ops.to_stopped_by_hw_breakpoint = remote_stopped_by_hw_breakpoint;
13556 remote_ops.to_supports_stopped_by_hw_breakpoint = remote_supports_stopped_by_hw_breakpoint;
3c3bea1c
GS
13557 remote_ops.to_stopped_by_watchpoint = remote_stopped_by_watchpoint;
13558 remote_ops.to_stopped_data_address = remote_stopped_data_address;
283002cf
MR
13559 remote_ops.to_watchpoint_addr_within_range =
13560 remote_watchpoint_addr_within_range;
3c3bea1c
GS
13561 remote_ops.to_can_use_hw_breakpoint = remote_check_watch_resources;
13562 remote_ops.to_insert_hw_breakpoint = remote_insert_hw_breakpoint;
13563 remote_ops.to_remove_hw_breakpoint = remote_remove_hw_breakpoint;
480a3f21
PW
13564 remote_ops.to_region_ok_for_hw_watchpoint
13565 = remote_region_ok_for_hw_watchpoint;
3c3bea1c
GS
13566 remote_ops.to_insert_watchpoint = remote_insert_watchpoint;
13567 remote_ops.to_remove_watchpoint = remote_remove_watchpoint;
c5aa993b 13568 remote_ops.to_kill = remote_kill;
9dd130a0 13569 remote_ops.to_load = remote_load;
c906108c 13570 remote_ops.to_mourn_inferior = remote_mourn;
2455069d 13571 remote_ops.to_pass_signals = remote_pass_signals;
82075af2 13572 remote_ops.to_set_syscall_catchpoint = remote_set_syscall_catchpoint;
9b224c5e 13573 remote_ops.to_program_signals = remote_program_signals;
c906108c 13574 remote_ops.to_thread_alive = remote_thread_alive;
79efa585 13575 remote_ops.to_thread_name = remote_thread_name;
e8032dde 13576 remote_ops.to_update_thread_list = remote_update_thread_list;
0caabb7e 13577 remote_ops.to_pid_to_str = remote_pid_to_str;
cf759d3b 13578 remote_ops.to_extra_thread_info = remote_threads_extra_info;
10760264 13579 remote_ops.to_get_ada_task_ptid = remote_get_ada_task_ptid;
c906108c 13580 remote_ops.to_stop = remote_stop;
bfedc46a 13581 remote_ops.to_interrupt = remote_interrupt;
93692b58 13582 remote_ops.to_pass_ctrlc = remote_pass_ctrlc;
4b8a223f 13583 remote_ops.to_xfer_partial = remote_xfer_partial;
09c98b44 13584 remote_ops.to_get_memory_xfer_limit = remote_get_memory_xfer_limit;
96baa820 13585 remote_ops.to_rcmd = remote_rcmd;
c78fa86a 13586 remote_ops.to_pid_to_exec_file = remote_pid_to_exec_file;
49d03eab 13587 remote_ops.to_log_command = serial_log_command;
38691318 13588 remote_ops.to_get_thread_local_address = remote_get_thread_local_address;
c906108c 13589 remote_ops.to_stratum = process_stratum;
c35b1492
PA
13590 remote_ops.to_has_all_memory = default_child_has_all_memory;
13591 remote_ops.to_has_memory = default_child_has_memory;
13592 remote_ops.to_has_stack = default_child_has_stack;
13593 remote_ops.to_has_registers = default_child_has_registers;
13594 remote_ops.to_has_execution = default_child_has_execution;
3e43a32a 13595 remote_ops.to_has_thread_control = tc_schedlock; /* can lock scheduler */
b2175913 13596 remote_ops.to_can_execute_reverse = remote_can_execute_reverse;
c5aa993b 13597 remote_ops.to_magic = OPS_MAGIC;
fd79ecee 13598 remote_ops.to_memory_map = remote_memory_map;
a76d924d
DJ
13599 remote_ops.to_flash_erase = remote_flash_erase;
13600 remote_ops.to_flash_done = remote_flash_done;
29709017 13601 remote_ops.to_read_description = remote_read_description;
08388c79 13602 remote_ops.to_search_memory = remote_search_memory;
75c99385
PA
13603 remote_ops.to_can_async_p = remote_can_async_p;
13604 remote_ops.to_is_async_p = remote_is_async_p;
13605 remote_ops.to_async = remote_async;
65706a29 13606 remote_ops.to_thread_events = remote_thread_events;
750ce8d1 13607 remote_ops.to_can_do_single_step = remote_can_do_single_step;
75c99385
PA
13608 remote_ops.to_terminal_inferior = remote_terminal_inferior;
13609 remote_ops.to_terminal_ours = remote_terminal_ours;
74531fed 13610 remote_ops.to_supports_non_stop = remote_supports_non_stop;
8a305172 13611 remote_ops.to_supports_multi_process = remote_supports_multi_process;
03583c20
UW
13612 remote_ops.to_supports_disable_randomization
13613 = remote_supports_disable_randomization;
4bd7dc42 13614 remote_ops.to_filesystem_is_local = remote_filesystem_is_local;
7313baad
UW
13615 remote_ops.to_fileio_open = remote_hostio_open;
13616 remote_ops.to_fileio_pwrite = remote_hostio_pwrite;
13617 remote_ops.to_fileio_pread = remote_hostio_pread;
9b15c1f0 13618 remote_ops.to_fileio_fstat = remote_hostio_fstat;
7313baad
UW
13619 remote_ops.to_fileio_close = remote_hostio_close;
13620 remote_ops.to_fileio_unlink = remote_hostio_unlink;
b9e7b9c3 13621 remote_ops.to_fileio_readlink = remote_hostio_readlink;
d248b706 13622 remote_ops.to_supports_enable_disable_tracepoint = remote_supports_enable_disable_tracepoint;
3065dfb6 13623 remote_ops.to_supports_string_tracing = remote_supports_string_tracing;
b775012e 13624 remote_ops.to_supports_evaluation_of_breakpoint_conditions = remote_supports_cond_breakpoints;
d3ce09f5 13625 remote_ops.to_can_run_breakpoint_commands = remote_can_run_breakpoint_commands;
35b1e5cc
SS
13626 remote_ops.to_trace_init = remote_trace_init;
13627 remote_ops.to_download_tracepoint = remote_download_tracepoint;
1e4d1764 13628 remote_ops.to_can_download_tracepoint = remote_can_download_tracepoint;
3e43a32a
MS
13629 remote_ops.to_download_trace_state_variable
13630 = remote_download_trace_state_variable;
d248b706
KY
13631 remote_ops.to_enable_tracepoint = remote_enable_tracepoint;
13632 remote_ops.to_disable_tracepoint = remote_disable_tracepoint;
35b1e5cc
SS
13633 remote_ops.to_trace_set_readonly_regions = remote_trace_set_readonly_regions;
13634 remote_ops.to_trace_start = remote_trace_start;
13635 remote_ops.to_get_trace_status = remote_get_trace_status;
f196051f 13636 remote_ops.to_get_tracepoint_status = remote_get_tracepoint_status;
35b1e5cc
SS
13637 remote_ops.to_trace_stop = remote_trace_stop;
13638 remote_ops.to_trace_find = remote_trace_find;
3e43a32a
MS
13639 remote_ops.to_get_trace_state_variable_value
13640 = remote_get_trace_state_variable_value;
00bf0b85
SS
13641 remote_ops.to_save_trace_data = remote_save_trace_data;
13642 remote_ops.to_upload_tracepoints = remote_upload_tracepoints;
3e43a32a
MS
13643 remote_ops.to_upload_trace_state_variables
13644 = remote_upload_trace_state_variables;
00bf0b85 13645 remote_ops.to_get_raw_trace_data = remote_get_raw_trace_data;
405f8e94 13646 remote_ops.to_get_min_fast_tracepoint_insn_len = remote_get_min_fast_tracepoint_insn_len;
35b1e5cc 13647 remote_ops.to_set_disconnected_tracing = remote_set_disconnected_tracing;
4daf5ac0 13648 remote_ops.to_set_circular_trace_buffer = remote_set_circular_trace_buffer;
f6f899bf 13649 remote_ops.to_set_trace_buffer_size = remote_set_trace_buffer_size;
f196051f 13650 remote_ops.to_set_trace_notes = remote_set_trace_notes;
dc146f7c 13651 remote_ops.to_core_of_thread = remote_core_of_thread;
4a5e7a5b 13652 remote_ops.to_verify_memory = remote_verify_memory;
711e434b 13653 remote_ops.to_get_tib_address = remote_get_tib_address;
d914c394 13654 remote_ops.to_set_permissions = remote_set_permissions;
0fb4aa4b
PA
13655 remote_ops.to_static_tracepoint_marker_at
13656 = remote_static_tracepoint_marker_at;
13657 remote_ops.to_static_tracepoint_markers_by_strid
13658 = remote_static_tracepoint_markers_by_strid;
b3b9301e 13659 remote_ops.to_traceframe_info = remote_traceframe_info;
d1feda86
YQ
13660 remote_ops.to_use_agent = remote_use_agent;
13661 remote_ops.to_can_use_agent = remote_can_use_agent;
9accd112
MM
13662 remote_ops.to_supports_btrace = remote_supports_btrace;
13663 remote_ops.to_enable_btrace = remote_enable_btrace;
13664 remote_ops.to_disable_btrace = remote_disable_btrace;
13665 remote_ops.to_teardown_btrace = remote_teardown_btrace;
13666 remote_ops.to_read_btrace = remote_read_btrace;
f4abbc16 13667 remote_ops.to_btrace_conf = remote_btrace_conf;
ced63ec0
GB
13668 remote_ops.to_augmented_libraries_svr4_read =
13669 remote_augmented_libraries_svr4_read;
8020350c
DB
13670 remote_ops.to_follow_fork = remote_follow_fork;
13671 remote_ops.to_follow_exec = remote_follow_exec;
13672 remote_ops.to_insert_fork_catchpoint = remote_insert_fork_catchpoint;
13673 remote_ops.to_remove_fork_catchpoint = remote_remove_fork_catchpoint;
13674 remote_ops.to_insert_vfork_catchpoint = remote_insert_vfork_catchpoint;
13675 remote_ops.to_remove_vfork_catchpoint = remote_remove_vfork_catchpoint;
13676 remote_ops.to_insert_exec_catchpoint = remote_insert_exec_catchpoint;
13677 remote_ops.to_remove_exec_catchpoint = remote_remove_exec_catchpoint;
3a00c802 13678 remote_ops.to_execution_direction = remote_execution_direction;
c906108c
SS
13679}
13680
13681/* Set up the extended remote vector by making a copy of the standard
13682 remote vector and adding to it. */
13683
13684static void
fba45db2 13685init_extended_remote_ops (void)
c906108c
SS
13686{
13687 extended_remote_ops = remote_ops;
13688
0f71a2f6 13689 extended_remote_ops.to_shortname = "extended-remote";
c5aa993b 13690 extended_remote_ops.to_longname =
c906108c 13691 "Extended remote serial target in gdb-specific protocol";
c5aa993b 13692 extended_remote_ops.to_doc =
c906108c 13693 "Use a remote computer via a serial line, using a gdb-specific protocol.\n\
39237dd1
PA
13694Specify the serial device it is connected to (e.g. /dev/ttya).";
13695 extended_remote_ops.to_open = extended_remote_open;
c906108c 13696 extended_remote_ops.to_create_inferior = extended_remote_create_inferior;
2d717e4f
DJ
13697 extended_remote_ops.to_detach = extended_remote_detach;
13698 extended_remote_ops.to_attach = extended_remote_attach;
b9c1d481 13699 extended_remote_ops.to_post_attach = extended_remote_post_attach;
03583c20
UW
13700 extended_remote_ops.to_supports_disable_randomization
13701 = extended_remote_supports_disable_randomization;
0f71a2f6
JM
13702}
13703
6426a772 13704static int
6a109b6b 13705remote_can_async_p (struct target_ops *ops)
6426a772 13706{
5d93a237
TT
13707 struct remote_state *rs = get_remote_state ();
13708
3015c064
SM
13709 /* We don't go async if the user has explicitly prevented it with the
13710 "maint set target-async" command. */
c6ebd6cf 13711 if (!target_async_permitted)
75c99385
PA
13712 return 0;
13713
23860348 13714 /* We're async whenever the serial device is. */
5d93a237 13715 return serial_can_async_p (rs->remote_desc);
6426a772
JM
13716}
13717
13718static int
6a109b6b 13719remote_is_async_p (struct target_ops *ops)
6426a772 13720{
5d93a237
TT
13721 struct remote_state *rs = get_remote_state ();
13722
c6ebd6cf 13723 if (!target_async_permitted)
75c99385
PA
13724 /* We only enable async when the user specifically asks for it. */
13725 return 0;
13726
23860348 13727 /* We're async whenever the serial device is. */
5d93a237 13728 return serial_is_async_p (rs->remote_desc);
6426a772
JM
13729}
13730
2acceee2
JM
13731/* Pass the SERIAL event on and up to the client. One day this code
13732 will be able to delay notifying the client of an event until the
23860348 13733 point where an entire packet has been received. */
2acceee2 13734
2acceee2
JM
13735static serial_event_ftype remote_async_serial_handler;
13736
6426a772 13737static void
819cc324 13738remote_async_serial_handler (struct serial *scb, void *context)
6426a772 13739{
2acceee2
JM
13740 /* Don't propogate error information up to the client. Instead let
13741 the client find out about the error by querying the target. */
6a3753b3 13742 inferior_event_handler (INF_REG_EVENT, NULL);
2acceee2
JM
13743}
13744
74531fed
PA
13745static void
13746remote_async_inferior_event_handler (gdb_client_data data)
13747{
13748 inferior_event_handler (INF_REG_EVENT, NULL);
13749}
13750
2acceee2 13751static void
6a3753b3 13752remote_async (struct target_ops *ops, int enable)
2acceee2 13753{
5d93a237
TT
13754 struct remote_state *rs = get_remote_state ();
13755
6a3753b3 13756 if (enable)
2acceee2 13757 {
88b496c3 13758 serial_async (rs->remote_desc, remote_async_serial_handler, rs);
b7d2e916
PA
13759
13760 /* If there are pending events in the stop reply queue tell the
13761 event loop to process them. */
13762 if (!QUEUE_is_empty (stop_reply_p, stop_reply_queue))
13763 mark_async_event_handler (remote_async_inferior_event_token);
6efcd9a8
PA
13764 /* For simplicity, below we clear the pending events token
13765 without remembering whether it is marked, so here we always
13766 mark it. If there's actually no pending notification to
13767 process, this ends up being a no-op (other than a spurious
13768 event-loop wakeup). */
13769 if (target_is_non_stop_p ())
13770 mark_async_event_handler (rs->notif_state->get_pending_events_token);
2acceee2
JM
13771 }
13772 else
b7d2e916
PA
13773 {
13774 serial_async (rs->remote_desc, NULL, NULL);
6efcd9a8
PA
13775 /* If the core is disabling async, it doesn't want to be
13776 disturbed with target events. Clear all async event sources
13777 too. */
b7d2e916 13778 clear_async_event_handler (remote_async_inferior_event_token);
6efcd9a8
PA
13779 if (target_is_non_stop_p ())
13780 clear_async_event_handler (rs->notif_state->get_pending_events_token);
b7d2e916 13781 }
6426a772
JM
13782}
13783
65706a29
PA
13784/* Implementation of the to_thread_events method. */
13785
13786static void
13787remote_thread_events (struct target_ops *ops, int enable)
13788{
13789 struct remote_state *rs = get_remote_state ();
13790 size_t size = get_remote_packet_size ();
65706a29
PA
13791
13792 if (packet_support (PACKET_QThreadEvents) == PACKET_DISABLE)
13793 return;
13794
13795 xsnprintf (rs->buf, size, "QThreadEvents:%x", enable ? 1 : 0);
13796 putpkt (rs->buf);
13797 getpkt (&rs->buf, &rs->buf_size, 0);
13798
13799 switch (packet_ok (rs->buf,
13800 &remote_protocol_packets[PACKET_QThreadEvents]))
13801 {
13802 case PACKET_OK:
13803 if (strcmp (rs->buf, "OK") != 0)
13804 error (_("Remote refused setting thread events: %s"), rs->buf);
13805 break;
13806 case PACKET_ERROR:
13807 warning (_("Remote failure reply: %s"), rs->buf);
13808 break;
13809 case PACKET_UNKNOWN:
13810 break;
13811 }
13812}
13813
5a2468f5 13814static void
c2d11a7d 13815set_remote_cmd (char *args, int from_tty)
5a2468f5 13816{
635c7e8a 13817 help_list (remote_set_cmdlist, "set remote ", all_commands, gdb_stdout);
5a2468f5
JM
13818}
13819
d471ea57
AC
13820static void
13821show_remote_cmd (char *args, int from_tty)
13822{
37a105a1 13823 /* We can't just use cmd_show_list here, because we want to skip
427c3a89 13824 the redundant "show remote Z-packet" and the legacy aliases. */
37a105a1 13825 struct cmd_list_element *list = remote_show_cmdlist;
79a45e25 13826 struct ui_out *uiout = current_uiout;
37a105a1 13827
2e783024 13828 ui_out_emit_tuple tuple_emitter (uiout, "showlist");
37a105a1
DJ
13829 for (; list != NULL; list = list->next)
13830 if (strcmp (list->name, "Z-packet") == 0)
13831 continue;
427c3a89
DJ
13832 else if (list->type == not_set_cmd)
13833 /* Alias commands are exactly like the original, except they
13834 don't have the normal type. */
13835 continue;
13836 else
37a105a1 13837 {
2e783024 13838 ui_out_emit_tuple option_emitter (uiout, "option");
a744cf53 13839
112e8700
SM
13840 uiout->field_string ("name", list->name);
13841 uiout->text (": ");
427c3a89 13842 if (list->type == show_cmd)
f5c4fcd9 13843 do_show_command (NULL, from_tty, list);
427c3a89
DJ
13844 else
13845 cmd_func (list, NULL, from_tty);
37a105a1 13846 }
d471ea57 13847}
5a2468f5 13848
0f71a2f6 13849
23860348 13850/* Function to be called whenever a new objfile (shlib) is detected. */
dc8acb97
MS
13851static void
13852remote_new_objfile (struct objfile *objfile)
13853{
5d93a237
TT
13854 struct remote_state *rs = get_remote_state ();
13855
13856 if (rs->remote_desc != 0) /* Have a remote connection. */
36d25514 13857 remote_check_symbols ();
dc8acb97
MS
13858}
13859
00bf0b85
SS
13860/* Pull all the tracepoints defined on the target and create local
13861 data structures representing them. We don't want to create real
13862 tracepoints yet, we don't want to mess up the user's existing
13863 collection. */
13864
13865static int
ab6617cc 13866remote_upload_tracepoints (struct target_ops *self, struct uploaded_tp **utpp)
d5551862 13867{
00bf0b85
SS
13868 struct remote_state *rs = get_remote_state ();
13869 char *p;
d5551862 13870
00bf0b85
SS
13871 /* Ask for a first packet of tracepoint definition. */
13872 putpkt ("qTfP");
13873 getpkt (&rs->buf, &rs->buf_size, 0);
13874 p = rs->buf;
13875 while (*p && *p != 'l')
d5551862 13876 {
00bf0b85
SS
13877 parse_tracepoint_definition (p, utpp);
13878 /* Ask for another packet of tracepoint definition. */
13879 putpkt ("qTsP");
13880 getpkt (&rs->buf, &rs->buf_size, 0);
13881 p = rs->buf;
d5551862 13882 }
00bf0b85 13883 return 0;
d5551862
SS
13884}
13885
00bf0b85 13886static int
181e3713
TT
13887remote_upload_trace_state_variables (struct target_ops *self,
13888 struct uploaded_tsv **utsvp)
d5551862 13889{
00bf0b85 13890 struct remote_state *rs = get_remote_state ();
d5551862 13891 char *p;
d5551862 13892
00bf0b85
SS
13893 /* Ask for a first packet of variable definition. */
13894 putpkt ("qTfV");
d5551862
SS
13895 getpkt (&rs->buf, &rs->buf_size, 0);
13896 p = rs->buf;
00bf0b85 13897 while (*p && *p != 'l')
d5551862 13898 {
00bf0b85
SS
13899 parse_tsv_definition (p, utsvp);
13900 /* Ask for another packet of variable definition. */
13901 putpkt ("qTsV");
d5551862
SS
13902 getpkt (&rs->buf, &rs->buf_size, 0);
13903 p = rs->buf;
13904 }
00bf0b85 13905 return 0;
d5551862
SS
13906}
13907
c1e36e3e
PA
13908/* The "set/show range-stepping" show hook. */
13909
13910static void
13911show_range_stepping (struct ui_file *file, int from_tty,
13912 struct cmd_list_element *c,
13913 const char *value)
13914{
13915 fprintf_filtered (file,
13916 _("Debugger's willingness to use range stepping "
13917 "is %s.\n"), value);
13918}
13919
13920/* The "set/show range-stepping" set hook. */
13921
13922static void
13923set_range_stepping (char *ignore_args, int from_tty,
13924 struct cmd_list_element *c)
13925{
5d93a237
TT
13926 struct remote_state *rs = get_remote_state ();
13927
c1e36e3e
PA
13928 /* Whene enabling, check whether range stepping is actually
13929 supported by the target, and warn if not. */
13930 if (use_range_stepping)
13931 {
5d93a237 13932 if (rs->remote_desc != NULL)
c1e36e3e 13933 {
4082afcc 13934 if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
c1e36e3e
PA
13935 remote_vcont_probe (rs);
13936
4082afcc 13937 if (packet_support (PACKET_vCont) == PACKET_ENABLE
c1e36e3e
PA
13938 && rs->supports_vCont.r)
13939 return;
13940 }
13941
13942 warning (_("Range stepping is not supported by the current target"));
13943 }
13944}
13945
c906108c 13946void
fba45db2 13947_initialize_remote (void)
c906108c 13948{
9a7071a8 13949 struct cmd_list_element *cmd;
6f937416 13950 const char *cmd_name;
ea9c271d 13951
0f71a2f6 13952 /* architecture specific data */
2bc416ba 13953 remote_gdbarch_data_handle =
23860348 13954 gdbarch_data_register_post_init (init_remote_state);
29709017
DJ
13955 remote_g_packet_data_handle =
13956 gdbarch_data_register_pre_init (remote_g_packet_data_init);
d01949b6 13957
94585166
DB
13958 remote_pspace_data
13959 = register_program_space_data_with_cleanup (NULL,
13960 remote_pspace_data_cleanup);
13961
ea9c271d
DJ
13962 /* Initialize the per-target state. At the moment there is only one
13963 of these, not one per target. Only one target is active at a
cf792862
TT
13964 time. */
13965 remote_state = new_remote_state ();
ea9c271d 13966
c906108c
SS
13967 init_remote_ops ();
13968 add_target (&remote_ops);
13969
13970 init_extended_remote_ops ();
13971 add_target (&extended_remote_ops);
cce74817 13972
dc8acb97 13973 /* Hook into new objfile notification. */
06d3b283 13974 observer_attach_new_objfile (remote_new_objfile);
5f4cf0bb
YQ
13975 /* We're no longer interested in notification events of an inferior
13976 when it exits. */
13977 observer_attach_inferior_exit (discard_pending_stop_replies);
dc8acb97 13978
c906108c
SS
13979#if 0
13980 init_remote_threadtests ();
13981#endif
13982
722247f1 13983 stop_reply_queue = QUEUE_alloc (stop_reply_p, stop_reply_xfree);
23860348 13984 /* set/show remote ... */
d471ea57 13985
1bedd215 13986 add_prefix_cmd ("remote", class_maintenance, set_remote_cmd, _("\
5a2468f5
JM
13987Remote protocol specific variables\n\
13988Configure various remote-protocol specific variables such as\n\
1bedd215 13989the packets being used"),
cff3e48b 13990 &remote_set_cmdlist, "set remote ",
23860348 13991 0 /* allow-unknown */, &setlist);
1bedd215 13992 add_prefix_cmd ("remote", class_maintenance, show_remote_cmd, _("\
5a2468f5
JM
13993Remote protocol specific variables\n\
13994Configure various remote-protocol specific variables such as\n\
1bedd215 13995the packets being used"),
cff3e48b 13996 &remote_show_cmdlist, "show remote ",
23860348 13997 0 /* allow-unknown */, &showlist);
5a2468f5 13998
1a966eab
AC
13999 add_cmd ("compare-sections", class_obscure, compare_sections_command, _("\
14000Compare section data on target to the exec file.\n\
95cf3b38
DT
14001Argument is a single section name (default: all loaded sections).\n\
14002To compare only read-only loaded sections, specify the -r option."),
c906108c
SS
14003 &cmdlist);
14004
1a966eab
AC
14005 add_cmd ("packet", class_maintenance, packet_command, _("\
14006Send an arbitrary packet to a remote target.\n\
c906108c
SS
14007 maintenance packet TEXT\n\
14008If GDB is talking to an inferior via the GDB serial protocol, then\n\
14009this command sends the string TEXT to the inferior, and displays the\n\
14010response packet. GDB supplies the initial `$' character, and the\n\
1a966eab 14011terminating `#' character and checksum."),
c906108c
SS
14012 &maintenancelist);
14013
7915a72c
AC
14014 add_setshow_boolean_cmd ("remotebreak", no_class, &remote_break, _("\
14015Set whether to send break if interrupted."), _("\
14016Show whether to send break if interrupted."), _("\
14017If set, a break, instead of a cntrl-c, is sent to the remote target."),
9a7071a8 14018 set_remotebreak, show_remotebreak,
e707bbc2 14019 &setlist, &showlist);
9a7071a8
JB
14020 cmd_name = "remotebreak";
14021 cmd = lookup_cmd (&cmd_name, setlist, "", -1, 1);
14022 deprecate_cmd (cmd, "set remote interrupt-sequence");
14023 cmd_name = "remotebreak"; /* needed because lookup_cmd updates the pointer */
14024 cmd = lookup_cmd (&cmd_name, showlist, "", -1, 1);
14025 deprecate_cmd (cmd, "show remote interrupt-sequence");
14026
14027 add_setshow_enum_cmd ("interrupt-sequence", class_support,
3e43a32a
MS
14028 interrupt_sequence_modes, &interrupt_sequence_mode,
14029 _("\
9a7071a8
JB
14030Set interrupt sequence to remote target."), _("\
14031Show interrupt sequence to remote target."), _("\
14032Valid value is \"Ctrl-C\", \"BREAK\" or \"BREAK-g\". The default is \"Ctrl-C\"."),
14033 NULL, show_interrupt_sequence,
14034 &remote_set_cmdlist,
14035 &remote_show_cmdlist);
14036
14037 add_setshow_boolean_cmd ("interrupt-on-connect", class_support,
14038 &interrupt_on_connect, _("\
14039Set whether interrupt-sequence is sent to remote target when gdb connects to."), _(" \
14040Show whether interrupt-sequence is sent to remote target when gdb connects to."), _(" \
14041If set, interrupt sequence is sent to remote target."),
14042 NULL, NULL,
14043 &remote_set_cmdlist, &remote_show_cmdlist);
c906108c 14044
23860348 14045 /* Install commands for configuring memory read/write packets. */
11cf8741 14046
1a966eab
AC
14047 add_cmd ("remotewritesize", no_class, set_memory_write_packet_size, _("\
14048Set the maximum number of bytes per memory write packet (deprecated)."),
11cf8741 14049 &setlist);
1a966eab
AC
14050 add_cmd ("remotewritesize", no_class, show_memory_write_packet_size, _("\
14051Show the maximum number of bytes per memory write packet (deprecated)."),
11cf8741
JM
14052 &showlist);
14053 add_cmd ("memory-write-packet-size", no_class,
1a966eab
AC
14054 set_memory_write_packet_size, _("\
14055Set the maximum number of bytes per memory-write packet.\n\
14056Specify the number of bytes in a packet or 0 (zero) for the\n\
14057default packet size. The actual limit is further reduced\n\
14058dependent on the target. Specify ``fixed'' to disable the\n\
14059further restriction and ``limit'' to enable that restriction."),
11cf8741
JM
14060 &remote_set_cmdlist);
14061 add_cmd ("memory-read-packet-size", no_class,
1a966eab
AC
14062 set_memory_read_packet_size, _("\
14063Set the maximum number of bytes per memory-read packet.\n\
14064Specify the number of bytes in a packet or 0 (zero) for the\n\
14065default packet size. The actual limit is further reduced\n\
14066dependent on the target. Specify ``fixed'' to disable the\n\
14067further restriction and ``limit'' to enable that restriction."),
11cf8741
JM
14068 &remote_set_cmdlist);
14069 add_cmd ("memory-write-packet-size", no_class,
14070 show_memory_write_packet_size,
1a966eab 14071 _("Show the maximum number of bytes per memory-write packet."),
11cf8741
JM
14072 &remote_show_cmdlist);
14073 add_cmd ("memory-read-packet-size", no_class,
14074 show_memory_read_packet_size,
1a966eab 14075 _("Show the maximum number of bytes per memory-read packet."),
11cf8741 14076 &remote_show_cmdlist);
c906108c 14077
b3f42336 14078 add_setshow_zinteger_cmd ("hardware-watchpoint-limit", no_class,
7915a72c
AC
14079 &remote_hw_watchpoint_limit, _("\
14080Set the maximum number of target hardware watchpoints."), _("\
14081Show the maximum number of target hardware watchpoints."), _("\
14082Specify a negative limit for unlimited."),
3e43a32a
MS
14083 NULL, NULL, /* FIXME: i18n: The maximum
14084 number of target hardware
14085 watchpoints is %s. */
b3f42336 14086 &remote_set_cmdlist, &remote_show_cmdlist);
480a3f21
PW
14087 add_setshow_zinteger_cmd ("hardware-watchpoint-length-limit", no_class,
14088 &remote_hw_watchpoint_length_limit, _("\
14089Set the maximum length (in bytes) of a target hardware watchpoint."), _("\
14090Show the maximum length (in bytes) of a target hardware watchpoint."), _("\
14091Specify a negative limit for unlimited."),
14092 NULL, NULL, /* FIXME: i18n: The maximum
14093 length (in bytes) of a target
14094 hardware watchpoint is %s. */
14095 &remote_set_cmdlist, &remote_show_cmdlist);
b3f42336 14096 add_setshow_zinteger_cmd ("hardware-breakpoint-limit", no_class,
7915a72c
AC
14097 &remote_hw_breakpoint_limit, _("\
14098Set the maximum number of target hardware breakpoints."), _("\
14099Show the maximum number of target hardware breakpoints."), _("\
14100Specify a negative limit for unlimited."),
3e43a32a
MS
14101 NULL, NULL, /* FIXME: i18n: The maximum
14102 number of target hardware
14103 breakpoints is %s. */
b3f42336 14104 &remote_set_cmdlist, &remote_show_cmdlist);
501eef12 14105
1b493192
PA
14106 add_setshow_zuinteger_cmd ("remoteaddresssize", class_obscure,
14107 &remote_address_size, _("\
4d28ad1e
AC
14108Set the maximum size of the address (in bits) in a memory packet."), _("\
14109Show the maximum size of the address (in bits) in a memory packet."), NULL,
1b493192
PA
14110 NULL,
14111 NULL, /* FIXME: i18n: */
14112 &setlist, &showlist);
c906108c 14113
ca4f7f8b
PA
14114 init_all_packet_configs ();
14115
444abaca 14116 add_packet_config_cmd (&remote_protocol_packets[PACKET_X],
bb572ddd 14117 "X", "binary-download", 1);
0f71a2f6 14118
444abaca 14119 add_packet_config_cmd (&remote_protocol_packets[PACKET_vCont],
bb572ddd 14120 "vCont", "verbose-resume", 0);
506fb367 14121
89be2091
DJ
14122 add_packet_config_cmd (&remote_protocol_packets[PACKET_QPassSignals],
14123 "QPassSignals", "pass-signals", 0);
14124
82075af2
JS
14125 add_packet_config_cmd (&remote_protocol_packets[PACKET_QCatchSyscalls],
14126 "QCatchSyscalls", "catch-syscalls", 0);
14127
9b224c5e
PA
14128 add_packet_config_cmd (&remote_protocol_packets[PACKET_QProgramSignals],
14129 "QProgramSignals", "program-signals", 0);
14130
aefd8b33
SDJ
14131 add_packet_config_cmd (&remote_protocol_packets[PACKET_QStartupWithShell],
14132 "QStartupWithShell", "startup-with-shell", 0);
14133
0a2dde4a
SDJ
14134 add_packet_config_cmd (&remote_protocol_packets
14135 [PACKET_QEnvironmentHexEncoded],
14136 "QEnvironmentHexEncoded", "environment-hex-encoded",
14137 0);
14138
14139 add_packet_config_cmd (&remote_protocol_packets[PACKET_QEnvironmentReset],
14140 "QEnvironmentReset", "environment-reset",
14141 0);
14142
14143 add_packet_config_cmd (&remote_protocol_packets[PACKET_QEnvironmentUnset],
14144 "QEnvironmentUnset", "environment-unset",
14145 0);
14146
444abaca 14147 add_packet_config_cmd (&remote_protocol_packets[PACKET_qSymbol],
bb572ddd 14148 "qSymbol", "symbol-lookup", 0);
dc8acb97 14149
444abaca 14150 add_packet_config_cmd (&remote_protocol_packets[PACKET_P],
bb572ddd 14151 "P", "set-register", 1);
d471ea57 14152
444abaca 14153 add_packet_config_cmd (&remote_protocol_packets[PACKET_p],
bb572ddd 14154 "p", "fetch-register", 1);
b96ec7ac 14155
444abaca 14156 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z0],
bb572ddd 14157 "Z0", "software-breakpoint", 0);
d471ea57 14158
444abaca 14159 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z1],
bb572ddd 14160 "Z1", "hardware-breakpoint", 0);
d471ea57 14161
444abaca 14162 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z2],
bb572ddd 14163 "Z2", "write-watchpoint", 0);
d471ea57 14164
444abaca 14165 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z3],
bb572ddd 14166 "Z3", "read-watchpoint", 0);
d471ea57 14167
444abaca 14168 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z4],
bb572ddd 14169 "Z4", "access-watchpoint", 0);
d471ea57 14170
0876f84a
DJ
14171 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_auxv],
14172 "qXfer:auxv:read", "read-aux-vector", 0);
802188a7 14173
c78fa86a
GB
14174 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_exec_file],
14175 "qXfer:exec-file:read", "pid-to-exec-file", 0);
14176
23181151
DJ
14177 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_features],
14178 "qXfer:features:read", "target-features", 0);
14179
cfa9d6d9
DJ
14180 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_libraries],
14181 "qXfer:libraries:read", "library-info", 0);
14182
2268b414
JK
14183 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_libraries_svr4],
14184 "qXfer:libraries-svr4:read", "library-info-svr4", 0);
14185
fd79ecee
DJ
14186 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_memory_map],
14187 "qXfer:memory-map:read", "memory-map", 0);
14188
0e7f50da
UW
14189 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_spu_read],
14190 "qXfer:spu:read", "read-spu-object", 0);
14191
14192 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_spu_write],
14193 "qXfer:spu:write", "write-spu-object", 0);
14194
07e059b5
VP
14195 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_osdata],
14196 "qXfer:osdata:read", "osdata", 0);
14197
dc146f7c
VP
14198 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_threads],
14199 "qXfer:threads:read", "threads", 0);
14200
4aa995e1
PA
14201 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_siginfo_read],
14202 "qXfer:siginfo:read", "read-siginfo-object", 0);
14203
14204 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_siginfo_write],
14205 "qXfer:siginfo:write", "write-siginfo-object", 0);
14206
b3b9301e
PA
14207 add_packet_config_cmd
14208 (&remote_protocol_packets[PACKET_qXfer_traceframe_info],
eb9fe518 14209 "qXfer:traceframe-info:read", "traceframe-info", 0);
b3b9301e 14210
169081d0
TG
14211 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_uib],
14212 "qXfer:uib:read", "unwind-info-block", 0);
14213
444abaca 14214 add_packet_config_cmd (&remote_protocol_packets[PACKET_qGetTLSAddr],
38691318 14215 "qGetTLSAddr", "get-thread-local-storage-address",
38691318
KB
14216 0);
14217
711e434b
PM
14218 add_packet_config_cmd (&remote_protocol_packets[PACKET_qGetTIBAddr],
14219 "qGetTIBAddr", "get-thread-information-block-address",
14220 0);
14221
40ab02ce
MS
14222 add_packet_config_cmd (&remote_protocol_packets[PACKET_bc],
14223 "bc", "reverse-continue", 0);
14224
14225 add_packet_config_cmd (&remote_protocol_packets[PACKET_bs],
14226 "bs", "reverse-step", 0);
14227
be2a5f71
DJ
14228 add_packet_config_cmd (&remote_protocol_packets[PACKET_qSupported],
14229 "qSupported", "supported-packets", 0);
14230
08388c79
DE
14231 add_packet_config_cmd (&remote_protocol_packets[PACKET_qSearch_memory],
14232 "qSearch:memory", "search-memory", 0);
14233
bd3eecc3
PA
14234 add_packet_config_cmd (&remote_protocol_packets[PACKET_qTStatus],
14235 "qTStatus", "trace-status", 0);
14236
15a201c8
GB
14237 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_setfs],
14238 "vFile:setfs", "hostio-setfs", 0);
14239
a6b151f1
DJ
14240 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_open],
14241 "vFile:open", "hostio-open", 0);
14242
14243 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_pread],
14244 "vFile:pread", "hostio-pread", 0);
14245
14246 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_pwrite],
14247 "vFile:pwrite", "hostio-pwrite", 0);
14248
14249 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_close],
14250 "vFile:close", "hostio-close", 0);
14251
14252 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_unlink],
14253 "vFile:unlink", "hostio-unlink", 0);
14254
b9e7b9c3
UW
14255 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_readlink],
14256 "vFile:readlink", "hostio-readlink", 0);
14257
0a93529c
GB
14258 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_fstat],
14259 "vFile:fstat", "hostio-fstat", 0);
14260
2d717e4f
DJ
14261 add_packet_config_cmd (&remote_protocol_packets[PACKET_vAttach],
14262 "vAttach", "attach", 0);
14263
14264 add_packet_config_cmd (&remote_protocol_packets[PACKET_vRun],
14265 "vRun", "run", 0);
14266
a6f3e723
SL
14267 add_packet_config_cmd (&remote_protocol_packets[PACKET_QStartNoAckMode],
14268 "QStartNoAckMode", "noack", 0);
14269
82f73884
PA
14270 add_packet_config_cmd (&remote_protocol_packets[PACKET_vKill],
14271 "vKill", "kill", 0);
14272
0b16c5cf
PA
14273 add_packet_config_cmd (&remote_protocol_packets[PACKET_qAttached],
14274 "qAttached", "query-attached", 0);
14275
782b2b07 14276 add_packet_config_cmd (&remote_protocol_packets[PACKET_ConditionalTracepoints],
3e43a32a
MS
14277 "ConditionalTracepoints",
14278 "conditional-tracepoints", 0);
3788aec7
LM
14279
14280 add_packet_config_cmd (&remote_protocol_packets[PACKET_ConditionalBreakpoints],
14281 "ConditionalBreakpoints",
14282 "conditional-breakpoints", 0);
14283
d3ce09f5
SS
14284 add_packet_config_cmd (&remote_protocol_packets[PACKET_BreakpointCommands],
14285 "BreakpointCommands",
14286 "breakpoint-commands", 0);
14287
7a697b8d
SS
14288 add_packet_config_cmd (&remote_protocol_packets[PACKET_FastTracepoints],
14289 "FastTracepoints", "fast-tracepoints", 0);
782b2b07 14290
409873ef
SS
14291 add_packet_config_cmd (&remote_protocol_packets[PACKET_TracepointSource],
14292 "TracepointSource", "TracepointSource", 0);
14293
d914c394
SS
14294 add_packet_config_cmd (&remote_protocol_packets[PACKET_QAllow],
14295 "QAllow", "allow", 0);
14296
0fb4aa4b
PA
14297 add_packet_config_cmd (&remote_protocol_packets[PACKET_StaticTracepoints],
14298 "StaticTracepoints", "static-tracepoints", 0);
14299
1e4d1764
YQ
14300 add_packet_config_cmd (&remote_protocol_packets[PACKET_InstallInTrace],
14301 "InstallInTrace", "install-in-trace", 0);
14302
0fb4aa4b
PA
14303 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_statictrace_read],
14304 "qXfer:statictrace:read", "read-sdata-object", 0);
14305
78d85199
YQ
14306 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_fdpic],
14307 "qXfer:fdpic:read", "read-fdpic-loadmap", 0);
14308
03583c20
UW
14309 add_packet_config_cmd (&remote_protocol_packets[PACKET_QDisableRandomization],
14310 "QDisableRandomization", "disable-randomization", 0);
14311
d1feda86
YQ
14312 add_packet_config_cmd (&remote_protocol_packets[PACKET_QAgent],
14313 "QAgent", "agent", 0);
14314
f6f899bf
HAQ
14315 add_packet_config_cmd (&remote_protocol_packets[PACKET_QTBuffer_size],
14316 "QTBuffer:size", "trace-buffer-size", 0);
14317
9accd112
MM
14318 add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_off],
14319 "Qbtrace:off", "disable-btrace", 0);
14320
14321 add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_bts],
b20a6524
MM
14322 "Qbtrace:bts", "enable-btrace-bts", 0);
14323
14324 add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_pt],
14325 "Qbtrace:pt", "enable-btrace-pt", 0);
9accd112
MM
14326
14327 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_btrace],
14328 "qXfer:btrace", "read-btrace", 0);
14329
f4abbc16
MM
14330 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_btrace_conf],
14331 "qXfer:btrace-conf", "read-btrace-conf", 0);
14332
d33501a5
MM
14333 add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_conf_bts_size],
14334 "Qbtrace-conf:bts:size", "btrace-conf-bts-size", 0);
14335
73b8c1fd
PA
14336 add_packet_config_cmd (&remote_protocol_packets[PACKET_multiprocess_feature],
14337 "multiprocess-feature", "multiprocess-feature", 0);
14338
f7e6eed5
PA
14339 add_packet_config_cmd (&remote_protocol_packets[PACKET_swbreak_feature],
14340 "swbreak-feature", "swbreak-feature", 0);
14341
14342 add_packet_config_cmd (&remote_protocol_packets[PACKET_hwbreak_feature],
14343 "hwbreak-feature", "hwbreak-feature", 0);
14344
89245bc0
DB
14345 add_packet_config_cmd (&remote_protocol_packets[PACKET_fork_event_feature],
14346 "fork-event-feature", "fork-event-feature", 0);
14347
14348 add_packet_config_cmd (&remote_protocol_packets[PACKET_vfork_event_feature],
14349 "vfork-event-feature", "vfork-event-feature", 0);
14350
b20a6524
MM
14351 add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_conf_pt_size],
14352 "Qbtrace-conf:pt:size", "btrace-conf-pt-size", 0);
14353
750ce8d1
YQ
14354 add_packet_config_cmd (&remote_protocol_packets[PACKET_vContSupported],
14355 "vContSupported", "verbose-resume-supported", 0);
14356
94585166
DB
14357 add_packet_config_cmd (&remote_protocol_packets[PACKET_exec_event_feature],
14358 "exec-event-feature", "exec-event-feature", 0);
14359
de979965
PA
14360 add_packet_config_cmd (&remote_protocol_packets[PACKET_vCtrlC],
14361 "vCtrlC", "ctrl-c", 0);
14362
65706a29
PA
14363 add_packet_config_cmd (&remote_protocol_packets[PACKET_QThreadEvents],
14364 "QThreadEvents", "thread-events", 0);
14365
f2faf941
PA
14366 add_packet_config_cmd (&remote_protocol_packets[PACKET_no_resumed],
14367 "N stop reply", "no-resumed-stop-reply", 0);
14368
0b736949
DB
14369 /* Assert that we've registered "set remote foo-packet" commands
14370 for all packet configs. */
ca4f7f8b
PA
14371 {
14372 int i;
14373
14374 for (i = 0; i < PACKET_MAX; i++)
14375 {
14376 /* Ideally all configs would have a command associated. Some
14377 still don't though. */
14378 int excepted;
14379
14380 switch (i)
14381 {
14382 case PACKET_QNonStop:
ca4f7f8b
PA
14383 case PACKET_EnableDisableTracepoints_feature:
14384 case PACKET_tracenz_feature:
14385 case PACKET_DisconnectedTracing_feature:
14386 case PACKET_augmented_libraries_svr4_read_feature:
936d2992
PA
14387 case PACKET_qCRC:
14388 /* Additions to this list need to be well justified:
14389 pre-existing packets are OK; new packets are not. */
ca4f7f8b
PA
14390 excepted = 1;
14391 break;
14392 default:
14393 excepted = 0;
14394 break;
14395 }
14396
14397 /* This catches both forgetting to add a config command, and
14398 forgetting to remove a packet from the exception list. */
14399 gdb_assert (excepted == (remote_protocol_packets[i].name == NULL));
14400 }
14401 }
14402
37a105a1
DJ
14403 /* Keep the old ``set remote Z-packet ...'' working. Each individual
14404 Z sub-packet has its own set and show commands, but users may
14405 have sets to this variable in their .gdbinit files (or in their
14406 documentation). */
e9e68a56 14407 add_setshow_auto_boolean_cmd ("Z-packet", class_obscure,
7915a72c
AC
14408 &remote_Z_packet_detect, _("\
14409Set use of remote protocol `Z' packets"), _("\
14410Show use of remote protocol `Z' packets "), _("\
3b64bf98 14411When set, GDB will attempt to use the remote breakpoint and watchpoint\n\
7915a72c 14412packets."),
e9e68a56 14413 set_remote_protocol_Z_packet_cmd,
3e43a32a
MS
14414 show_remote_protocol_Z_packet_cmd,
14415 /* FIXME: i18n: Use of remote protocol
14416 `Z' packets is %s. */
e9e68a56 14417 &remote_set_cmdlist, &remote_show_cmdlist);
449092f6 14418
a6b151f1
DJ
14419 add_prefix_cmd ("remote", class_files, remote_command, _("\
14420Manipulate files on the remote system\n\
14421Transfer files to and from the remote target system."),
14422 &remote_cmdlist, "remote ",
14423 0 /* allow-unknown */, &cmdlist);
14424
14425 add_cmd ("put", class_files, remote_put_command,
14426 _("Copy a local file to the remote system."),
14427 &remote_cmdlist);
14428
14429 add_cmd ("get", class_files, remote_get_command,
14430 _("Copy a remote file to the local system."),
14431 &remote_cmdlist);
14432
14433 add_cmd ("delete", class_files, remote_delete_command,
14434 _("Delete a remote file."),
14435 &remote_cmdlist);
14436
2d717e4f 14437 add_setshow_string_noescape_cmd ("exec-file", class_files,
94585166 14438 &remote_exec_file_var, _("\
2d717e4f 14439Set the remote pathname for \"run\""), _("\
94585166
DB
14440Show the remote pathname for \"run\""), NULL,
14441 set_remote_exec_file,
14442 show_remote_exec_file,
14443 &remote_set_cmdlist,
14444 &remote_show_cmdlist);
2d717e4f 14445
c1e36e3e
PA
14446 add_setshow_boolean_cmd ("range-stepping", class_run,
14447 &use_range_stepping, _("\
14448Enable or disable range stepping."), _("\
14449Show whether target-assisted range stepping is enabled."), _("\
14450If on, and the target supports it, when stepping a source line, GDB\n\
14451tells the target to step the corresponding range of addresses itself instead\n\
14452of issuing multiple single-steps. This speeds up source level\n\
14453stepping. If off, GDB always issues single-steps, even if range\n\
14454stepping is supported by the target. The default is on."),
14455 set_range_stepping,
14456 show_range_stepping,
14457 &setlist,
14458 &showlist);
14459
449092f6
CV
14460 /* Eventually initialize fileio. See fileio.c */
14461 initialize_remote_fileio (remote_set_cmdlist, remote_show_cmdlist);
79d7f229 14462
ba348170 14463 /* Take advantage of the fact that the TID field is not used, to tag
79d7f229 14464 special ptids with it set to != 0. */
ba348170
PA
14465 magic_null_ptid = ptid_build (42000, -1, 1);
14466 not_sent_ptid = ptid_build (42000, -2, 1);
14467 any_thread_ptid = ptid_build (42000, 0, 1);
35b1e5cc
SS
14468
14469 target_buf_size = 2048;
224c3ddb 14470 target_buf = (char *) xmalloc (target_buf_size);
c906108c 14471}
10760264 14472
This page took 3.224865 seconds and 4 git commands to generate.