Add i386.o to gdb_target_obs for x86_64-* targets
[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
DJ
7593 if (buf_len > 2 * rsa->sizeof_g_packet)
7594 error (_("Remote 'g' packet reply is too long: %s"), rs->buf);
7595
7596 /* Save the size of the packet sent to us by the target. It is used
7597 as a heuristic when determining the max size of packets that the
7598 target can safely receive. */
7599 if (rsa->actual_register_packet_size == 0)
7600 rsa->actual_register_packet_size = buf_len;
7601
7602 /* If this is smaller than we guessed the 'g' packet would be,
7603 update our records. A 'g' reply that doesn't include a register's
7604 value implies either that the register is not available, or that
7605 the 'p' packet must be used. */
7606 if (buf_len < 2 * rsa->sizeof_g_packet)
b323314b 7607 {
9dc193c3 7608 long sizeof_g_packet = buf_len / 2;
74ca34ce 7609
4a22f64d 7610 for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
b96ec7ac 7611 {
9dc193c3
LF
7612 long offset = rsa->regs[i].offset;
7613 long reg_size = register_size (gdbarch, i);
7614
74ca34ce
DJ
7615 if (rsa->regs[i].pnum == -1)
7616 continue;
7617
9dc193c3 7618 if (offset >= sizeof_g_packet)
74ca34ce 7619 rsa->regs[i].in_g_packet = 0;
9dc193c3
LF
7620 else if (offset + reg_size > sizeof_g_packet)
7621 error (_("Truncated register %d in remote 'g' packet"), i);
b96ec7ac 7622 else
74ca34ce 7623 rsa->regs[i].in_g_packet = 1;
b96ec7ac 7624 }
9dc193c3
LF
7625
7626 /* Looks valid enough, we can assume this is the correct length
7627 for a 'g' packet. It's important not to adjust
7628 rsa->sizeof_g_packet if we have truncated registers otherwise
7629 this "if" won't be run the next time the method is called
7630 with a packet of the same size and one of the internal errors
7631 below will trigger instead. */
7632 rsa->sizeof_g_packet = sizeof_g_packet;
74ca34ce 7633 }
b323314b 7634
224c3ddb 7635 regs = (char *) alloca (rsa->sizeof_g_packet);
c906108c
SS
7636
7637 /* Unimplemented registers read as all bits zero. */
ea9c271d 7638 memset (regs, 0, rsa->sizeof_g_packet);
c906108c 7639
c906108c
SS
7640 /* Reply describes registers byte by byte, each byte encoded as two
7641 hex characters. Suck them all up, then supply them to the
7642 register cacheing/storage mechanism. */
7643
74ca34ce 7644 p = rs->buf;
ea9c271d 7645 for (i = 0; i < rsa->sizeof_g_packet; i++)
c906108c 7646 {
74ca34ce
DJ
7647 if (p[0] == 0 || p[1] == 0)
7648 /* This shouldn't happen - we adjusted sizeof_g_packet above. */
7649 internal_error (__FILE__, __LINE__,
9b20d036 7650 _("unexpected end of 'g' packet reply"));
74ca34ce 7651
c906108c 7652 if (p[0] == 'x' && p[1] == 'x')
c5aa993b 7653 regs[i] = 0; /* 'x' */
c906108c
SS
7654 else
7655 regs[i] = fromhex (p[0]) * 16 + fromhex (p[1]);
7656 p += 2;
7657 }
7658
a744cf53
MS
7659 for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
7660 {
7661 struct packet_reg *r = &rsa->regs[i];
9dc193c3 7662 long reg_size = register_size (gdbarch, i);
a744cf53
MS
7663
7664 if (r->in_g_packet)
7665 {
9dc193c3 7666 if ((r->offset + reg_size) * 2 > strlen (rs->buf))
a744cf53
MS
7667 /* This shouldn't happen - we adjusted in_g_packet above. */
7668 internal_error (__FILE__, __LINE__,
9b20d036 7669 _("unexpected end of 'g' packet reply"));
a744cf53
MS
7670 else if (rs->buf[r->offset * 2] == 'x')
7671 {
7672 gdb_assert (r->offset * 2 < strlen (rs->buf));
7673 /* The register isn't available, mark it as such (at
7674 the same time setting the value to zero). */
7675 regcache_raw_supply (regcache, r->regnum, NULL);
7676 }
7677 else
7678 regcache_raw_supply (regcache, r->regnum,
7679 regs + r->offset);
7680 }
7681 }
c906108c
SS
7682}
7683
29709017 7684static void
56be3814 7685fetch_registers_using_g (struct regcache *regcache)
29709017
DJ
7686{
7687 send_g_packet ();
56be3814 7688 process_g_packet (regcache);
29709017
DJ
7689}
7690
e6e4e701
PA
7691/* Make the remote selected traceframe match GDB's selected
7692 traceframe. */
7693
7694static void
7695set_remote_traceframe (void)
7696{
7697 int newnum;
262e1174 7698 struct remote_state *rs = get_remote_state ();
e6e4e701 7699
262e1174 7700 if (rs->remote_traceframe_number == get_traceframe_number ())
e6e4e701
PA
7701 return;
7702
7703 /* Avoid recursion, remote_trace_find calls us again. */
262e1174 7704 rs->remote_traceframe_number = get_traceframe_number ();
e6e4e701
PA
7705
7706 newnum = target_trace_find (tfind_number,
7707 get_traceframe_number (), 0, 0, NULL);
7708
7709 /* Should not happen. If it does, all bets are off. */
7710 if (newnum != get_traceframe_number ())
7711 warning (_("could not set remote traceframe"));
7712}
7713
74ca34ce 7714static void
28439f5e
PA
7715remote_fetch_registers (struct target_ops *ops,
7716 struct regcache *regcache, int regnum)
74ca34ce 7717{
74ca34ce
DJ
7718 struct remote_arch_state *rsa = get_remote_arch_state ();
7719 int i;
7720
e6e4e701 7721 set_remote_traceframe ();
bcc0c096 7722 set_general_thread (regcache_get_ptid (regcache));
74ca34ce
DJ
7723
7724 if (regnum >= 0)
7725 {
7726 struct packet_reg *reg = packet_reg_from_regnum (rsa, regnum);
a744cf53 7727
74ca34ce
DJ
7728 gdb_assert (reg != NULL);
7729
7730 /* If this register might be in the 'g' packet, try that first -
7731 we are likely to read more than one register. If this is the
7732 first 'g' packet, we might be overly optimistic about its
7733 contents, so fall back to 'p'. */
7734 if (reg->in_g_packet)
7735 {
56be3814 7736 fetch_registers_using_g (regcache);
74ca34ce
DJ
7737 if (reg->in_g_packet)
7738 return;
7739 }
7740
56be3814 7741 if (fetch_register_using_p (regcache, reg))
74ca34ce
DJ
7742 return;
7743
7744 /* This register is not available. */
56be3814 7745 regcache_raw_supply (regcache, reg->regnum, NULL);
74ca34ce
DJ
7746
7747 return;
7748 }
7749
56be3814 7750 fetch_registers_using_g (regcache);
74ca34ce 7751
4a22f64d 7752 for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++)
74ca34ce 7753 if (!rsa->regs[i].in_g_packet)
56be3814 7754 if (!fetch_register_using_p (regcache, &rsa->regs[i]))
74ca34ce
DJ
7755 {
7756 /* This register is not available. */
56be3814 7757 regcache_raw_supply (regcache, i, NULL);
74ca34ce
DJ
7758 }
7759}
7760
c906108c
SS
7761/* Prepare to store registers. Since we may send them all (using a
7762 'G' request), we have to read out the ones we don't want to change
7763 first. */
7764
c5aa993b 7765static void
f32dbf8c 7766remote_prepare_to_store (struct target_ops *self, struct regcache *regcache)
c906108c 7767{
ea9c271d 7768 struct remote_arch_state *rsa = get_remote_arch_state ();
cf0e1e0d 7769 int i;
cf0e1e0d 7770
c906108c 7771 /* Make sure the entire registers array is valid. */
4082afcc 7772 switch (packet_support (PACKET_P))
5a2468f5
JM
7773 {
7774 case PACKET_DISABLE:
7775 case PACKET_SUPPORT_UNKNOWN:
cf0e1e0d 7776 /* Make sure all the necessary registers are cached. */
4a22f64d 7777 for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++)
ea9c271d 7778 if (rsa->regs[i].in_g_packet)
8e368124 7779 regcache_raw_update (regcache, rsa->regs[i].regnum);
5a2468f5
JM
7780 break;
7781 case PACKET_ENABLE:
7782 break;
7783 }
7784}
7785
ad10f812 7786/* Helper: Attempt to store REGNUM using the P packet. Return fail IFF
23860348 7787 packet was not recognized. */
5a2468f5
JM
7788
7789static int
1f4437a4
MS
7790store_register_using_P (const struct regcache *regcache,
7791 struct packet_reg *reg)
5a2468f5 7792{
4a22f64d 7793 struct gdbarch *gdbarch = get_regcache_arch (regcache);
d01949b6 7794 struct remote_state *rs = get_remote_state ();
5a2468f5 7795 /* Try storing a single register. */
6d820c5c 7796 char *buf = rs->buf;
9890e433 7797 gdb_byte *regp = (gdb_byte *) alloca (register_size (gdbarch, reg->regnum));
5a2468f5 7798 char *p;
5a2468f5 7799
4082afcc 7800 if (packet_support (PACKET_P) == PACKET_DISABLE)
74ca34ce
DJ
7801 return 0;
7802
7803 if (reg->pnum == -1)
7804 return 0;
7805
ea9c271d 7806 xsnprintf (buf, get_remote_packet_size (), "P%s=", phex_nz (reg->pnum, 0));
5a2468f5 7807 p = buf + strlen (buf);
56be3814 7808 regcache_raw_collect (regcache, reg->regnum, regp);
4a22f64d 7809 bin2hex (regp, p, register_size (gdbarch, reg->regnum));
1f4437a4
MS
7810 putpkt (rs->buf);
7811 getpkt (&rs->buf, &rs->buf_size, 0);
5a2468f5 7812
74ca34ce
DJ
7813 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_P]))
7814 {
7815 case PACKET_OK:
7816 return 1;
7817 case PACKET_ERROR:
27a9c0bf
MS
7818 error (_("Could not write register \"%s\"; remote failure reply '%s'"),
7819 gdbarch_register_name (gdbarch, reg->regnum), rs->buf);
74ca34ce
DJ
7820 case PACKET_UNKNOWN:
7821 return 0;
7822 default:
7823 internal_error (__FILE__, __LINE__, _("Bad result from packet_ok"));
7824 }
c906108c
SS
7825}
7826
23860348
MS
7827/* Store register REGNUM, or all registers if REGNUM == -1, from the
7828 contents of the register cache buffer. FIXME: ignores errors. */
c906108c
SS
7829
7830static void
56be3814 7831store_registers_using_G (const struct regcache *regcache)
c906108c 7832{
d01949b6 7833 struct remote_state *rs = get_remote_state ();
ea9c271d 7834 struct remote_arch_state *rsa = get_remote_arch_state ();
cfd77fa1 7835 gdb_byte *regs;
c906108c
SS
7836 char *p;
7837
193cb69f
AC
7838 /* Extract all the registers in the regcache copying them into a
7839 local buffer. */
7840 {
b323314b 7841 int i;
a744cf53 7842
224c3ddb 7843 regs = (gdb_byte *) alloca (rsa->sizeof_g_packet);
ea9c271d 7844 memset (regs, 0, rsa->sizeof_g_packet);
4a22f64d 7845 for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++)
193cb69f 7846 {
ea9c271d 7847 struct packet_reg *r = &rsa->regs[i];
a744cf53 7848
b323314b 7849 if (r->in_g_packet)
56be3814 7850 regcache_raw_collect (regcache, r->regnum, regs + r->offset);
193cb69f
AC
7851 }
7852 }
c906108c
SS
7853
7854 /* Command describes registers byte by byte,
7855 each byte encoded as two hex characters. */
6d820c5c 7856 p = rs->buf;
193cb69f 7857 *p++ = 'G';
74ca34ce 7858 bin2hex (regs, p, rsa->sizeof_g_packet);
1f4437a4
MS
7859 putpkt (rs->buf);
7860 getpkt (&rs->buf, &rs->buf_size, 0);
7861 if (packet_check_result (rs->buf) == PACKET_ERROR)
27a9c0bf
MS
7862 error (_("Could not write registers; remote failure reply '%s'"),
7863 rs->buf);
c906108c 7864}
74ca34ce
DJ
7865
7866/* Store register REGNUM, or all registers if REGNUM == -1, from the contents
7867 of the register cache buffer. FIXME: ignores errors. */
7868
7869static void
28439f5e
PA
7870remote_store_registers (struct target_ops *ops,
7871 struct regcache *regcache, int regnum)
74ca34ce 7872{
74ca34ce
DJ
7873 struct remote_arch_state *rsa = get_remote_arch_state ();
7874 int i;
7875
e6e4e701 7876 set_remote_traceframe ();
bcc0c096 7877 set_general_thread (regcache_get_ptid (regcache));
74ca34ce
DJ
7878
7879 if (regnum >= 0)
7880 {
7881 struct packet_reg *reg = packet_reg_from_regnum (rsa, regnum);
a744cf53 7882
74ca34ce
DJ
7883 gdb_assert (reg != NULL);
7884
7885 /* Always prefer to store registers using the 'P' packet if
7886 possible; we often change only a small number of registers.
7887 Sometimes we change a larger number; we'd need help from a
7888 higher layer to know to use 'G'. */
56be3814 7889 if (store_register_using_P (regcache, reg))
74ca34ce
DJ
7890 return;
7891
7892 /* For now, don't complain if we have no way to write the
7893 register. GDB loses track of unavailable registers too
7894 easily. Some day, this may be an error. We don't have
0df8b418 7895 any way to read the register, either... */
74ca34ce
DJ
7896 if (!reg->in_g_packet)
7897 return;
7898
56be3814 7899 store_registers_using_G (regcache);
74ca34ce
DJ
7900 return;
7901 }
7902
56be3814 7903 store_registers_using_G (regcache);
74ca34ce 7904
4a22f64d 7905 for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++)
74ca34ce 7906 if (!rsa->regs[i].in_g_packet)
56be3814 7907 if (!store_register_using_P (regcache, &rsa->regs[i]))
74ca34ce
DJ
7908 /* See above for why we do not issue an error here. */
7909 continue;
7910}
c906108c
SS
7911\f
7912
7913/* Return the number of hex digits in num. */
7914
7915static int
fba45db2 7916hexnumlen (ULONGEST num)
c906108c
SS
7917{
7918 int i;
7919
7920 for (i = 0; num != 0; i++)
7921 num >>= 4;
7922
325fac50 7923 return std::max (i, 1);
c906108c
SS
7924}
7925
2df3850c 7926/* Set BUF to the minimum number of hex digits representing NUM. */
c906108c
SS
7927
7928static int
fba45db2 7929hexnumstr (char *buf, ULONGEST num)
c906108c 7930{
c906108c 7931 int len = hexnumlen (num);
a744cf53 7932
2df3850c
JM
7933 return hexnumnstr (buf, num, len);
7934}
7935
c906108c 7936
2df3850c 7937/* Set BUF to the hex digits representing NUM, padded to WIDTH characters. */
c906108c 7938
2df3850c 7939static int
fba45db2 7940hexnumnstr (char *buf, ULONGEST num, int width)
2df3850c
JM
7941{
7942 int i;
7943
7944 buf[width] = '\0';
7945
7946 for (i = width - 1; i >= 0; i--)
c906108c 7947 {
c5aa993b 7948 buf[i] = "0123456789abcdef"[(num & 0xf)];
c906108c
SS
7949 num >>= 4;
7950 }
7951
2df3850c 7952 return width;
c906108c
SS
7953}
7954
23860348 7955/* Mask all but the least significant REMOTE_ADDRESS_SIZE bits. */
c906108c
SS
7956
7957static CORE_ADDR
fba45db2 7958remote_address_masked (CORE_ADDR addr)
c906108c 7959{
883b9c6c 7960 unsigned int address_size = remote_address_size;
a744cf53 7961
911c95a5
UW
7962 /* If "remoteaddresssize" was not set, default to target address size. */
7963 if (!address_size)
f5656ead 7964 address_size = gdbarch_addr_bit (target_gdbarch ());
911c95a5
UW
7965
7966 if (address_size > 0
7967 && address_size < (sizeof (ULONGEST) * 8))
c906108c
SS
7968 {
7969 /* Only create a mask when that mask can safely be constructed
23860348 7970 in a ULONGEST variable. */
c906108c 7971 ULONGEST mask = 1;
a744cf53 7972
911c95a5 7973 mask = (mask << address_size) - 1;
c906108c
SS
7974 addr &= mask;
7975 }
7976 return addr;
7977}
7978
7979/* Determine whether the remote target supports binary downloading.
7980 This is accomplished by sending a no-op memory write of zero length
7981 to the target at the specified address. It does not suffice to send
23860348
MS
7982 the whole packet, since many stubs strip the eighth bit and
7983 subsequently compute a wrong checksum, which causes real havoc with
7984 remote_write_bytes.
7a292a7a 7985
96baa820 7986 NOTE: This can still lose if the serial line is not eight-bit
0df8b418 7987 clean. In cases like this, the user should clear "remote
23860348 7988 X-packet". */
96baa820 7989
c906108c 7990static void
fba45db2 7991check_binary_download (CORE_ADDR addr)
c906108c 7992{
d01949b6 7993 struct remote_state *rs = get_remote_state ();
24b06219 7994
4082afcc 7995 switch (packet_support (PACKET_X))
c906108c 7996 {
96baa820
JM
7997 case PACKET_DISABLE:
7998 break;
7999 case PACKET_ENABLE:
8000 break;
8001 case PACKET_SUPPORT_UNKNOWN:
8002 {
96baa820 8003 char *p;
802188a7 8004
2e9f7625 8005 p = rs->buf;
96baa820
JM
8006 *p++ = 'X';
8007 p += hexnumstr (p, (ULONGEST) addr);
8008 *p++ = ',';
8009 p += hexnumstr (p, (ULONGEST) 0);
8010 *p++ = ':';
8011 *p = '\0';
802188a7 8012
2e9f7625 8013 putpkt_binary (rs->buf, (int) (p - rs->buf));
6d820c5c 8014 getpkt (&rs->buf, &rs->buf_size, 0);
c906108c 8015
2e9f7625 8016 if (rs->buf[0] == '\0')
96baa820
JM
8017 {
8018 if (remote_debug)
8019 fprintf_unfiltered (gdb_stdlog,
3e43a32a
MS
8020 "binary downloading NOT "
8021 "supported by target\n");
444abaca 8022 remote_protocol_packets[PACKET_X].support = PACKET_DISABLE;
96baa820
JM
8023 }
8024 else
8025 {
8026 if (remote_debug)
8027 fprintf_unfiltered (gdb_stdlog,
64b9b334 8028 "binary downloading supported by target\n");
444abaca 8029 remote_protocol_packets[PACKET_X].support = PACKET_ENABLE;
96baa820
JM
8030 }
8031 break;
8032 }
c906108c
SS
8033 }
8034}
8035
124e13d9
SM
8036/* Helper function to resize the payload in order to try to get a good
8037 alignment. We try to write an amount of data such that the next write will
8038 start on an address aligned on REMOTE_ALIGN_WRITES. */
8039
8040static int
8041align_for_efficient_write (int todo, CORE_ADDR memaddr)
8042{
8043 return ((memaddr + todo) & ~(REMOTE_ALIGN_WRITES - 1)) - memaddr;
8044}
8045
c906108c
SS
8046/* Write memory data directly to the remote machine.
8047 This does not inform the data cache; the data cache uses this.
a76d924d 8048 HEADER is the starting part of the packet.
c906108c
SS
8049 MEMADDR is the address in the remote memory space.
8050 MYADDR is the address of the buffer in our space.
124e13d9
SM
8051 LEN_UNITS is the number of addressable units to write.
8052 UNIT_SIZE is the length in bytes of an addressable unit.
a76d924d
DJ
8053 PACKET_FORMAT should be either 'X' or 'M', and indicates if we
8054 should send data as binary ('X'), or hex-encoded ('M').
8055
8056 The function creates packet of the form
8057 <HEADER><ADDRESS>,<LENGTH>:<DATA>
8058
124e13d9 8059 where encoding of <DATA> is terminated by PACKET_FORMAT.
a76d924d
DJ
8060
8061 If USE_LENGTH is 0, then the <LENGTH> field and the preceding comma
8062 are omitted.
8063
9b409511 8064 Return the transferred status, error or OK (an
124e13d9
SM
8065 'enum target_xfer_status' value). Save the number of addressable units
8066 transferred in *XFERED_LEN_UNITS. Only transfer a single packet.
8067
8068 On a platform with an addressable memory size of 2 bytes (UNIT_SIZE == 2), an
8069 exchange between gdb and the stub could look like (?? in place of the
8070 checksum):
8071
8072 -> $m1000,4#??
8073 <- aaaabbbbccccdddd
8074
8075 -> $M1000,3:eeeeffffeeee#??
8076 <- OK
8077
8078 -> $m1000,4#??
8079 <- eeeeffffeeeedddd */
c906108c 8080
9b409511 8081static enum target_xfer_status
a76d924d 8082remote_write_bytes_aux (const char *header, CORE_ADDR memaddr,
124e13d9
SM
8083 const gdb_byte *myaddr, ULONGEST len_units,
8084 int unit_size, ULONGEST *xfered_len_units,
8085 char packet_format, int use_length)
c906108c 8086{
6d820c5c 8087 struct remote_state *rs = get_remote_state ();
cfd77fa1 8088 char *p;
a76d924d
DJ
8089 char *plen = NULL;
8090 int plenlen = 0;
124e13d9
SM
8091 int todo_units;
8092 int units_written;
8093 int payload_capacity_bytes;
8094 int payload_length_bytes;
a76d924d
DJ
8095
8096 if (packet_format != 'X' && packet_format != 'M')
8097 internal_error (__FILE__, __LINE__,
9b20d036 8098 _("remote_write_bytes_aux: bad packet format"));
c906108c 8099
124e13d9 8100 if (len_units == 0)
9b409511 8101 return TARGET_XFER_EOF;
b2182ed2 8102
124e13d9 8103 payload_capacity_bytes = get_memory_write_packet_size ();
2bc416ba 8104
6d820c5c
DJ
8105 /* The packet buffer will be large enough for the payload;
8106 get_memory_packet_size ensures this. */
a76d924d 8107 rs->buf[0] = '\0';
c906108c 8108
a257b5bb 8109 /* Compute the size of the actual payload by subtracting out the
0df8b418
MS
8110 packet header and footer overhead: "$M<memaddr>,<len>:...#nn". */
8111
124e13d9 8112 payload_capacity_bytes -= strlen ("$,:#NN");
a76d924d 8113 if (!use_length)
0df8b418 8114 /* The comma won't be used. */
124e13d9
SM
8115 payload_capacity_bytes += 1;
8116 payload_capacity_bytes -= strlen (header);
8117 payload_capacity_bytes -= hexnumlen (memaddr);
c906108c 8118
a76d924d 8119 /* Construct the packet excluding the data: "<header><memaddr>,<len>:". */
917317f4 8120
a76d924d
DJ
8121 strcat (rs->buf, header);
8122 p = rs->buf + strlen (header);
8123
8124 /* Compute a best guess of the number of bytes actually transfered. */
8125 if (packet_format == 'X')
c906108c 8126 {
23860348 8127 /* Best guess at number of bytes that will fit. */
325fac50
PA
8128 todo_units = std::min (len_units,
8129 (ULONGEST) payload_capacity_bytes / unit_size);
a76d924d 8130 if (use_length)
124e13d9 8131 payload_capacity_bytes -= hexnumlen (todo_units);
325fac50 8132 todo_units = std::min (todo_units, payload_capacity_bytes / unit_size);
a76d924d
DJ
8133 }
8134 else
8135 {
124e13d9 8136 /* Number of bytes that will fit. */
325fac50
PA
8137 todo_units
8138 = std::min (len_units,
8139 (ULONGEST) (payload_capacity_bytes / unit_size) / 2);
a76d924d 8140 if (use_length)
124e13d9 8141 payload_capacity_bytes -= hexnumlen (todo_units);
325fac50
PA
8142 todo_units = std::min (todo_units,
8143 (payload_capacity_bytes / unit_size) / 2);
917317f4 8144 }
a76d924d 8145
124e13d9 8146 if (todo_units <= 0)
3de11b2e 8147 internal_error (__FILE__, __LINE__,
405f8e94 8148 _("minimum packet size too small to write data"));
802188a7 8149
6765f3e5
DJ
8150 /* If we already need another packet, then try to align the end
8151 of this packet to a useful boundary. */
124e13d9
SM
8152 if (todo_units > 2 * REMOTE_ALIGN_WRITES && todo_units < len_units)
8153 todo_units = align_for_efficient_write (todo_units, memaddr);
6765f3e5 8154
a257b5bb 8155 /* Append "<memaddr>". */
917317f4
JM
8156 memaddr = remote_address_masked (memaddr);
8157 p += hexnumstr (p, (ULONGEST) memaddr);
a257b5bb 8158
a76d924d
DJ
8159 if (use_length)
8160 {
8161 /* Append ",". */
8162 *p++ = ',';
802188a7 8163
124e13d9
SM
8164 /* Append the length and retain its location and size. It may need to be
8165 adjusted once the packet body has been created. */
a76d924d 8166 plen = p;
124e13d9 8167 plenlen = hexnumstr (p, (ULONGEST) todo_units);
a76d924d
DJ
8168 p += plenlen;
8169 }
a257b5bb
AC
8170
8171 /* Append ":". */
917317f4
JM
8172 *p++ = ':';
8173 *p = '\0';
802188a7 8174
a257b5bb 8175 /* Append the packet body. */
a76d924d 8176 if (packet_format == 'X')
917317f4 8177 {
917317f4
JM
8178 /* Binary mode. Send target system values byte by byte, in
8179 increasing byte addresses. Only escape certain critical
8180 characters. */
124e13d9
SM
8181 payload_length_bytes =
8182 remote_escape_output (myaddr, todo_units, unit_size, (gdb_byte *) p,
8183 &units_written, payload_capacity_bytes);
6765f3e5 8184
124e13d9 8185 /* If not all TODO units fit, then we'll need another packet. Make
9b7194bc
DJ
8186 a second try to keep the end of the packet aligned. Don't do
8187 this if the packet is tiny. */
124e13d9 8188 if (units_written < todo_units && units_written > 2 * REMOTE_ALIGN_WRITES)
6765f3e5 8189 {
124e13d9
SM
8190 int new_todo_units;
8191
8192 new_todo_units = align_for_efficient_write (units_written, memaddr);
8193
8194 if (new_todo_units != units_written)
8195 payload_length_bytes =
8196 remote_escape_output (myaddr, new_todo_units, unit_size,
8197 (gdb_byte *) p, &units_written,
8198 payload_capacity_bytes);
6765f3e5
DJ
8199 }
8200
124e13d9
SM
8201 p += payload_length_bytes;
8202 if (use_length && units_written < todo_units)
c906108c 8203 {
802188a7 8204 /* Escape chars have filled up the buffer prematurely,
124e13d9 8205 and we have actually sent fewer units than planned.
917317f4
JM
8206 Fix-up the length field of the packet. Use the same
8207 number of characters as before. */
124e13d9
SM
8208 plen += hexnumnstr (plen, (ULONGEST) units_written,
8209 plenlen);
917317f4 8210 *plen = ':'; /* overwrite \0 from hexnumnstr() */
c906108c 8211 }
a76d924d
DJ
8212 }
8213 else
8214 {
917317f4
JM
8215 /* Normal mode: Send target system values byte by byte, in
8216 increasing byte addresses. Each byte is encoded as a two hex
8217 value. */
124e13d9
SM
8218 p += 2 * bin2hex (myaddr, p, todo_units * unit_size);
8219 units_written = todo_units;
c906108c 8220 }
802188a7 8221
2e9f7625 8222 putpkt_binary (rs->buf, (int) (p - rs->buf));
6d820c5c 8223 getpkt (&rs->buf, &rs->buf_size, 0);
802188a7 8224
2e9f7625 8225 if (rs->buf[0] == 'E')
00d84524 8226 return TARGET_XFER_E_IO;
802188a7 8227
124e13d9
SM
8228 /* Return UNITS_WRITTEN, not TODO_UNITS, in case escape chars caused us to
8229 send fewer units than we'd planned. */
8230 *xfered_len_units = (ULONGEST) units_written;
9b409511 8231 return TARGET_XFER_OK;
c906108c
SS
8232}
8233
a76d924d
DJ
8234/* Write memory data directly to the remote machine.
8235 This does not inform the data cache; the data cache uses this.
8236 MEMADDR is the address in the remote memory space.
8237 MYADDR is the address of the buffer in our space.
8238 LEN is the number of bytes.
8239
9b409511
YQ
8240 Return the transferred status, error or OK (an
8241 'enum target_xfer_status' value). Save the number of bytes
8242 transferred in *XFERED_LEN. Only transfer a single packet. */
a76d924d 8243
9b409511
YQ
8244static enum target_xfer_status
8245remote_write_bytes (CORE_ADDR memaddr, const gdb_byte *myaddr, ULONGEST len,
124e13d9 8246 int unit_size, ULONGEST *xfered_len)
a76d924d 8247{
a121b7c1 8248 const char *packet_format = NULL;
a76d924d
DJ
8249
8250 /* Check whether the target supports binary download. */
8251 check_binary_download (memaddr);
8252
4082afcc 8253 switch (packet_support (PACKET_X))
a76d924d
DJ
8254 {
8255 case PACKET_ENABLE:
8256 packet_format = "X";
8257 break;
8258 case PACKET_DISABLE:
8259 packet_format = "M";
8260 break;
8261 case PACKET_SUPPORT_UNKNOWN:
8262 internal_error (__FILE__, __LINE__,
8263 _("remote_write_bytes: bad internal state"));
8264 default:
8265 internal_error (__FILE__, __LINE__, _("bad switch"));
8266 }
8267
8268 return remote_write_bytes_aux (packet_format,
124e13d9 8269 memaddr, myaddr, len, unit_size, xfered_len,
9b409511 8270 packet_format[0], 1);
a76d924d
DJ
8271}
8272
9217e74e
YQ
8273/* Read memory data directly from the remote machine.
8274 This does not use the data cache; the data cache uses this.
8275 MEMADDR is the address in the remote memory space.
8276 MYADDR is the address of the buffer in our space.
124e13d9
SM
8277 LEN_UNITS is the number of addressable memory units to read..
8278 UNIT_SIZE is the length in bytes of an addressable unit.
9217e74e
YQ
8279
8280 Return the transferred status, error or OK (an
8281 'enum target_xfer_status' value). Save the number of bytes
124e13d9
SM
8282 transferred in *XFERED_LEN_UNITS.
8283
8284 See the comment of remote_write_bytes_aux for an example of
8285 memory read/write exchange between gdb and the stub. */
9217e74e
YQ
8286
8287static enum target_xfer_status
124e13d9
SM
8288remote_read_bytes_1 (CORE_ADDR memaddr, gdb_byte *myaddr, ULONGEST len_units,
8289 int unit_size, ULONGEST *xfered_len_units)
9217e74e
YQ
8290{
8291 struct remote_state *rs = get_remote_state ();
124e13d9 8292 int buf_size_bytes; /* Max size of packet output buffer. */
9217e74e 8293 char *p;
124e13d9
SM
8294 int todo_units;
8295 int decoded_bytes;
9217e74e 8296
124e13d9 8297 buf_size_bytes = get_memory_read_packet_size ();
9217e74e
YQ
8298 /* The packet buffer will be large enough for the payload;
8299 get_memory_packet_size ensures this. */
8300
124e13d9 8301 /* Number of units that will fit. */
325fac50
PA
8302 todo_units = std::min (len_units,
8303 (ULONGEST) (buf_size_bytes / unit_size) / 2);
9217e74e
YQ
8304
8305 /* Construct "m"<memaddr>","<len>". */
8306 memaddr = remote_address_masked (memaddr);
8307 p = rs->buf;
8308 *p++ = 'm';
8309 p += hexnumstr (p, (ULONGEST) memaddr);
8310 *p++ = ',';
124e13d9 8311 p += hexnumstr (p, (ULONGEST) todo_units);
9217e74e
YQ
8312 *p = '\0';
8313 putpkt (rs->buf);
8314 getpkt (&rs->buf, &rs->buf_size, 0);
8315 if (rs->buf[0] == 'E'
8316 && isxdigit (rs->buf[1]) && isxdigit (rs->buf[2])
8317 && rs->buf[3] == '\0')
8318 return TARGET_XFER_E_IO;
8319 /* Reply describes memory byte by byte, each byte encoded as two hex
8320 characters. */
8321 p = rs->buf;
124e13d9 8322 decoded_bytes = hex2bin (p, myaddr, todo_units * unit_size);
9217e74e 8323 /* Return what we have. Let higher layers handle partial reads. */
124e13d9 8324 *xfered_len_units = (ULONGEST) (decoded_bytes / unit_size);
9217e74e
YQ
8325 return TARGET_XFER_OK;
8326}
8327
b55fbac4
YQ
8328/* Using the set of read-only target sections of remote, read live
8329 read-only memory.
8acf9577
YQ
8330
8331 For interface/parameters/return description see target.h,
8332 to_xfer_partial. */
8333
8334static enum target_xfer_status
b55fbac4
YQ
8335remote_xfer_live_readonly_partial (struct target_ops *ops, gdb_byte *readbuf,
8336 ULONGEST memaddr, ULONGEST len,
124e13d9 8337 int unit_size, ULONGEST *xfered_len)
8acf9577
YQ
8338{
8339 struct target_section *secp;
8340 struct target_section_table *table;
8341
8342 secp = target_section_by_addr (ops, memaddr);
8343 if (secp != NULL
8344 && (bfd_get_section_flags (secp->the_bfd_section->owner,
8345 secp->the_bfd_section)
8346 & SEC_READONLY))
8347 {
8348 struct target_section *p;
8349 ULONGEST memend = memaddr + len;
8350
8351 table = target_get_section_table (ops);
8352
8353 for (p = table->sections; p < table->sections_end; p++)
8354 {
8355 if (memaddr >= p->addr)
8356 {
8357 if (memend <= p->endaddr)
8358 {
8359 /* Entire transfer is within this section. */
124e13d9 8360 return remote_read_bytes_1 (memaddr, readbuf, len, unit_size,
b55fbac4 8361 xfered_len);
8acf9577
YQ
8362 }
8363 else if (memaddr >= p->endaddr)
8364 {
8365 /* This section ends before the transfer starts. */
8366 continue;
8367 }
8368 else
8369 {
8370 /* This section overlaps the transfer. Just do half. */
8371 len = p->endaddr - memaddr;
124e13d9 8372 return remote_read_bytes_1 (memaddr, readbuf, len, unit_size,
b55fbac4 8373 xfered_len);
8acf9577
YQ
8374 }
8375 }
8376 }
8377 }
8378
8379 return TARGET_XFER_EOF;
8380}
8381
9217e74e
YQ
8382/* Similar to remote_read_bytes_1, but it reads from the remote stub
8383 first if the requested memory is unavailable in traceframe.
8384 Otherwise, fall back to remote_read_bytes_1. */
c906108c 8385
9b409511 8386static enum target_xfer_status
8acf9577 8387remote_read_bytes (struct target_ops *ops, CORE_ADDR memaddr,
124e13d9
SM
8388 gdb_byte *myaddr, ULONGEST len, int unit_size,
8389 ULONGEST *xfered_len)
c906108c 8390{
6b6aa828 8391 if (len == 0)
96c4f946 8392 return TARGET_XFER_EOF;
b2182ed2 8393
8acf9577
YQ
8394 if (get_traceframe_number () != -1)
8395 {
8396 VEC(mem_range_s) *available;
8397
8398 /* If we fail to get the set of available memory, then the
8399 target does not support querying traceframe info, and so we
8400 attempt reading from the traceframe anyway (assuming the
8401 target implements the old QTro packet then). */
8402 if (traceframe_available_memory (&available, memaddr, len))
8403 {
8404 struct cleanup *old_chain;
8405
8406 old_chain = make_cleanup (VEC_cleanup(mem_range_s), &available);
8407
8408 if (VEC_empty (mem_range_s, available)
8409 || VEC_index (mem_range_s, available, 0)->start != memaddr)
8410 {
8411 enum target_xfer_status res;
8412
8413 /* Don't read into the traceframe's available
8414 memory. */
8415 if (!VEC_empty (mem_range_s, available))
8416 {
8417 LONGEST oldlen = len;
8418
8419 len = VEC_index (mem_range_s, available, 0)->start - memaddr;
8420 gdb_assert (len <= oldlen);
8421 }
8422
8423 do_cleanups (old_chain);
8424
8425 /* This goes through the topmost target again. */
b55fbac4 8426 res = remote_xfer_live_readonly_partial (ops, myaddr, memaddr,
124e13d9 8427 len, unit_size, xfered_len);
8acf9577
YQ
8428 if (res == TARGET_XFER_OK)
8429 return TARGET_XFER_OK;
8430 else
8431 {
8432 /* No use trying further, we know some memory starting
8433 at MEMADDR isn't available. */
8434 *xfered_len = len;
8435 return TARGET_XFER_UNAVAILABLE;
8436 }
8437 }
8438
8439 /* Don't try to read more than how much is available, in
8440 case the target implements the deprecated QTro packet to
8441 cater for older GDBs (the target's knowledge of read-only
8442 sections may be outdated by now). */
8443 len = VEC_index (mem_range_s, available, 0)->length;
8444
8445 do_cleanups (old_chain);
8446 }
8447 }
8448
124e13d9 8449 return remote_read_bytes_1 (memaddr, myaddr, len, unit_size, xfered_len);
c906108c 8450}
74531fed 8451
c906108c 8452\f
c906108c 8453
a76d924d
DJ
8454/* Sends a packet with content determined by the printf format string
8455 FORMAT and the remaining arguments, then gets the reply. Returns
8456 whether the packet was a success, a failure, or unknown. */
8457
77b64a49
PA
8458static enum packet_result remote_send_printf (const char *format, ...)
8459 ATTRIBUTE_PRINTF (1, 2);
8460
2c0b251b 8461static enum packet_result
a76d924d
DJ
8462remote_send_printf (const char *format, ...)
8463{
8464 struct remote_state *rs = get_remote_state ();
8465 int max_size = get_remote_packet_size ();
a76d924d 8466 va_list ap;
a744cf53 8467
a76d924d
DJ
8468 va_start (ap, format);
8469
8470 rs->buf[0] = '\0';
8471 if (vsnprintf (rs->buf, max_size, format, ap) >= max_size)
9b20d036 8472 internal_error (__FILE__, __LINE__, _("Too long remote packet."));
a76d924d
DJ
8473
8474 if (putpkt (rs->buf) < 0)
8475 error (_("Communication problem with target."));
8476
8477 rs->buf[0] = '\0';
8478 getpkt (&rs->buf, &rs->buf_size, 0);
8479
8480 return packet_check_result (rs->buf);
8481}
8482
a76d924d
DJ
8483/* Flash writing can take quite some time. We'll set
8484 effectively infinite timeout for flash operations.
8485 In future, we'll need to decide on a better approach. */
8486static const int remote_flash_timeout = 1000;
8487
8488static void
8489remote_flash_erase (struct target_ops *ops,
8490 ULONGEST address, LONGEST length)
8491{
f5656ead 8492 int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
a76d924d 8493 enum packet_result ret;
2ec845e7
TT
8494 scoped_restore restore_timeout
8495 = make_scoped_restore (&remote_timeout, remote_flash_timeout);
a76d924d
DJ
8496
8497 ret = remote_send_printf ("vFlashErase:%s,%s",
5af949e3 8498 phex (address, addr_size),
a76d924d
DJ
8499 phex (length, 4));
8500 switch (ret)
8501 {
8502 case PACKET_UNKNOWN:
8503 error (_("Remote target does not support flash erase"));
8504 case PACKET_ERROR:
8505 error (_("Error erasing flash with vFlashErase packet"));
8506 default:
8507 break;
8508 }
a76d924d
DJ
8509}
8510
9b409511
YQ
8511static enum target_xfer_status
8512remote_flash_write (struct target_ops *ops, ULONGEST address,
8513 ULONGEST length, ULONGEST *xfered_len,
8514 const gdb_byte *data)
a76d924d 8515{
2ec845e7
TT
8516 scoped_restore restore_timeout
8517 = make_scoped_restore (&remote_timeout, remote_flash_timeout);
8518 return remote_write_bytes_aux ("vFlashWrite:", address, data, length, 1,
8519 xfered_len,'X', 0);
a76d924d
DJ
8520}
8521
8522static void
8523remote_flash_done (struct target_ops *ops)
8524{
a76d924d 8525 int ret;
a76d924d 8526
2ec845e7
TT
8527 scoped_restore restore_timeout
8528 = make_scoped_restore (&remote_timeout, remote_flash_timeout);
8529
a76d924d 8530 ret = remote_send_printf ("vFlashDone");
a76d924d
DJ
8531
8532 switch (ret)
8533 {
8534 case PACKET_UNKNOWN:
8535 error (_("Remote target does not support vFlashDone"));
8536 case PACKET_ERROR:
8537 error (_("Error finishing flash operation"));
8538 default:
8539 break;
8540 }
8541}
8542
c906108c 8543static void
fba45db2 8544remote_files_info (struct target_ops *ignore)
c906108c
SS
8545{
8546 puts_filtered ("Debugging a target over a serial line.\n");
8547}
8548\f
8549/* Stuff for dealing with the packets which are part of this protocol.
8550 See comment at top of file for details. */
8551
1927e618
PA
8552/* Close/unpush the remote target, and throw a TARGET_CLOSE_ERROR
8553 error to higher layers. Called when a serial error is detected.
8554 The exception message is STRING, followed by a colon and a blank,
d6cb50a2
JK
8555 the system error message for errno at function entry and final dot
8556 for output compatibility with throw_perror_with_name. */
1927e618
PA
8557
8558static void
8559unpush_and_perror (const char *string)
8560{
d6cb50a2 8561 int saved_errno = errno;
1927e618
PA
8562
8563 remote_unpush_target ();
d6cb50a2
JK
8564 throw_error (TARGET_CLOSE_ERROR, "%s: %s.", string,
8565 safe_strerror (saved_errno));
1927e618
PA
8566}
8567
048094ac
PA
8568/* Read a single character from the remote end. The current quit
8569 handler is overridden to avoid quitting in the middle of packet
8570 sequence, as that would break communication with the remote server.
8571 See remote_serial_quit_handler for more detail. */
c906108c
SS
8572
8573static int
fba45db2 8574readchar (int timeout)
c906108c
SS
8575{
8576 int ch;
5d93a237 8577 struct remote_state *rs = get_remote_state ();
048094ac 8578
2ec845e7
TT
8579 {
8580 scoped_restore restore_quit
8581 = make_scoped_restore (&quit_handler, remote_serial_quit_handler);
c906108c 8582
2ec845e7 8583 rs->got_ctrlc_during_io = 0;
c906108c 8584
2ec845e7 8585 ch = serial_readchar (rs->remote_desc, timeout);
048094ac 8586
2ec845e7
TT
8587 if (rs->got_ctrlc_during_io)
8588 set_quit_flag ();
8589 }
048094ac 8590
2acceee2 8591 if (ch >= 0)
0876f84a 8592 return ch;
2acceee2
JM
8593
8594 switch ((enum serial_rc) ch)
c906108c
SS
8595 {
8596 case SERIAL_EOF:
78a095c3 8597 remote_unpush_target ();
598d3636 8598 throw_error (TARGET_CLOSE_ERROR, _("Remote connection closed"));
2acceee2 8599 /* no return */
c906108c 8600 case SERIAL_ERROR:
1927e618
PA
8601 unpush_and_perror (_("Remote communication error. "
8602 "Target disconnected."));
2acceee2 8603 /* no return */
c906108c 8604 case SERIAL_TIMEOUT:
2acceee2 8605 break;
c906108c 8606 }
2acceee2 8607 return ch;
c906108c
SS
8608}
8609
c33e31fd 8610/* Wrapper for serial_write that closes the target and throws if
048094ac
PA
8611 writing fails. The current quit handler is overridden to avoid
8612 quitting in the middle of packet sequence, as that would break
8613 communication with the remote server. See
8614 remote_serial_quit_handler for more detail. */
c33e31fd
PA
8615
8616static void
8617remote_serial_write (const char *str, int len)
8618{
5d93a237 8619 struct remote_state *rs = get_remote_state ();
048094ac 8620
2ec845e7
TT
8621 scoped_restore restore_quit
8622 = make_scoped_restore (&quit_handler, remote_serial_quit_handler);
048094ac
PA
8623
8624 rs->got_ctrlc_during_io = 0;
5d93a237
TT
8625
8626 if (serial_write (rs->remote_desc, str, len))
c33e31fd 8627 {
1927e618
PA
8628 unpush_and_perror (_("Remote communication error. "
8629 "Target disconnected."));
c33e31fd 8630 }
048094ac
PA
8631
8632 if (rs->got_ctrlc_during_io)
8633 set_quit_flag ();
c33e31fd
PA
8634}
8635
6d820c5c
DJ
8636/* Send the command in *BUF to the remote machine, and read the reply
8637 into *BUF. Report an error if we get an error reply. Resize
8638 *BUF using xrealloc if necessary to hold the result, and update
8639 *SIZEOF_BUF. */
c906108c
SS
8640
8641static void
6d820c5c
DJ
8642remote_send (char **buf,
8643 long *sizeof_buf)
c906108c 8644{
6d820c5c 8645 putpkt (*buf);
c2d11a7d 8646 getpkt (buf, sizeof_buf, 0);
c906108c 8647
6d820c5c
DJ
8648 if ((*buf)[0] == 'E')
8649 error (_("Remote failure reply: %s"), *buf);
c906108c
SS
8650}
8651
b3ced9ba
PA
8652/* Return a string representing an escaped version of BUF, of len N.
8653 E.g. \n is converted to \\n, \t to \\t, etc. */
6e5abd65 8654
b3ced9ba 8655static std::string
6e5abd65
PA
8656escape_buffer (const char *buf, int n)
8657{
d7e74731 8658 string_file stb;
6e5abd65 8659
d7e74731
PA
8660 stb.putstrn (buf, n, '\\');
8661 return std::move (stb.string ());
6e5abd65
PA
8662}
8663
c906108c
SS
8664/* Display a null-terminated packet on stdout, for debugging, using C
8665 string notation. */
8666
8667static void
baa336ce 8668print_packet (const char *buf)
c906108c
SS
8669{
8670 puts_filtered ("\"");
43e526b9 8671 fputstr_filtered (buf, '"', gdb_stdout);
c906108c
SS
8672 puts_filtered ("\"");
8673}
8674
8675int
baa336ce 8676putpkt (const char *buf)
c906108c
SS
8677{
8678 return putpkt_binary (buf, strlen (buf));
8679}
8680
8681/* Send a packet to the remote machine, with error checking. The data
23860348 8682 of the packet is in BUF. The string in BUF can be at most
ea9c271d 8683 get_remote_packet_size () - 5 to account for the $, # and checksum,
23860348
MS
8684 and for a possible /0 if we are debugging (remote_debug) and want
8685 to print the sent packet as a string. */
c906108c
SS
8686
8687static int
baa336ce 8688putpkt_binary (const char *buf, int cnt)
c906108c 8689{
2d717e4f 8690 struct remote_state *rs = get_remote_state ();
c906108c
SS
8691 int i;
8692 unsigned char csum = 0;
224c3ddb 8693 char *buf2 = (char *) xmalloc (cnt + 6);
a5c0808e 8694 struct cleanup *old_chain = make_cleanup (xfree, buf2);
085dd6e6 8695
c906108c
SS
8696 int ch;
8697 int tcount = 0;
8698 char *p;
8699
e24a49d8
PA
8700 /* Catch cases like trying to read memory or listing threads while
8701 we're waiting for a stop reply. The remote server wouldn't be
8702 ready to handle this request, so we'd hang and timeout. We don't
8703 have to worry about this in synchronous mode, because in that
8704 case it's not possible to issue a command while the target is
74531fed
PA
8705 running. This is not a problem in non-stop mode, because in that
8706 case, the stub is always ready to process serial input. */
6efcd9a8
PA
8707 if (!target_is_non_stop_p ()
8708 && target_is_async_p ()
8709 && rs->waiting_for_stop_reply)
9597b22a
DE
8710 {
8711 error (_("Cannot execute this command while the target is running.\n"
8712 "Use the \"interrupt\" command to stop the target\n"
8713 "and then try again."));
8714 }
e24a49d8 8715
2d717e4f
DJ
8716 /* We're sending out a new packet. Make sure we don't look at a
8717 stale cached response. */
8718 rs->cached_wait_status = 0;
8719
c906108c
SS
8720 /* Copy the packet into buffer BUF2, encapsulating it
8721 and giving it a checksum. */
8722
c906108c
SS
8723 p = buf2;
8724 *p++ = '$';
8725
8726 for (i = 0; i < cnt; i++)
8727 {
8728 csum += buf[i];
8729 *p++ = buf[i];
8730 }
8731 *p++ = '#';
8732 *p++ = tohex ((csum >> 4) & 0xf);
8733 *p++ = tohex (csum & 0xf);
8734
8735 /* Send it over and over until we get a positive ack. */
8736
8737 while (1)
8738 {
8739 int started_error_output = 0;
8740
8741 if (remote_debug)
8742 {
8743 *p = '\0';
b3ced9ba 8744
6f8976bf
YQ
8745 int len = (int) (p - buf2);
8746
8747 std::string str
8748 = escape_buffer (buf2, std::min (len, REMOTE_DEBUG_MAX_CHAR));
8749
8750 fprintf_unfiltered (gdb_stdlog, "Sending packet: %s", str.c_str ());
8751
8752 if (str.length () > REMOTE_DEBUG_MAX_CHAR)
8753 {
8754 fprintf_unfiltered (gdb_stdlog, "[%zu bytes omitted]",
8755 str.length () - REMOTE_DEBUG_MAX_CHAR);
8756 }
8757
8758 fprintf_unfiltered (gdb_stdlog, "...");
b3ced9ba 8759
0f71a2f6 8760 gdb_flush (gdb_stdlog);
c906108c 8761 }
c33e31fd 8762 remote_serial_write (buf2, p - buf2);
c906108c 8763
a6f3e723
SL
8764 /* If this is a no acks version of the remote protocol, send the
8765 packet and move on. */
8766 if (rs->noack_mode)
8767 break;
8768
74531fed
PA
8769 /* Read until either a timeout occurs (-2) or '+' is read.
8770 Handle any notification that arrives in the mean time. */
c906108c
SS
8771 while (1)
8772 {
8773 ch = readchar (remote_timeout);
8774
c5aa993b 8775 if (remote_debug)
c906108c
SS
8776 {
8777 switch (ch)
8778 {
8779 case '+':
1216fa2c 8780 case '-':
c906108c
SS
8781 case SERIAL_TIMEOUT:
8782 case '$':
74531fed 8783 case '%':
c906108c
SS
8784 if (started_error_output)
8785 {
8786 putchar_unfiltered ('\n');
8787 started_error_output = 0;
8788 }
8789 }
8790 }
8791
8792 switch (ch)
8793 {
8794 case '+':
8795 if (remote_debug)
0f71a2f6 8796 fprintf_unfiltered (gdb_stdlog, "Ack\n");
a5c0808e 8797 do_cleanups (old_chain);
c906108c 8798 return 1;
1216fa2c
AC
8799 case '-':
8800 if (remote_debug)
8801 fprintf_unfiltered (gdb_stdlog, "Nak\n");
a17d146e 8802 /* FALLTHROUGH */
c906108c 8803 case SERIAL_TIMEOUT:
c5aa993b 8804 tcount++;
c906108c 8805 if (tcount > 3)
a5c0808e
PA
8806 {
8807 do_cleanups (old_chain);
8808 return 0;
8809 }
23860348 8810 break; /* Retransmit buffer. */
c906108c
SS
8811 case '$':
8812 {
40e3f985 8813 if (remote_debug)
2bc416ba 8814 fprintf_unfiltered (gdb_stdlog,
23860348 8815 "Packet instead of Ack, ignoring it\n");
d6f7abdf
AC
8816 /* It's probably an old response sent because an ACK
8817 was lost. Gobble up the packet and ack it so it
8818 doesn't get retransmitted when we resend this
8819 packet. */
6d820c5c 8820 skip_frame ();
c33e31fd 8821 remote_serial_write ("+", 1);
23860348 8822 continue; /* Now, go look for +. */
c906108c 8823 }
74531fed
PA
8824
8825 case '%':
8826 {
8827 int val;
8828
8829 /* If we got a notification, handle it, and go back to looking
8830 for an ack. */
8831 /* We've found the start of a notification. Now
8832 collect the data. */
8833 val = read_frame (&rs->buf, &rs->buf_size);
8834 if (val >= 0)
8835 {
8836 if (remote_debug)
8837 {
b3ced9ba 8838 std::string str = escape_buffer (rs->buf, val);
6e5abd65 8839
6e5abd65
PA
8840 fprintf_unfiltered (gdb_stdlog,
8841 " Notification received: %s\n",
b3ced9ba 8842 str.c_str ());
74531fed 8843 }
5965e028 8844 handle_notification (rs->notif_state, rs->buf);
74531fed
PA
8845 /* We're in sync now, rewait for the ack. */
8846 tcount = 0;
8847 }
8848 else
8849 {
8850 if (remote_debug)
8851 {
8852 if (!started_error_output)
8853 {
8854 started_error_output = 1;
8855 fprintf_unfiltered (gdb_stdlog, "putpkt: Junk: ");
8856 }
8857 fputc_unfiltered (ch & 0177, gdb_stdlog);
8858 fprintf_unfiltered (gdb_stdlog, "%s", rs->buf);
8859 }
8860 }
8861 continue;
8862 }
8863 /* fall-through */
c906108c
SS
8864 default:
8865 if (remote_debug)
8866 {
8867 if (!started_error_output)
8868 {
8869 started_error_output = 1;
0f71a2f6 8870 fprintf_unfiltered (gdb_stdlog, "putpkt: Junk: ");
c906108c 8871 }
0f71a2f6 8872 fputc_unfiltered (ch & 0177, gdb_stdlog);
c906108c
SS
8873 }
8874 continue;
8875 }
23860348 8876 break; /* Here to retransmit. */
c906108c
SS
8877 }
8878
8879#if 0
8880 /* This is wrong. If doing a long backtrace, the user should be
c5aa993b
JM
8881 able to get out next time we call QUIT, without anything as
8882 violent as interrupt_query. If we want to provide a way out of
8883 here without getting to the next QUIT, it should be based on
8884 hitting ^C twice as in remote_wait. */
c906108c
SS
8885 if (quit_flag)
8886 {
8887 quit_flag = 0;
8888 interrupt_query ();
8889 }
8890#endif
8891 }
a5c0808e
PA
8892
8893 do_cleanups (old_chain);
a6f3e723 8894 return 0;
c906108c
SS
8895}
8896
6d820c5c
DJ
8897/* Come here after finding the start of a frame when we expected an
8898 ack. Do our best to discard the rest of this packet. */
8899
8900static void
8901skip_frame (void)
8902{
8903 int c;
8904
8905 while (1)
8906 {
8907 c = readchar (remote_timeout);
8908 switch (c)
8909 {
8910 case SERIAL_TIMEOUT:
8911 /* Nothing we can do. */
8912 return;
8913 case '#':
8914 /* Discard the two bytes of checksum and stop. */
8915 c = readchar (remote_timeout);
8916 if (c >= 0)
8917 c = readchar (remote_timeout);
8918
8919 return;
8920 case '*': /* Run length encoding. */
8921 /* Discard the repeat count. */
8922 c = readchar (remote_timeout);
8923 if (c < 0)
8924 return;
8925 break;
8926 default:
8927 /* A regular character. */
8928 break;
8929 }
8930 }
8931}
8932
c906108c 8933/* Come here after finding the start of the frame. Collect the rest
6d820c5c
DJ
8934 into *BUF, verifying the checksum, length, and handling run-length
8935 compression. NUL terminate the buffer. If there is not enough room,
8936 expand *BUF using xrealloc.
c906108c 8937
c2d11a7d
JM
8938 Returns -1 on error, number of characters in buffer (ignoring the
8939 trailing NULL) on success. (could be extended to return one of the
23860348 8940 SERIAL status indications). */
c2d11a7d
JM
8941
8942static long
6d820c5c
DJ
8943read_frame (char **buf_p,
8944 long *sizeof_buf)
c906108c
SS
8945{
8946 unsigned char csum;
c2d11a7d 8947 long bc;
c906108c 8948 int c;
6d820c5c 8949 char *buf = *buf_p;
a6f3e723 8950 struct remote_state *rs = get_remote_state ();
c906108c
SS
8951
8952 csum = 0;
c2d11a7d 8953 bc = 0;
c906108c
SS
8954
8955 while (1)
8956 {
8957 c = readchar (remote_timeout);
c906108c
SS
8958 switch (c)
8959 {
8960 case SERIAL_TIMEOUT:
8961 if (remote_debug)
0f71a2f6 8962 fputs_filtered ("Timeout in mid-packet, retrying\n", gdb_stdlog);
c2d11a7d 8963 return -1;
c906108c
SS
8964 case '$':
8965 if (remote_debug)
0f71a2f6
JM
8966 fputs_filtered ("Saw new packet start in middle of old one\n",
8967 gdb_stdlog);
23860348 8968 return -1; /* Start a new packet, count retries. */
c906108c
SS
8969 case '#':
8970 {
8971 unsigned char pktcsum;
e1b09194
AC
8972 int check_0 = 0;
8973 int check_1 = 0;
c906108c 8974
c2d11a7d 8975 buf[bc] = '\0';
c906108c 8976
e1b09194
AC
8977 check_0 = readchar (remote_timeout);
8978 if (check_0 >= 0)
8979 check_1 = readchar (remote_timeout);
802188a7 8980
e1b09194
AC
8981 if (check_0 == SERIAL_TIMEOUT || check_1 == SERIAL_TIMEOUT)
8982 {
8983 if (remote_debug)
2bc416ba 8984 fputs_filtered ("Timeout in checksum, retrying\n",
23860348 8985 gdb_stdlog);
e1b09194
AC
8986 return -1;
8987 }
8988 else if (check_0 < 0 || check_1 < 0)
40e3f985
FN
8989 {
8990 if (remote_debug)
2bc416ba 8991 fputs_filtered ("Communication error in checksum\n",
23860348 8992 gdb_stdlog);
40e3f985
FN
8993 return -1;
8994 }
c906108c 8995
a6f3e723
SL
8996 /* Don't recompute the checksum; with no ack packets we
8997 don't have any way to indicate a packet retransmission
8998 is necessary. */
8999 if (rs->noack_mode)
9000 return bc;
9001
e1b09194 9002 pktcsum = (fromhex (check_0) << 4) | fromhex (check_1);
c906108c 9003 if (csum == pktcsum)
c2d11a7d 9004 return bc;
c906108c 9005
c5aa993b 9006 if (remote_debug)
c906108c 9007 {
b3ced9ba 9008 std::string str = escape_buffer (buf, bc);
6e5abd65 9009
6e5abd65 9010 fprintf_unfiltered (gdb_stdlog,
3e43a32a
MS
9011 "Bad checksum, sentsum=0x%x, "
9012 "csum=0x%x, buf=%s\n",
b3ced9ba 9013 pktcsum, csum, str.c_str ());
c906108c 9014 }
c2d11a7d 9015 /* Number of characters in buffer ignoring trailing
23860348 9016 NULL. */
c2d11a7d 9017 return -1;
c906108c 9018 }
23860348 9019 case '*': /* Run length encoding. */
c2c6d25f
JM
9020 {
9021 int repeat;
c906108c 9022
a744cf53 9023 csum += c;
b4501125
AC
9024 c = readchar (remote_timeout);
9025 csum += c;
23860348 9026 repeat = c - ' ' + 3; /* Compute repeat count. */
c906108c 9027
23860348 9028 /* The character before ``*'' is repeated. */
c2d11a7d 9029
6d820c5c 9030 if (repeat > 0 && repeat <= 255 && bc > 0)
c2c6d25f 9031 {
6d820c5c
DJ
9032 if (bc + repeat - 1 >= *sizeof_buf - 1)
9033 {
9034 /* Make some more room in the buffer. */
9035 *sizeof_buf += repeat;
224c3ddb 9036 *buf_p = (char *) xrealloc (*buf_p, *sizeof_buf);
6d820c5c
DJ
9037 buf = *buf_p;
9038 }
9039
c2d11a7d
JM
9040 memset (&buf[bc], buf[bc - 1], repeat);
9041 bc += repeat;
c2c6d25f
JM
9042 continue;
9043 }
9044
c2d11a7d 9045 buf[bc] = '\0';
6d820c5c 9046 printf_filtered (_("Invalid run length encoding: %s\n"), buf);
c2d11a7d 9047 return -1;
c2c6d25f 9048 }
c906108c 9049 default:
6d820c5c 9050 if (bc >= *sizeof_buf - 1)
c906108c 9051 {
6d820c5c
DJ
9052 /* Make some more room in the buffer. */
9053 *sizeof_buf *= 2;
224c3ddb 9054 *buf_p = (char *) xrealloc (*buf_p, *sizeof_buf);
6d820c5c 9055 buf = *buf_p;
c906108c
SS
9056 }
9057
6d820c5c
DJ
9058 buf[bc++] = c;
9059 csum += c;
9060 continue;
c906108c
SS
9061 }
9062 }
9063}
9064
9065/* Read a packet from the remote machine, with error checking, and
6d820c5c
DJ
9066 store it in *BUF. Resize *BUF using xrealloc if necessary to hold
9067 the result, and update *SIZEOF_BUF. If FOREVER, wait forever
9068 rather than timing out; this is used (in synchronous mode) to wait
9069 for a target that is is executing user code to stop. */
d9fcf2fb
JM
9070/* FIXME: ezannoni 2000-02-01 this wrapper is necessary so that we
9071 don't have to change all the calls to getpkt to deal with the
9072 return value, because at the moment I don't know what the right
23860348 9073 thing to do it for those. */
c906108c 9074void
6d820c5c
DJ
9075getpkt (char **buf,
9076 long *sizeof_buf,
c2d11a7d 9077 int forever)
d9fcf2fb 9078{
54887903 9079 getpkt_sane (buf, sizeof_buf, forever);
d9fcf2fb
JM
9080}
9081
9082
9083/* Read a packet from the remote machine, with error checking, and
6d820c5c
DJ
9084 store it in *BUF. Resize *BUF using xrealloc if necessary to hold
9085 the result, and update *SIZEOF_BUF. If FOREVER, wait forever
9086 rather than timing out; this is used (in synchronous mode) to wait
9087 for a target that is is executing user code to stop. If FOREVER ==
9088 0, this function is allowed to time out gracefully and return an
74531fed
PA
9089 indication of this to the caller. Otherwise return the number of
9090 bytes read. If EXPECTING_NOTIF, consider receiving a notification
fee9eda9
YQ
9091 enough reason to return to the caller. *IS_NOTIF is an output
9092 boolean that indicates whether *BUF holds a notification or not
9093 (a regular packet). */
74531fed 9094
3172dc30 9095static int
74531fed 9096getpkt_or_notif_sane_1 (char **buf, long *sizeof_buf, int forever,
fee9eda9 9097 int expecting_notif, int *is_notif)
c906108c 9098{
2d717e4f 9099 struct remote_state *rs = get_remote_state ();
c906108c
SS
9100 int c;
9101 int tries;
9102 int timeout;
df4b58fe 9103 int val = -1;
c906108c 9104
2d717e4f
DJ
9105 /* We're reading a new response. Make sure we don't look at a
9106 previously cached response. */
9107 rs->cached_wait_status = 0;
9108
6d820c5c 9109 strcpy (*buf, "timeout");
c906108c
SS
9110
9111 if (forever)
74531fed
PA
9112 timeout = watchdog > 0 ? watchdog : -1;
9113 else if (expecting_notif)
9114 timeout = 0; /* There should already be a char in the buffer. If
9115 not, bail out. */
c906108c
SS
9116 else
9117 timeout = remote_timeout;
9118
9119#define MAX_TRIES 3
9120
74531fed
PA
9121 /* Process any number of notifications, and then return when
9122 we get a packet. */
9123 for (;;)
c906108c 9124 {
d9c43928 9125 /* If we get a timeout or bad checksum, retry up to MAX_TRIES
74531fed
PA
9126 times. */
9127 for (tries = 1; tries <= MAX_TRIES; tries++)
c906108c 9128 {
74531fed
PA
9129 /* This can loop forever if the remote side sends us
9130 characters continuously, but if it pauses, we'll get
9131 SERIAL_TIMEOUT from readchar because of timeout. Then
9132 we'll count that as a retry.
9133
9134 Note that even when forever is set, we will only wait
9135 forever prior to the start of a packet. After that, we
9136 expect characters to arrive at a brisk pace. They should
9137 show up within remote_timeout intervals. */
9138 do
9139 c = readchar (timeout);
9140 while (c != SERIAL_TIMEOUT && c != '$' && c != '%');
c906108c
SS
9141
9142 if (c == SERIAL_TIMEOUT)
9143 {
74531fed
PA
9144 if (expecting_notif)
9145 return -1; /* Don't complain, it's normal to not get
9146 anything in this case. */
9147
23860348 9148 if (forever) /* Watchdog went off? Kill the target. */
c906108c 9149 {
78a095c3 9150 remote_unpush_target ();
598d3636
JK
9151 throw_error (TARGET_CLOSE_ERROR,
9152 _("Watchdog timeout has expired. "
9153 "Target detached."));
c906108c 9154 }
c906108c 9155 if (remote_debug)
0f71a2f6 9156 fputs_filtered ("Timed out.\n", gdb_stdlog);
c906108c 9157 }
74531fed
PA
9158 else
9159 {
9160 /* We've found the start of a packet or notification.
9161 Now collect the data. */
9162 val = read_frame (buf, sizeof_buf);
9163 if (val >= 0)
9164 break;
9165 }
9166
c33e31fd 9167 remote_serial_write ("-", 1);
c906108c 9168 }
c906108c 9169
74531fed
PA
9170 if (tries > MAX_TRIES)
9171 {
9172 /* We have tried hard enough, and just can't receive the
9173 packet/notification. Give up. */
9174 printf_unfiltered (_("Ignoring packet error, continuing...\n"));
c906108c 9175
74531fed
PA
9176 /* Skip the ack char if we're in no-ack mode. */
9177 if (!rs->noack_mode)
c33e31fd 9178 remote_serial_write ("+", 1);
74531fed
PA
9179 return -1;
9180 }
c906108c 9181
74531fed
PA
9182 /* If we got an ordinary packet, return that to our caller. */
9183 if (c == '$')
c906108c
SS
9184 {
9185 if (remote_debug)
43e526b9 9186 {
6f8976bf
YQ
9187 std::string str
9188 = escape_buffer (*buf,
9189 std::min (val, REMOTE_DEBUG_MAX_CHAR));
9190
9191 fprintf_unfiltered (gdb_stdlog, "Packet received: %s",
9192 str.c_str ());
9193
9194 if (str.length () > REMOTE_DEBUG_MAX_CHAR)
9195 {
9196 fprintf_unfiltered (gdb_stdlog, "[%zu bytes omitted]",
9197 str.length () - REMOTE_DEBUG_MAX_CHAR);
9198 }
6e5abd65 9199
6f8976bf 9200 fprintf_unfiltered (gdb_stdlog, "\n");
43e526b9 9201 }
a6f3e723
SL
9202
9203 /* Skip the ack char if we're in no-ack mode. */
9204 if (!rs->noack_mode)
c33e31fd 9205 remote_serial_write ("+", 1);
fee9eda9
YQ
9206 if (is_notif != NULL)
9207 *is_notif = 0;
0876f84a 9208 return val;
c906108c
SS
9209 }
9210
74531fed
PA
9211 /* If we got a notification, handle it, and go back to looking
9212 for a packet. */
9213 else
9214 {
9215 gdb_assert (c == '%');
9216
9217 if (remote_debug)
9218 {
b3ced9ba 9219 std::string str = escape_buffer (*buf, val);
6e5abd65 9220
6e5abd65
PA
9221 fprintf_unfiltered (gdb_stdlog,
9222 " Notification received: %s\n",
b3ced9ba 9223 str.c_str ());
74531fed 9224 }
fee9eda9
YQ
9225 if (is_notif != NULL)
9226 *is_notif = 1;
c906108c 9227
5965e028 9228 handle_notification (rs->notif_state, *buf);
c906108c 9229
74531fed 9230 /* Notifications require no acknowledgement. */
a6f3e723 9231
74531fed 9232 if (expecting_notif)
fee9eda9 9233 return val;
74531fed
PA
9234 }
9235 }
9236}
9237
9238static int
9239getpkt_sane (char **buf, long *sizeof_buf, int forever)
9240{
fee9eda9 9241 return getpkt_or_notif_sane_1 (buf, sizeof_buf, forever, 0, NULL);
74531fed
PA
9242}
9243
9244static int
fee9eda9
YQ
9245getpkt_or_notif_sane (char **buf, long *sizeof_buf, int forever,
9246 int *is_notif)
74531fed 9247{
fee9eda9
YQ
9248 return getpkt_or_notif_sane_1 (buf, sizeof_buf, forever, 1,
9249 is_notif);
c906108c 9250}
74531fed 9251
cbb8991c
DB
9252/* Check whether EVENT is a fork event for the process specified
9253 by the pid passed in DATA, and if it is, kill the fork child. */
9254
9255static int
9256kill_child_of_pending_fork (QUEUE (stop_reply_p) *q,
9257 QUEUE_ITER (stop_reply_p) *iter,
9258 stop_reply_p event,
9259 void *data)
9260{
19ba03f4 9261 struct queue_iter_param *param = (struct queue_iter_param *) data;
cbb8991c
DB
9262 int parent_pid = *(int *) param->input;
9263
9264 if (is_pending_fork_parent (&event->ws, parent_pid, event->ptid))
9265 {
9266 struct remote_state *rs = get_remote_state ();
9267 int child_pid = ptid_get_pid (event->ws.value.related_pid);
9268 int res;
9269
9270 res = remote_vkill (child_pid, rs);
9271 if (res != 0)
9272 error (_("Can't kill fork child process %d"), child_pid);
9273 }
9274
9275 return 1;
9276}
9277
9278/* Kill any new fork children of process PID that haven't been
9279 processed by follow_fork. */
9280
9281static void
9282kill_new_fork_children (int pid, struct remote_state *rs)
9283{
9284 struct thread_info *thread;
9285 struct notif_client *notif = &notif_client_stop;
9286 struct queue_iter_param param;
9287
9288 /* Kill the fork child threads of any threads in process PID
9289 that are stopped at a fork event. */
9290 ALL_NON_EXITED_THREADS (thread)
9291 {
9292 struct target_waitstatus *ws = &thread->pending_follow;
9293
9294 if (is_pending_fork_parent (ws, pid, thread->ptid))
9295 {
9296 struct remote_state *rs = get_remote_state ();
9297 int child_pid = ptid_get_pid (ws->value.related_pid);
9298 int res;
9299
9300 res = remote_vkill (child_pid, rs);
9301 if (res != 0)
9302 error (_("Can't kill fork child process %d"), child_pid);
9303 }
9304 }
9305
9306 /* Check for any pending fork events (not reported or processed yet)
9307 in process PID and kill those fork child threads as well. */
9308 remote_notif_get_pending_events (notif);
9309 param.input = &pid;
9310 param.output = NULL;
9311 QUEUE_iterate (stop_reply_p, stop_reply_queue,
9312 kill_child_of_pending_fork, &param);
9313}
9314
c906108c 9315\f
8020350c
DB
9316/* Target hook to kill the current inferior. */
9317
c906108c 9318static void
7d85a9c0 9319remote_kill (struct target_ops *ops)
43ff13b4 9320{
8020350c
DB
9321 int res = -1;
9322 int pid = ptid_get_pid (inferior_ptid);
9323 struct remote_state *rs = get_remote_state ();
0fdf84ca 9324
8020350c 9325 if (packet_support (PACKET_vKill) != PACKET_DISABLE)
0fdf84ca 9326 {
8020350c
DB
9327 /* If we're stopped while forking and we haven't followed yet,
9328 kill the child task. We need to do this before killing the
9329 parent task because if this is a vfork then the parent will
9330 be sleeping. */
9331 kill_new_fork_children (pid, rs);
9332
9333 res = remote_vkill (pid, rs);
9334 if (res == 0)
0fdf84ca 9335 {
bc1e6c81 9336 target_mourn_inferior (inferior_ptid);
0fdf84ca
PA
9337 return;
9338 }
8020350c 9339 }
0fdf84ca 9340
8020350c
DB
9341 /* If we are in 'target remote' mode and we are killing the only
9342 inferior, then we will tell gdbserver to exit and unpush the
9343 target. */
9344 if (res == -1 && !remote_multi_process_p (rs)
9345 && number_of_live_inferiors () == 1)
9346 {
9347 remote_kill_k ();
9348
9349 /* We've killed the remote end, we get to mourn it. If we are
9350 not in extended mode, mourning the inferior also unpushes
9351 remote_ops from the target stack, which closes the remote
9352 connection. */
bc1e6c81 9353 target_mourn_inferior (inferior_ptid);
8020350c
DB
9354
9355 return;
0fdf84ca 9356 }
43ff13b4 9357
8020350c 9358 error (_("Can't kill process"));
43ff13b4
JM
9359}
9360
8020350c
DB
9361/* Send a kill request to the target using the 'vKill' packet. */
9362
82f73884
PA
9363static int
9364remote_vkill (int pid, struct remote_state *rs)
9365{
4082afcc 9366 if (packet_support (PACKET_vKill) == PACKET_DISABLE)
82f73884
PA
9367 return -1;
9368
9369 /* Tell the remote target to detach. */
bba74b36 9370 xsnprintf (rs->buf, get_remote_packet_size (), "vKill;%x", pid);
82f73884
PA
9371 putpkt (rs->buf);
9372 getpkt (&rs->buf, &rs->buf_size, 0);
9373
4082afcc
PA
9374 switch (packet_ok (rs->buf,
9375 &remote_protocol_packets[PACKET_vKill]))
9376 {
9377 case PACKET_OK:
9378 return 0;
9379 case PACKET_ERROR:
9380 return 1;
9381 case PACKET_UNKNOWN:
9382 return -1;
9383 default:
9384 internal_error (__FILE__, __LINE__, _("Bad result from packet_ok"));
9385 }
82f73884
PA
9386}
9387
8020350c
DB
9388/* Send a kill request to the target using the 'k' packet. */
9389
82f73884 9390static void
8020350c 9391remote_kill_k (void)
82f73884 9392{
8020350c
DB
9393 /* Catch errors so the user can quit from gdb even when we
9394 aren't on speaking terms with the remote system. */
9395 TRY
82f73884 9396 {
82f73884 9397 putpkt ("k");
82f73884 9398 }
8020350c
DB
9399 CATCH (ex, RETURN_MASK_ERROR)
9400 {
9401 if (ex.error == TARGET_CLOSE_ERROR)
9402 {
9403 /* If we got an (EOF) error that caused the target
9404 to go away, then we're done, that's what we wanted.
9405 "k" is susceptible to cause a premature EOF, given
9406 that the remote server isn't actually required to
9407 reply to "k", and it can happen that it doesn't
9408 even get to reply ACK to the "k". */
9409 return;
9410 }
82f73884 9411
8020350c
DB
9412 /* Otherwise, something went wrong. We didn't actually kill
9413 the target. Just propagate the exception, and let the
9414 user or higher layers decide what to do. */
9415 throw_exception (ex);
9416 }
9417 END_CATCH
82f73884
PA
9418}
9419
c906108c 9420static void
20f796c9 9421remote_mourn (struct target_ops *target)
c906108c 9422{
8020350c 9423 struct remote_state *rs = get_remote_state ();
ce5ce7ed 9424
8020350c
DB
9425 /* In 'target remote' mode with one inferior, we close the connection. */
9426 if (!rs->extended && number_of_live_inferiors () <= 1)
9427 {
9428 unpush_target (target);
c906108c 9429
8020350c
DB
9430 /* remote_close takes care of doing most of the clean up. */
9431 generic_mourn_inferior ();
9432 return;
9433 }
c906108c 9434
e24a49d8
PA
9435 /* In case we got here due to an error, but we're going to stay
9436 connected. */
9437 rs->waiting_for_stop_reply = 0;
9438
dc1981d7
PA
9439 /* If the current general thread belonged to the process we just
9440 detached from or has exited, the remote side current general
9441 thread becomes undefined. Considering a case like this:
9442
9443 - We just got here due to a detach.
9444 - The process that we're detaching from happens to immediately
9445 report a global breakpoint being hit in non-stop mode, in the
9446 same thread we had selected before.
9447 - GDB attaches to this process again.
9448 - This event happens to be the next event we handle.
9449
9450 GDB would consider that the current general thread didn't need to
9451 be set on the stub side (with Hg), since for all it knew,
9452 GENERAL_THREAD hadn't changed.
9453
9454 Notice that although in all-stop mode, the remote server always
9455 sets the current thread to the thread reporting the stop event,
9456 that doesn't happen in non-stop mode; in non-stop, the stub *must
9457 not* change the current thread when reporting a breakpoint hit,
9458 due to the decoupling of event reporting and event handling.
9459
9460 To keep things simple, we always invalidate our notion of the
9461 current thread. */
47f8a51d 9462 record_currthread (rs, minus_one_ptid);
dc1981d7 9463
8020350c 9464 /* Call common code to mark the inferior as not running. */
48aa3c27
PA
9465 generic_mourn_inferior ();
9466
d729566a 9467 if (!have_inferiors ())
2d717e4f 9468 {
82f73884
PA
9469 if (!remote_multi_process_p (rs))
9470 {
9471 /* Check whether the target is running now - some remote stubs
9472 automatically restart after kill. */
9473 putpkt ("?");
9474 getpkt (&rs->buf, &rs->buf_size, 0);
9475
9476 if (rs->buf[0] == 'S' || rs->buf[0] == 'T')
9477 {
3e43a32a
MS
9478 /* Assume that the target has been restarted. Set
9479 inferior_ptid so that bits of core GDB realizes
9480 there's something here, e.g., so that the user can
9481 say "kill" again. */
82f73884
PA
9482 inferior_ptid = magic_null_ptid;
9483 }
82f73884 9484 }
2d717e4f
DJ
9485 }
9486}
c906108c 9487
03583c20 9488static int
2bfc0540 9489extended_remote_supports_disable_randomization (struct target_ops *self)
03583c20 9490{
4082afcc 9491 return packet_support (PACKET_QDisableRandomization) == PACKET_ENABLE;
03583c20
UW
9492}
9493
9494static void
9495extended_remote_disable_randomization (int val)
9496{
9497 struct remote_state *rs = get_remote_state ();
9498 char *reply;
9499
bba74b36
YQ
9500 xsnprintf (rs->buf, get_remote_packet_size (), "QDisableRandomization:%x",
9501 val);
03583c20
UW
9502 putpkt (rs->buf);
9503 reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
9504 if (*reply == '\0')
9505 error (_("Target does not support QDisableRandomization."));
9506 if (strcmp (reply, "OK") != 0)
9507 error (_("Bogus QDisableRandomization reply from target: %s"), reply);
9508}
9509
2d717e4f 9510static int
7c5ded6a 9511extended_remote_run (const std::string &args)
2d717e4f
DJ
9512{
9513 struct remote_state *rs = get_remote_state ();
2d717e4f 9514 int len;
94585166 9515 const char *remote_exec_file = get_remote_exec_file ();
c906108c 9516
2d717e4f
DJ
9517 /* If the user has disabled vRun support, or we have detected that
9518 support is not available, do not try it. */
4082afcc 9519 if (packet_support (PACKET_vRun) == PACKET_DISABLE)
2d717e4f 9520 return -1;
424163ea 9521
2d717e4f
DJ
9522 strcpy (rs->buf, "vRun;");
9523 len = strlen (rs->buf);
c906108c 9524
2d717e4f
DJ
9525 if (strlen (remote_exec_file) * 2 + len >= get_remote_packet_size ())
9526 error (_("Remote file name too long for run packet"));
9f1b45b0
TT
9527 len += 2 * bin2hex ((gdb_byte *) remote_exec_file, rs->buf + len,
9528 strlen (remote_exec_file));
2d717e4f 9529
7c5ded6a 9530 if (!args.empty ())
2d717e4f 9531 {
2d717e4f 9532 int i;
2d717e4f 9533
773a1edc 9534 gdb_argv argv (args.c_str ());
2d717e4f
DJ
9535 for (i = 0; argv[i] != NULL; i++)
9536 {
9537 if (strlen (argv[i]) * 2 + 1 + len >= get_remote_packet_size ())
9538 error (_("Argument list too long for run packet"));
9539 rs->buf[len++] = ';';
9f1b45b0
TT
9540 len += 2 * bin2hex ((gdb_byte *) argv[i], rs->buf + len,
9541 strlen (argv[i]));
2d717e4f 9542 }
2d717e4f
DJ
9543 }
9544
9545 rs->buf[len++] = '\0';
9546
9547 putpkt (rs->buf);
9548 getpkt (&rs->buf, &rs->buf_size, 0);
9549
4082afcc 9550 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_vRun]))
2d717e4f 9551 {
4082afcc 9552 case PACKET_OK:
3405876a 9553 /* We have a wait response. All is well. */
2d717e4f 9554 return 0;
4082afcc
PA
9555 case PACKET_UNKNOWN:
9556 return -1;
9557 case PACKET_ERROR:
2d717e4f
DJ
9558 if (remote_exec_file[0] == '\0')
9559 error (_("Running the default executable on the remote target failed; "
9560 "try \"set remote exec-file\"?"));
9561 else
9562 error (_("Running \"%s\" on the remote target failed"),
9563 remote_exec_file);
4082afcc
PA
9564 default:
9565 gdb_assert_not_reached (_("bad switch"));
2d717e4f 9566 }
c906108c
SS
9567}
9568
0a2dde4a
SDJ
9569/* Helper function to send set/unset environment packets. ACTION is
9570 either "set" or "unset". PACKET is either "QEnvironmentHexEncoded"
9571 or "QEnvironmentUnsetVariable". VALUE is the variable to be
9572 sent. */
9573
9574static void
9575send_environment_packet (struct remote_state *rs,
9576 const char *action,
9577 const char *packet,
9578 const char *value)
9579{
9580 /* Convert the environment variable to an hex string, which
9581 is the best format to be transmitted over the wire. */
9582 std::string encoded_value = bin2hex ((const gdb_byte *) value,
9583 strlen (value));
9584
9585 xsnprintf (rs->buf, get_remote_packet_size (),
9586 "%s:%s", packet, encoded_value.c_str ());
9587
9588 putpkt (rs->buf);
9589 getpkt (&rs->buf, &rs->buf_size, 0);
9590 if (strcmp (rs->buf, "OK") != 0)
9591 warning (_("Unable to %s environment variable '%s' on remote."),
9592 action, value);
9593}
9594
9595/* Helper function to handle the QEnvironment* packets. */
9596
9597static void
9598extended_remote_environment_support (struct remote_state *rs)
9599{
9600 if (packet_support (PACKET_QEnvironmentReset) != PACKET_DISABLE)
9601 {
9602 putpkt ("QEnvironmentReset");
9603 getpkt (&rs->buf, &rs->buf_size, 0);
9604 if (strcmp (rs->buf, "OK") != 0)
9605 warning (_("Unable to reset environment on remote."));
9606 }
9607
9608 gdb_environ *e = &current_inferior ()->environment;
9609
9610 if (packet_support (PACKET_QEnvironmentHexEncoded) != PACKET_DISABLE)
9611 for (const std::string &el : e->user_set_env ())
9612 send_environment_packet (rs, "set", "QEnvironmentHexEncoded",
9613 el.c_str ());
9614
9615 if (packet_support (PACKET_QEnvironmentUnset) != PACKET_DISABLE)
9616 for (const std::string &el : e->user_unset_env ())
9617 send_environment_packet (rs, "unset", "QEnvironmentUnset", el.c_str ());
9618}
9619
2d717e4f
DJ
9620/* In the extended protocol we want to be able to do things like
9621 "run" and have them basically work as expected. So we need
9622 a special create_inferior function. We support changing the
9623 executable file and the command line arguments, but not the
9624 environment. */
9625
43ff13b4 9626static void
77a19445 9627extended_remote_create_inferior (struct target_ops *ops,
7c5ded6a
SDJ
9628 const char *exec_file,
9629 const std::string &args,
77a19445 9630 char **env, int from_tty)
43ff13b4 9631{
3405876a
PA
9632 int run_worked;
9633 char *stop_reply;
9634 struct remote_state *rs = get_remote_state ();
94585166 9635 const char *remote_exec_file = get_remote_exec_file ();
3405876a 9636
43ff13b4 9637 /* If running asynchronously, register the target file descriptor
23860348 9638 with the event loop. */
75c99385 9639 if (target_can_async_p ())
6a3753b3 9640 target_async (1);
43ff13b4 9641
03583c20 9642 /* Disable address space randomization if requested (and supported). */
2bfc0540 9643 if (extended_remote_supports_disable_randomization (ops))
03583c20
UW
9644 extended_remote_disable_randomization (disable_randomization);
9645
aefd8b33
SDJ
9646 /* If startup-with-shell is on, we inform gdbserver to start the
9647 remote inferior using a shell. */
9648 if (packet_support (PACKET_QStartupWithShell) != PACKET_DISABLE)
9649 {
9650 xsnprintf (rs->buf, get_remote_packet_size (),
9651 "QStartupWithShell:%d", startup_with_shell ? 1 : 0);
9652 putpkt (rs->buf);
9653 getpkt (&rs->buf, &rs->buf_size, 0);
9654 if (strcmp (rs->buf, "OK") != 0)
9655 error (_("\
9656Remote replied unexpectedly while setting startup-with-shell: %s"),
9657 rs->buf);
9658 }
9659
0a2dde4a
SDJ
9660 extended_remote_environment_support (rs);
9661
43ff13b4 9662 /* Now restart the remote server. */
3405876a
PA
9663 run_worked = extended_remote_run (args) != -1;
9664 if (!run_worked)
2d717e4f
DJ
9665 {
9666 /* vRun was not supported. Fail if we need it to do what the
9667 user requested. */
9668 if (remote_exec_file[0])
9669 error (_("Remote target does not support \"set remote exec-file\""));
7c5ded6a 9670 if (!args.empty ())
2d717e4f 9671 error (_("Remote target does not support \"set args\" or run <ARGS>"));
43ff13b4 9672
2d717e4f
DJ
9673 /* Fall back to "R". */
9674 extended_remote_restart ();
9675 }
424163ea 9676
6c95b8df
PA
9677 if (!have_inferiors ())
9678 {
9679 /* Clean up from the last time we ran, before we mark the target
9680 running again. This will mark breakpoints uninserted, and
9681 get_offsets may insert breakpoints. */
9682 init_thread_list ();
9683 init_wait_for_inferior ();
9684 }
45280a52 9685
3405876a
PA
9686 /* vRun's success return is a stop reply. */
9687 stop_reply = run_worked ? rs->buf : NULL;
9688 add_current_inferior_and_thread (stop_reply);
c0a2216e 9689
2d717e4f
DJ
9690 /* Get updated offsets, if the stub uses qOffsets. */
9691 get_offsets ();
2d717e4f 9692}
c906108c 9693\f
c5aa993b 9694
b775012e
LM
9695/* Given a location's target info BP_TGT and the packet buffer BUF, output
9696 the list of conditions (in agent expression bytecode format), if any, the
9697 target needs to evaluate. The output is placed into the packet buffer
bba74b36 9698 started from BUF and ended at BUF_END. */
b775012e
LM
9699
9700static int
9701remote_add_target_side_condition (struct gdbarch *gdbarch,
bba74b36
YQ
9702 struct bp_target_info *bp_tgt, char *buf,
9703 char *buf_end)
b775012e 9704{
3cde5c42 9705 if (bp_tgt->conditions.empty ())
b775012e
LM
9706 return 0;
9707
9708 buf += strlen (buf);
bba74b36 9709 xsnprintf (buf, buf_end - buf, "%s", ";");
b775012e
LM
9710 buf++;
9711
83621223 9712 /* Send conditions to the target. */
d538e36d 9713 for (agent_expr *aexpr : bp_tgt->conditions)
b775012e 9714 {
bba74b36 9715 xsnprintf (buf, buf_end - buf, "X%x,", aexpr->len);
b775012e 9716 buf += strlen (buf);
3cde5c42 9717 for (int i = 0; i < aexpr->len; ++i)
b775012e
LM
9718 buf = pack_hex_byte (buf, aexpr->buf[i]);
9719 *buf = '\0';
9720 }
b775012e
LM
9721 return 0;
9722}
9723
d3ce09f5
SS
9724static void
9725remote_add_target_side_commands (struct gdbarch *gdbarch,
9726 struct bp_target_info *bp_tgt, char *buf)
9727{
3cde5c42 9728 if (bp_tgt->tcommands.empty ())
d3ce09f5
SS
9729 return;
9730
9731 buf += strlen (buf);
9732
9733 sprintf (buf, ";cmds:%x,", bp_tgt->persist);
9734 buf += strlen (buf);
9735
9736 /* Concatenate all the agent expressions that are commands into the
9737 cmds parameter. */
df97be55 9738 for (agent_expr *aexpr : bp_tgt->tcommands)
d3ce09f5
SS
9739 {
9740 sprintf (buf, "X%x,", aexpr->len);
9741 buf += strlen (buf);
3cde5c42 9742 for (int i = 0; i < aexpr->len; ++i)
d3ce09f5
SS
9743 buf = pack_hex_byte (buf, aexpr->buf[i]);
9744 *buf = '\0';
9745 }
d3ce09f5
SS
9746}
9747
8181d85f
DJ
9748/* Insert a breakpoint. On targets that have software breakpoint
9749 support, we ask the remote target to do the work; on targets
9750 which don't, we insert a traditional memory breakpoint. */
c906108c
SS
9751
9752static int
3db08215
MM
9753remote_insert_breakpoint (struct target_ops *ops,
9754 struct gdbarch *gdbarch,
a6d9a66e 9755 struct bp_target_info *bp_tgt)
c906108c 9756{
d471ea57
AC
9757 /* Try the "Z" s/w breakpoint packet if it is not already disabled.
9758 If it succeeds, then set the support to PACKET_ENABLE. If it
9759 fails, and the user has explicitly requested the Z support then
23860348 9760 report an error, otherwise, mark it disabled and go on. */
802188a7 9761
4082afcc 9762 if (packet_support (PACKET_Z0) != PACKET_DISABLE)
96baa820 9763 {
0d5ed153 9764 CORE_ADDR addr = bp_tgt->reqstd_address;
4fff2411 9765 struct remote_state *rs;
bba74b36 9766 char *p, *endbuf;
7c0f6dcc 9767 int bpsize;
4fff2411 9768
28439a30
PA
9769 /* Make sure the remote is pointing at the right process, if
9770 necessary. */
9771 if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
9772 set_general_process ();
9773
4fff2411
JZ
9774 rs = get_remote_state ();
9775 p = rs->buf;
bba74b36 9776 endbuf = rs->buf + get_remote_packet_size ();
802188a7 9777
96baa820
JM
9778 *(p++) = 'Z';
9779 *(p++) = '0';
9780 *(p++) = ',';
7c0f6dcc 9781 addr = (ULONGEST) remote_address_masked (addr);
8181d85f 9782 p += hexnumstr (p, addr);
579c6ad9 9783 xsnprintf (p, endbuf - p, ",%d", bp_tgt->kind);
802188a7 9784
efcc2da7 9785 if (remote_supports_cond_breakpoints (ops))
bba74b36 9786 remote_add_target_side_condition (gdbarch, bp_tgt, p, endbuf);
b775012e 9787
78eff0ec 9788 if (remote_can_run_breakpoint_commands (ops))
d3ce09f5
SS
9789 remote_add_target_side_commands (gdbarch, bp_tgt, p);
9790
6d820c5c
DJ
9791 putpkt (rs->buf);
9792 getpkt (&rs->buf, &rs->buf_size, 0);
96baa820 9793
6d820c5c 9794 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0]))
96baa820 9795 {
d471ea57
AC
9796 case PACKET_ERROR:
9797 return -1;
9798 case PACKET_OK:
9799 return 0;
9800 case PACKET_UNKNOWN:
9801 break;
96baa820
JM
9802 }
9803 }
c906108c 9804
0000e5cc
PA
9805 /* If this breakpoint has target-side commands but this stub doesn't
9806 support Z0 packets, throw error. */
3cde5c42 9807 if (!bp_tgt->tcommands.empty ())
0000e5cc
PA
9808 throw_error (NOT_SUPPORTED_ERROR, _("\
9809Target doesn't support breakpoints that have target side commands."));
9810
3db08215 9811 return memory_insert_breakpoint (ops, gdbarch, bp_tgt);
c906108c
SS
9812}
9813
9814static int
3db08215
MM
9815remote_remove_breakpoint (struct target_ops *ops,
9816 struct gdbarch *gdbarch,
73971819
PA
9817 struct bp_target_info *bp_tgt,
9818 enum remove_bp_reason reason)
c906108c 9819{
8181d85f 9820 CORE_ADDR addr = bp_tgt->placed_address;
d01949b6 9821 struct remote_state *rs = get_remote_state ();
96baa820 9822
4082afcc 9823 if (packet_support (PACKET_Z0) != PACKET_DISABLE)
96baa820 9824 {
6d820c5c 9825 char *p = rs->buf;
bba74b36 9826 char *endbuf = rs->buf + get_remote_packet_size ();
802188a7 9827
28439a30
PA
9828 /* Make sure the remote is pointing at the right process, if
9829 necessary. */
9830 if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
9831 set_general_process ();
9832
96baa820
JM
9833 *(p++) = 'z';
9834 *(p++) = '0';
9835 *(p++) = ',';
9836
8181d85f
DJ
9837 addr = (ULONGEST) remote_address_masked (bp_tgt->placed_address);
9838 p += hexnumstr (p, addr);
579c6ad9 9839 xsnprintf (p, endbuf - p, ",%d", bp_tgt->kind);
802188a7 9840
6d820c5c
DJ
9841 putpkt (rs->buf);
9842 getpkt (&rs->buf, &rs->buf_size, 0);
96baa820 9843
6d820c5c 9844 return (rs->buf[0] == 'E');
96baa820
JM
9845 }
9846
73971819 9847 return memory_remove_breakpoint (ops, gdbarch, bp_tgt, reason);
c906108c
SS
9848}
9849
f486487f 9850static enum Z_packet_type
d471ea57
AC
9851watchpoint_to_Z_packet (int type)
9852{
9853 switch (type)
9854 {
9855 case hw_write:
bb858e6a 9856 return Z_PACKET_WRITE_WP;
d471ea57
AC
9857 break;
9858 case hw_read:
bb858e6a 9859 return Z_PACKET_READ_WP;
d471ea57
AC
9860 break;
9861 case hw_access:
bb858e6a 9862 return Z_PACKET_ACCESS_WP;
d471ea57
AC
9863 break;
9864 default:
8e65ff28 9865 internal_error (__FILE__, __LINE__,
e2e0b3e5 9866 _("hw_bp_to_z: bad watchpoint type %d"), type);
d471ea57
AC
9867 }
9868}
9869
3c3bea1c 9870static int
f486487f
SM
9871remote_insert_watchpoint (struct target_ops *self, CORE_ADDR addr, int len,
9872 enum target_hw_bp_type type, struct expression *cond)
96baa820 9873{
d01949b6 9874 struct remote_state *rs = get_remote_state ();
bba74b36 9875 char *endbuf = rs->buf + get_remote_packet_size ();
e514a9d6 9876 char *p;
d471ea57 9877 enum Z_packet_type packet = watchpoint_to_Z_packet (type);
96baa820 9878
4082afcc 9879 if (packet_support (PACKET_Z0 + packet) == PACKET_DISABLE)
85d721b8 9880 return 1;
802188a7 9881
28439a30
PA
9882 /* Make sure the remote is pointing at the right process, if
9883 necessary. */
9884 if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
9885 set_general_process ();
9886
bba74b36 9887 xsnprintf (rs->buf, endbuf - rs->buf, "Z%x,", packet);
6d820c5c 9888 p = strchr (rs->buf, '\0');
96baa820
JM
9889 addr = remote_address_masked (addr);
9890 p += hexnumstr (p, (ULONGEST) addr);
bba74b36 9891 xsnprintf (p, endbuf - p, ",%x", len);
802188a7 9892
6d820c5c
DJ
9893 putpkt (rs->buf);
9894 getpkt (&rs->buf, &rs->buf_size, 0);
96baa820 9895
6d820c5c 9896 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0 + packet]))
d471ea57
AC
9897 {
9898 case PACKET_ERROR:
d471ea57 9899 return -1;
85d721b8
PA
9900 case PACKET_UNKNOWN:
9901 return 1;
d471ea57
AC
9902 case PACKET_OK:
9903 return 0;
9904 }
8e65ff28 9905 internal_error (__FILE__, __LINE__,
e2e0b3e5 9906 _("remote_insert_watchpoint: reached end of function"));
96baa820
JM
9907}
9908
283002cf
MR
9909static int
9910remote_watchpoint_addr_within_range (struct target_ops *target, CORE_ADDR addr,
9911 CORE_ADDR start, int length)
9912{
9913 CORE_ADDR diff = remote_address_masked (addr - start);
9914
9915 return diff < length;
9916}
9917
d471ea57 9918
3c3bea1c 9919static int
f486487f
SM
9920remote_remove_watchpoint (struct target_ops *self, CORE_ADDR addr, int len,
9921 enum target_hw_bp_type type, struct expression *cond)
96baa820 9922{
d01949b6 9923 struct remote_state *rs = get_remote_state ();
bba74b36 9924 char *endbuf = rs->buf + get_remote_packet_size ();
e514a9d6 9925 char *p;
d471ea57
AC
9926 enum Z_packet_type packet = watchpoint_to_Z_packet (type);
9927
4082afcc 9928 if (packet_support (PACKET_Z0 + packet) == PACKET_DISABLE)
5cffb350 9929 return -1;
802188a7 9930
28439a30
PA
9931 /* Make sure the remote is pointing at the right process, if
9932 necessary. */
9933 if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
9934 set_general_process ();
9935
bba74b36 9936 xsnprintf (rs->buf, endbuf - rs->buf, "z%x,", packet);
6d820c5c 9937 p = strchr (rs->buf, '\0');
96baa820
JM
9938 addr = remote_address_masked (addr);
9939 p += hexnumstr (p, (ULONGEST) addr);
bba74b36 9940 xsnprintf (p, endbuf - p, ",%x", len);
6d820c5c
DJ
9941 putpkt (rs->buf);
9942 getpkt (&rs->buf, &rs->buf_size, 0);
96baa820 9943
6d820c5c 9944 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0 + packet]))
d471ea57
AC
9945 {
9946 case PACKET_ERROR:
9947 case PACKET_UNKNOWN:
9948 return -1;
9949 case PACKET_OK:
9950 return 0;
9951 }
8e65ff28 9952 internal_error (__FILE__, __LINE__,
e2e0b3e5 9953 _("remote_remove_watchpoint: reached end of function"));
96baa820
JM
9954}
9955
3c3bea1c 9956
501eef12 9957int remote_hw_watchpoint_limit = -1;
480a3f21 9958int remote_hw_watchpoint_length_limit = -1;
501eef12 9959int remote_hw_breakpoint_limit = -1;
d471ea57 9960
480a3f21 9961static int
31568a15
TT
9962remote_region_ok_for_hw_watchpoint (struct target_ops *self,
9963 CORE_ADDR addr, int len)
480a3f21
PW
9964{
9965 if (remote_hw_watchpoint_length_limit == 0)
9966 return 0;
9967 else if (remote_hw_watchpoint_length_limit < 0)
9968 return 1;
9969 else if (len <= remote_hw_watchpoint_length_limit)
9970 return 1;
9971 else
9972 return 0;
9973}
9974
b9362cc7 9975static int
5461485a 9976remote_check_watch_resources (struct target_ops *self,
f486487f 9977 enum bptype type, int cnt, int ot)
96baa820 9978{
3c3bea1c
GS
9979 if (type == bp_hardware_breakpoint)
9980 {
9981 if (remote_hw_breakpoint_limit == 0)
9982 return 0;
501eef12
AC
9983 else if (remote_hw_breakpoint_limit < 0)
9984 return 1;
3c3bea1c
GS
9985 else if (cnt <= remote_hw_breakpoint_limit)
9986 return 1;
9987 }
9988 else
9989 {
9990 if (remote_hw_watchpoint_limit == 0)
9991 return 0;
501eef12
AC
9992 else if (remote_hw_watchpoint_limit < 0)
9993 return 1;
3c3bea1c
GS
9994 else if (ot)
9995 return -1;
9996 else if (cnt <= remote_hw_watchpoint_limit)
9997 return 1;
9998 }
9999 return -1;
10000}
10001
f7e6eed5
PA
10002/* The to_stopped_by_sw_breakpoint method of target remote. */
10003
10004static int
10005remote_stopped_by_sw_breakpoint (struct target_ops *ops)
10006{
799a2abe 10007 struct thread_info *thread = inferior_thread ();
f7e6eed5 10008
799a2abe
PA
10009 return (thread->priv != NULL
10010 && thread->priv->stop_reason == TARGET_STOPPED_BY_SW_BREAKPOINT);
f7e6eed5
PA
10011}
10012
10013/* The to_supports_stopped_by_sw_breakpoint method of target
10014 remote. */
10015
10016static int
10017remote_supports_stopped_by_sw_breakpoint (struct target_ops *ops)
10018{
f7e6eed5
PA
10019 return (packet_support (PACKET_swbreak_feature) == PACKET_ENABLE);
10020}
10021
10022/* The to_stopped_by_hw_breakpoint method of target remote. */
10023
10024static int
10025remote_stopped_by_hw_breakpoint (struct target_ops *ops)
10026{
799a2abe 10027 struct thread_info *thread = inferior_thread ();
f7e6eed5 10028
799a2abe
PA
10029 return (thread->priv != NULL
10030 && thread->priv->stop_reason == TARGET_STOPPED_BY_HW_BREAKPOINT);
f7e6eed5
PA
10031}
10032
10033/* The to_supports_stopped_by_hw_breakpoint method of target
10034 remote. */
10035
10036static int
10037remote_supports_stopped_by_hw_breakpoint (struct target_ops *ops)
10038{
f7e6eed5
PA
10039 return (packet_support (PACKET_hwbreak_feature) == PACKET_ENABLE);
10040}
10041
b9362cc7 10042static int
6a109b6b 10043remote_stopped_by_watchpoint (struct target_ops *ops)
3c3bea1c 10044{
799a2abe 10045 struct thread_info *thread = inferior_thread ();
ee154bee 10046
799a2abe
PA
10047 return (thread->priv != NULL
10048 && thread->priv->stop_reason == TARGET_STOPPED_BY_WATCHPOINT);
3c3bea1c
GS
10049}
10050
4aa7a7f5
JJ
10051static int
10052remote_stopped_data_address (struct target_ops *target, CORE_ADDR *addr_p)
3c3bea1c 10053{
799a2abe 10054 struct thread_info *thread = inferior_thread ();
a744cf53 10055
799a2abe
PA
10056 if (thread->priv != NULL
10057 && thread->priv->stop_reason == TARGET_STOPPED_BY_WATCHPOINT)
4aa7a7f5 10058 {
799a2abe
PA
10059 *addr_p = thread->priv->watch_data_address;
10060 return 1;
4aa7a7f5
JJ
10061 }
10062
799a2abe 10063 return 0;
3c3bea1c
GS
10064}
10065
10066
10067static int
23a26771 10068remote_insert_hw_breakpoint (struct target_ops *self, struct gdbarch *gdbarch,
a6d9a66e 10069 struct bp_target_info *bp_tgt)
3c3bea1c 10070{
0d5ed153 10071 CORE_ADDR addr = bp_tgt->reqstd_address;
4fff2411 10072 struct remote_state *rs;
bba74b36 10073 char *p, *endbuf;
dd61ec5c 10074 char *message;
3c3bea1c 10075
4082afcc 10076 if (packet_support (PACKET_Z1) == PACKET_DISABLE)
5cffb350 10077 return -1;
2bc416ba 10078
28439a30
PA
10079 /* Make sure the remote is pointing at the right process, if
10080 necessary. */
10081 if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10082 set_general_process ();
10083
4fff2411
JZ
10084 rs = get_remote_state ();
10085 p = rs->buf;
bba74b36 10086 endbuf = rs->buf + get_remote_packet_size ();
4fff2411 10087
96baa820
JM
10088 *(p++) = 'Z';
10089 *(p++) = '1';
10090 *(p++) = ',';
802188a7 10091
0d5ed153 10092 addr = remote_address_masked (addr);
96baa820 10093 p += hexnumstr (p, (ULONGEST) addr);
579c6ad9 10094 xsnprintf (p, endbuf - p, ",%x", bp_tgt->kind);
96baa820 10095
efcc2da7 10096 if (remote_supports_cond_breakpoints (self))
bba74b36 10097 remote_add_target_side_condition (gdbarch, bp_tgt, p, endbuf);
b775012e 10098
78eff0ec 10099 if (remote_can_run_breakpoint_commands (self))
d3ce09f5
SS
10100 remote_add_target_side_commands (gdbarch, bp_tgt, p);
10101
6d820c5c
DJ
10102 putpkt (rs->buf);
10103 getpkt (&rs->buf, &rs->buf_size, 0);
96baa820 10104
6d820c5c 10105 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z1]))
d471ea57
AC
10106 {
10107 case PACKET_ERROR:
dd61ec5c
MW
10108 if (rs->buf[1] == '.')
10109 {
10110 message = strchr (rs->buf + 2, '.');
10111 if (message)
0316657e 10112 error (_("Remote failure reply: %s"), message + 1);
dd61ec5c
MW
10113 }
10114 return -1;
d471ea57
AC
10115 case PACKET_UNKNOWN:
10116 return -1;
10117 case PACKET_OK:
10118 return 0;
10119 }
8e65ff28 10120 internal_error (__FILE__, __LINE__,
e2e0b3e5 10121 _("remote_insert_hw_breakpoint: reached end of function"));
96baa820
JM
10122}
10123
d471ea57 10124
802188a7 10125static int
a64dc96c 10126remote_remove_hw_breakpoint (struct target_ops *self, struct gdbarch *gdbarch,
a6d9a66e 10127 struct bp_target_info *bp_tgt)
96baa820 10128{
8181d85f 10129 CORE_ADDR addr;
d01949b6 10130 struct remote_state *rs = get_remote_state ();
6d820c5c 10131 char *p = rs->buf;
bba74b36 10132 char *endbuf = rs->buf + get_remote_packet_size ();
c8189ed1 10133
4082afcc 10134 if (packet_support (PACKET_Z1) == PACKET_DISABLE)
5cffb350 10135 return -1;
802188a7 10136
28439a30
PA
10137 /* Make sure the remote is pointing at the right process, if
10138 necessary. */
10139 if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10140 set_general_process ();
10141
96baa820
JM
10142 *(p++) = 'z';
10143 *(p++) = '1';
10144 *(p++) = ',';
802188a7 10145
8181d85f 10146 addr = remote_address_masked (bp_tgt->placed_address);
96baa820 10147 p += hexnumstr (p, (ULONGEST) addr);
579c6ad9 10148 xsnprintf (p, endbuf - p, ",%x", bp_tgt->kind);
96baa820 10149
6d820c5c
DJ
10150 putpkt (rs->buf);
10151 getpkt (&rs->buf, &rs->buf_size, 0);
802188a7 10152
6d820c5c 10153 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z1]))
d471ea57
AC
10154 {
10155 case PACKET_ERROR:
10156 case PACKET_UNKNOWN:
10157 return -1;
10158 case PACKET_OK:
10159 return 0;
10160 }
8e65ff28 10161 internal_error (__FILE__, __LINE__,
e2e0b3e5 10162 _("remote_remove_hw_breakpoint: reached end of function"));
96baa820 10163}
96baa820 10164
4a5e7a5b
PA
10165/* Verify memory using the "qCRC:" request. */
10166
10167static int
10168remote_verify_memory (struct target_ops *ops,
10169 const gdb_byte *data, CORE_ADDR lma, ULONGEST size)
10170{
10171 struct remote_state *rs = get_remote_state ();
10172 unsigned long host_crc, target_crc;
10173 char *tmp;
10174
936d2992
PA
10175 /* It doesn't make sense to use qCRC if the remote target is
10176 connected but not running. */
10177 if (target_has_execution && packet_support (PACKET_qCRC) != PACKET_DISABLE)
10178 {
10179 enum packet_result result;
28439a30 10180
936d2992
PA
10181 /* Make sure the remote is pointing at the right process. */
10182 set_general_process ();
4a5e7a5b 10183
936d2992
PA
10184 /* FIXME: assumes lma can fit into long. */
10185 xsnprintf (rs->buf, get_remote_packet_size (), "qCRC:%lx,%lx",
10186 (long) lma, (long) size);
10187 putpkt (rs->buf);
4a5e7a5b 10188
936d2992
PA
10189 /* Be clever; compute the host_crc before waiting for target
10190 reply. */
10191 host_crc = xcrc32 (data, size, 0xffffffff);
10192
10193 getpkt (&rs->buf, &rs->buf_size, 0);
4a5e7a5b 10194
936d2992
PA
10195 result = packet_ok (rs->buf,
10196 &remote_protocol_packets[PACKET_qCRC]);
10197 if (result == PACKET_ERROR)
10198 return -1;
10199 else if (result == PACKET_OK)
10200 {
10201 for (target_crc = 0, tmp = &rs->buf[1]; *tmp; tmp++)
10202 target_crc = target_crc * 16 + fromhex (*tmp);
4a5e7a5b 10203
936d2992
PA
10204 return (host_crc == target_crc);
10205 }
10206 }
4a5e7a5b 10207
936d2992 10208 return simple_verify_memory (ops, data, lma, size);
4a5e7a5b
PA
10209}
10210
c906108c
SS
10211/* compare-sections command
10212
10213 With no arguments, compares each loadable section in the exec bfd
10214 with the same memory range on the target, and reports mismatches.
4a5e7a5b 10215 Useful for verifying the image on the target against the exec file. */
e514a9d6 10216
c906108c 10217static void
fba45db2 10218compare_sections_command (char *args, int from_tty)
c906108c
SS
10219{
10220 asection *s;
c906108c 10221 struct cleanup *old_chain;
948f8e3d 10222 gdb_byte *sectdata;
ce359b09 10223 const char *sectname;
c906108c
SS
10224 bfd_size_type size;
10225 bfd_vma lma;
10226 int matched = 0;
10227 int mismatched = 0;
4a5e7a5b 10228 int res;
95cf3b38 10229 int read_only = 0;
c906108c
SS
10230
10231 if (!exec_bfd)
8a3fe4f8 10232 error (_("command cannot be used without an exec file"));
c906108c 10233
28439a30
PA
10234 /* Make sure the remote is pointing at the right process. */
10235 set_general_process ();
10236
95cf3b38
DT
10237 if (args != NULL && strcmp (args, "-r") == 0)
10238 {
10239 read_only = 1;
10240 args = NULL;
10241 }
10242
c5aa993b 10243 for (s = exec_bfd->sections; s; s = s->next)
c906108c
SS
10244 {
10245 if (!(s->flags & SEC_LOAD))
0df8b418 10246 continue; /* Skip non-loadable section. */
c906108c 10247
95cf3b38
DT
10248 if (read_only && (s->flags & SEC_READONLY) == 0)
10249 continue; /* Skip writeable sections */
10250
2c500098 10251 size = bfd_get_section_size (s);
c906108c 10252 if (size == 0)
0df8b418 10253 continue; /* Skip zero-length section. */
c906108c 10254
ce359b09 10255 sectname = bfd_get_section_name (exec_bfd, s);
c906108c 10256 if (args && strcmp (args, sectname) != 0)
0df8b418 10257 continue; /* Not the section selected by user. */
c906108c 10258
0df8b418 10259 matched = 1; /* Do this section. */
c906108c 10260 lma = s->lma;
c906108c 10261
224c3ddb 10262 sectdata = (gdb_byte *) xmalloc (size);
b8c9b27d 10263 old_chain = make_cleanup (xfree, sectdata);
c906108c 10264 bfd_get_section_contents (exec_bfd, s, sectdata, 0, size);
c906108c 10265
4a5e7a5b
PA
10266 res = target_verify_memory (sectdata, lma, size);
10267
10268 if (res == -1)
5af949e3 10269 error (_("target memory fault, section %s, range %s -- %s"), sectname,
f5656ead
TT
10270 paddress (target_gdbarch (), lma),
10271 paddress (target_gdbarch (), lma + size));
c906108c 10272
5af949e3 10273 printf_filtered ("Section %s, range %s -- %s: ", sectname,
f5656ead
TT
10274 paddress (target_gdbarch (), lma),
10275 paddress (target_gdbarch (), lma + size));
4a5e7a5b 10276 if (res)
c906108c
SS
10277 printf_filtered ("matched.\n");
10278 else
c5aa993b
JM
10279 {
10280 printf_filtered ("MIS-MATCHED!\n");
10281 mismatched++;
10282 }
c906108c
SS
10283
10284 do_cleanups (old_chain);
10285 }
10286 if (mismatched > 0)
936d2992 10287 warning (_("One or more sections of the target image does not match\n\
8a3fe4f8 10288the loaded file\n"));
c906108c 10289 if (args && !matched)
a3f17187 10290 printf_filtered (_("No loaded section named '%s'.\n"), args);
c906108c
SS
10291}
10292
0e7f50da
UW
10293/* Write LEN bytes from WRITEBUF into OBJECT_NAME/ANNEX at OFFSET
10294 into remote target. The number of bytes written to the remote
10295 target is returned, or -1 for error. */
10296
9b409511 10297static enum target_xfer_status
0e7f50da
UW
10298remote_write_qxfer (struct target_ops *ops, const char *object_name,
10299 const char *annex, const gdb_byte *writebuf,
9b409511 10300 ULONGEST offset, LONGEST len, ULONGEST *xfered_len,
0e7f50da
UW
10301 struct packet_config *packet)
10302{
10303 int i, buf_len;
10304 ULONGEST n;
0e7f50da
UW
10305 struct remote_state *rs = get_remote_state ();
10306 int max_size = get_memory_write_packet_size ();
10307
10308 if (packet->support == PACKET_DISABLE)
2ed4b548 10309 return TARGET_XFER_E_IO;
0e7f50da
UW
10310
10311 /* Insert header. */
10312 i = snprintf (rs->buf, max_size,
10313 "qXfer:%s:write:%s:%s:",
10314 object_name, annex ? annex : "",
10315 phex_nz (offset, sizeof offset));
10316 max_size -= (i + 1);
10317
10318 /* Escape as much data as fits into rs->buf. */
10319 buf_len = remote_escape_output
124e13d9 10320 (writebuf, len, 1, (gdb_byte *) rs->buf + i, &max_size, max_size);
0e7f50da
UW
10321
10322 if (putpkt_binary (rs->buf, i + buf_len) < 0
10323 || getpkt_sane (&rs->buf, &rs->buf_size, 0) < 0
10324 || packet_ok (rs->buf, packet) != PACKET_OK)
2ed4b548 10325 return TARGET_XFER_E_IO;
0e7f50da
UW
10326
10327 unpack_varlen_hex (rs->buf, &n);
9b409511
YQ
10328
10329 *xfered_len = n;
10330 return TARGET_XFER_OK;
0e7f50da
UW
10331}
10332
0876f84a
DJ
10333/* Read OBJECT_NAME/ANNEX from the remote target using a qXfer packet.
10334 Data at OFFSET, of up to LEN bytes, is read into READBUF; the
10335 number of bytes read is returned, or 0 for EOF, or -1 for error.
10336 The number of bytes read may be less than LEN without indicating an
10337 EOF. PACKET is checked and updated to indicate whether the remote
10338 target supports this object. */
10339
9b409511 10340static enum target_xfer_status
0876f84a
DJ
10341remote_read_qxfer (struct target_ops *ops, const char *object_name,
10342 const char *annex,
10343 gdb_byte *readbuf, ULONGEST offset, LONGEST len,
9b409511 10344 ULONGEST *xfered_len,
0876f84a
DJ
10345 struct packet_config *packet)
10346{
0876f84a 10347 struct remote_state *rs = get_remote_state ();
0876f84a
DJ
10348 LONGEST i, n, packet_len;
10349
10350 if (packet->support == PACKET_DISABLE)
2ed4b548 10351 return TARGET_XFER_E_IO;
0876f84a
DJ
10352
10353 /* Check whether we've cached an end-of-object packet that matches
10354 this request. */
8e88304f 10355 if (rs->finished_object)
0876f84a 10356 {
8e88304f
TT
10357 if (strcmp (object_name, rs->finished_object) == 0
10358 && strcmp (annex ? annex : "", rs->finished_annex) == 0
10359 && offset == rs->finished_offset)
9b409511
YQ
10360 return TARGET_XFER_EOF;
10361
0876f84a
DJ
10362
10363 /* Otherwise, we're now reading something different. Discard
10364 the cache. */
8e88304f
TT
10365 xfree (rs->finished_object);
10366 xfree (rs->finished_annex);
10367 rs->finished_object = NULL;
10368 rs->finished_annex = NULL;
0876f84a
DJ
10369 }
10370
10371 /* Request only enough to fit in a single packet. The actual data
10372 may not, since we don't know how much of it will need to be escaped;
10373 the target is free to respond with slightly less data. We subtract
10374 five to account for the response type and the protocol frame. */
768adc05 10375 n = std::min<LONGEST> (get_remote_packet_size () - 5, len);
0876f84a
DJ
10376 snprintf (rs->buf, get_remote_packet_size () - 4, "qXfer:%s:read:%s:%s,%s",
10377 object_name, annex ? annex : "",
10378 phex_nz (offset, sizeof offset),
10379 phex_nz (n, sizeof n));
10380 i = putpkt (rs->buf);
10381 if (i < 0)
2ed4b548 10382 return TARGET_XFER_E_IO;
0876f84a
DJ
10383
10384 rs->buf[0] = '\0';
10385 packet_len = getpkt_sane (&rs->buf, &rs->buf_size, 0);
10386 if (packet_len < 0 || packet_ok (rs->buf, packet) != PACKET_OK)
2ed4b548 10387 return TARGET_XFER_E_IO;
0876f84a
DJ
10388
10389 if (rs->buf[0] != 'l' && rs->buf[0] != 'm')
10390 error (_("Unknown remote qXfer reply: %s"), rs->buf);
10391
10392 /* 'm' means there is (or at least might be) more data after this
10393 batch. That does not make sense unless there's at least one byte
10394 of data in this reply. */
10395 if (rs->buf[0] == 'm' && packet_len == 1)
10396 error (_("Remote qXfer reply contained no data."));
10397
10398 /* Got some data. */
bc20a4af
PA
10399 i = remote_unescape_input ((gdb_byte *) rs->buf + 1,
10400 packet_len - 1, readbuf, n);
0876f84a
DJ
10401
10402 /* 'l' is an EOF marker, possibly including a final block of data,
0e7f50da
UW
10403 or possibly empty. If we have the final block of a non-empty
10404 object, record this fact to bypass a subsequent partial read. */
10405 if (rs->buf[0] == 'l' && offset + i > 0)
0876f84a 10406 {
8e88304f
TT
10407 rs->finished_object = xstrdup (object_name);
10408 rs->finished_annex = xstrdup (annex ? annex : "");
10409 rs->finished_offset = offset + i;
0876f84a
DJ
10410 }
10411
9b409511
YQ
10412 if (i == 0)
10413 return TARGET_XFER_EOF;
10414 else
10415 {
10416 *xfered_len = i;
10417 return TARGET_XFER_OK;
10418 }
0876f84a
DJ
10419}
10420
9b409511 10421static enum target_xfer_status
4b8a223f 10422remote_xfer_partial (struct target_ops *ops, enum target_object object,
961cb7b5 10423 const char *annex, gdb_byte *readbuf,
9b409511
YQ
10424 const gdb_byte *writebuf, ULONGEST offset, ULONGEST len,
10425 ULONGEST *xfered_len)
c906108c 10426{
82f73884 10427 struct remote_state *rs;
c906108c 10428 int i;
6d820c5c 10429 char *p2;
1e3ff5ad 10430 char query_type;
124e13d9 10431 int unit_size = gdbarch_addressable_memory_unit_size (target_gdbarch ());
c906108c 10432
e6e4e701 10433 set_remote_traceframe ();
82f73884
PA
10434 set_general_thread (inferior_ptid);
10435
10436 rs = get_remote_state ();
10437
b2182ed2 10438 /* Handle memory using the standard memory routines. */
21e3b9b9
DJ
10439 if (object == TARGET_OBJECT_MEMORY)
10440 {
2d717e4f
DJ
10441 /* If the remote target is connected but not running, we should
10442 pass this request down to a lower stratum (e.g. the executable
10443 file). */
10444 if (!target_has_execution)
9b409511 10445 return TARGET_XFER_EOF;
2d717e4f 10446
21e3b9b9 10447 if (writebuf != NULL)
124e13d9
SM
10448 return remote_write_bytes (offset, writebuf, len, unit_size,
10449 xfered_len);
21e3b9b9 10450 else
124e13d9
SM
10451 return remote_read_bytes (ops, offset, readbuf, len, unit_size,
10452 xfered_len);
21e3b9b9
DJ
10453 }
10454
0df8b418 10455 /* Handle SPU memory using qxfer packets. */
0e7f50da
UW
10456 if (object == TARGET_OBJECT_SPU)
10457 {
10458 if (readbuf)
10459 return remote_read_qxfer (ops, "spu", annex, readbuf, offset, len,
9b409511
YQ
10460 xfered_len, &remote_protocol_packets
10461 [PACKET_qXfer_spu_read]);
0e7f50da
UW
10462 else
10463 return remote_write_qxfer (ops, "spu", annex, writebuf, offset, len,
9b409511
YQ
10464 xfered_len, &remote_protocol_packets
10465 [PACKET_qXfer_spu_write]);
0e7f50da
UW
10466 }
10467
4aa995e1
PA
10468 /* Handle extra signal info using qxfer packets. */
10469 if (object == TARGET_OBJECT_SIGNAL_INFO)
10470 {
10471 if (readbuf)
10472 return remote_read_qxfer (ops, "siginfo", annex, readbuf, offset, len,
9b409511 10473 xfered_len, &remote_protocol_packets
4aa995e1
PA
10474 [PACKET_qXfer_siginfo_read]);
10475 else
3e43a32a 10476 return remote_write_qxfer (ops, "siginfo", annex,
9b409511 10477 writebuf, offset, len, xfered_len,
4aa995e1
PA
10478 &remote_protocol_packets
10479 [PACKET_qXfer_siginfo_write]);
10480 }
10481
0fb4aa4b
PA
10482 if (object == TARGET_OBJECT_STATIC_TRACE_DATA)
10483 {
10484 if (readbuf)
3e43a32a 10485 return remote_read_qxfer (ops, "statictrace", annex,
9b409511 10486 readbuf, offset, len, xfered_len,
0fb4aa4b
PA
10487 &remote_protocol_packets
10488 [PACKET_qXfer_statictrace_read]);
10489 else
2ed4b548 10490 return TARGET_XFER_E_IO;
0fb4aa4b
PA
10491 }
10492
a76d924d
DJ
10493 /* Only handle flash writes. */
10494 if (writebuf != NULL)
10495 {
a76d924d
DJ
10496 switch (object)
10497 {
10498 case TARGET_OBJECT_FLASH:
9b409511
YQ
10499 return remote_flash_write (ops, offset, len, xfered_len,
10500 writebuf);
a76d924d
DJ
10501
10502 default:
2ed4b548 10503 return TARGET_XFER_E_IO;
a76d924d
DJ
10504 }
10505 }
4b8a223f 10506
1e3ff5ad
AC
10507 /* Map pre-existing objects onto letters. DO NOT do this for new
10508 objects!!! Instead specify new query packets. */
10509 switch (object)
c906108c 10510 {
1e3ff5ad
AC
10511 case TARGET_OBJECT_AVR:
10512 query_type = 'R';
10513 break;
802188a7
RM
10514
10515 case TARGET_OBJECT_AUXV:
0876f84a
DJ
10516 gdb_assert (annex == NULL);
10517 return remote_read_qxfer (ops, "auxv", annex, readbuf, offset, len,
9b409511 10518 xfered_len,
0876f84a 10519 &remote_protocol_packets[PACKET_qXfer_auxv]);
802188a7 10520
23181151
DJ
10521 case TARGET_OBJECT_AVAILABLE_FEATURES:
10522 return remote_read_qxfer
9b409511 10523 (ops, "features", annex, readbuf, offset, len, xfered_len,
23181151
DJ
10524 &remote_protocol_packets[PACKET_qXfer_features]);
10525
cfa9d6d9
DJ
10526 case TARGET_OBJECT_LIBRARIES:
10527 return remote_read_qxfer
9b409511 10528 (ops, "libraries", annex, readbuf, offset, len, xfered_len,
cfa9d6d9
DJ
10529 &remote_protocol_packets[PACKET_qXfer_libraries]);
10530
2268b414
JK
10531 case TARGET_OBJECT_LIBRARIES_SVR4:
10532 return remote_read_qxfer
9b409511 10533 (ops, "libraries-svr4", annex, readbuf, offset, len, xfered_len,
2268b414
JK
10534 &remote_protocol_packets[PACKET_qXfer_libraries_svr4]);
10535
fd79ecee
DJ
10536 case TARGET_OBJECT_MEMORY_MAP:
10537 gdb_assert (annex == NULL);
10538 return remote_read_qxfer (ops, "memory-map", annex, readbuf, offset, len,
9b409511 10539 xfered_len,
fd79ecee
DJ
10540 &remote_protocol_packets[PACKET_qXfer_memory_map]);
10541
07e059b5
VP
10542 case TARGET_OBJECT_OSDATA:
10543 /* Should only get here if we're connected. */
5d93a237 10544 gdb_assert (rs->remote_desc);
07e059b5 10545 return remote_read_qxfer
9b409511 10546 (ops, "osdata", annex, readbuf, offset, len, xfered_len,
07e059b5
VP
10547 &remote_protocol_packets[PACKET_qXfer_osdata]);
10548
dc146f7c
VP
10549 case TARGET_OBJECT_THREADS:
10550 gdb_assert (annex == NULL);
10551 return remote_read_qxfer (ops, "threads", annex, readbuf, offset, len,
9b409511 10552 xfered_len,
dc146f7c
VP
10553 &remote_protocol_packets[PACKET_qXfer_threads]);
10554
b3b9301e
PA
10555 case TARGET_OBJECT_TRACEFRAME_INFO:
10556 gdb_assert (annex == NULL);
10557 return remote_read_qxfer
9b409511 10558 (ops, "traceframe-info", annex, readbuf, offset, len, xfered_len,
b3b9301e 10559 &remote_protocol_packets[PACKET_qXfer_traceframe_info]);
78d85199
YQ
10560
10561 case TARGET_OBJECT_FDPIC:
10562 return remote_read_qxfer (ops, "fdpic", annex, readbuf, offset, len,
9b409511 10563 xfered_len,
78d85199 10564 &remote_protocol_packets[PACKET_qXfer_fdpic]);
169081d0
TG
10565
10566 case TARGET_OBJECT_OPENVMS_UIB:
10567 return remote_read_qxfer (ops, "uib", annex, readbuf, offset, len,
9b409511 10568 xfered_len,
169081d0
TG
10569 &remote_protocol_packets[PACKET_qXfer_uib]);
10570
9accd112
MM
10571 case TARGET_OBJECT_BTRACE:
10572 return remote_read_qxfer (ops, "btrace", annex, readbuf, offset, len,
9b409511 10573 xfered_len,
9accd112
MM
10574 &remote_protocol_packets[PACKET_qXfer_btrace]);
10575
f4abbc16
MM
10576 case TARGET_OBJECT_BTRACE_CONF:
10577 return remote_read_qxfer (ops, "btrace-conf", annex, readbuf, offset,
10578 len, xfered_len,
10579 &remote_protocol_packets[PACKET_qXfer_btrace_conf]);
10580
c78fa86a
GB
10581 case TARGET_OBJECT_EXEC_FILE:
10582 return remote_read_qxfer (ops, "exec-file", annex, readbuf, offset,
10583 len, xfered_len,
10584 &remote_protocol_packets[PACKET_qXfer_exec_file]);
10585
1e3ff5ad 10586 default:
2ed4b548 10587 return TARGET_XFER_E_IO;
c906108c
SS
10588 }
10589
0df8b418 10590 /* Minimum outbuf size is get_remote_packet_size (). If LEN is not
24b06219 10591 large enough let the caller deal with it. */
ea9c271d 10592 if (len < get_remote_packet_size ())
2ed4b548 10593 return TARGET_XFER_E_IO;
ea9c271d 10594 len = get_remote_packet_size ();
1e3ff5ad 10595
23860348 10596 /* Except for querying the minimum buffer size, target must be open. */
5d93a237 10597 if (!rs->remote_desc)
8a3fe4f8 10598 error (_("remote query is only available after target open"));
c906108c 10599
1e3ff5ad 10600 gdb_assert (annex != NULL);
4b8a223f 10601 gdb_assert (readbuf != NULL);
c906108c 10602
6d820c5c 10603 p2 = rs->buf;
c906108c
SS
10604 *p2++ = 'q';
10605 *p2++ = query_type;
10606
23860348
MS
10607 /* We used one buffer char for the remote protocol q command and
10608 another for the query type. As the remote protocol encapsulation
10609 uses 4 chars plus one extra in case we are debugging
10610 (remote_debug), we have PBUFZIZ - 7 left to pack the query
10611 string. */
c906108c 10612 i = 0;
ea9c271d 10613 while (annex[i] && (i < (get_remote_packet_size () - 8)))
c906108c 10614 {
1e3ff5ad
AC
10615 /* Bad caller may have sent forbidden characters. */
10616 gdb_assert (isprint (annex[i]) && annex[i] != '$' && annex[i] != '#');
10617 *p2++ = annex[i];
c906108c
SS
10618 i++;
10619 }
1e3ff5ad
AC
10620 *p2 = '\0';
10621 gdb_assert (annex[i] == '\0');
c906108c 10622
6d820c5c 10623 i = putpkt (rs->buf);
c5aa993b 10624 if (i < 0)
2ed4b548 10625 return TARGET_XFER_E_IO;
c906108c 10626
6d820c5c
DJ
10627 getpkt (&rs->buf, &rs->buf_size, 0);
10628 strcpy ((char *) readbuf, rs->buf);
c906108c 10629
9b409511
YQ
10630 *xfered_len = strlen ((char *) readbuf);
10631 return TARGET_XFER_OK;
c906108c
SS
10632}
10633
09c98b44
DB
10634/* Implementation of to_get_memory_xfer_limit. */
10635
10636static ULONGEST
10637remote_get_memory_xfer_limit (struct target_ops *ops)
10638{
10639 return get_memory_write_packet_size ();
10640}
10641
08388c79
DE
10642static int
10643remote_search_memory (struct target_ops* ops,
10644 CORE_ADDR start_addr, ULONGEST search_space_len,
10645 const gdb_byte *pattern, ULONGEST pattern_len,
10646 CORE_ADDR *found_addrp)
10647{
f5656ead 10648 int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
08388c79
DE
10649 struct remote_state *rs = get_remote_state ();
10650 int max_size = get_memory_write_packet_size ();
10651 struct packet_config *packet =
10652 &remote_protocol_packets[PACKET_qSearch_memory];
0df8b418
MS
10653 /* Number of packet bytes used to encode the pattern;
10654 this could be more than PATTERN_LEN due to escape characters. */
08388c79 10655 int escaped_pattern_len;
0df8b418 10656 /* Amount of pattern that was encodable in the packet. */
08388c79
DE
10657 int used_pattern_len;
10658 int i;
10659 int found;
10660 ULONGEST found_addr;
10661
10662 /* Don't go to the target if we don't have to.
10663 This is done before checking packet->support to avoid the possibility that
10664 a success for this edge case means the facility works in general. */
10665 if (pattern_len > search_space_len)
10666 return 0;
10667 if (pattern_len == 0)
10668 {
10669 *found_addrp = start_addr;
10670 return 1;
10671 }
10672
10673 /* If we already know the packet isn't supported, fall back to the simple
10674 way of searching memory. */
10675
4082afcc 10676 if (packet_config_support (packet) == PACKET_DISABLE)
08388c79
DE
10677 {
10678 /* Target doesn't provided special support, fall back and use the
10679 standard support (copy memory and do the search here). */
10680 return simple_search_memory (ops, start_addr, search_space_len,
10681 pattern, pattern_len, found_addrp);
10682 }
10683
28439a30
PA
10684 /* Make sure the remote is pointing at the right process. */
10685 set_general_process ();
10686
08388c79
DE
10687 /* Insert header. */
10688 i = snprintf (rs->buf, max_size,
10689 "qSearch:memory:%s;%s;",
5af949e3 10690 phex_nz (start_addr, addr_size),
08388c79
DE
10691 phex_nz (search_space_len, sizeof (search_space_len)));
10692 max_size -= (i + 1);
10693
10694 /* Escape as much data as fits into rs->buf. */
10695 escaped_pattern_len =
124e13d9 10696 remote_escape_output (pattern, pattern_len, 1, (gdb_byte *) rs->buf + i,
08388c79
DE
10697 &used_pattern_len, max_size);
10698
10699 /* Bail if the pattern is too large. */
10700 if (used_pattern_len != pattern_len)
9b20d036 10701 error (_("Pattern is too large to transmit to remote target."));
08388c79
DE
10702
10703 if (putpkt_binary (rs->buf, i + escaped_pattern_len) < 0
10704 || getpkt_sane (&rs->buf, &rs->buf_size, 0) < 0
10705 || packet_ok (rs->buf, packet) != PACKET_OK)
10706 {
10707 /* The request may not have worked because the command is not
10708 supported. If so, fall back to the simple way. */
10709 if (packet->support == PACKET_DISABLE)
10710 {
10711 return simple_search_memory (ops, start_addr, search_space_len,
10712 pattern, pattern_len, found_addrp);
10713 }
10714 return -1;
10715 }
10716
10717 if (rs->buf[0] == '0')
10718 found = 0;
10719 else if (rs->buf[0] == '1')
10720 {
10721 found = 1;
10722 if (rs->buf[1] != ',')
10e0fa18 10723 error (_("Unknown qSearch:memory reply: %s"), rs->buf);
08388c79
DE
10724 unpack_varlen_hex (rs->buf + 2, &found_addr);
10725 *found_addrp = found_addr;
10726 }
10727 else
10e0fa18 10728 error (_("Unknown qSearch:memory reply: %s"), rs->buf);
08388c79
DE
10729
10730 return found;
10731}
10732
96baa820 10733static void
a30bf1f1 10734remote_rcmd (struct target_ops *self, const char *command,
d9fcf2fb 10735 struct ui_file *outbuf)
96baa820 10736{
d01949b6 10737 struct remote_state *rs = get_remote_state ();
2e9f7625 10738 char *p = rs->buf;
96baa820 10739
5d93a237 10740 if (!rs->remote_desc)
8a3fe4f8 10741 error (_("remote rcmd is only available after target open"));
96baa820 10742
23860348 10743 /* Send a NULL command across as an empty command. */
7be570e7
JM
10744 if (command == NULL)
10745 command = "";
10746
23860348 10747 /* The query prefix. */
2e9f7625
DJ
10748 strcpy (rs->buf, "qRcmd,");
10749 p = strchr (rs->buf, '\0');
96baa820 10750
3e43a32a
MS
10751 if ((strlen (rs->buf) + strlen (command) * 2 + 8/*misc*/)
10752 > get_remote_packet_size ())
8a3fe4f8 10753 error (_("\"monitor\" command ``%s'' is too long."), command);
96baa820 10754
23860348 10755 /* Encode the actual command. */
a30bf1f1 10756 bin2hex ((const gdb_byte *) command, p, strlen (command));
96baa820 10757
6d820c5c 10758 if (putpkt (rs->buf) < 0)
8a3fe4f8 10759 error (_("Communication problem with target."));
96baa820
JM
10760
10761 /* get/display the response */
10762 while (1)
10763 {
2e9f7625
DJ
10764 char *buf;
10765
00bf0b85 10766 /* XXX - see also remote_get_noisy_reply(). */
5b37825d 10767 QUIT; /* Allow user to bail out with ^C. */
2e9f7625 10768 rs->buf[0] = '\0';
5b37825d
PW
10769 if (getpkt_sane (&rs->buf, &rs->buf_size, 0) == -1)
10770 {
10771 /* Timeout. Continue to (try to) read responses.
10772 This is better than stopping with an error, assuming the stub
10773 is still executing the (long) monitor command.
10774 If needed, the user can interrupt gdb using C-c, obtaining
10775 an effect similar to stop on timeout. */
10776 continue;
10777 }
2e9f7625 10778 buf = rs->buf;
96baa820 10779 if (buf[0] == '\0')
8a3fe4f8 10780 error (_("Target does not support this command."));
96baa820
JM
10781 if (buf[0] == 'O' && buf[1] != 'K')
10782 {
23860348 10783 remote_console_output (buf + 1); /* 'O' message from stub. */
96baa820
JM
10784 continue;
10785 }
10786 if (strcmp (buf, "OK") == 0)
10787 break;
7be570e7
JM
10788 if (strlen (buf) == 3 && buf[0] == 'E'
10789 && isdigit (buf[1]) && isdigit (buf[2]))
10790 {
8a3fe4f8 10791 error (_("Protocol error with Rcmd"));
7be570e7 10792 }
96baa820
JM
10793 for (p = buf; p[0] != '\0' && p[1] != '\0'; p += 2)
10794 {
10795 char c = (fromhex (p[0]) << 4) + fromhex (p[1]);
a744cf53 10796
96baa820
JM
10797 fputc_unfiltered (c, outbuf);
10798 }
10799 break;
10800 }
10801}
10802
fd79ecee
DJ
10803static VEC(mem_region_s) *
10804remote_memory_map (struct target_ops *ops)
10805{
10806 VEC(mem_region_s) *result = NULL;
10807 char *text = target_read_stralloc (&current_target,
10808 TARGET_OBJECT_MEMORY_MAP, NULL);
10809
10810 if (text)
10811 {
10812 struct cleanup *back_to = make_cleanup (xfree, text);
a744cf53 10813
fd79ecee
DJ
10814 result = parse_memory_map (text);
10815 do_cleanups (back_to);
10816 }
10817
10818 return result;
10819}
10820
c906108c 10821static void
fba45db2 10822packet_command (char *args, int from_tty)
c906108c 10823{
d01949b6 10824 struct remote_state *rs = get_remote_state ();
c906108c 10825
5d93a237 10826 if (!rs->remote_desc)
8a3fe4f8 10827 error (_("command can only be used with remote target"));
c906108c 10828
c5aa993b 10829 if (!args)
8a3fe4f8 10830 error (_("remote-packet command requires packet text as argument"));
c906108c
SS
10831
10832 puts_filtered ("sending: ");
10833 print_packet (args);
10834 puts_filtered ("\n");
10835 putpkt (args);
10836
6d820c5c 10837 getpkt (&rs->buf, &rs->buf_size, 0);
c906108c 10838 puts_filtered ("received: ");
6d820c5c 10839 print_packet (rs->buf);
c906108c
SS
10840 puts_filtered ("\n");
10841}
10842
10843#if 0
23860348 10844/* --------- UNIT_TEST for THREAD oriented PACKETS ------------------- */
c906108c 10845
a14ed312 10846static void display_thread_info (struct gdb_ext_thread_info *info);
c906108c 10847
a14ed312 10848static void threadset_test_cmd (char *cmd, int tty);
c906108c 10849
a14ed312 10850static void threadalive_test (char *cmd, int tty);
c906108c 10851
a14ed312 10852static void threadlist_test_cmd (char *cmd, int tty);
c906108c 10853
23860348 10854int get_and_display_threadinfo (threadref *ref);
c906108c 10855
a14ed312 10856static void threadinfo_test_cmd (char *cmd, int tty);
c906108c 10857
23860348 10858static int thread_display_step (threadref *ref, void *context);
c906108c 10859
a14ed312 10860static void threadlist_update_test_cmd (char *cmd, int tty);
c906108c 10861
a14ed312 10862static void init_remote_threadtests (void);
c906108c 10863
23860348 10864#define SAMPLE_THREAD 0x05060708 /* Truncated 64 bit threadid. */
c906108c
SS
10865
10866static void
fba45db2 10867threadset_test_cmd (char *cmd, int tty)
c906108c
SS
10868{
10869 int sample_thread = SAMPLE_THREAD;
10870
a3f17187 10871 printf_filtered (_("Remote threadset test\n"));
79d7f229 10872 set_general_thread (sample_thread);
c906108c
SS
10873}
10874
10875
10876static void
fba45db2 10877threadalive_test (char *cmd, int tty)
c906108c
SS
10878{
10879 int sample_thread = SAMPLE_THREAD;
79d7f229 10880 int pid = ptid_get_pid (inferior_ptid);
ba348170 10881 ptid_t ptid = ptid_build (pid, sample_thread, 0);
c906108c 10882
79d7f229 10883 if (remote_thread_alive (ptid))
c906108c
SS
10884 printf_filtered ("PASS: Thread alive test\n");
10885 else
10886 printf_filtered ("FAIL: Thread alive test\n");
10887}
10888
23860348 10889void output_threadid (char *title, threadref *ref);
c906108c
SS
10890
10891void
fba45db2 10892output_threadid (char *title, threadref *ref)
c906108c
SS
10893{
10894 char hexid[20];
10895
23860348 10896 pack_threadid (&hexid[0], ref); /* Convert threead id into hex. */
c906108c
SS
10897 hexid[16] = 0;
10898 printf_filtered ("%s %s\n", title, (&hexid[0]));
10899}
10900
10901static void
fba45db2 10902threadlist_test_cmd (char *cmd, int tty)
c906108c
SS
10903{
10904 int startflag = 1;
10905 threadref nextthread;
10906 int done, result_count;
10907 threadref threadlist[3];
10908
10909 printf_filtered ("Remote Threadlist test\n");
10910 if (!remote_get_threadlist (startflag, &nextthread, 3, &done,
10911 &result_count, &threadlist[0]))
10912 printf_filtered ("FAIL: threadlist test\n");
10913 else
10914 {
10915 threadref *scan = threadlist;
10916 threadref *limit = scan + result_count;
10917
10918 while (scan < limit)
10919 output_threadid (" thread ", scan++);
10920 }
10921}
10922
10923void
fba45db2 10924display_thread_info (struct gdb_ext_thread_info *info)
c906108c
SS
10925{
10926 output_threadid ("Threadid: ", &info->threadid);
10927 printf_filtered ("Name: %s\n ", info->shortname);
10928 printf_filtered ("State: %s\n", info->display);
10929 printf_filtered ("other: %s\n\n", info->more_display);
10930}
10931
10932int
fba45db2 10933get_and_display_threadinfo (threadref *ref)
c906108c
SS
10934{
10935 int result;
10936 int set;
10937 struct gdb_ext_thread_info threadinfo;
10938
10939 set = TAG_THREADID | TAG_EXISTS | TAG_THREADNAME
10940 | TAG_MOREDISPLAY | TAG_DISPLAY;
10941 if (0 != (result = remote_get_threadinfo (ref, set, &threadinfo)))
10942 display_thread_info (&threadinfo);
10943 return result;
10944}
10945
10946static void
fba45db2 10947threadinfo_test_cmd (char *cmd, int tty)
c906108c
SS
10948{
10949 int athread = SAMPLE_THREAD;
10950 threadref thread;
10951 int set;
10952
10953 int_to_threadref (&thread, athread);
10954 printf_filtered ("Remote Threadinfo test\n");
10955 if (!get_and_display_threadinfo (&thread))
10956 printf_filtered ("FAIL cannot get thread info\n");
10957}
10958
10959static int
fba45db2 10960thread_display_step (threadref *ref, void *context)
c906108c
SS
10961{
10962 /* output_threadid(" threadstep ",ref); *//* simple test */
10963 return get_and_display_threadinfo (ref);
10964}
10965
10966static void
fba45db2 10967threadlist_update_test_cmd (char *cmd, int tty)
c906108c
SS
10968{
10969 printf_filtered ("Remote Threadlist update test\n");
10970 remote_threadlist_iterator (thread_display_step, 0, CRAZY_MAX_THREADS);
10971}
10972
10973static void
10974init_remote_threadtests (void)
10975{
3e43a32a
MS
10976 add_com ("tlist", class_obscure, threadlist_test_cmd,
10977 _("Fetch and print the remote list of "
10978 "thread identifiers, one pkt only"));
c906108c 10979 add_com ("tinfo", class_obscure, threadinfo_test_cmd,
1bedd215 10980 _("Fetch and display info about one thread"));
c906108c 10981 add_com ("tset", class_obscure, threadset_test_cmd,
1bedd215 10982 _("Test setting to a different thread"));
c906108c 10983 add_com ("tupd", class_obscure, threadlist_update_test_cmd,
1bedd215 10984 _("Iterate through updating all remote thread info"));
c906108c 10985 add_com ("talive", class_obscure, threadalive_test,
1bedd215 10986 _(" Remote thread alive test "));
c906108c
SS
10987}
10988
10989#endif /* 0 */
10990
f3fb8c85
MS
10991/* Convert a thread ID to a string. Returns the string in a static
10992 buffer. */
10993
7a114964 10994static const char *
117de6a9 10995remote_pid_to_str (struct target_ops *ops, ptid_t ptid)
f3fb8c85 10996{
79d7f229 10997 static char buf[64];
82f73884 10998 struct remote_state *rs = get_remote_state ();
f3fb8c85 10999
7cee1e54
PA
11000 if (ptid_equal (ptid, null_ptid))
11001 return normal_pid_to_str (ptid);
11002 else if (ptid_is_pid (ptid))
ecd0ada5
PA
11003 {
11004 /* Printing an inferior target id. */
11005
11006 /* When multi-process extensions are off, there's no way in the
11007 remote protocol to know the remote process id, if there's any
11008 at all. There's one exception --- when we're connected with
11009 target extended-remote, and we manually attached to a process
11010 with "attach PID". We don't record anywhere a flag that
11011 allows us to distinguish that case from the case of
11012 connecting with extended-remote and the stub already being
11013 attached to a process, and reporting yes to qAttached, hence
11014 no smart special casing here. */
11015 if (!remote_multi_process_p (rs))
11016 {
11017 xsnprintf (buf, sizeof buf, "Remote target");
11018 return buf;
11019 }
11020
11021 return normal_pid_to_str (ptid);
82f73884 11022 }
ecd0ada5 11023 else
79d7f229 11024 {
ecd0ada5
PA
11025 if (ptid_equal (magic_null_ptid, ptid))
11026 xsnprintf (buf, sizeof buf, "Thread <main>");
8020350c 11027 else if (remote_multi_process_p (rs))
de0d863e
DB
11028 if (ptid_get_lwp (ptid) == 0)
11029 return normal_pid_to_str (ptid);
11030 else
11031 xsnprintf (buf, sizeof buf, "Thread %d.%ld",
11032 ptid_get_pid (ptid), ptid_get_lwp (ptid));
ecd0ada5
PA
11033 else
11034 xsnprintf (buf, sizeof buf, "Thread %ld",
ba348170 11035 ptid_get_lwp (ptid));
79d7f229
PA
11036 return buf;
11037 }
f3fb8c85
MS
11038}
11039
38691318
KB
11040/* Get the address of the thread local variable in OBJFILE which is
11041 stored at OFFSET within the thread local storage for thread PTID. */
11042
11043static CORE_ADDR
117de6a9
PA
11044remote_get_thread_local_address (struct target_ops *ops,
11045 ptid_t ptid, CORE_ADDR lm, CORE_ADDR offset)
38691318 11046{
4082afcc 11047 if (packet_support (PACKET_qGetTLSAddr) != PACKET_DISABLE)
38691318
KB
11048 {
11049 struct remote_state *rs = get_remote_state ();
6d820c5c 11050 char *p = rs->buf;
82f73884 11051 char *endp = rs->buf + get_remote_packet_size ();
571dd617 11052 enum packet_result result;
38691318
KB
11053
11054 strcpy (p, "qGetTLSAddr:");
11055 p += strlen (p);
82f73884 11056 p = write_ptid (p, endp, ptid);
38691318
KB
11057 *p++ = ',';
11058 p += hexnumstr (p, offset);
11059 *p++ = ',';
11060 p += hexnumstr (p, lm);
11061 *p++ = '\0';
11062
6d820c5c
DJ
11063 putpkt (rs->buf);
11064 getpkt (&rs->buf, &rs->buf_size, 0);
3e43a32a
MS
11065 result = packet_ok (rs->buf,
11066 &remote_protocol_packets[PACKET_qGetTLSAddr]);
571dd617 11067 if (result == PACKET_OK)
38691318
KB
11068 {
11069 ULONGEST result;
11070
6d820c5c 11071 unpack_varlen_hex (rs->buf, &result);
38691318
KB
11072 return result;
11073 }
571dd617 11074 else if (result == PACKET_UNKNOWN)
109c3e39
AC
11075 throw_error (TLS_GENERIC_ERROR,
11076 _("Remote target doesn't support qGetTLSAddr packet"));
38691318 11077 else
109c3e39
AC
11078 throw_error (TLS_GENERIC_ERROR,
11079 _("Remote target failed to process qGetTLSAddr request"));
38691318
KB
11080 }
11081 else
109c3e39
AC
11082 throw_error (TLS_GENERIC_ERROR,
11083 _("TLS not supported or disabled on this target"));
38691318
KB
11084 /* Not reached. */
11085 return 0;
11086}
11087
711e434b
PM
11088/* Provide thread local base, i.e. Thread Information Block address.
11089 Returns 1 if ptid is found and thread_local_base is non zero. */
11090
70221824 11091static int
bd7ae0f5 11092remote_get_tib_address (struct target_ops *self, ptid_t ptid, CORE_ADDR *addr)
711e434b 11093{
4082afcc 11094 if (packet_support (PACKET_qGetTIBAddr) != PACKET_DISABLE)
711e434b
PM
11095 {
11096 struct remote_state *rs = get_remote_state ();
11097 char *p = rs->buf;
11098 char *endp = rs->buf + get_remote_packet_size ();
11099 enum packet_result result;
11100
11101 strcpy (p, "qGetTIBAddr:");
11102 p += strlen (p);
11103 p = write_ptid (p, endp, ptid);
11104 *p++ = '\0';
11105
11106 putpkt (rs->buf);
11107 getpkt (&rs->buf, &rs->buf_size, 0);
11108 result = packet_ok (rs->buf,
11109 &remote_protocol_packets[PACKET_qGetTIBAddr]);
11110 if (result == PACKET_OK)
11111 {
11112 ULONGEST result;
11113
11114 unpack_varlen_hex (rs->buf, &result);
11115 if (addr)
11116 *addr = (CORE_ADDR) result;
11117 return 1;
11118 }
11119 else if (result == PACKET_UNKNOWN)
11120 error (_("Remote target doesn't support qGetTIBAddr packet"));
11121 else
11122 error (_("Remote target failed to process qGetTIBAddr request"));
11123 }
11124 else
11125 error (_("qGetTIBAddr not supported or disabled on this target"));
11126 /* Not reached. */
11127 return 0;
11128}
11129
29709017
DJ
11130/* Support for inferring a target description based on the current
11131 architecture and the size of a 'g' packet. While the 'g' packet
11132 can have any size (since optional registers can be left off the
11133 end), some sizes are easily recognizable given knowledge of the
11134 approximate architecture. */
11135
11136struct remote_g_packet_guess
11137{
11138 int bytes;
11139 const struct target_desc *tdesc;
11140};
11141typedef struct remote_g_packet_guess remote_g_packet_guess_s;
11142DEF_VEC_O(remote_g_packet_guess_s);
11143
11144struct remote_g_packet_data
11145{
11146 VEC(remote_g_packet_guess_s) *guesses;
11147};
11148
11149static struct gdbarch_data *remote_g_packet_data_handle;
11150
11151static void *
11152remote_g_packet_data_init (struct obstack *obstack)
11153{
11154 return OBSTACK_ZALLOC (obstack, struct remote_g_packet_data);
11155}
11156
11157void
11158register_remote_g_packet_guess (struct gdbarch *gdbarch, int bytes,
11159 const struct target_desc *tdesc)
11160{
11161 struct remote_g_packet_data *data
19ba03f4
SM
11162 = ((struct remote_g_packet_data *)
11163 gdbarch_data (gdbarch, remote_g_packet_data_handle));
29709017
DJ
11164 struct remote_g_packet_guess new_guess, *guess;
11165 int ix;
11166
11167 gdb_assert (tdesc != NULL);
11168
11169 for (ix = 0;
11170 VEC_iterate (remote_g_packet_guess_s, data->guesses, ix, guess);
11171 ix++)
11172 if (guess->bytes == bytes)
11173 internal_error (__FILE__, __LINE__,
9b20d036 11174 _("Duplicate g packet description added for size %d"),
29709017
DJ
11175 bytes);
11176
11177 new_guess.bytes = bytes;
11178 new_guess.tdesc = tdesc;
11179 VEC_safe_push (remote_g_packet_guess_s, data->guesses, &new_guess);
11180}
11181
d962ef82
DJ
11182/* Return 1 if remote_read_description would do anything on this target
11183 and architecture, 0 otherwise. */
11184
11185static int
11186remote_read_description_p (struct target_ops *target)
11187{
11188 struct remote_g_packet_data *data
19ba03f4
SM
11189 = ((struct remote_g_packet_data *)
11190 gdbarch_data (target_gdbarch (), remote_g_packet_data_handle));
d962ef82
DJ
11191
11192 if (!VEC_empty (remote_g_packet_guess_s, data->guesses))
11193 return 1;
11194
11195 return 0;
11196}
11197
29709017
DJ
11198static const struct target_desc *
11199remote_read_description (struct target_ops *target)
11200{
11201 struct remote_g_packet_data *data
19ba03f4
SM
11202 = ((struct remote_g_packet_data *)
11203 gdbarch_data (target_gdbarch (), remote_g_packet_data_handle));
29709017 11204
d962ef82
DJ
11205 /* Do not try this during initial connection, when we do not know
11206 whether there is a running but stopped thread. */
11207 if (!target_has_execution || ptid_equal (inferior_ptid, null_ptid))
2117c711 11208 return target->beneath->to_read_description (target->beneath);
d962ef82 11209
29709017
DJ
11210 if (!VEC_empty (remote_g_packet_guess_s, data->guesses))
11211 {
11212 struct remote_g_packet_guess *guess;
11213 int ix;
11214 int bytes = send_g_packet ();
11215
11216 for (ix = 0;
11217 VEC_iterate (remote_g_packet_guess_s, data->guesses, ix, guess);
11218 ix++)
11219 if (guess->bytes == bytes)
11220 return guess->tdesc;
11221
11222 /* We discard the g packet. A minor optimization would be to
11223 hold on to it, and fill the register cache once we have selected
11224 an architecture, but it's too tricky to do safely. */
11225 }
11226
2117c711 11227 return target->beneath->to_read_description (target->beneath);
29709017
DJ
11228}
11229
a6b151f1
DJ
11230/* Remote file transfer support. This is host-initiated I/O, not
11231 target-initiated; for target-initiated, see remote-fileio.c. */
11232
11233/* If *LEFT is at least the length of STRING, copy STRING to
11234 *BUFFER, update *BUFFER to point to the new end of the buffer, and
11235 decrease *LEFT. Otherwise raise an error. */
11236
11237static void
a121b7c1 11238remote_buffer_add_string (char **buffer, int *left, const char *string)
a6b151f1
DJ
11239{
11240 int len = strlen (string);
11241
11242 if (len > *left)
11243 error (_("Packet too long for target."));
11244
11245 memcpy (*buffer, string, len);
11246 *buffer += len;
11247 *left -= len;
11248
11249 /* NUL-terminate the buffer as a convenience, if there is
11250 room. */
11251 if (*left)
11252 **buffer = '\0';
11253}
11254
11255/* If *LEFT is large enough, hex encode LEN bytes from BYTES into
11256 *BUFFER, update *BUFFER to point to the new end of the buffer, and
11257 decrease *LEFT. Otherwise raise an error. */
11258
11259static void
11260remote_buffer_add_bytes (char **buffer, int *left, const gdb_byte *bytes,
11261 int len)
11262{
11263 if (2 * len > *left)
11264 error (_("Packet too long for target."));
11265
11266 bin2hex (bytes, *buffer, len);
11267 *buffer += 2 * len;
11268 *left -= 2 * len;
11269
11270 /* NUL-terminate the buffer as a convenience, if there is
11271 room. */
11272 if (*left)
11273 **buffer = '\0';
11274}
11275
11276/* If *LEFT is large enough, convert VALUE to hex and add it to
11277 *BUFFER, update *BUFFER to point to the new end of the buffer, and
11278 decrease *LEFT. Otherwise raise an error. */
11279
11280static void
11281remote_buffer_add_int (char **buffer, int *left, ULONGEST value)
11282{
11283 int len = hexnumlen (value);
11284
11285 if (len > *left)
11286 error (_("Packet too long for target."));
11287
11288 hexnumstr (*buffer, value);
11289 *buffer += len;
11290 *left -= len;
11291
11292 /* NUL-terminate the buffer as a convenience, if there is
11293 room. */
11294 if (*left)
11295 **buffer = '\0';
11296}
11297
11298/* Parse an I/O result packet from BUFFER. Set RETCODE to the return
11299 value, *REMOTE_ERRNO to the remote error number or zero if none
11300 was included, and *ATTACHMENT to point to the start of the annex
11301 if any. The length of the packet isn't needed here; there may
11302 be NUL bytes in BUFFER, but they will be after *ATTACHMENT.
11303
11304 Return 0 if the packet could be parsed, -1 if it could not. If
11305 -1 is returned, the other variables may not be initialized. */
11306
11307static int
11308remote_hostio_parse_result (char *buffer, int *retcode,
11309 int *remote_errno, char **attachment)
11310{
11311 char *p, *p2;
11312
11313 *remote_errno = 0;
11314 *attachment = NULL;
11315
11316 if (buffer[0] != 'F')
11317 return -1;
11318
11319 errno = 0;
11320 *retcode = strtol (&buffer[1], &p, 16);
11321 if (errno != 0 || p == &buffer[1])
11322 return -1;
11323
11324 /* Check for ",errno". */
11325 if (*p == ',')
11326 {
11327 errno = 0;
11328 *remote_errno = strtol (p + 1, &p2, 16);
11329 if (errno != 0 || p + 1 == p2)
11330 return -1;
11331 p = p2;
11332 }
11333
11334 /* Check for ";attachment". If there is no attachment, the
11335 packet should end here. */
11336 if (*p == ';')
11337 {
11338 *attachment = p + 1;
11339 return 0;
11340 }
11341 else if (*p == '\0')
11342 return 0;
11343 else
11344 return -1;
11345}
11346
11347/* Send a prepared I/O packet to the target and read its response.
11348 The prepared packet is in the global RS->BUF before this function
11349 is called, and the answer is there when we return.
11350
11351 COMMAND_BYTES is the length of the request to send, which may include
11352 binary data. WHICH_PACKET is the packet configuration to check
11353 before attempting a packet. If an error occurs, *REMOTE_ERRNO
11354 is set to the error number and -1 is returned. Otherwise the value
11355 returned by the function is returned.
11356
11357 ATTACHMENT and ATTACHMENT_LEN should be non-NULL if and only if an
11358 attachment is expected; an error will be reported if there's a
11359 mismatch. If one is found, *ATTACHMENT will be set to point into
11360 the packet buffer and *ATTACHMENT_LEN will be set to the
11361 attachment's length. */
11362
11363static int
11364remote_hostio_send_command (int command_bytes, int which_packet,
11365 int *remote_errno, char **attachment,
11366 int *attachment_len)
11367{
11368 struct remote_state *rs = get_remote_state ();
11369 int ret, bytes_read;
11370 char *attachment_tmp;
11371
5d93a237 11372 if (!rs->remote_desc
4082afcc 11373 || packet_support (which_packet) == PACKET_DISABLE)
a6b151f1
DJ
11374 {
11375 *remote_errno = FILEIO_ENOSYS;
11376 return -1;
11377 }
11378
11379 putpkt_binary (rs->buf, command_bytes);
11380 bytes_read = getpkt_sane (&rs->buf, &rs->buf_size, 0);
11381
11382 /* If it timed out, something is wrong. Don't try to parse the
11383 buffer. */
11384 if (bytes_read < 0)
11385 {
11386 *remote_errno = FILEIO_EINVAL;
11387 return -1;
11388 }
11389
11390 switch (packet_ok (rs->buf, &remote_protocol_packets[which_packet]))
11391 {
11392 case PACKET_ERROR:
11393 *remote_errno = FILEIO_EINVAL;
11394 return -1;
11395 case PACKET_UNKNOWN:
11396 *remote_errno = FILEIO_ENOSYS;
11397 return -1;
11398 case PACKET_OK:
11399 break;
11400 }
11401
11402 if (remote_hostio_parse_result (rs->buf, &ret, remote_errno,
11403 &attachment_tmp))
11404 {
11405 *remote_errno = FILEIO_EINVAL;
11406 return -1;
11407 }
11408
11409 /* Make sure we saw an attachment if and only if we expected one. */
11410 if ((attachment_tmp == NULL && attachment != NULL)
11411 || (attachment_tmp != NULL && attachment == NULL))
11412 {
11413 *remote_errno = FILEIO_EINVAL;
11414 return -1;
11415 }
11416
11417 /* If an attachment was found, it must point into the packet buffer;
11418 work out how many bytes there were. */
11419 if (attachment_tmp != NULL)
11420 {
11421 *attachment = attachment_tmp;
11422 *attachment_len = bytes_read - (*attachment - rs->buf);
11423 }
11424
11425 return ret;
11426}
11427
80152258
PA
11428/* Invalidate the readahead cache. */
11429
11430static void
11431readahead_cache_invalidate (void)
11432{
11433 struct remote_state *rs = get_remote_state ();
11434
11435 rs->readahead_cache.fd = -1;
11436}
11437
11438/* Invalidate the readahead cache if it is holding data for FD. */
11439
11440static void
11441readahead_cache_invalidate_fd (int fd)
11442{
11443 struct remote_state *rs = get_remote_state ();
11444
11445 if (rs->readahead_cache.fd == fd)
11446 rs->readahead_cache.fd = -1;
11447}
11448
15a201c8
GB
11449/* Set the filesystem remote_hostio functions that take FILENAME
11450 arguments will use. Return 0 on success, or -1 if an error
11451 occurs (and set *REMOTE_ERRNO). */
11452
11453static int
11454remote_hostio_set_filesystem (struct inferior *inf, int *remote_errno)
11455{
11456 struct remote_state *rs = get_remote_state ();
11457 int required_pid = (inf == NULL || inf->fake_pid_p) ? 0 : inf->pid;
11458 char *p = rs->buf;
11459 int left = get_remote_packet_size () - 1;
11460 char arg[9];
11461 int ret;
11462
11463 if (packet_support (PACKET_vFile_setfs) == PACKET_DISABLE)
11464 return 0;
11465
11466 if (rs->fs_pid != -1 && required_pid == rs->fs_pid)
11467 return 0;
11468
11469 remote_buffer_add_string (&p, &left, "vFile:setfs:");
11470
11471 xsnprintf (arg, sizeof (arg), "%x", required_pid);
11472 remote_buffer_add_string (&p, &left, arg);
11473
11474 ret = remote_hostio_send_command (p - rs->buf, PACKET_vFile_setfs,
11475 remote_errno, NULL, NULL);
11476
11477 if (packet_support (PACKET_vFile_setfs) == PACKET_DISABLE)
11478 return 0;
11479
11480 if (ret == 0)
11481 rs->fs_pid = required_pid;
11482
11483 return ret;
11484}
11485
12e2a5fd 11486/* Implementation of to_fileio_open. */
a6b151f1
DJ
11487
11488static int
cd897586 11489remote_hostio_open (struct target_ops *self,
07c138c8 11490 struct inferior *inf, const char *filename,
4313b8c0
GB
11491 int flags, int mode, int warn_if_slow,
11492 int *remote_errno)
a6b151f1
DJ
11493{
11494 struct remote_state *rs = get_remote_state ();
11495 char *p = rs->buf;
11496 int left = get_remote_packet_size () - 1;
11497
4313b8c0
GB
11498 if (warn_if_slow)
11499 {
11500 static int warning_issued = 0;
11501
11502 printf_unfiltered (_("Reading %s from remote target...\n"),
11503 filename);
11504
11505 if (!warning_issued)
11506 {
11507 warning (_("File transfers from remote targets can be slow."
11508 " Use \"set sysroot\" to access files locally"
11509 " instead."));
11510 warning_issued = 1;
11511 }
11512 }
11513
15a201c8
GB
11514 if (remote_hostio_set_filesystem (inf, remote_errno) != 0)
11515 return -1;
11516
a6b151f1
DJ
11517 remote_buffer_add_string (&p, &left, "vFile:open:");
11518
11519 remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
11520 strlen (filename));
11521 remote_buffer_add_string (&p, &left, ",");
11522
11523 remote_buffer_add_int (&p, &left, flags);
11524 remote_buffer_add_string (&p, &left, ",");
11525
11526 remote_buffer_add_int (&p, &left, mode);
11527
11528 return remote_hostio_send_command (p - rs->buf, PACKET_vFile_open,
11529 remote_errno, NULL, NULL);
11530}
11531
12e2a5fd 11532/* Implementation of to_fileio_pwrite. */
a6b151f1
DJ
11533
11534static int
0d866f62
TT
11535remote_hostio_pwrite (struct target_ops *self,
11536 int fd, const gdb_byte *write_buf, int len,
a6b151f1
DJ
11537 ULONGEST offset, int *remote_errno)
11538{
11539 struct remote_state *rs = get_remote_state ();
11540 char *p = rs->buf;
11541 int left = get_remote_packet_size ();
11542 int out_len;
11543
80152258
PA
11544 readahead_cache_invalidate_fd (fd);
11545
a6b151f1
DJ
11546 remote_buffer_add_string (&p, &left, "vFile:pwrite:");
11547
11548 remote_buffer_add_int (&p, &left, fd);
11549 remote_buffer_add_string (&p, &left, ",");
11550
11551 remote_buffer_add_int (&p, &left, offset);
11552 remote_buffer_add_string (&p, &left, ",");
11553
124e13d9 11554 p += remote_escape_output (write_buf, len, 1, (gdb_byte *) p, &out_len,
a6b151f1
DJ
11555 get_remote_packet_size () - (p - rs->buf));
11556
11557 return remote_hostio_send_command (p - rs->buf, PACKET_vFile_pwrite,
11558 remote_errno, NULL, NULL);
11559}
11560
80152258
PA
11561/* Helper for the implementation of to_fileio_pread. Read the file
11562 from the remote side with vFile:pread. */
a6b151f1
DJ
11563
11564static int
80152258
PA
11565remote_hostio_pread_vFile (struct target_ops *self,
11566 int fd, gdb_byte *read_buf, int len,
11567 ULONGEST offset, int *remote_errno)
a6b151f1
DJ
11568{
11569 struct remote_state *rs = get_remote_state ();
11570 char *p = rs->buf;
11571 char *attachment;
11572 int left = get_remote_packet_size ();
11573 int ret, attachment_len;
11574 int read_len;
11575
11576 remote_buffer_add_string (&p, &left, "vFile:pread:");
11577
11578 remote_buffer_add_int (&p, &left, fd);
11579 remote_buffer_add_string (&p, &left, ",");
11580
11581 remote_buffer_add_int (&p, &left, len);
11582 remote_buffer_add_string (&p, &left, ",");
11583
11584 remote_buffer_add_int (&p, &left, offset);
11585
11586 ret = remote_hostio_send_command (p - rs->buf, PACKET_vFile_pread,
11587 remote_errno, &attachment,
11588 &attachment_len);
11589
11590 if (ret < 0)
11591 return ret;
11592
bc20a4af 11593 read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len,
a6b151f1
DJ
11594 read_buf, len);
11595 if (read_len != ret)
11596 error (_("Read returned %d, but %d bytes."), ret, (int) read_len);
11597
11598 return ret;
11599}
11600
80152258
PA
11601/* Serve pread from the readahead cache. Returns number of bytes
11602 read, or 0 if the request can't be served from the cache. */
11603
11604static int
11605remote_hostio_pread_from_cache (struct remote_state *rs,
11606 int fd, gdb_byte *read_buf, size_t len,
11607 ULONGEST offset)
11608{
11609 struct readahead_cache *cache = &rs->readahead_cache;
11610
11611 if (cache->fd == fd
11612 && cache->offset <= offset
11613 && offset < cache->offset + cache->bufsize)
11614 {
11615 ULONGEST max = cache->offset + cache->bufsize;
11616
11617 if (offset + len > max)
11618 len = max - offset;
11619
11620 memcpy (read_buf, cache->buf + offset - cache->offset, len);
11621 return len;
11622 }
11623
11624 return 0;
11625}
11626
11627/* Implementation of to_fileio_pread. */
11628
11629static int
11630remote_hostio_pread (struct target_ops *self,
11631 int fd, gdb_byte *read_buf, int len,
11632 ULONGEST offset, int *remote_errno)
11633{
11634 int ret;
11635 struct remote_state *rs = get_remote_state ();
11636 struct readahead_cache *cache = &rs->readahead_cache;
11637
11638 ret = remote_hostio_pread_from_cache (rs, fd, read_buf, len, offset);
11639 if (ret > 0)
11640 {
11641 cache->hit_count++;
11642
11643 if (remote_debug)
11644 fprintf_unfiltered (gdb_stdlog, "readahead cache hit %s\n",
11645 pulongest (cache->hit_count));
11646 return ret;
11647 }
11648
11649 cache->miss_count++;
11650 if (remote_debug)
11651 fprintf_unfiltered (gdb_stdlog, "readahead cache miss %s\n",
11652 pulongest (cache->miss_count));
11653
11654 cache->fd = fd;
11655 cache->offset = offset;
11656 cache->bufsize = get_remote_packet_size ();
224c3ddb 11657 cache->buf = (gdb_byte *) xrealloc (cache->buf, cache->bufsize);
80152258
PA
11658
11659 ret = remote_hostio_pread_vFile (self, cache->fd, cache->buf, cache->bufsize,
11660 cache->offset, remote_errno);
11661 if (ret <= 0)
11662 {
11663 readahead_cache_invalidate_fd (fd);
11664 return ret;
11665 }
11666
11667 cache->bufsize = ret;
11668 return remote_hostio_pread_from_cache (rs, fd, read_buf, len, offset);
11669}
11670
12e2a5fd 11671/* Implementation of to_fileio_close. */
a6b151f1
DJ
11672
11673static int
df39ea25 11674remote_hostio_close (struct target_ops *self, int fd, int *remote_errno)
a6b151f1
DJ
11675{
11676 struct remote_state *rs = get_remote_state ();
11677 char *p = rs->buf;
11678 int left = get_remote_packet_size () - 1;
11679
80152258
PA
11680 readahead_cache_invalidate_fd (fd);
11681
a6b151f1
DJ
11682 remote_buffer_add_string (&p, &left, "vFile:close:");
11683
11684 remote_buffer_add_int (&p, &left, fd);
11685
11686 return remote_hostio_send_command (p - rs->buf, PACKET_vFile_close,
11687 remote_errno, NULL, NULL);
11688}
11689
12e2a5fd 11690/* Implementation of to_fileio_unlink. */
a6b151f1
DJ
11691
11692static int
dbbca37d 11693remote_hostio_unlink (struct target_ops *self,
07c138c8
GB
11694 struct inferior *inf, const char *filename,
11695 int *remote_errno)
a6b151f1
DJ
11696{
11697 struct remote_state *rs = get_remote_state ();
11698 char *p = rs->buf;
11699 int left = get_remote_packet_size () - 1;
11700
15a201c8
GB
11701 if (remote_hostio_set_filesystem (inf, remote_errno) != 0)
11702 return -1;
11703
a6b151f1
DJ
11704 remote_buffer_add_string (&p, &left, "vFile:unlink:");
11705
11706 remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
11707 strlen (filename));
11708
11709 return remote_hostio_send_command (p - rs->buf, PACKET_vFile_unlink,
11710 remote_errno, NULL, NULL);
11711}
11712
12e2a5fd 11713/* Implementation of to_fileio_readlink. */
b9e7b9c3
UW
11714
11715static char *
fab5aa7c 11716remote_hostio_readlink (struct target_ops *self,
07c138c8
GB
11717 struct inferior *inf, const char *filename,
11718 int *remote_errno)
b9e7b9c3
UW
11719{
11720 struct remote_state *rs = get_remote_state ();
11721 char *p = rs->buf;
11722 char *attachment;
11723 int left = get_remote_packet_size ();
11724 int len, attachment_len;
11725 int read_len;
11726 char *ret;
11727
15a201c8
GB
11728 if (remote_hostio_set_filesystem (inf, remote_errno) != 0)
11729 return NULL;
11730
b9e7b9c3
UW
11731 remote_buffer_add_string (&p, &left, "vFile:readlink:");
11732
11733 remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
11734 strlen (filename));
11735
11736 len = remote_hostio_send_command (p - rs->buf, PACKET_vFile_readlink,
11737 remote_errno, &attachment,
11738 &attachment_len);
11739
11740 if (len < 0)
11741 return NULL;
11742
224c3ddb 11743 ret = (char *) xmalloc (len + 1);
b9e7b9c3 11744
bc20a4af
PA
11745 read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len,
11746 (gdb_byte *) ret, len);
b9e7b9c3
UW
11747 if (read_len != len)
11748 error (_("Readlink returned %d, but %d bytes."), len, read_len);
11749
11750 ret[len] = '\0';
11751 return ret;
11752}
11753
12e2a5fd 11754/* Implementation of to_fileio_fstat. */
0a93529c
GB
11755
11756static int
11757remote_hostio_fstat (struct target_ops *self,
11758 int fd, struct stat *st,
11759 int *remote_errno)
11760{
11761 struct remote_state *rs = get_remote_state ();
11762 char *p = rs->buf;
11763 int left = get_remote_packet_size ();
11764 int attachment_len, ret;
11765 char *attachment;
11766 struct fio_stat fst;
11767 int read_len;
11768
464b0089
GB
11769 remote_buffer_add_string (&p, &left, "vFile:fstat:");
11770
11771 remote_buffer_add_int (&p, &left, fd);
11772
11773 ret = remote_hostio_send_command (p - rs->buf, PACKET_vFile_fstat,
11774 remote_errno, &attachment,
11775 &attachment_len);
11776 if (ret < 0)
0a93529c 11777 {
464b0089
GB
11778 if (*remote_errno != FILEIO_ENOSYS)
11779 return ret;
11780
0a93529c
GB
11781 /* Strictly we should return -1, ENOSYS here, but when
11782 "set sysroot remote:" was implemented in August 2008
11783 BFD's need for a stat function was sidestepped with
11784 this hack. This was not remedied until March 2015
11785 so we retain the previous behavior to avoid breaking
11786 compatibility.
11787
11788 Note that the memset is a March 2015 addition; older
11789 GDBs set st_size *and nothing else* so the structure
11790 would have garbage in all other fields. This might
11791 break something but retaining the previous behavior
11792 here would be just too wrong. */
11793
11794 memset (st, 0, sizeof (struct stat));
11795 st->st_size = INT_MAX;
11796 return 0;
11797 }
11798
0a93529c
GB
11799 read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len,
11800 (gdb_byte *) &fst, sizeof (fst));
11801
11802 if (read_len != ret)
11803 error (_("vFile:fstat returned %d, but %d bytes."), ret, read_len);
11804
11805 if (read_len != sizeof (fst))
11806 error (_("vFile:fstat returned %d bytes, but expecting %d."),
11807 read_len, (int) sizeof (fst));
11808
11809 remote_fileio_to_host_stat (&fst, st);
11810
11811 return 0;
11812}
11813
12e2a5fd 11814/* Implementation of to_filesystem_is_local. */
e3dd7556
GB
11815
11816static int
11817remote_filesystem_is_local (struct target_ops *self)
11818{
11819 /* Valgrind GDB presents itself as a remote target but works
11820 on the local filesystem: it does not implement remote get
11821 and users are not expected to set a sysroot. To handle
11822 this case we treat the remote filesystem as local if the
11823 sysroot is exactly TARGET_SYSROOT_PREFIX and if the stub
11824 does not support vFile:open. */
a3be80c3 11825 if (strcmp (gdb_sysroot, TARGET_SYSROOT_PREFIX) == 0)
e3dd7556
GB
11826 {
11827 enum packet_support ps = packet_support (PACKET_vFile_open);
11828
11829 if (ps == PACKET_SUPPORT_UNKNOWN)
11830 {
11831 int fd, remote_errno;
11832
11833 /* Try opening a file to probe support. The supplied
11834 filename is irrelevant, we only care about whether
11835 the stub recognizes the packet or not. */
07c138c8 11836 fd = remote_hostio_open (self, NULL, "just probing",
4313b8c0 11837 FILEIO_O_RDONLY, 0700, 0,
e3dd7556
GB
11838 &remote_errno);
11839
11840 if (fd >= 0)
11841 remote_hostio_close (self, fd, &remote_errno);
11842
11843 ps = packet_support (PACKET_vFile_open);
11844 }
11845
11846 if (ps == PACKET_DISABLE)
11847 {
11848 static int warning_issued = 0;
11849
11850 if (!warning_issued)
11851 {
11852 warning (_("remote target does not support file"
11853 " transfer, attempting to access files"
11854 " from local filesystem."));
11855 warning_issued = 1;
11856 }
11857
11858 return 1;
11859 }
11860 }
11861
11862 return 0;
11863}
11864
a6b151f1
DJ
11865static int
11866remote_fileio_errno_to_host (int errnum)
11867{
11868 switch (errnum)
11869 {
11870 case FILEIO_EPERM:
11871 return EPERM;
11872 case FILEIO_ENOENT:
11873 return ENOENT;
11874 case FILEIO_EINTR:
11875 return EINTR;
11876 case FILEIO_EIO:
11877 return EIO;
11878 case FILEIO_EBADF:
11879 return EBADF;
11880 case FILEIO_EACCES:
11881 return EACCES;
11882 case FILEIO_EFAULT:
11883 return EFAULT;
11884 case FILEIO_EBUSY:
11885 return EBUSY;
11886 case FILEIO_EEXIST:
11887 return EEXIST;
11888 case FILEIO_ENODEV:
11889 return ENODEV;
11890 case FILEIO_ENOTDIR:
11891 return ENOTDIR;
11892 case FILEIO_EISDIR:
11893 return EISDIR;
11894 case FILEIO_EINVAL:
11895 return EINVAL;
11896 case FILEIO_ENFILE:
11897 return ENFILE;
11898 case FILEIO_EMFILE:
11899 return EMFILE;
11900 case FILEIO_EFBIG:
11901 return EFBIG;
11902 case FILEIO_ENOSPC:
11903 return ENOSPC;
11904 case FILEIO_ESPIPE:
11905 return ESPIPE;
11906 case FILEIO_EROFS:
11907 return EROFS;
11908 case FILEIO_ENOSYS:
11909 return ENOSYS;
11910 case FILEIO_ENAMETOOLONG:
11911 return ENAMETOOLONG;
11912 }
11913 return -1;
11914}
11915
11916static char *
11917remote_hostio_error (int errnum)
11918{
11919 int host_error = remote_fileio_errno_to_host (errnum);
11920
11921 if (host_error == -1)
11922 error (_("Unknown remote I/O error %d"), errnum);
11923 else
11924 error (_("Remote I/O error: %s"), safe_strerror (host_error));
11925}
11926
a6b151f1
DJ
11927static void
11928remote_hostio_close_cleanup (void *opaque)
11929{
11930 int fd = *(int *) opaque;
11931 int remote_errno;
11932
df39ea25 11933 remote_hostio_close (find_target_at (process_stratum), fd, &remote_errno);
a6b151f1
DJ
11934}
11935
11936void
11937remote_file_put (const char *local_file, const char *remote_file, int from_tty)
11938{
11939 struct cleanup *back_to, *close_cleanup;
11940 int retcode, fd, remote_errno, bytes, io_size;
a6b151f1
DJ
11941 gdb_byte *buffer;
11942 int bytes_in_buffer;
11943 int saw_eof;
11944 ULONGEST offset;
5d93a237 11945 struct remote_state *rs = get_remote_state ();
a6b151f1 11946
5d93a237 11947 if (!rs->remote_desc)
a6b151f1
DJ
11948 error (_("command can only be used with remote target"));
11949
d419f42d 11950 gdb_file_up file = gdb_fopen_cloexec (local_file, "rb");
a6b151f1
DJ
11951 if (file == NULL)
11952 perror_with_name (local_file);
a6b151f1 11953
07c138c8 11954 fd = remote_hostio_open (find_target_at (process_stratum), NULL,
cd897586 11955 remote_file, (FILEIO_O_WRONLY | FILEIO_O_CREAT
a6b151f1 11956 | FILEIO_O_TRUNC),
4313b8c0 11957 0700, 0, &remote_errno);
a6b151f1
DJ
11958 if (fd == -1)
11959 remote_hostio_error (remote_errno);
11960
11961 /* Send up to this many bytes at once. They won't all fit in the
11962 remote packet limit, so we'll transfer slightly fewer. */
11963 io_size = get_remote_packet_size ();
224c3ddb 11964 buffer = (gdb_byte *) xmalloc (io_size);
d419f42d 11965 back_to = make_cleanup (xfree, buffer);
a6b151f1
DJ
11966
11967 close_cleanup = make_cleanup (remote_hostio_close_cleanup, &fd);
11968
11969 bytes_in_buffer = 0;
11970 saw_eof = 0;
11971 offset = 0;
11972 while (bytes_in_buffer || !saw_eof)
11973 {
11974 if (!saw_eof)
11975 {
3e43a32a
MS
11976 bytes = fread (buffer + bytes_in_buffer, 1,
11977 io_size - bytes_in_buffer,
d419f42d 11978 file.get ());
a6b151f1
DJ
11979 if (bytes == 0)
11980 {
d419f42d 11981 if (ferror (file.get ()))
a6b151f1
DJ
11982 error (_("Error reading %s."), local_file);
11983 else
11984 {
11985 /* EOF. Unless there is something still in the
11986 buffer from the last iteration, we are done. */
11987 saw_eof = 1;
11988 if (bytes_in_buffer == 0)
11989 break;
11990 }
11991 }
11992 }
11993 else
11994 bytes = 0;
11995
11996 bytes += bytes_in_buffer;
11997 bytes_in_buffer = 0;
11998
0d866f62
TT
11999 retcode = remote_hostio_pwrite (find_target_at (process_stratum),
12000 fd, buffer, bytes,
3e43a32a 12001 offset, &remote_errno);
a6b151f1
DJ
12002
12003 if (retcode < 0)
12004 remote_hostio_error (remote_errno);
12005 else if (retcode == 0)
12006 error (_("Remote write of %d bytes returned 0!"), bytes);
12007 else if (retcode < bytes)
12008 {
12009 /* Short write. Save the rest of the read data for the next
12010 write. */
12011 bytes_in_buffer = bytes - retcode;
12012 memmove (buffer, buffer + retcode, bytes_in_buffer);
12013 }
12014
12015 offset += retcode;
12016 }
12017
12018 discard_cleanups (close_cleanup);
df39ea25 12019 if (remote_hostio_close (find_target_at (process_stratum), fd, &remote_errno))
a6b151f1
DJ
12020 remote_hostio_error (remote_errno);
12021
12022 if (from_tty)
12023 printf_filtered (_("Successfully sent file \"%s\".\n"), local_file);
12024 do_cleanups (back_to);
12025}
12026
12027void
12028remote_file_get (const char *remote_file, const char *local_file, int from_tty)
12029{
12030 struct cleanup *back_to, *close_cleanup;
cea39f65 12031 int fd, remote_errno, bytes, io_size;
a6b151f1
DJ
12032 gdb_byte *buffer;
12033 ULONGEST offset;
5d93a237 12034 struct remote_state *rs = get_remote_state ();
a6b151f1 12035
5d93a237 12036 if (!rs->remote_desc)
a6b151f1
DJ
12037 error (_("command can only be used with remote target"));
12038
07c138c8 12039 fd = remote_hostio_open (find_target_at (process_stratum), NULL,
4313b8c0
GB
12040 remote_file, FILEIO_O_RDONLY, 0, 0,
12041 &remote_errno);
a6b151f1
DJ
12042 if (fd == -1)
12043 remote_hostio_error (remote_errno);
12044
d419f42d 12045 gdb_file_up file = gdb_fopen_cloexec (local_file, "wb");
a6b151f1
DJ
12046 if (file == NULL)
12047 perror_with_name (local_file);
a6b151f1
DJ
12048
12049 /* Send up to this many bytes at once. They won't all fit in the
12050 remote packet limit, so we'll transfer slightly fewer. */
12051 io_size = get_remote_packet_size ();
224c3ddb 12052 buffer = (gdb_byte *) xmalloc (io_size);
d419f42d 12053 back_to = make_cleanup (xfree, buffer);
a6b151f1
DJ
12054
12055 close_cleanup = make_cleanup (remote_hostio_close_cleanup, &fd);
12056
12057 offset = 0;
12058 while (1)
12059 {
a3be983c
TT
12060 bytes = remote_hostio_pread (find_target_at (process_stratum),
12061 fd, buffer, io_size, offset, &remote_errno);
a6b151f1
DJ
12062 if (bytes == 0)
12063 /* Success, but no bytes, means end-of-file. */
12064 break;
12065 if (bytes == -1)
12066 remote_hostio_error (remote_errno);
12067
12068 offset += bytes;
12069
d419f42d 12070 bytes = fwrite (buffer, 1, bytes, file.get ());
a6b151f1
DJ
12071 if (bytes == 0)
12072 perror_with_name (local_file);
12073 }
12074
12075 discard_cleanups (close_cleanup);
df39ea25 12076 if (remote_hostio_close (find_target_at (process_stratum), fd, &remote_errno))
a6b151f1
DJ
12077 remote_hostio_error (remote_errno);
12078
12079 if (from_tty)
12080 printf_filtered (_("Successfully fetched file \"%s\".\n"), remote_file);
12081 do_cleanups (back_to);
12082}
12083
12084void
12085remote_file_delete (const char *remote_file, int from_tty)
12086{
12087 int retcode, remote_errno;
5d93a237 12088 struct remote_state *rs = get_remote_state ();
a6b151f1 12089
5d93a237 12090 if (!rs->remote_desc)
a6b151f1
DJ
12091 error (_("command can only be used with remote target"));
12092
dbbca37d 12093 retcode = remote_hostio_unlink (find_target_at (process_stratum),
07c138c8 12094 NULL, remote_file, &remote_errno);
a6b151f1
DJ
12095 if (retcode == -1)
12096 remote_hostio_error (remote_errno);
12097
12098 if (from_tty)
12099 printf_filtered (_("Successfully deleted file \"%s\".\n"), remote_file);
12100}
12101
12102static void
12103remote_put_command (char *args, int from_tty)
12104{
d1a41061
PP
12105 if (args == NULL)
12106 error_no_arg (_("file to put"));
12107
773a1edc 12108 gdb_argv argv (args);
a6b151f1
DJ
12109 if (argv[0] == NULL || argv[1] == NULL || argv[2] != NULL)
12110 error (_("Invalid parameters to remote put"));
12111
12112 remote_file_put (argv[0], argv[1], from_tty);
a6b151f1
DJ
12113}
12114
12115static void
12116remote_get_command (char *args, int from_tty)
12117{
d1a41061
PP
12118 if (args == NULL)
12119 error_no_arg (_("file to get"));
12120
773a1edc 12121 gdb_argv argv (args);
a6b151f1
DJ
12122 if (argv[0] == NULL || argv[1] == NULL || argv[2] != NULL)
12123 error (_("Invalid parameters to remote get"));
12124
12125 remote_file_get (argv[0], argv[1], from_tty);
a6b151f1
DJ
12126}
12127
12128static void
12129remote_delete_command (char *args, int from_tty)
12130{
d1a41061
PP
12131 if (args == NULL)
12132 error_no_arg (_("file to delete"));
12133
773a1edc 12134 gdb_argv argv (args);
a6b151f1
DJ
12135 if (argv[0] == NULL || argv[1] != NULL)
12136 error (_("Invalid parameters to remote delete"));
12137
12138 remote_file_delete (argv[0], from_tty);
a6b151f1
DJ
12139}
12140
12141static void
12142remote_command (char *args, int from_tty)
12143{
635c7e8a 12144 help_list (remote_cmdlist, "remote ", all_commands, gdb_stdout);
a6b151f1
DJ
12145}
12146
b2175913 12147static int
19db3e69 12148remote_can_execute_reverse (struct target_ops *self)
b2175913 12149{
4082afcc
PA
12150 if (packet_support (PACKET_bs) == PACKET_ENABLE
12151 || packet_support (PACKET_bc) == PACKET_ENABLE)
40ab02ce
MS
12152 return 1;
12153 else
12154 return 0;
b2175913
MS
12155}
12156
74531fed 12157static int
2a9a2795 12158remote_supports_non_stop (struct target_ops *self)
74531fed
PA
12159{
12160 return 1;
12161}
12162
03583c20 12163static int
2bfc0540 12164remote_supports_disable_randomization (struct target_ops *self)
03583c20
UW
12165{
12166 /* Only supported in extended mode. */
12167 return 0;
12168}
12169
8a305172 12170static int
86ce2668 12171remote_supports_multi_process (struct target_ops *self)
8a305172
PA
12172{
12173 struct remote_state *rs = get_remote_state ();
a744cf53 12174
8020350c 12175 return remote_multi_process_p (rs);
8a305172
PA
12176}
12177
70221824 12178static int
782b2b07
SS
12179remote_supports_cond_tracepoints (void)
12180{
4082afcc 12181 return packet_support (PACKET_ConditionalTracepoints) == PACKET_ENABLE;
782b2b07
SS
12182}
12183
3788aec7 12184static int
efcc2da7 12185remote_supports_cond_breakpoints (struct target_ops *self)
3788aec7 12186{
4082afcc 12187 return packet_support (PACKET_ConditionalBreakpoints) == PACKET_ENABLE;
3788aec7
LM
12188}
12189
70221824 12190static int
7a697b8d
SS
12191remote_supports_fast_tracepoints (void)
12192{
4082afcc 12193 return packet_support (PACKET_FastTracepoints) == PACKET_ENABLE;
7a697b8d
SS
12194}
12195
0fb4aa4b
PA
12196static int
12197remote_supports_static_tracepoints (void)
12198{
4082afcc 12199 return packet_support (PACKET_StaticTracepoints) == PACKET_ENABLE;
0fb4aa4b
PA
12200}
12201
1e4d1764
YQ
12202static int
12203remote_supports_install_in_trace (void)
12204{
4082afcc 12205 return packet_support (PACKET_InstallInTrace) == PACKET_ENABLE;
1e4d1764
YQ
12206}
12207
d248b706 12208static int
7d178d6a 12209remote_supports_enable_disable_tracepoint (struct target_ops *self)
d248b706 12210{
4082afcc
PA
12211 return (packet_support (PACKET_EnableDisableTracepoints_feature)
12212 == PACKET_ENABLE);
d248b706
KY
12213}
12214
3065dfb6 12215static int
6de37a3a 12216remote_supports_string_tracing (struct target_ops *self)
3065dfb6 12217{
4082afcc 12218 return packet_support (PACKET_tracenz_feature) == PACKET_ENABLE;
3065dfb6
SS
12219}
12220
d3ce09f5 12221static int
78eff0ec 12222remote_can_run_breakpoint_commands (struct target_ops *self)
d3ce09f5 12223{
4082afcc 12224 return packet_support (PACKET_BreakpointCommands) == PACKET_ENABLE;
d3ce09f5
SS
12225}
12226
35b1e5cc 12227static void
ecae04e1 12228remote_trace_init (struct target_ops *self)
35b1e5cc
SS
12229{
12230 putpkt ("QTinit");
12231 remote_get_noisy_reply (&target_buf, &target_buf_size);
ad91cd99 12232 if (strcmp (target_buf, "OK") != 0)
35b1e5cc
SS
12233 error (_("Target does not support this command."));
12234}
12235
12236static void free_actions_list (char **actions_list);
12237static void free_actions_list_cleanup_wrapper (void *);
12238static void
12239free_actions_list_cleanup_wrapper (void *al)
12240{
19ba03f4 12241 free_actions_list ((char **) al);
35b1e5cc
SS
12242}
12243
12244static void
12245free_actions_list (char **actions_list)
12246{
12247 int ndx;
12248
12249 if (actions_list == 0)
12250 return;
12251
12252 for (ndx = 0; actions_list[ndx]; ndx++)
12253 xfree (actions_list[ndx]);
12254
12255 xfree (actions_list);
12256}
12257
409873ef
SS
12258/* Recursive routine to walk through command list including loops, and
12259 download packets for each command. */
12260
12261static void
12262remote_download_command_source (int num, ULONGEST addr,
12263 struct command_line *cmds)
12264{
12265 struct remote_state *rs = get_remote_state ();
12266 struct command_line *cmd;
12267
12268 for (cmd = cmds; cmd; cmd = cmd->next)
12269 {
0df8b418 12270 QUIT; /* Allow user to bail out with ^C. */
409873ef
SS
12271 strcpy (rs->buf, "QTDPsrc:");
12272 encode_source_string (num, addr, "cmd", cmd->line,
12273 rs->buf + strlen (rs->buf),
12274 rs->buf_size - strlen (rs->buf));
12275 putpkt (rs->buf);
12276 remote_get_noisy_reply (&target_buf, &target_buf_size);
12277 if (strcmp (target_buf, "OK"))
12278 warning (_("Target does not support source download."));
12279
12280 if (cmd->control_type == while_control
12281 || cmd->control_type == while_stepping_control)
12282 {
12283 remote_download_command_source (num, addr, *cmd->body_list);
12284
0df8b418 12285 QUIT; /* Allow user to bail out with ^C. */
409873ef
SS
12286 strcpy (rs->buf, "QTDPsrc:");
12287 encode_source_string (num, addr, "cmd", "end",
12288 rs->buf + strlen (rs->buf),
12289 rs->buf_size - strlen (rs->buf));
12290 putpkt (rs->buf);
12291 remote_get_noisy_reply (&target_buf, &target_buf_size);
12292 if (strcmp (target_buf, "OK"))
12293 warning (_("Target does not support source download."));
12294 }
12295 }
12296}
12297
35b1e5cc 12298static void
548f7808 12299remote_download_tracepoint (struct target_ops *self, struct bp_location *loc)
35b1e5cc 12300{
bba74b36 12301#define BUF_SIZE 2048
e8ba3115 12302
35b1e5cc 12303 CORE_ADDR tpaddr;
409873ef 12304 char addrbuf[40];
bba74b36 12305 char buf[BUF_SIZE];
35b1e5cc
SS
12306 char **tdp_actions;
12307 char **stepping_actions;
12308 int ndx;
12309 struct cleanup *old_chain = NULL;
35b1e5cc 12310 char *pkt;
e8ba3115 12311 struct breakpoint *b = loc->owner;
d9b3f62e 12312 struct tracepoint *t = (struct tracepoint *) b;
35b1e5cc 12313
dc673c81 12314 encode_actions_rsp (loc, &tdp_actions, &stepping_actions);
e8ba3115
YQ
12315 old_chain = make_cleanup (free_actions_list_cleanup_wrapper,
12316 tdp_actions);
12317 (void) make_cleanup (free_actions_list_cleanup_wrapper,
12318 stepping_actions);
12319
12320 tpaddr = loc->address;
12321 sprintf_vma (addrbuf, tpaddr);
bba74b36
YQ
12322 xsnprintf (buf, BUF_SIZE, "QTDP:%x:%s:%c:%lx:%x", b->number,
12323 addrbuf, /* address */
12324 (b->enable_state == bp_enabled ? 'E' : 'D'),
12325 t->step_count, t->pass_count);
e8ba3115
YQ
12326 /* Fast tracepoints are mostly handled by the target, but we can
12327 tell the target how big of an instruction block should be moved
12328 around. */
12329 if (b->type == bp_fast_tracepoint)
12330 {
12331 /* Only test for support at download time; we may not know
12332 target capabilities at definition time. */
12333 if (remote_supports_fast_tracepoints ())
35b1e5cc 12334 {
6b940e6a
PL
12335 if (gdbarch_fast_tracepoint_valid_at (loc->gdbarch, tpaddr,
12336 NULL))
bba74b36 12337 xsnprintf (buf + strlen (buf), BUF_SIZE - strlen (buf), ":F%x",
6b940e6a 12338 gdb_insn_length (loc->gdbarch, tpaddr));
35b1e5cc 12339 else
e8ba3115
YQ
12340 /* If it passed validation at definition but fails now,
12341 something is very wrong. */
12342 internal_error (__FILE__, __LINE__,
12343 _("Fast tracepoint not "
12344 "valid during download"));
35b1e5cc 12345 }
e8ba3115
YQ
12346 else
12347 /* Fast tracepoints are functionally identical to regular
12348 tracepoints, so don't take lack of support as a reason to
12349 give up on the trace run. */
12350 warning (_("Target does not support fast tracepoints, "
12351 "downloading %d as regular tracepoint"), b->number);
12352 }
12353 else if (b->type == bp_static_tracepoint)
12354 {
12355 /* Only test for support at download time; we may not know
12356 target capabilities at definition time. */
12357 if (remote_supports_static_tracepoints ())
0fb4aa4b 12358 {
e8ba3115 12359 struct static_tracepoint_marker marker;
0fb4aa4b 12360
e8ba3115
YQ
12361 if (target_static_tracepoint_marker_at (tpaddr, &marker))
12362 strcat (buf, ":S");
0fb4aa4b 12363 else
e8ba3115 12364 error (_("Static tracepoint not valid during download"));
0fb4aa4b 12365 }
e8ba3115
YQ
12366 else
12367 /* Fast tracepoints are functionally identical to regular
12368 tracepoints, so don't take lack of support as a reason
12369 to give up on the trace run. */
12370 error (_("Target does not support static tracepoints"));
12371 }
12372 /* If the tracepoint has a conditional, make it into an agent
12373 expression and append to the definition. */
12374 if (loc->cond)
12375 {
12376 /* Only test support at download time, we may not know target
12377 capabilities at definition time. */
12378 if (remote_supports_cond_tracepoints ())
35b1e5cc 12379 {
833177a4 12380 agent_expr_up aexpr = gen_eval_for_expr (tpaddr, loc->cond.get ());
bba74b36
YQ
12381 xsnprintf (buf + strlen (buf), BUF_SIZE - strlen (buf), ":X%x,",
12382 aexpr->len);
e8ba3115
YQ
12383 pkt = buf + strlen (buf);
12384 for (ndx = 0; ndx < aexpr->len; ++ndx)
12385 pkt = pack_hex_byte (pkt, aexpr->buf[ndx]);
12386 *pkt = '\0';
35b1e5cc 12387 }
e8ba3115
YQ
12388 else
12389 warning (_("Target does not support conditional tracepoints, "
12390 "ignoring tp %d cond"), b->number);
12391 }
35b1e5cc 12392
d9b3f62e 12393 if (b->commands || *default_collect)
e8ba3115
YQ
12394 strcat (buf, "-");
12395 putpkt (buf);
12396 remote_get_noisy_reply (&target_buf, &target_buf_size);
12397 if (strcmp (target_buf, "OK"))
12398 error (_("Target does not support tracepoints."));
35b1e5cc 12399
e8ba3115
YQ
12400 /* do_single_steps (t); */
12401 if (tdp_actions)
12402 {
12403 for (ndx = 0; tdp_actions[ndx]; ndx++)
35b1e5cc 12404 {
e8ba3115 12405 QUIT; /* Allow user to bail out with ^C. */
bba74b36
YQ
12406 xsnprintf (buf, BUF_SIZE, "QTDP:-%x:%s:%s%c",
12407 b->number, addrbuf, /* address */
12408 tdp_actions[ndx],
12409 ((tdp_actions[ndx + 1] || stepping_actions)
12410 ? '-' : 0));
e8ba3115
YQ
12411 putpkt (buf);
12412 remote_get_noisy_reply (&target_buf,
12413 &target_buf_size);
12414 if (strcmp (target_buf, "OK"))
12415 error (_("Error on target while setting tracepoints."));
35b1e5cc 12416 }
e8ba3115
YQ
12417 }
12418 if (stepping_actions)
12419 {
12420 for (ndx = 0; stepping_actions[ndx]; ndx++)
35b1e5cc 12421 {
e8ba3115 12422 QUIT; /* Allow user to bail out with ^C. */
bba74b36
YQ
12423 xsnprintf (buf, BUF_SIZE, "QTDP:-%x:%s:%s%s%s",
12424 b->number, addrbuf, /* address */
12425 ((ndx == 0) ? "S" : ""),
12426 stepping_actions[ndx],
12427 (stepping_actions[ndx + 1] ? "-" : ""));
e8ba3115
YQ
12428 putpkt (buf);
12429 remote_get_noisy_reply (&target_buf,
12430 &target_buf_size);
12431 if (strcmp (target_buf, "OK"))
12432 error (_("Error on target while setting tracepoints."));
35b1e5cc 12433 }
e8ba3115 12434 }
409873ef 12435
4082afcc 12436 if (packet_support (PACKET_TracepointSource) == PACKET_ENABLE)
e8ba3115 12437 {
f00aae0f 12438 if (b->location != NULL)
409873ef 12439 {
e8ba3115 12440 strcpy (buf, "QTDPsrc:");
f00aae0f 12441 encode_source_string (b->number, loc->address, "at",
d28cd78a 12442 event_location_to_string (b->location.get ()),
f00aae0f 12443 buf + strlen (buf), 2048 - strlen (buf));
e8ba3115
YQ
12444 putpkt (buf);
12445 remote_get_noisy_reply (&target_buf, &target_buf_size);
12446 if (strcmp (target_buf, "OK"))
12447 warning (_("Target does not support source download."));
409873ef 12448 }
e8ba3115
YQ
12449 if (b->cond_string)
12450 {
12451 strcpy (buf, "QTDPsrc:");
12452 encode_source_string (b->number, loc->address,
12453 "cond", b->cond_string, buf + strlen (buf),
12454 2048 - strlen (buf));
12455 putpkt (buf);
12456 remote_get_noisy_reply (&target_buf, &target_buf_size);
12457 if (strcmp (target_buf, "OK"))
12458 warning (_("Target does not support source download."));
12459 }
12460 remote_download_command_source (b->number, loc->address,
12461 breakpoint_commands (b));
35b1e5cc 12462 }
e8ba3115
YQ
12463
12464 do_cleanups (old_chain);
35b1e5cc
SS
12465}
12466
1e4d1764 12467static int
a52a8357 12468remote_can_download_tracepoint (struct target_ops *self)
1e4d1764 12469{
1e51243a
PA
12470 struct remote_state *rs = get_remote_state ();
12471 struct trace_status *ts;
12472 int status;
12473
12474 /* Don't try to install tracepoints until we've relocated our
12475 symbols, and fetched and merged the target's tracepoint list with
12476 ours. */
12477 if (rs->starting_up)
12478 return 0;
12479
12480 ts = current_trace_status ();
8bd200f1 12481 status = remote_get_trace_status (self, ts);
1e4d1764
YQ
12482
12483 if (status == -1 || !ts->running_known || !ts->running)
12484 return 0;
12485
12486 /* If we are in a tracing experiment, but remote stub doesn't support
12487 installing tracepoint in trace, we have to return. */
12488 if (!remote_supports_install_in_trace ())
12489 return 0;
12490
12491 return 1;
12492}
12493
12494
35b1e5cc 12495static void
559d2b81
TT
12496remote_download_trace_state_variable (struct target_ops *self,
12497 struct trace_state_variable *tsv)
35b1e5cc
SS
12498{
12499 struct remote_state *rs = get_remote_state ();
00bf0b85 12500 char *p;
35b1e5cc 12501
bba74b36
YQ
12502 xsnprintf (rs->buf, get_remote_packet_size (), "QTDV:%x:%s:%x:",
12503 tsv->number, phex ((ULONGEST) tsv->initial_value, 8),
12504 tsv->builtin);
00bf0b85
SS
12505 p = rs->buf + strlen (rs->buf);
12506 if ((p - rs->buf) + strlen (tsv->name) * 2 >= get_remote_packet_size ())
12507 error (_("Trace state variable name too long for tsv definition packet"));
9f1b45b0 12508 p += 2 * bin2hex ((gdb_byte *) (tsv->name), p, strlen (tsv->name));
00bf0b85 12509 *p++ = '\0';
35b1e5cc
SS
12510 putpkt (rs->buf);
12511 remote_get_noisy_reply (&target_buf, &target_buf_size);
ad91cd99
PA
12512 if (*target_buf == '\0')
12513 error (_("Target does not support this command."));
12514 if (strcmp (target_buf, "OK") != 0)
12515 error (_("Error on target while downloading trace state variable."));
35b1e5cc
SS
12516}
12517
d248b706 12518static void
46670d57
TT
12519remote_enable_tracepoint (struct target_ops *self,
12520 struct bp_location *location)
d248b706
KY
12521{
12522 struct remote_state *rs = get_remote_state ();
12523 char addr_buf[40];
12524
12525 sprintf_vma (addr_buf, location->address);
bba74b36
YQ
12526 xsnprintf (rs->buf, get_remote_packet_size (), "QTEnable:%x:%s",
12527 location->owner->number, addr_buf);
d248b706
KY
12528 putpkt (rs->buf);
12529 remote_get_noisy_reply (&rs->buf, &rs->buf_size);
12530 if (*rs->buf == '\0')
12531 error (_("Target does not support enabling tracepoints while a trace run is ongoing."));
12532 if (strcmp (rs->buf, "OK") != 0)
12533 error (_("Error on target while enabling tracepoint."));
12534}
12535
12536static void
780b049c
TT
12537remote_disable_tracepoint (struct target_ops *self,
12538 struct bp_location *location)
d248b706
KY
12539{
12540 struct remote_state *rs = get_remote_state ();
12541 char addr_buf[40];
12542
12543 sprintf_vma (addr_buf, location->address);
bba74b36
YQ
12544 xsnprintf (rs->buf, get_remote_packet_size (), "QTDisable:%x:%s",
12545 location->owner->number, addr_buf);
d248b706
KY
12546 putpkt (rs->buf);
12547 remote_get_noisy_reply (&rs->buf, &rs->buf_size);
12548 if (*rs->buf == '\0')
12549 error (_("Target does not support disabling tracepoints while a trace run is ongoing."));
12550 if (strcmp (rs->buf, "OK") != 0)
12551 error (_("Error on target while disabling tracepoint."));
12552}
12553
35b1e5cc 12554static void
583f9a86 12555remote_trace_set_readonly_regions (struct target_ops *self)
35b1e5cc
SS
12556{
12557 asection *s;
81b9b86e 12558 bfd *abfd = NULL;
35b1e5cc 12559 bfd_size_type size;
608bcef2 12560 bfd_vma vma;
35b1e5cc 12561 int anysecs = 0;
c2fa21f1 12562 int offset = 0;
35b1e5cc
SS
12563
12564 if (!exec_bfd)
12565 return; /* No information to give. */
12566
12567 strcpy (target_buf, "QTro");
9779ab84 12568 offset = strlen (target_buf);
35b1e5cc
SS
12569 for (s = exec_bfd->sections; s; s = s->next)
12570 {
12571 char tmp1[40], tmp2[40];
c2fa21f1 12572 int sec_length;
35b1e5cc
SS
12573
12574 if ((s->flags & SEC_LOAD) == 0 ||
0df8b418 12575 /* (s->flags & SEC_CODE) == 0 || */
35b1e5cc
SS
12576 (s->flags & SEC_READONLY) == 0)
12577 continue;
12578
12579 anysecs = 1;
81b9b86e 12580 vma = bfd_get_section_vma (abfd, s);
35b1e5cc 12581 size = bfd_get_section_size (s);
608bcef2
HZ
12582 sprintf_vma (tmp1, vma);
12583 sprintf_vma (tmp2, vma + size);
c2fa21f1
HZ
12584 sec_length = 1 + strlen (tmp1) + 1 + strlen (tmp2);
12585 if (offset + sec_length + 1 > target_buf_size)
12586 {
4082afcc 12587 if (packet_support (PACKET_qXfer_traceframe_info) != PACKET_ENABLE)
864ac8a7 12588 warning (_("\
c2fa21f1
HZ
12589Too many sections for read-only sections definition packet."));
12590 break;
12591 }
bba74b36
YQ
12592 xsnprintf (target_buf + offset, target_buf_size - offset, ":%s,%s",
12593 tmp1, tmp2);
c2fa21f1 12594 offset += sec_length;
35b1e5cc
SS
12595 }
12596 if (anysecs)
12597 {
12598 putpkt (target_buf);
12599 getpkt (&target_buf, &target_buf_size, 0);
12600 }
12601}
12602
12603static void
e2d1aae3 12604remote_trace_start (struct target_ops *self)
35b1e5cc
SS
12605{
12606 putpkt ("QTStart");
12607 remote_get_noisy_reply (&target_buf, &target_buf_size);
ad91cd99
PA
12608 if (*target_buf == '\0')
12609 error (_("Target does not support this command."));
12610 if (strcmp (target_buf, "OK") != 0)
35b1e5cc
SS
12611 error (_("Bogus reply from target: %s"), target_buf);
12612}
12613
12614static int
8bd200f1 12615remote_get_trace_status (struct target_ops *self, struct trace_status *ts)
35b1e5cc 12616{
953b98d1 12617 /* Initialize it just to avoid a GCC false warning. */
f652de6f 12618 char *p = NULL;
0df8b418 12619 /* FIXME we need to get register block size some other way. */
00bf0b85 12620 extern int trace_regblock_size;
bd3eecc3
PA
12621 enum packet_result result;
12622
4082afcc 12623 if (packet_support (PACKET_qTStatus) == PACKET_DISABLE)
bd3eecc3 12624 return -1;
a744cf53 12625
00bf0b85
SS
12626 trace_regblock_size = get_remote_arch_state ()->sizeof_g_packet;
12627
049dc89b
JK
12628 putpkt ("qTStatus");
12629
492d29ea 12630 TRY
67f41397
JK
12631 {
12632 p = remote_get_noisy_reply (&target_buf, &target_buf_size);
12633 }
492d29ea 12634 CATCH (ex, RETURN_MASK_ERROR)
67f41397 12635 {
598d3636
JK
12636 if (ex.error != TARGET_CLOSE_ERROR)
12637 {
12638 exception_fprintf (gdb_stderr, ex, "qTStatus: ");
12639 return -1;
12640 }
12641 throw_exception (ex);
67f41397 12642 }
492d29ea 12643 END_CATCH
00bf0b85 12644
bd3eecc3
PA
12645 result = packet_ok (p, &remote_protocol_packets[PACKET_qTStatus]);
12646
00bf0b85 12647 /* If the remote target doesn't do tracing, flag it. */
bd3eecc3 12648 if (result == PACKET_UNKNOWN)
00bf0b85 12649 return -1;
35b1e5cc 12650
00bf0b85 12651 /* We're working with a live target. */
f5911ea1 12652 ts->filename = NULL;
00bf0b85 12653
00bf0b85 12654 if (*p++ != 'T')
35b1e5cc
SS
12655 error (_("Bogus trace status reply from target: %s"), target_buf);
12656
84cebc4a
YQ
12657 /* Function 'parse_trace_status' sets default value of each field of
12658 'ts' at first, so we don't have to do it here. */
00bf0b85
SS
12659 parse_trace_status (p, ts);
12660
12661 return ts->running;
35b1e5cc
SS
12662}
12663
70221824 12664static void
db90e85c 12665remote_get_tracepoint_status (struct target_ops *self, struct breakpoint *bp,
f196051f
SS
12666 struct uploaded_tp *utp)
12667{
12668 struct remote_state *rs = get_remote_state ();
f196051f
SS
12669 char *reply;
12670 struct bp_location *loc;
12671 struct tracepoint *tp = (struct tracepoint *) bp;
bba74b36 12672 size_t size = get_remote_packet_size ();
f196051f
SS
12673
12674 if (tp)
12675 {
c1fc2657 12676 tp->hit_count = 0;
f196051f 12677 tp->traceframe_usage = 0;
c1fc2657 12678 for (loc = tp->loc; loc; loc = loc->next)
f196051f
SS
12679 {
12680 /* If the tracepoint was never downloaded, don't go asking for
12681 any status. */
12682 if (tp->number_on_target == 0)
12683 continue;
bba74b36
YQ
12684 xsnprintf (rs->buf, size, "qTP:%x:%s", tp->number_on_target,
12685 phex_nz (loc->address, 0));
f196051f
SS
12686 putpkt (rs->buf);
12687 reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
12688 if (reply && *reply)
12689 {
12690 if (*reply == 'V')
12691 parse_tracepoint_status (reply + 1, bp, utp);
12692 }
12693 }
12694 }
12695 else if (utp)
12696 {
12697 utp->hit_count = 0;
12698 utp->traceframe_usage = 0;
bba74b36
YQ
12699 xsnprintf (rs->buf, size, "qTP:%x:%s", utp->number,
12700 phex_nz (utp->addr, 0));
f196051f
SS
12701 putpkt (rs->buf);
12702 reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
12703 if (reply && *reply)
12704 {
12705 if (*reply == 'V')
12706 parse_tracepoint_status (reply + 1, bp, utp);
12707 }
12708 }
12709}
12710
35b1e5cc 12711static void
74499f1b 12712remote_trace_stop (struct target_ops *self)
35b1e5cc
SS
12713{
12714 putpkt ("QTStop");
12715 remote_get_noisy_reply (&target_buf, &target_buf_size);
ad91cd99
PA
12716 if (*target_buf == '\0')
12717 error (_("Target does not support this command."));
12718 if (strcmp (target_buf, "OK") != 0)
35b1e5cc
SS
12719 error (_("Bogus reply from target: %s"), target_buf);
12720}
12721
12722static int
bd4c6793
TT
12723remote_trace_find (struct target_ops *self,
12724 enum trace_find_type type, int num,
cc5925ad 12725 CORE_ADDR addr1, CORE_ADDR addr2,
35b1e5cc
SS
12726 int *tpp)
12727{
12728 struct remote_state *rs = get_remote_state ();
bba74b36 12729 char *endbuf = rs->buf + get_remote_packet_size ();
35b1e5cc
SS
12730 char *p, *reply;
12731 int target_frameno = -1, target_tracept = -1;
12732
e6e4e701
PA
12733 /* Lookups other than by absolute frame number depend on the current
12734 trace selected, so make sure it is correct on the remote end
12735 first. */
12736 if (type != tfind_number)
12737 set_remote_traceframe ();
12738
35b1e5cc
SS
12739 p = rs->buf;
12740 strcpy (p, "QTFrame:");
12741 p = strchr (p, '\0');
12742 switch (type)
12743 {
12744 case tfind_number:
bba74b36 12745 xsnprintf (p, endbuf - p, "%x", num);
35b1e5cc
SS
12746 break;
12747 case tfind_pc:
bba74b36 12748 xsnprintf (p, endbuf - p, "pc:%s", phex_nz (addr1, 0));
35b1e5cc
SS
12749 break;
12750 case tfind_tp:
bba74b36 12751 xsnprintf (p, endbuf - p, "tdp:%x", num);
35b1e5cc
SS
12752 break;
12753 case tfind_range:
bba74b36
YQ
12754 xsnprintf (p, endbuf - p, "range:%s:%s", phex_nz (addr1, 0),
12755 phex_nz (addr2, 0));
35b1e5cc
SS
12756 break;
12757 case tfind_outside:
bba74b36
YQ
12758 xsnprintf (p, endbuf - p, "outside:%s:%s", phex_nz (addr1, 0),
12759 phex_nz (addr2, 0));
35b1e5cc
SS
12760 break;
12761 default:
9b20d036 12762 error (_("Unknown trace find type %d"), type);
35b1e5cc
SS
12763 }
12764
12765 putpkt (rs->buf);
2f65bcb7 12766 reply = remote_get_noisy_reply (&(rs->buf), &rs->buf_size);
ad91cd99
PA
12767 if (*reply == '\0')
12768 error (_("Target does not support this command."));
35b1e5cc
SS
12769
12770 while (reply && *reply)
12771 switch (*reply)
12772 {
12773 case 'F':
f197e0f1
VP
12774 p = ++reply;
12775 target_frameno = (int) strtol (p, &reply, 16);
12776 if (reply == p)
12777 error (_("Unable to parse trace frame number"));
e6e4e701
PA
12778 /* Don't update our remote traceframe number cache on failure
12779 to select a remote traceframe. */
f197e0f1
VP
12780 if (target_frameno == -1)
12781 return -1;
35b1e5cc
SS
12782 break;
12783 case 'T':
f197e0f1
VP
12784 p = ++reply;
12785 target_tracept = (int) strtol (p, &reply, 16);
12786 if (reply == p)
12787 error (_("Unable to parse tracepoint number"));
35b1e5cc
SS
12788 break;
12789 case 'O': /* "OK"? */
12790 if (reply[1] == 'K' && reply[2] == '\0')
12791 reply += 2;
12792 else
12793 error (_("Bogus reply from target: %s"), reply);
12794 break;
12795 default:
12796 error (_("Bogus reply from target: %s"), reply);
12797 }
12798 if (tpp)
12799 *tpp = target_tracept;
e6e4e701 12800
262e1174 12801 rs->remote_traceframe_number = target_frameno;
35b1e5cc
SS
12802 return target_frameno;
12803}
12804
12805static int
4011015b
TT
12806remote_get_trace_state_variable_value (struct target_ops *self,
12807 int tsvnum, LONGEST *val)
35b1e5cc
SS
12808{
12809 struct remote_state *rs = get_remote_state ();
12810 char *reply;
12811 ULONGEST uval;
12812
e6e4e701
PA
12813 set_remote_traceframe ();
12814
bba74b36 12815 xsnprintf (rs->buf, get_remote_packet_size (), "qTV:%x", tsvnum);
35b1e5cc
SS
12816 putpkt (rs->buf);
12817 reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
12818 if (reply && *reply)
12819 {
12820 if (*reply == 'V')
12821 {
12822 unpack_varlen_hex (reply + 1, &uval);
12823 *val = (LONGEST) uval;
12824 return 1;
12825 }
12826 }
12827 return 0;
12828}
12829
00bf0b85 12830static int
dc3decaf 12831remote_save_trace_data (struct target_ops *self, const char *filename)
00bf0b85
SS
12832{
12833 struct remote_state *rs = get_remote_state ();
12834 char *p, *reply;
12835
12836 p = rs->buf;
12837 strcpy (p, "QTSave:");
12838 p += strlen (p);
12839 if ((p - rs->buf) + strlen (filename) * 2 >= get_remote_packet_size ())
12840 error (_("Remote file name too long for trace save packet"));
9f1b45b0 12841 p += 2 * bin2hex ((gdb_byte *) filename, p, strlen (filename));
00bf0b85
SS
12842 *p++ = '\0';
12843 putpkt (rs->buf);
ad91cd99 12844 reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
d6c5869f 12845 if (*reply == '\0')
ad91cd99
PA
12846 error (_("Target does not support this command."));
12847 if (strcmp (reply, "OK") != 0)
12848 error (_("Bogus reply from target: %s"), reply);
00bf0b85
SS
12849 return 0;
12850}
12851
12852/* This is basically a memory transfer, but needs to be its own packet
12853 because we don't know how the target actually organizes its trace
12854 memory, plus we want to be able to ask for as much as possible, but
12855 not be unhappy if we don't get as much as we ask for. */
12856
12857static LONGEST
88ee6f45
TT
12858remote_get_raw_trace_data (struct target_ops *self,
12859 gdb_byte *buf, ULONGEST offset, LONGEST len)
00bf0b85
SS
12860{
12861 struct remote_state *rs = get_remote_state ();
12862 char *reply;
12863 char *p;
12864 int rslt;
12865
12866 p = rs->buf;
12867 strcpy (p, "qTBuffer:");
12868 p += strlen (p);
12869 p += hexnumstr (p, offset);
12870 *p++ = ',';
12871 p += hexnumstr (p, len);
12872 *p++ = '\0';
12873
12874 putpkt (rs->buf);
12875 reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
12876 if (reply && *reply)
12877 {
12878 /* 'l' by itself means we're at the end of the buffer and
12879 there is nothing more to get. */
12880 if (*reply == 'l')
12881 return 0;
12882
12883 /* Convert the reply into binary. Limit the number of bytes to
12884 convert according to our passed-in buffer size, rather than
12885 what was returned in the packet; if the target is
12886 unexpectedly generous and gives us a bigger reply than we
12887 asked for, we don't want to crash. */
12888 rslt = hex2bin (target_buf, buf, len);
12889 return rslt;
12890 }
12891
12892 /* Something went wrong, flag as an error. */
12893 return -1;
12894}
12895
35b1e5cc 12896static void
37b25738 12897remote_set_disconnected_tracing (struct target_ops *self, int val)
35b1e5cc
SS
12898{
12899 struct remote_state *rs = get_remote_state ();
12900
4082afcc 12901 if (packet_support (PACKET_DisconnectedTracing_feature) == PACKET_ENABLE)
33da3f1c 12902 {
ad91cd99
PA
12903 char *reply;
12904
bba74b36 12905 xsnprintf (rs->buf, get_remote_packet_size (), "QTDisconnected:%x", val);
33da3f1c 12906 putpkt (rs->buf);
ad91cd99
PA
12907 reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
12908 if (*reply == '\0')
33da3f1c 12909 error (_("Target does not support this command."));
ad91cd99
PA
12910 if (strcmp (reply, "OK") != 0)
12911 error (_("Bogus reply from target: %s"), reply);
33da3f1c
SS
12912 }
12913 else if (val)
12914 warning (_("Target does not support disconnected tracing."));
35b1e5cc
SS
12915}
12916
dc146f7c
VP
12917static int
12918remote_core_of_thread (struct target_ops *ops, ptid_t ptid)
12919{
12920 struct thread_info *info = find_thread_ptid (ptid);
a744cf53 12921
fe978cb0
PA
12922 if (info && info->priv)
12923 return info->priv->core;
dc146f7c
VP
12924 return -1;
12925}
12926
4daf5ac0 12927static void
736d5b1f 12928remote_set_circular_trace_buffer (struct target_ops *self, int val)
4daf5ac0
SS
12929{
12930 struct remote_state *rs = get_remote_state ();
ad91cd99 12931 char *reply;
4daf5ac0 12932
bba74b36 12933 xsnprintf (rs->buf, get_remote_packet_size (), "QTBuffer:circular:%x", val);
4daf5ac0 12934 putpkt (rs->buf);
ad91cd99
PA
12935 reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
12936 if (*reply == '\0')
4daf5ac0 12937 error (_("Target does not support this command."));
ad91cd99
PA
12938 if (strcmp (reply, "OK") != 0)
12939 error (_("Bogus reply from target: %s"), reply);
4daf5ac0
SS
12940}
12941
b3b9301e 12942static struct traceframe_info *
a893e81f 12943remote_traceframe_info (struct target_ops *self)
b3b9301e
PA
12944{
12945 char *text;
12946
12947 text = target_read_stralloc (&current_target,
12948 TARGET_OBJECT_TRACEFRAME_INFO, NULL);
12949 if (text != NULL)
12950 {
12951 struct traceframe_info *info;
12952 struct cleanup *back_to = make_cleanup (xfree, text);
12953
12954 info = parse_traceframe_info (text);
12955 do_cleanups (back_to);
12956 return info;
12957 }
12958
12959 return NULL;
12960}
12961
405f8e94
SS
12962/* Handle the qTMinFTPILen packet. Returns the minimum length of
12963 instruction on which a fast tracepoint may be placed. Returns -1
12964 if the packet is not supported, and 0 if the minimum instruction
12965 length is unknown. */
12966
12967static int
0e67620a 12968remote_get_min_fast_tracepoint_insn_len (struct target_ops *self)
405f8e94
SS
12969{
12970 struct remote_state *rs = get_remote_state ();
12971 char *reply;
12972
e886a173
PA
12973 /* If we're not debugging a process yet, the IPA can't be
12974 loaded. */
12975 if (!target_has_execution)
12976 return 0;
12977
12978 /* Make sure the remote is pointing at the right process. */
12979 set_general_process ();
12980
bba74b36 12981 xsnprintf (rs->buf, get_remote_packet_size (), "qTMinFTPILen");
405f8e94
SS
12982 putpkt (rs->buf);
12983 reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
12984 if (*reply == '\0')
12985 return -1;
12986 else
12987 {
12988 ULONGEST min_insn_len;
12989
12990 unpack_varlen_hex (reply, &min_insn_len);
12991
12992 return (int) min_insn_len;
12993 }
12994}
12995
f6f899bf 12996static void
4da384be 12997remote_set_trace_buffer_size (struct target_ops *self, LONGEST val)
f6f899bf 12998{
4082afcc 12999 if (packet_support (PACKET_QTBuffer_size) != PACKET_DISABLE)
f6f899bf
HAQ
13000 {
13001 struct remote_state *rs = get_remote_state ();
13002 char *buf = rs->buf;
13003 char *endbuf = rs->buf + get_remote_packet_size ();
13004 enum packet_result result;
13005
13006 gdb_assert (val >= 0 || val == -1);
13007 buf += xsnprintf (buf, endbuf - buf, "QTBuffer:size:");
13008 /* Send -1 as literal "-1" to avoid host size dependency. */
13009 if (val < 0)
13010 {
13011 *buf++ = '-';
13012 buf += hexnumstr (buf, (ULONGEST) -val);
13013 }
13014 else
13015 buf += hexnumstr (buf, (ULONGEST) val);
13016
13017 putpkt (rs->buf);
13018 remote_get_noisy_reply (&rs->buf, &rs->buf_size);
13019 result = packet_ok (rs->buf,
13020 &remote_protocol_packets[PACKET_QTBuffer_size]);
13021
13022 if (result != PACKET_OK)
13023 warning (_("Bogus reply from target: %s"), rs->buf);
13024 }
13025}
13026
f196051f 13027static int
d9e68a2c
TT
13028remote_set_trace_notes (struct target_ops *self,
13029 const char *user, const char *notes,
ca623f82 13030 const char *stop_notes)
f196051f
SS
13031{
13032 struct remote_state *rs = get_remote_state ();
13033 char *reply;
13034 char *buf = rs->buf;
13035 char *endbuf = rs->buf + get_remote_packet_size ();
13036 int nbytes;
13037
13038 buf += xsnprintf (buf, endbuf - buf, "QTNotes:");
13039 if (user)
13040 {
13041 buf += xsnprintf (buf, endbuf - buf, "user:");
9f1b45b0 13042 nbytes = bin2hex ((gdb_byte *) user, buf, strlen (user));
f196051f
SS
13043 buf += 2 * nbytes;
13044 *buf++ = ';';
13045 }
13046 if (notes)
13047 {
13048 buf += xsnprintf (buf, endbuf - buf, "notes:");
9f1b45b0 13049 nbytes = bin2hex ((gdb_byte *) notes, buf, strlen (notes));
f196051f
SS
13050 buf += 2 * nbytes;
13051 *buf++ = ';';
13052 }
13053 if (stop_notes)
13054 {
13055 buf += xsnprintf (buf, endbuf - buf, "tstop:");
9f1b45b0 13056 nbytes = bin2hex ((gdb_byte *) stop_notes, buf, strlen (stop_notes));
f196051f
SS
13057 buf += 2 * nbytes;
13058 *buf++ = ';';
13059 }
13060 /* Ensure the buffer is terminated. */
13061 *buf = '\0';
13062
13063 putpkt (rs->buf);
13064 reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
13065 if (*reply == '\0')
13066 return 0;
13067
13068 if (strcmp (reply, "OK") != 0)
13069 error (_("Bogus reply from target: %s"), reply);
13070
13071 return 1;
13072}
13073
d1feda86 13074static int
2c152180 13075remote_use_agent (struct target_ops *self, int use)
d1feda86 13076{
4082afcc 13077 if (packet_support (PACKET_QAgent) != PACKET_DISABLE)
d1feda86
YQ
13078 {
13079 struct remote_state *rs = get_remote_state ();
13080
13081 /* If the stub supports QAgent. */
bba74b36 13082 xsnprintf (rs->buf, get_remote_packet_size (), "QAgent:%d", use);
d1feda86
YQ
13083 putpkt (rs->buf);
13084 getpkt (&rs->buf, &rs->buf_size, 0);
13085
13086 if (strcmp (rs->buf, "OK") == 0)
13087 {
13088 use_agent = use;
13089 return 1;
13090 }
13091 }
13092
13093 return 0;
13094}
13095
13096static int
fe38f897 13097remote_can_use_agent (struct target_ops *self)
d1feda86 13098{
4082afcc 13099 return (packet_support (PACKET_QAgent) != PACKET_DISABLE);
d1feda86
YQ
13100}
13101
9accd112
MM
13102struct btrace_target_info
13103{
13104 /* The ptid of the traced thread. */
13105 ptid_t ptid;
f4abbc16
MM
13106
13107 /* The obtained branch trace configuration. */
13108 struct btrace_config conf;
9accd112
MM
13109};
13110
f4abbc16
MM
13111/* Reset our idea of our target's btrace configuration. */
13112
13113static void
13114remote_btrace_reset (void)
13115{
13116 struct remote_state *rs = get_remote_state ();
13117
13118 memset (&rs->btrace_config, 0, sizeof (rs->btrace_config));
13119}
13120
9accd112
MM
13121/* Check whether the target supports branch tracing. */
13122
13123static int
043c3577 13124remote_supports_btrace (struct target_ops *self, enum btrace_format format)
9accd112 13125{
4082afcc 13126 if (packet_support (PACKET_Qbtrace_off) != PACKET_ENABLE)
9accd112 13127 return 0;
4082afcc 13128 if (packet_support (PACKET_qXfer_btrace) != PACKET_ENABLE)
9accd112
MM
13129 return 0;
13130
043c3577
MM
13131 switch (format)
13132 {
13133 case BTRACE_FORMAT_NONE:
13134 return 0;
13135
13136 case BTRACE_FORMAT_BTS:
13137 return (packet_support (PACKET_Qbtrace_bts) == PACKET_ENABLE);
b20a6524
MM
13138
13139 case BTRACE_FORMAT_PT:
13140 /* The trace is decoded on the host. Even if our target supports it,
13141 we still need to have libipt to decode the trace. */
13142#if defined (HAVE_LIBIPT)
13143 return (packet_support (PACKET_Qbtrace_pt) == PACKET_ENABLE);
13144#else /* !defined (HAVE_LIBIPT) */
13145 return 0;
13146#endif /* !defined (HAVE_LIBIPT) */
043c3577
MM
13147 }
13148
13149 internal_error (__FILE__, __LINE__, _("Unknown branch trace format"));
9accd112
MM
13150}
13151
f4abbc16
MM
13152/* Synchronize the configuration with the target. */
13153
13154static void
13155btrace_sync_conf (const struct btrace_config *conf)
13156{
d33501a5
MM
13157 struct packet_config *packet;
13158 struct remote_state *rs;
13159 char *buf, *pos, *endbuf;
13160
13161 rs = get_remote_state ();
13162 buf = rs->buf;
13163 endbuf = buf + get_remote_packet_size ();
13164
13165 packet = &remote_protocol_packets[PACKET_Qbtrace_conf_bts_size];
13166 if (packet_config_support (packet) == PACKET_ENABLE
13167 && conf->bts.size != rs->btrace_config.bts.size)
13168 {
13169 pos = buf;
13170 pos += xsnprintf (pos, endbuf - pos, "%s=0x%x", packet->name,
13171 conf->bts.size);
13172
13173 putpkt (buf);
13174 getpkt (&buf, &rs->buf_size, 0);
13175
13176 if (packet_ok (buf, packet) == PACKET_ERROR)
13177 {
13178 if (buf[0] == 'E' && buf[1] == '.')
13179 error (_("Failed to configure the BTS buffer size: %s"), buf + 2);
13180 else
13181 error (_("Failed to configure the BTS buffer size."));
13182 }
13183
13184 rs->btrace_config.bts.size = conf->bts.size;
13185 }
b20a6524
MM
13186
13187 packet = &remote_protocol_packets[PACKET_Qbtrace_conf_pt_size];
13188 if (packet_config_support (packet) == PACKET_ENABLE
13189 && conf->pt.size != rs->btrace_config.pt.size)
13190 {
13191 pos = buf;
13192 pos += xsnprintf (pos, endbuf - pos, "%s=0x%x", packet->name,
13193 conf->pt.size);
13194
13195 putpkt (buf);
13196 getpkt (&buf, &rs->buf_size, 0);
13197
13198 if (packet_ok (buf, packet) == PACKET_ERROR)
13199 {
13200 if (buf[0] == 'E' && buf[1] == '.')
13201 error (_("Failed to configure the trace buffer size: %s"), buf + 2);
13202 else
13203 error (_("Failed to configure the trace buffer size."));
13204 }
13205
13206 rs->btrace_config.pt.size = conf->pt.size;
13207 }
f4abbc16
MM
13208}
13209
13210/* Read the current thread's btrace configuration from the target and
13211 store it into CONF. */
13212
13213static void
13214btrace_read_config (struct btrace_config *conf)
13215{
13216 char *xml;
13217
13218 xml = target_read_stralloc (&current_target,
b20a6524 13219 TARGET_OBJECT_BTRACE_CONF, "");
f4abbc16
MM
13220 if (xml != NULL)
13221 {
13222 struct cleanup *cleanup;
13223
13224 cleanup = make_cleanup (xfree, xml);
13225 parse_xml_btrace_conf (conf, xml);
13226 do_cleanups (cleanup);
13227 }
13228}
13229
c0272db5
TW
13230/* Maybe reopen target btrace. */
13231
13232static void
13233remote_btrace_maybe_reopen (void)
13234{
13235 struct remote_state *rs = get_remote_state ();
c0272db5
TW
13236 struct thread_info *tp;
13237 int btrace_target_pushed = 0;
13238 int warned = 0;
13239
5ed8105e
PA
13240 scoped_restore_current_thread restore_thread;
13241
c0272db5
TW
13242 ALL_NON_EXITED_THREADS (tp)
13243 {
13244 set_general_thread (tp->ptid);
13245
13246 memset (&rs->btrace_config, 0x00, sizeof (struct btrace_config));
13247 btrace_read_config (&rs->btrace_config);
13248
13249 if (rs->btrace_config.format == BTRACE_FORMAT_NONE)
13250 continue;
13251
13252#if !defined (HAVE_LIBIPT)
13253 if (rs->btrace_config.format == BTRACE_FORMAT_PT)
13254 {
13255 if (!warned)
13256 {
13257 warned = 1;
13258 warning (_("GDB does not support Intel Processor Trace. "
13259 "\"record\" will not work in this session."));
13260 }
13261
13262 continue;
13263 }
13264#endif /* !defined (HAVE_LIBIPT) */
13265
13266 /* Push target, once, but before anything else happens. This way our
13267 changes to the threads will be cleaned up by unpushing the target
13268 in case btrace_read_config () throws. */
13269 if (!btrace_target_pushed)
13270 {
13271 btrace_target_pushed = 1;
13272 record_btrace_push_target ();
13273 printf_filtered (_("Target is recording using %s.\n"),
13274 btrace_format_string (rs->btrace_config.format));
13275 }
13276
13277 tp->btrace.target = XCNEW (struct btrace_target_info);
13278 tp->btrace.target->ptid = tp->ptid;
13279 tp->btrace.target->conf = rs->btrace_config;
13280 }
c0272db5
TW
13281}
13282
9accd112
MM
13283/* Enable branch tracing. */
13284
13285static struct btrace_target_info *
f4abbc16
MM
13286remote_enable_btrace (struct target_ops *self, ptid_t ptid,
13287 const struct btrace_config *conf)
9accd112
MM
13288{
13289 struct btrace_target_info *tinfo = NULL;
b20a6524 13290 struct packet_config *packet = NULL;
9accd112
MM
13291 struct remote_state *rs = get_remote_state ();
13292 char *buf = rs->buf;
13293 char *endbuf = rs->buf + get_remote_packet_size ();
13294
b20a6524
MM
13295 switch (conf->format)
13296 {
13297 case BTRACE_FORMAT_BTS:
13298 packet = &remote_protocol_packets[PACKET_Qbtrace_bts];
13299 break;
13300
13301 case BTRACE_FORMAT_PT:
13302 packet = &remote_protocol_packets[PACKET_Qbtrace_pt];
13303 break;
13304 }
13305
13306 if (packet == NULL || packet_config_support (packet) != PACKET_ENABLE)
9accd112
MM
13307 error (_("Target does not support branch tracing."));
13308
f4abbc16
MM
13309 btrace_sync_conf (conf);
13310
9accd112
MM
13311 set_general_thread (ptid);
13312
13313 buf += xsnprintf (buf, endbuf - buf, "%s", packet->name);
13314 putpkt (rs->buf);
13315 getpkt (&rs->buf, &rs->buf_size, 0);
13316
13317 if (packet_ok (rs->buf, packet) == PACKET_ERROR)
13318 {
13319 if (rs->buf[0] == 'E' && rs->buf[1] == '.')
13320 error (_("Could not enable branch tracing for %s: %s"),
13321 target_pid_to_str (ptid), rs->buf + 2);
13322 else
13323 error (_("Could not enable branch tracing for %s."),
13324 target_pid_to_str (ptid));
13325 }
13326
8d749320 13327 tinfo = XCNEW (struct btrace_target_info);
9accd112
MM
13328 tinfo->ptid = ptid;
13329
f4abbc16
MM
13330 /* If we fail to read the configuration, we lose some information, but the
13331 tracing itself is not impacted. */
492d29ea
PA
13332 TRY
13333 {
13334 btrace_read_config (&tinfo->conf);
13335 }
13336 CATCH (err, RETURN_MASK_ERROR)
13337 {
13338 if (err.message != NULL)
13339 warning ("%s", err.message);
13340 }
13341 END_CATCH
f4abbc16 13342
9accd112
MM
13343 return tinfo;
13344}
13345
13346/* Disable branch tracing. */
13347
13348static void
25e95349
TT
13349remote_disable_btrace (struct target_ops *self,
13350 struct btrace_target_info *tinfo)
9accd112
MM
13351{
13352 struct packet_config *packet = &remote_protocol_packets[PACKET_Qbtrace_off];
13353 struct remote_state *rs = get_remote_state ();
13354 char *buf = rs->buf;
13355 char *endbuf = rs->buf + get_remote_packet_size ();
13356
4082afcc 13357 if (packet_config_support (packet) != PACKET_ENABLE)
9accd112
MM
13358 error (_("Target does not support branch tracing."));
13359
13360 set_general_thread (tinfo->ptid);
13361
13362 buf += xsnprintf (buf, endbuf - buf, "%s", packet->name);
13363 putpkt (rs->buf);
13364 getpkt (&rs->buf, &rs->buf_size, 0);
13365
13366 if (packet_ok (rs->buf, packet) == PACKET_ERROR)
13367 {
13368 if (rs->buf[0] == 'E' && rs->buf[1] == '.')
13369 error (_("Could not disable branch tracing for %s: %s"),
13370 target_pid_to_str (tinfo->ptid), rs->buf + 2);
13371 else
13372 error (_("Could not disable branch tracing for %s."),
13373 target_pid_to_str (tinfo->ptid));
13374 }
13375
13376 xfree (tinfo);
13377}
13378
13379/* Teardown branch tracing. */
13380
13381static void
1777056d
TT
13382remote_teardown_btrace (struct target_ops *self,
13383 struct btrace_target_info *tinfo)
9accd112
MM
13384{
13385 /* We must not talk to the target during teardown. */
13386 xfree (tinfo);
13387}
13388
13389/* Read the branch trace. */
13390
969c39fb 13391static enum btrace_error
39c49f83 13392remote_read_btrace (struct target_ops *self,
734b0e4b 13393 struct btrace_data *btrace,
969c39fb 13394 struct btrace_target_info *tinfo,
9accd112
MM
13395 enum btrace_read_type type)
13396{
13397 struct packet_config *packet = &remote_protocol_packets[PACKET_qXfer_btrace];
969c39fb 13398 struct cleanup *cleanup;
9accd112
MM
13399 const char *annex;
13400 char *xml;
13401
4082afcc 13402 if (packet_config_support (packet) != PACKET_ENABLE)
9accd112
MM
13403 error (_("Target does not support branch tracing."));
13404
13405#if !defined(HAVE_LIBEXPAT)
13406 error (_("Cannot process branch tracing result. XML parsing not supported."));
13407#endif
13408
13409 switch (type)
13410 {
864089d2 13411 case BTRACE_READ_ALL:
9accd112
MM
13412 annex = "all";
13413 break;
864089d2 13414 case BTRACE_READ_NEW:
9accd112
MM
13415 annex = "new";
13416 break;
969c39fb
MM
13417 case BTRACE_READ_DELTA:
13418 annex = "delta";
13419 break;
9accd112
MM
13420 default:
13421 internal_error (__FILE__, __LINE__,
13422 _("Bad branch tracing read type: %u."),
13423 (unsigned int) type);
13424 }
13425
13426 xml = target_read_stralloc (&current_target,
b20a6524 13427 TARGET_OBJECT_BTRACE, annex);
969c39fb
MM
13428 if (xml == NULL)
13429 return BTRACE_ERR_UNKNOWN;
9accd112 13430
969c39fb 13431 cleanup = make_cleanup (xfree, xml);
734b0e4b 13432 parse_xml_btrace (btrace, xml);
969c39fb 13433 do_cleanups (cleanup);
9accd112 13434
969c39fb 13435 return BTRACE_ERR_NONE;
9accd112
MM
13436}
13437
f4abbc16
MM
13438static const struct btrace_config *
13439remote_btrace_conf (struct target_ops *self,
13440 const struct btrace_target_info *tinfo)
13441{
13442 return &tinfo->conf;
13443}
13444
ced63ec0 13445static int
5436ff03 13446remote_augmented_libraries_svr4_read (struct target_ops *self)
ced63ec0 13447{
4082afcc
PA
13448 return (packet_support (PACKET_augmented_libraries_svr4_read_feature)
13449 == PACKET_ENABLE);
ced63ec0
GB
13450}
13451
9dd130a0
TT
13452/* Implementation of to_load. */
13453
13454static void
9cbe5fff 13455remote_load (struct target_ops *self, const char *name, int from_tty)
9dd130a0
TT
13456{
13457 generic_load (name, from_tty);
13458}
13459
c78fa86a
GB
13460/* Accepts an integer PID; returns a string representing a file that
13461 can be opened on the remote side to get the symbols for the child
13462 process. Returns NULL if the operation is not supported. */
13463
13464static char *
13465remote_pid_to_exec_file (struct target_ops *self, int pid)
13466{
13467 static char *filename = NULL;
835205d0
GB
13468 struct inferior *inf;
13469 char *annex = NULL;
c78fa86a
GB
13470
13471 if (packet_support (PACKET_qXfer_exec_file) != PACKET_ENABLE)
13472 return NULL;
13473
13474 if (filename != NULL)
13475 xfree (filename);
13476
835205d0
GB
13477 inf = find_inferior_pid (pid);
13478 if (inf == NULL)
13479 internal_error (__FILE__, __LINE__,
13480 _("not currently attached to process %d"), pid);
13481
13482 if (!inf->fake_pid_p)
13483 {
13484 const int annex_size = 9;
13485
224c3ddb 13486 annex = (char *) alloca (annex_size);
835205d0
GB
13487 xsnprintf (annex, annex_size, "%x", pid);
13488 }
13489
c78fa86a
GB
13490 filename = target_read_stralloc (&current_target,
13491 TARGET_OBJECT_EXEC_FILE, annex);
13492
13493 return filename;
13494}
13495
750ce8d1
YQ
13496/* Implement the to_can_do_single_step target_ops method. */
13497
13498static int
13499remote_can_do_single_step (struct target_ops *ops)
13500{
13501 /* We can only tell whether target supports single step or not by
13502 supported s and S vCont actions if the stub supports vContSupported
13503 feature. If the stub doesn't support vContSupported feature,
13504 we have conservatively to think target doesn't supports single
13505 step. */
13506 if (packet_support (PACKET_vContSupported) == PACKET_ENABLE)
13507 {
13508 struct remote_state *rs = get_remote_state ();
13509
13510 if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
13511 remote_vcont_probe (rs);
13512
13513 return rs->supports_vCont.s && rs->supports_vCont.S;
13514 }
13515 else
13516 return 0;
13517}
13518
3a00c802
PA
13519/* Implementation of the to_execution_direction method for the remote
13520 target. */
13521
13522static enum exec_direction_kind
13523remote_execution_direction (struct target_ops *self)
13524{
13525 struct remote_state *rs = get_remote_state ();
13526
13527 return rs->last_resume_exec_dir;
13528}
13529
c906108c 13530static void
fba45db2 13531init_remote_ops (void)
c906108c 13532{
c5aa993b 13533 remote_ops.to_shortname = "remote";
c906108c 13534 remote_ops.to_longname = "Remote serial target in gdb-specific protocol";
c5aa993b 13535 remote_ops.to_doc =
c906108c 13536 "Use a remote computer via a serial line, using a gdb-specific protocol.\n\
0d06e24b
JM
13537Specify the serial device it is connected to\n\
13538(e.g. /dev/ttyS0, /dev/ttya, COM1, etc.).";
c5aa993b
JM
13539 remote_ops.to_open = remote_open;
13540 remote_ops.to_close = remote_close;
c906108c 13541 remote_ops.to_detach = remote_detach;
6ad8ae5c 13542 remote_ops.to_disconnect = remote_disconnect;
c5aa993b 13543 remote_ops.to_resume = remote_resume;
85ad3aaf 13544 remote_ops.to_commit_resume = remote_commit_resume;
c906108c
SS
13545 remote_ops.to_wait = remote_wait;
13546 remote_ops.to_fetch_registers = remote_fetch_registers;
13547 remote_ops.to_store_registers = remote_store_registers;
13548 remote_ops.to_prepare_to_store = remote_prepare_to_store;
c5aa993b 13549 remote_ops.to_files_info = remote_files_info;
c906108c
SS
13550 remote_ops.to_insert_breakpoint = remote_insert_breakpoint;
13551 remote_ops.to_remove_breakpoint = remote_remove_breakpoint;
f7e6eed5
PA
13552 remote_ops.to_stopped_by_sw_breakpoint = remote_stopped_by_sw_breakpoint;
13553 remote_ops.to_supports_stopped_by_sw_breakpoint = remote_supports_stopped_by_sw_breakpoint;
13554 remote_ops.to_stopped_by_hw_breakpoint = remote_stopped_by_hw_breakpoint;
13555 remote_ops.to_supports_stopped_by_hw_breakpoint = remote_supports_stopped_by_hw_breakpoint;
3c3bea1c
GS
13556 remote_ops.to_stopped_by_watchpoint = remote_stopped_by_watchpoint;
13557 remote_ops.to_stopped_data_address = remote_stopped_data_address;
283002cf
MR
13558 remote_ops.to_watchpoint_addr_within_range =
13559 remote_watchpoint_addr_within_range;
3c3bea1c
GS
13560 remote_ops.to_can_use_hw_breakpoint = remote_check_watch_resources;
13561 remote_ops.to_insert_hw_breakpoint = remote_insert_hw_breakpoint;
13562 remote_ops.to_remove_hw_breakpoint = remote_remove_hw_breakpoint;
480a3f21
PW
13563 remote_ops.to_region_ok_for_hw_watchpoint
13564 = remote_region_ok_for_hw_watchpoint;
3c3bea1c
GS
13565 remote_ops.to_insert_watchpoint = remote_insert_watchpoint;
13566 remote_ops.to_remove_watchpoint = remote_remove_watchpoint;
c5aa993b 13567 remote_ops.to_kill = remote_kill;
9dd130a0 13568 remote_ops.to_load = remote_load;
c906108c 13569 remote_ops.to_mourn_inferior = remote_mourn;
2455069d 13570 remote_ops.to_pass_signals = remote_pass_signals;
82075af2 13571 remote_ops.to_set_syscall_catchpoint = remote_set_syscall_catchpoint;
9b224c5e 13572 remote_ops.to_program_signals = remote_program_signals;
c906108c 13573 remote_ops.to_thread_alive = remote_thread_alive;
79efa585 13574 remote_ops.to_thread_name = remote_thread_name;
e8032dde 13575 remote_ops.to_update_thread_list = remote_update_thread_list;
0caabb7e 13576 remote_ops.to_pid_to_str = remote_pid_to_str;
cf759d3b 13577 remote_ops.to_extra_thread_info = remote_threads_extra_info;
10760264 13578 remote_ops.to_get_ada_task_ptid = remote_get_ada_task_ptid;
c906108c 13579 remote_ops.to_stop = remote_stop;
bfedc46a 13580 remote_ops.to_interrupt = remote_interrupt;
93692b58 13581 remote_ops.to_pass_ctrlc = remote_pass_ctrlc;
4b8a223f 13582 remote_ops.to_xfer_partial = remote_xfer_partial;
09c98b44 13583 remote_ops.to_get_memory_xfer_limit = remote_get_memory_xfer_limit;
96baa820 13584 remote_ops.to_rcmd = remote_rcmd;
c78fa86a 13585 remote_ops.to_pid_to_exec_file = remote_pid_to_exec_file;
49d03eab 13586 remote_ops.to_log_command = serial_log_command;
38691318 13587 remote_ops.to_get_thread_local_address = remote_get_thread_local_address;
c906108c 13588 remote_ops.to_stratum = process_stratum;
c35b1492
PA
13589 remote_ops.to_has_all_memory = default_child_has_all_memory;
13590 remote_ops.to_has_memory = default_child_has_memory;
13591 remote_ops.to_has_stack = default_child_has_stack;
13592 remote_ops.to_has_registers = default_child_has_registers;
13593 remote_ops.to_has_execution = default_child_has_execution;
3e43a32a 13594 remote_ops.to_has_thread_control = tc_schedlock; /* can lock scheduler */
b2175913 13595 remote_ops.to_can_execute_reverse = remote_can_execute_reverse;
c5aa993b 13596 remote_ops.to_magic = OPS_MAGIC;
fd79ecee 13597 remote_ops.to_memory_map = remote_memory_map;
a76d924d
DJ
13598 remote_ops.to_flash_erase = remote_flash_erase;
13599 remote_ops.to_flash_done = remote_flash_done;
29709017 13600 remote_ops.to_read_description = remote_read_description;
08388c79 13601 remote_ops.to_search_memory = remote_search_memory;
75c99385
PA
13602 remote_ops.to_can_async_p = remote_can_async_p;
13603 remote_ops.to_is_async_p = remote_is_async_p;
13604 remote_ops.to_async = remote_async;
65706a29 13605 remote_ops.to_thread_events = remote_thread_events;
750ce8d1 13606 remote_ops.to_can_do_single_step = remote_can_do_single_step;
75c99385
PA
13607 remote_ops.to_terminal_inferior = remote_terminal_inferior;
13608 remote_ops.to_terminal_ours = remote_terminal_ours;
74531fed 13609 remote_ops.to_supports_non_stop = remote_supports_non_stop;
8a305172 13610 remote_ops.to_supports_multi_process = remote_supports_multi_process;
03583c20
UW
13611 remote_ops.to_supports_disable_randomization
13612 = remote_supports_disable_randomization;
4bd7dc42 13613 remote_ops.to_filesystem_is_local = remote_filesystem_is_local;
7313baad
UW
13614 remote_ops.to_fileio_open = remote_hostio_open;
13615 remote_ops.to_fileio_pwrite = remote_hostio_pwrite;
13616 remote_ops.to_fileio_pread = remote_hostio_pread;
9b15c1f0 13617 remote_ops.to_fileio_fstat = remote_hostio_fstat;
7313baad
UW
13618 remote_ops.to_fileio_close = remote_hostio_close;
13619 remote_ops.to_fileio_unlink = remote_hostio_unlink;
b9e7b9c3 13620 remote_ops.to_fileio_readlink = remote_hostio_readlink;
d248b706 13621 remote_ops.to_supports_enable_disable_tracepoint = remote_supports_enable_disable_tracepoint;
3065dfb6 13622 remote_ops.to_supports_string_tracing = remote_supports_string_tracing;
b775012e 13623 remote_ops.to_supports_evaluation_of_breakpoint_conditions = remote_supports_cond_breakpoints;
d3ce09f5 13624 remote_ops.to_can_run_breakpoint_commands = remote_can_run_breakpoint_commands;
35b1e5cc
SS
13625 remote_ops.to_trace_init = remote_trace_init;
13626 remote_ops.to_download_tracepoint = remote_download_tracepoint;
1e4d1764 13627 remote_ops.to_can_download_tracepoint = remote_can_download_tracepoint;
3e43a32a
MS
13628 remote_ops.to_download_trace_state_variable
13629 = remote_download_trace_state_variable;
d248b706
KY
13630 remote_ops.to_enable_tracepoint = remote_enable_tracepoint;
13631 remote_ops.to_disable_tracepoint = remote_disable_tracepoint;
35b1e5cc
SS
13632 remote_ops.to_trace_set_readonly_regions = remote_trace_set_readonly_regions;
13633 remote_ops.to_trace_start = remote_trace_start;
13634 remote_ops.to_get_trace_status = remote_get_trace_status;
f196051f 13635 remote_ops.to_get_tracepoint_status = remote_get_tracepoint_status;
35b1e5cc
SS
13636 remote_ops.to_trace_stop = remote_trace_stop;
13637 remote_ops.to_trace_find = remote_trace_find;
3e43a32a
MS
13638 remote_ops.to_get_trace_state_variable_value
13639 = remote_get_trace_state_variable_value;
00bf0b85
SS
13640 remote_ops.to_save_trace_data = remote_save_trace_data;
13641 remote_ops.to_upload_tracepoints = remote_upload_tracepoints;
3e43a32a
MS
13642 remote_ops.to_upload_trace_state_variables
13643 = remote_upload_trace_state_variables;
00bf0b85 13644 remote_ops.to_get_raw_trace_data = remote_get_raw_trace_data;
405f8e94 13645 remote_ops.to_get_min_fast_tracepoint_insn_len = remote_get_min_fast_tracepoint_insn_len;
35b1e5cc 13646 remote_ops.to_set_disconnected_tracing = remote_set_disconnected_tracing;
4daf5ac0 13647 remote_ops.to_set_circular_trace_buffer = remote_set_circular_trace_buffer;
f6f899bf 13648 remote_ops.to_set_trace_buffer_size = remote_set_trace_buffer_size;
f196051f 13649 remote_ops.to_set_trace_notes = remote_set_trace_notes;
dc146f7c 13650 remote_ops.to_core_of_thread = remote_core_of_thread;
4a5e7a5b 13651 remote_ops.to_verify_memory = remote_verify_memory;
711e434b 13652 remote_ops.to_get_tib_address = remote_get_tib_address;
d914c394 13653 remote_ops.to_set_permissions = remote_set_permissions;
0fb4aa4b
PA
13654 remote_ops.to_static_tracepoint_marker_at
13655 = remote_static_tracepoint_marker_at;
13656 remote_ops.to_static_tracepoint_markers_by_strid
13657 = remote_static_tracepoint_markers_by_strid;
b3b9301e 13658 remote_ops.to_traceframe_info = remote_traceframe_info;
d1feda86
YQ
13659 remote_ops.to_use_agent = remote_use_agent;
13660 remote_ops.to_can_use_agent = remote_can_use_agent;
9accd112
MM
13661 remote_ops.to_supports_btrace = remote_supports_btrace;
13662 remote_ops.to_enable_btrace = remote_enable_btrace;
13663 remote_ops.to_disable_btrace = remote_disable_btrace;
13664 remote_ops.to_teardown_btrace = remote_teardown_btrace;
13665 remote_ops.to_read_btrace = remote_read_btrace;
f4abbc16 13666 remote_ops.to_btrace_conf = remote_btrace_conf;
ced63ec0
GB
13667 remote_ops.to_augmented_libraries_svr4_read =
13668 remote_augmented_libraries_svr4_read;
8020350c
DB
13669 remote_ops.to_follow_fork = remote_follow_fork;
13670 remote_ops.to_follow_exec = remote_follow_exec;
13671 remote_ops.to_insert_fork_catchpoint = remote_insert_fork_catchpoint;
13672 remote_ops.to_remove_fork_catchpoint = remote_remove_fork_catchpoint;
13673 remote_ops.to_insert_vfork_catchpoint = remote_insert_vfork_catchpoint;
13674 remote_ops.to_remove_vfork_catchpoint = remote_remove_vfork_catchpoint;
13675 remote_ops.to_insert_exec_catchpoint = remote_insert_exec_catchpoint;
13676 remote_ops.to_remove_exec_catchpoint = remote_remove_exec_catchpoint;
3a00c802 13677 remote_ops.to_execution_direction = remote_execution_direction;
c906108c
SS
13678}
13679
13680/* Set up the extended remote vector by making a copy of the standard
13681 remote vector and adding to it. */
13682
13683static void
fba45db2 13684init_extended_remote_ops (void)
c906108c
SS
13685{
13686 extended_remote_ops = remote_ops;
13687
0f71a2f6 13688 extended_remote_ops.to_shortname = "extended-remote";
c5aa993b 13689 extended_remote_ops.to_longname =
c906108c 13690 "Extended remote serial target in gdb-specific protocol";
c5aa993b 13691 extended_remote_ops.to_doc =
c906108c 13692 "Use a remote computer via a serial line, using a gdb-specific protocol.\n\
39237dd1
PA
13693Specify the serial device it is connected to (e.g. /dev/ttya).";
13694 extended_remote_ops.to_open = extended_remote_open;
c906108c 13695 extended_remote_ops.to_create_inferior = extended_remote_create_inferior;
2d717e4f
DJ
13696 extended_remote_ops.to_detach = extended_remote_detach;
13697 extended_remote_ops.to_attach = extended_remote_attach;
b9c1d481 13698 extended_remote_ops.to_post_attach = extended_remote_post_attach;
03583c20
UW
13699 extended_remote_ops.to_supports_disable_randomization
13700 = extended_remote_supports_disable_randomization;
0f71a2f6
JM
13701}
13702
6426a772 13703static int
6a109b6b 13704remote_can_async_p (struct target_ops *ops)
6426a772 13705{
5d93a237
TT
13706 struct remote_state *rs = get_remote_state ();
13707
3015c064
SM
13708 /* We don't go async if the user has explicitly prevented it with the
13709 "maint set target-async" command. */
c6ebd6cf 13710 if (!target_async_permitted)
75c99385
PA
13711 return 0;
13712
23860348 13713 /* We're async whenever the serial device is. */
5d93a237 13714 return serial_can_async_p (rs->remote_desc);
6426a772
JM
13715}
13716
13717static int
6a109b6b 13718remote_is_async_p (struct target_ops *ops)
6426a772 13719{
5d93a237
TT
13720 struct remote_state *rs = get_remote_state ();
13721
c6ebd6cf 13722 if (!target_async_permitted)
75c99385
PA
13723 /* We only enable async when the user specifically asks for it. */
13724 return 0;
13725
23860348 13726 /* We're async whenever the serial device is. */
5d93a237 13727 return serial_is_async_p (rs->remote_desc);
6426a772
JM
13728}
13729
2acceee2
JM
13730/* Pass the SERIAL event on and up to the client. One day this code
13731 will be able to delay notifying the client of an event until the
23860348 13732 point where an entire packet has been received. */
2acceee2 13733
2acceee2
JM
13734static serial_event_ftype remote_async_serial_handler;
13735
6426a772 13736static void
819cc324 13737remote_async_serial_handler (struct serial *scb, void *context)
6426a772 13738{
2acceee2
JM
13739 /* Don't propogate error information up to the client. Instead let
13740 the client find out about the error by querying the target. */
6a3753b3 13741 inferior_event_handler (INF_REG_EVENT, NULL);
2acceee2
JM
13742}
13743
74531fed
PA
13744static void
13745remote_async_inferior_event_handler (gdb_client_data data)
13746{
13747 inferior_event_handler (INF_REG_EVENT, NULL);
13748}
13749
2acceee2 13750static void
6a3753b3 13751remote_async (struct target_ops *ops, int enable)
2acceee2 13752{
5d93a237
TT
13753 struct remote_state *rs = get_remote_state ();
13754
6a3753b3 13755 if (enable)
2acceee2 13756 {
88b496c3 13757 serial_async (rs->remote_desc, remote_async_serial_handler, rs);
b7d2e916
PA
13758
13759 /* If there are pending events in the stop reply queue tell the
13760 event loop to process them. */
13761 if (!QUEUE_is_empty (stop_reply_p, stop_reply_queue))
13762 mark_async_event_handler (remote_async_inferior_event_token);
6efcd9a8
PA
13763 /* For simplicity, below we clear the pending events token
13764 without remembering whether it is marked, so here we always
13765 mark it. If there's actually no pending notification to
13766 process, this ends up being a no-op (other than a spurious
13767 event-loop wakeup). */
13768 if (target_is_non_stop_p ())
13769 mark_async_event_handler (rs->notif_state->get_pending_events_token);
2acceee2
JM
13770 }
13771 else
b7d2e916
PA
13772 {
13773 serial_async (rs->remote_desc, NULL, NULL);
6efcd9a8
PA
13774 /* If the core is disabling async, it doesn't want to be
13775 disturbed with target events. Clear all async event sources
13776 too. */
b7d2e916 13777 clear_async_event_handler (remote_async_inferior_event_token);
6efcd9a8
PA
13778 if (target_is_non_stop_p ())
13779 clear_async_event_handler (rs->notif_state->get_pending_events_token);
b7d2e916 13780 }
6426a772
JM
13781}
13782
65706a29
PA
13783/* Implementation of the to_thread_events method. */
13784
13785static void
13786remote_thread_events (struct target_ops *ops, int enable)
13787{
13788 struct remote_state *rs = get_remote_state ();
13789 size_t size = get_remote_packet_size ();
65706a29
PA
13790
13791 if (packet_support (PACKET_QThreadEvents) == PACKET_DISABLE)
13792 return;
13793
13794 xsnprintf (rs->buf, size, "QThreadEvents:%x", enable ? 1 : 0);
13795 putpkt (rs->buf);
13796 getpkt (&rs->buf, &rs->buf_size, 0);
13797
13798 switch (packet_ok (rs->buf,
13799 &remote_protocol_packets[PACKET_QThreadEvents]))
13800 {
13801 case PACKET_OK:
13802 if (strcmp (rs->buf, "OK") != 0)
13803 error (_("Remote refused setting thread events: %s"), rs->buf);
13804 break;
13805 case PACKET_ERROR:
13806 warning (_("Remote failure reply: %s"), rs->buf);
13807 break;
13808 case PACKET_UNKNOWN:
13809 break;
13810 }
13811}
13812
5a2468f5 13813static void
c2d11a7d 13814set_remote_cmd (char *args, int from_tty)
5a2468f5 13815{
635c7e8a 13816 help_list (remote_set_cmdlist, "set remote ", all_commands, gdb_stdout);
5a2468f5
JM
13817}
13818
d471ea57
AC
13819static void
13820show_remote_cmd (char *args, int from_tty)
13821{
37a105a1 13822 /* We can't just use cmd_show_list here, because we want to skip
427c3a89 13823 the redundant "show remote Z-packet" and the legacy aliases. */
37a105a1 13824 struct cmd_list_element *list = remote_show_cmdlist;
79a45e25 13825 struct ui_out *uiout = current_uiout;
37a105a1 13826
2e783024 13827 ui_out_emit_tuple tuple_emitter (uiout, "showlist");
37a105a1
DJ
13828 for (; list != NULL; list = list->next)
13829 if (strcmp (list->name, "Z-packet") == 0)
13830 continue;
427c3a89
DJ
13831 else if (list->type == not_set_cmd)
13832 /* Alias commands are exactly like the original, except they
13833 don't have the normal type. */
13834 continue;
13835 else
37a105a1 13836 {
2e783024 13837 ui_out_emit_tuple option_emitter (uiout, "option");
a744cf53 13838
112e8700
SM
13839 uiout->field_string ("name", list->name);
13840 uiout->text (": ");
427c3a89 13841 if (list->type == show_cmd)
f5c4fcd9 13842 do_show_command (NULL, from_tty, list);
427c3a89
DJ
13843 else
13844 cmd_func (list, NULL, from_tty);
37a105a1 13845 }
d471ea57 13846}
5a2468f5 13847
0f71a2f6 13848
23860348 13849/* Function to be called whenever a new objfile (shlib) is detected. */
dc8acb97
MS
13850static void
13851remote_new_objfile (struct objfile *objfile)
13852{
5d93a237
TT
13853 struct remote_state *rs = get_remote_state ();
13854
13855 if (rs->remote_desc != 0) /* Have a remote connection. */
36d25514 13856 remote_check_symbols ();
dc8acb97
MS
13857}
13858
00bf0b85
SS
13859/* Pull all the tracepoints defined on the target and create local
13860 data structures representing them. We don't want to create real
13861 tracepoints yet, we don't want to mess up the user's existing
13862 collection. */
13863
13864static int
ab6617cc 13865remote_upload_tracepoints (struct target_ops *self, struct uploaded_tp **utpp)
d5551862 13866{
00bf0b85
SS
13867 struct remote_state *rs = get_remote_state ();
13868 char *p;
d5551862 13869
00bf0b85
SS
13870 /* Ask for a first packet of tracepoint definition. */
13871 putpkt ("qTfP");
13872 getpkt (&rs->buf, &rs->buf_size, 0);
13873 p = rs->buf;
13874 while (*p && *p != 'l')
d5551862 13875 {
00bf0b85
SS
13876 parse_tracepoint_definition (p, utpp);
13877 /* Ask for another packet of tracepoint definition. */
13878 putpkt ("qTsP");
13879 getpkt (&rs->buf, &rs->buf_size, 0);
13880 p = rs->buf;
d5551862 13881 }
00bf0b85 13882 return 0;
d5551862
SS
13883}
13884
00bf0b85 13885static int
181e3713
TT
13886remote_upload_trace_state_variables (struct target_ops *self,
13887 struct uploaded_tsv **utsvp)
d5551862 13888{
00bf0b85 13889 struct remote_state *rs = get_remote_state ();
d5551862 13890 char *p;
d5551862 13891
00bf0b85
SS
13892 /* Ask for a first packet of variable definition. */
13893 putpkt ("qTfV");
d5551862
SS
13894 getpkt (&rs->buf, &rs->buf_size, 0);
13895 p = rs->buf;
00bf0b85 13896 while (*p && *p != 'l')
d5551862 13897 {
00bf0b85
SS
13898 parse_tsv_definition (p, utsvp);
13899 /* Ask for another packet of variable definition. */
13900 putpkt ("qTsV");
d5551862
SS
13901 getpkt (&rs->buf, &rs->buf_size, 0);
13902 p = rs->buf;
13903 }
00bf0b85 13904 return 0;
d5551862
SS
13905}
13906
c1e36e3e
PA
13907/* The "set/show range-stepping" show hook. */
13908
13909static void
13910show_range_stepping (struct ui_file *file, int from_tty,
13911 struct cmd_list_element *c,
13912 const char *value)
13913{
13914 fprintf_filtered (file,
13915 _("Debugger's willingness to use range stepping "
13916 "is %s.\n"), value);
13917}
13918
13919/* The "set/show range-stepping" set hook. */
13920
13921static void
13922set_range_stepping (char *ignore_args, int from_tty,
13923 struct cmd_list_element *c)
13924{
5d93a237
TT
13925 struct remote_state *rs = get_remote_state ();
13926
c1e36e3e
PA
13927 /* Whene enabling, check whether range stepping is actually
13928 supported by the target, and warn if not. */
13929 if (use_range_stepping)
13930 {
5d93a237 13931 if (rs->remote_desc != NULL)
c1e36e3e 13932 {
4082afcc 13933 if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
c1e36e3e
PA
13934 remote_vcont_probe (rs);
13935
4082afcc 13936 if (packet_support (PACKET_vCont) == PACKET_ENABLE
c1e36e3e
PA
13937 && rs->supports_vCont.r)
13938 return;
13939 }
13940
13941 warning (_("Range stepping is not supported by the current target"));
13942 }
13943}
13944
c906108c 13945void
fba45db2 13946_initialize_remote (void)
c906108c 13947{
9a7071a8 13948 struct cmd_list_element *cmd;
6f937416 13949 const char *cmd_name;
ea9c271d 13950
0f71a2f6 13951 /* architecture specific data */
2bc416ba 13952 remote_gdbarch_data_handle =
23860348 13953 gdbarch_data_register_post_init (init_remote_state);
29709017
DJ
13954 remote_g_packet_data_handle =
13955 gdbarch_data_register_pre_init (remote_g_packet_data_init);
d01949b6 13956
94585166
DB
13957 remote_pspace_data
13958 = register_program_space_data_with_cleanup (NULL,
13959 remote_pspace_data_cleanup);
13960
ea9c271d
DJ
13961 /* Initialize the per-target state. At the moment there is only one
13962 of these, not one per target. Only one target is active at a
cf792862
TT
13963 time. */
13964 remote_state = new_remote_state ();
ea9c271d 13965
c906108c
SS
13966 init_remote_ops ();
13967 add_target (&remote_ops);
13968
13969 init_extended_remote_ops ();
13970 add_target (&extended_remote_ops);
cce74817 13971
dc8acb97 13972 /* Hook into new objfile notification. */
06d3b283 13973 observer_attach_new_objfile (remote_new_objfile);
5f4cf0bb
YQ
13974 /* We're no longer interested in notification events of an inferior
13975 when it exits. */
13976 observer_attach_inferior_exit (discard_pending_stop_replies);
dc8acb97 13977
c906108c
SS
13978#if 0
13979 init_remote_threadtests ();
13980#endif
13981
722247f1 13982 stop_reply_queue = QUEUE_alloc (stop_reply_p, stop_reply_xfree);
23860348 13983 /* set/show remote ... */
d471ea57 13984
1bedd215 13985 add_prefix_cmd ("remote", class_maintenance, set_remote_cmd, _("\
5a2468f5
JM
13986Remote protocol specific variables\n\
13987Configure various remote-protocol specific variables such as\n\
1bedd215 13988the packets being used"),
cff3e48b 13989 &remote_set_cmdlist, "set remote ",
23860348 13990 0 /* allow-unknown */, &setlist);
1bedd215 13991 add_prefix_cmd ("remote", class_maintenance, show_remote_cmd, _("\
5a2468f5
JM
13992Remote protocol specific variables\n\
13993Configure various remote-protocol specific variables such as\n\
1bedd215 13994the packets being used"),
cff3e48b 13995 &remote_show_cmdlist, "show remote ",
23860348 13996 0 /* allow-unknown */, &showlist);
5a2468f5 13997
1a966eab
AC
13998 add_cmd ("compare-sections", class_obscure, compare_sections_command, _("\
13999Compare section data on target to the exec file.\n\
95cf3b38
DT
14000Argument is a single section name (default: all loaded sections).\n\
14001To compare only read-only loaded sections, specify the -r option."),
c906108c
SS
14002 &cmdlist);
14003
1a966eab
AC
14004 add_cmd ("packet", class_maintenance, packet_command, _("\
14005Send an arbitrary packet to a remote target.\n\
c906108c
SS
14006 maintenance packet TEXT\n\
14007If GDB is talking to an inferior via the GDB serial protocol, then\n\
14008this command sends the string TEXT to the inferior, and displays the\n\
14009response packet. GDB supplies the initial `$' character, and the\n\
1a966eab 14010terminating `#' character and checksum."),
c906108c
SS
14011 &maintenancelist);
14012
7915a72c
AC
14013 add_setshow_boolean_cmd ("remotebreak", no_class, &remote_break, _("\
14014Set whether to send break if interrupted."), _("\
14015Show whether to send break if interrupted."), _("\
14016If set, a break, instead of a cntrl-c, is sent to the remote target."),
9a7071a8 14017 set_remotebreak, show_remotebreak,
e707bbc2 14018 &setlist, &showlist);
9a7071a8
JB
14019 cmd_name = "remotebreak";
14020 cmd = lookup_cmd (&cmd_name, setlist, "", -1, 1);
14021 deprecate_cmd (cmd, "set remote interrupt-sequence");
14022 cmd_name = "remotebreak"; /* needed because lookup_cmd updates the pointer */
14023 cmd = lookup_cmd (&cmd_name, showlist, "", -1, 1);
14024 deprecate_cmd (cmd, "show remote interrupt-sequence");
14025
14026 add_setshow_enum_cmd ("interrupt-sequence", class_support,
3e43a32a
MS
14027 interrupt_sequence_modes, &interrupt_sequence_mode,
14028 _("\
9a7071a8
JB
14029Set interrupt sequence to remote target."), _("\
14030Show interrupt sequence to remote target."), _("\
14031Valid value is \"Ctrl-C\", \"BREAK\" or \"BREAK-g\". The default is \"Ctrl-C\"."),
14032 NULL, show_interrupt_sequence,
14033 &remote_set_cmdlist,
14034 &remote_show_cmdlist);
14035
14036 add_setshow_boolean_cmd ("interrupt-on-connect", class_support,
14037 &interrupt_on_connect, _("\
14038Set whether interrupt-sequence is sent to remote target when gdb connects to."), _(" \
14039Show whether interrupt-sequence is sent to remote target when gdb connects to."), _(" \
14040If set, interrupt sequence is sent to remote target."),
14041 NULL, NULL,
14042 &remote_set_cmdlist, &remote_show_cmdlist);
c906108c 14043
23860348 14044 /* Install commands for configuring memory read/write packets. */
11cf8741 14045
1a966eab
AC
14046 add_cmd ("remotewritesize", no_class, set_memory_write_packet_size, _("\
14047Set the maximum number of bytes per memory write packet (deprecated)."),
11cf8741 14048 &setlist);
1a966eab
AC
14049 add_cmd ("remotewritesize", no_class, show_memory_write_packet_size, _("\
14050Show the maximum number of bytes per memory write packet (deprecated)."),
11cf8741
JM
14051 &showlist);
14052 add_cmd ("memory-write-packet-size", no_class,
1a966eab
AC
14053 set_memory_write_packet_size, _("\
14054Set the maximum number of bytes per memory-write packet.\n\
14055Specify the number of bytes in a packet or 0 (zero) for the\n\
14056default packet size. The actual limit is further reduced\n\
14057dependent on the target. Specify ``fixed'' to disable the\n\
14058further restriction and ``limit'' to enable that restriction."),
11cf8741
JM
14059 &remote_set_cmdlist);
14060 add_cmd ("memory-read-packet-size", no_class,
1a966eab
AC
14061 set_memory_read_packet_size, _("\
14062Set the maximum number of bytes per memory-read packet.\n\
14063Specify the number of bytes in a packet or 0 (zero) for the\n\
14064default packet size. The actual limit is further reduced\n\
14065dependent on the target. Specify ``fixed'' to disable the\n\
14066further restriction and ``limit'' to enable that restriction."),
11cf8741
JM
14067 &remote_set_cmdlist);
14068 add_cmd ("memory-write-packet-size", no_class,
14069 show_memory_write_packet_size,
1a966eab 14070 _("Show the maximum number of bytes per memory-write packet."),
11cf8741
JM
14071 &remote_show_cmdlist);
14072 add_cmd ("memory-read-packet-size", no_class,
14073 show_memory_read_packet_size,
1a966eab 14074 _("Show the maximum number of bytes per memory-read packet."),
11cf8741 14075 &remote_show_cmdlist);
c906108c 14076
b3f42336 14077 add_setshow_zinteger_cmd ("hardware-watchpoint-limit", no_class,
7915a72c
AC
14078 &remote_hw_watchpoint_limit, _("\
14079Set the maximum number of target hardware watchpoints."), _("\
14080Show the maximum number of target hardware watchpoints."), _("\
14081Specify a negative limit for unlimited."),
3e43a32a
MS
14082 NULL, NULL, /* FIXME: i18n: The maximum
14083 number of target hardware
14084 watchpoints is %s. */
b3f42336 14085 &remote_set_cmdlist, &remote_show_cmdlist);
480a3f21
PW
14086 add_setshow_zinteger_cmd ("hardware-watchpoint-length-limit", no_class,
14087 &remote_hw_watchpoint_length_limit, _("\
14088Set the maximum length (in bytes) of a target hardware watchpoint."), _("\
14089Show the maximum length (in bytes) of a target hardware watchpoint."), _("\
14090Specify a negative limit for unlimited."),
14091 NULL, NULL, /* FIXME: i18n: The maximum
14092 length (in bytes) of a target
14093 hardware watchpoint is %s. */
14094 &remote_set_cmdlist, &remote_show_cmdlist);
b3f42336 14095 add_setshow_zinteger_cmd ("hardware-breakpoint-limit", no_class,
7915a72c
AC
14096 &remote_hw_breakpoint_limit, _("\
14097Set the maximum number of target hardware breakpoints."), _("\
14098Show the maximum number of target hardware breakpoints."), _("\
14099Specify a negative limit for unlimited."),
3e43a32a
MS
14100 NULL, NULL, /* FIXME: i18n: The maximum
14101 number of target hardware
14102 breakpoints is %s. */
b3f42336 14103 &remote_set_cmdlist, &remote_show_cmdlist);
501eef12 14104
1b493192
PA
14105 add_setshow_zuinteger_cmd ("remoteaddresssize", class_obscure,
14106 &remote_address_size, _("\
4d28ad1e
AC
14107Set the maximum size of the address (in bits) in a memory packet."), _("\
14108Show the maximum size of the address (in bits) in a memory packet."), NULL,
1b493192
PA
14109 NULL,
14110 NULL, /* FIXME: i18n: */
14111 &setlist, &showlist);
c906108c 14112
ca4f7f8b
PA
14113 init_all_packet_configs ();
14114
444abaca 14115 add_packet_config_cmd (&remote_protocol_packets[PACKET_X],
bb572ddd 14116 "X", "binary-download", 1);
0f71a2f6 14117
444abaca 14118 add_packet_config_cmd (&remote_protocol_packets[PACKET_vCont],
bb572ddd 14119 "vCont", "verbose-resume", 0);
506fb367 14120
89be2091
DJ
14121 add_packet_config_cmd (&remote_protocol_packets[PACKET_QPassSignals],
14122 "QPassSignals", "pass-signals", 0);
14123
82075af2
JS
14124 add_packet_config_cmd (&remote_protocol_packets[PACKET_QCatchSyscalls],
14125 "QCatchSyscalls", "catch-syscalls", 0);
14126
9b224c5e
PA
14127 add_packet_config_cmd (&remote_protocol_packets[PACKET_QProgramSignals],
14128 "QProgramSignals", "program-signals", 0);
14129
aefd8b33
SDJ
14130 add_packet_config_cmd (&remote_protocol_packets[PACKET_QStartupWithShell],
14131 "QStartupWithShell", "startup-with-shell", 0);
14132
0a2dde4a
SDJ
14133 add_packet_config_cmd (&remote_protocol_packets
14134 [PACKET_QEnvironmentHexEncoded],
14135 "QEnvironmentHexEncoded", "environment-hex-encoded",
14136 0);
14137
14138 add_packet_config_cmd (&remote_protocol_packets[PACKET_QEnvironmentReset],
14139 "QEnvironmentReset", "environment-reset",
14140 0);
14141
14142 add_packet_config_cmd (&remote_protocol_packets[PACKET_QEnvironmentUnset],
14143 "QEnvironmentUnset", "environment-unset",
14144 0);
14145
444abaca 14146 add_packet_config_cmd (&remote_protocol_packets[PACKET_qSymbol],
bb572ddd 14147 "qSymbol", "symbol-lookup", 0);
dc8acb97 14148
444abaca 14149 add_packet_config_cmd (&remote_protocol_packets[PACKET_P],
bb572ddd 14150 "P", "set-register", 1);
d471ea57 14151
444abaca 14152 add_packet_config_cmd (&remote_protocol_packets[PACKET_p],
bb572ddd 14153 "p", "fetch-register", 1);
b96ec7ac 14154
444abaca 14155 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z0],
bb572ddd 14156 "Z0", "software-breakpoint", 0);
d471ea57 14157
444abaca 14158 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z1],
bb572ddd 14159 "Z1", "hardware-breakpoint", 0);
d471ea57 14160
444abaca 14161 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z2],
bb572ddd 14162 "Z2", "write-watchpoint", 0);
d471ea57 14163
444abaca 14164 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z3],
bb572ddd 14165 "Z3", "read-watchpoint", 0);
d471ea57 14166
444abaca 14167 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z4],
bb572ddd 14168 "Z4", "access-watchpoint", 0);
d471ea57 14169
0876f84a
DJ
14170 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_auxv],
14171 "qXfer:auxv:read", "read-aux-vector", 0);
802188a7 14172
c78fa86a
GB
14173 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_exec_file],
14174 "qXfer:exec-file:read", "pid-to-exec-file", 0);
14175
23181151
DJ
14176 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_features],
14177 "qXfer:features:read", "target-features", 0);
14178
cfa9d6d9
DJ
14179 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_libraries],
14180 "qXfer:libraries:read", "library-info", 0);
14181
2268b414
JK
14182 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_libraries_svr4],
14183 "qXfer:libraries-svr4:read", "library-info-svr4", 0);
14184
fd79ecee
DJ
14185 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_memory_map],
14186 "qXfer:memory-map:read", "memory-map", 0);
14187
0e7f50da
UW
14188 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_spu_read],
14189 "qXfer:spu:read", "read-spu-object", 0);
14190
14191 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_spu_write],
14192 "qXfer:spu:write", "write-spu-object", 0);
14193
07e059b5
VP
14194 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_osdata],
14195 "qXfer:osdata:read", "osdata", 0);
14196
dc146f7c
VP
14197 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_threads],
14198 "qXfer:threads:read", "threads", 0);
14199
4aa995e1
PA
14200 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_siginfo_read],
14201 "qXfer:siginfo:read", "read-siginfo-object", 0);
14202
14203 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_siginfo_write],
14204 "qXfer:siginfo:write", "write-siginfo-object", 0);
14205
b3b9301e
PA
14206 add_packet_config_cmd
14207 (&remote_protocol_packets[PACKET_qXfer_traceframe_info],
eb9fe518 14208 "qXfer:traceframe-info:read", "traceframe-info", 0);
b3b9301e 14209
169081d0
TG
14210 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_uib],
14211 "qXfer:uib:read", "unwind-info-block", 0);
14212
444abaca 14213 add_packet_config_cmd (&remote_protocol_packets[PACKET_qGetTLSAddr],
38691318 14214 "qGetTLSAddr", "get-thread-local-storage-address",
38691318
KB
14215 0);
14216
711e434b
PM
14217 add_packet_config_cmd (&remote_protocol_packets[PACKET_qGetTIBAddr],
14218 "qGetTIBAddr", "get-thread-information-block-address",
14219 0);
14220
40ab02ce
MS
14221 add_packet_config_cmd (&remote_protocol_packets[PACKET_bc],
14222 "bc", "reverse-continue", 0);
14223
14224 add_packet_config_cmd (&remote_protocol_packets[PACKET_bs],
14225 "bs", "reverse-step", 0);
14226
be2a5f71
DJ
14227 add_packet_config_cmd (&remote_protocol_packets[PACKET_qSupported],
14228 "qSupported", "supported-packets", 0);
14229
08388c79
DE
14230 add_packet_config_cmd (&remote_protocol_packets[PACKET_qSearch_memory],
14231 "qSearch:memory", "search-memory", 0);
14232
bd3eecc3
PA
14233 add_packet_config_cmd (&remote_protocol_packets[PACKET_qTStatus],
14234 "qTStatus", "trace-status", 0);
14235
15a201c8
GB
14236 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_setfs],
14237 "vFile:setfs", "hostio-setfs", 0);
14238
a6b151f1
DJ
14239 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_open],
14240 "vFile:open", "hostio-open", 0);
14241
14242 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_pread],
14243 "vFile:pread", "hostio-pread", 0);
14244
14245 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_pwrite],
14246 "vFile:pwrite", "hostio-pwrite", 0);
14247
14248 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_close],
14249 "vFile:close", "hostio-close", 0);
14250
14251 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_unlink],
14252 "vFile:unlink", "hostio-unlink", 0);
14253
b9e7b9c3
UW
14254 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_readlink],
14255 "vFile:readlink", "hostio-readlink", 0);
14256
0a93529c
GB
14257 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_fstat],
14258 "vFile:fstat", "hostio-fstat", 0);
14259
2d717e4f
DJ
14260 add_packet_config_cmd (&remote_protocol_packets[PACKET_vAttach],
14261 "vAttach", "attach", 0);
14262
14263 add_packet_config_cmd (&remote_protocol_packets[PACKET_vRun],
14264 "vRun", "run", 0);
14265
a6f3e723
SL
14266 add_packet_config_cmd (&remote_protocol_packets[PACKET_QStartNoAckMode],
14267 "QStartNoAckMode", "noack", 0);
14268
82f73884
PA
14269 add_packet_config_cmd (&remote_protocol_packets[PACKET_vKill],
14270 "vKill", "kill", 0);
14271
0b16c5cf
PA
14272 add_packet_config_cmd (&remote_protocol_packets[PACKET_qAttached],
14273 "qAttached", "query-attached", 0);
14274
782b2b07 14275 add_packet_config_cmd (&remote_protocol_packets[PACKET_ConditionalTracepoints],
3e43a32a
MS
14276 "ConditionalTracepoints",
14277 "conditional-tracepoints", 0);
3788aec7
LM
14278
14279 add_packet_config_cmd (&remote_protocol_packets[PACKET_ConditionalBreakpoints],
14280 "ConditionalBreakpoints",
14281 "conditional-breakpoints", 0);
14282
d3ce09f5
SS
14283 add_packet_config_cmd (&remote_protocol_packets[PACKET_BreakpointCommands],
14284 "BreakpointCommands",
14285 "breakpoint-commands", 0);
14286
7a697b8d
SS
14287 add_packet_config_cmd (&remote_protocol_packets[PACKET_FastTracepoints],
14288 "FastTracepoints", "fast-tracepoints", 0);
782b2b07 14289
409873ef
SS
14290 add_packet_config_cmd (&remote_protocol_packets[PACKET_TracepointSource],
14291 "TracepointSource", "TracepointSource", 0);
14292
d914c394
SS
14293 add_packet_config_cmd (&remote_protocol_packets[PACKET_QAllow],
14294 "QAllow", "allow", 0);
14295
0fb4aa4b
PA
14296 add_packet_config_cmd (&remote_protocol_packets[PACKET_StaticTracepoints],
14297 "StaticTracepoints", "static-tracepoints", 0);
14298
1e4d1764
YQ
14299 add_packet_config_cmd (&remote_protocol_packets[PACKET_InstallInTrace],
14300 "InstallInTrace", "install-in-trace", 0);
14301
0fb4aa4b
PA
14302 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_statictrace_read],
14303 "qXfer:statictrace:read", "read-sdata-object", 0);
14304
78d85199
YQ
14305 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_fdpic],
14306 "qXfer:fdpic:read", "read-fdpic-loadmap", 0);
14307
03583c20
UW
14308 add_packet_config_cmd (&remote_protocol_packets[PACKET_QDisableRandomization],
14309 "QDisableRandomization", "disable-randomization", 0);
14310
d1feda86
YQ
14311 add_packet_config_cmd (&remote_protocol_packets[PACKET_QAgent],
14312 "QAgent", "agent", 0);
14313
f6f899bf
HAQ
14314 add_packet_config_cmd (&remote_protocol_packets[PACKET_QTBuffer_size],
14315 "QTBuffer:size", "trace-buffer-size", 0);
14316
9accd112
MM
14317 add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_off],
14318 "Qbtrace:off", "disable-btrace", 0);
14319
14320 add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_bts],
b20a6524
MM
14321 "Qbtrace:bts", "enable-btrace-bts", 0);
14322
14323 add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_pt],
14324 "Qbtrace:pt", "enable-btrace-pt", 0);
9accd112
MM
14325
14326 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_btrace],
14327 "qXfer:btrace", "read-btrace", 0);
14328
f4abbc16
MM
14329 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_btrace_conf],
14330 "qXfer:btrace-conf", "read-btrace-conf", 0);
14331
d33501a5
MM
14332 add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_conf_bts_size],
14333 "Qbtrace-conf:bts:size", "btrace-conf-bts-size", 0);
14334
73b8c1fd
PA
14335 add_packet_config_cmd (&remote_protocol_packets[PACKET_multiprocess_feature],
14336 "multiprocess-feature", "multiprocess-feature", 0);
14337
f7e6eed5
PA
14338 add_packet_config_cmd (&remote_protocol_packets[PACKET_swbreak_feature],
14339 "swbreak-feature", "swbreak-feature", 0);
14340
14341 add_packet_config_cmd (&remote_protocol_packets[PACKET_hwbreak_feature],
14342 "hwbreak-feature", "hwbreak-feature", 0);
14343
89245bc0
DB
14344 add_packet_config_cmd (&remote_protocol_packets[PACKET_fork_event_feature],
14345 "fork-event-feature", "fork-event-feature", 0);
14346
14347 add_packet_config_cmd (&remote_protocol_packets[PACKET_vfork_event_feature],
14348 "vfork-event-feature", "vfork-event-feature", 0);
14349
b20a6524
MM
14350 add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_conf_pt_size],
14351 "Qbtrace-conf:pt:size", "btrace-conf-pt-size", 0);
14352
750ce8d1
YQ
14353 add_packet_config_cmd (&remote_protocol_packets[PACKET_vContSupported],
14354 "vContSupported", "verbose-resume-supported", 0);
14355
94585166
DB
14356 add_packet_config_cmd (&remote_protocol_packets[PACKET_exec_event_feature],
14357 "exec-event-feature", "exec-event-feature", 0);
14358
de979965
PA
14359 add_packet_config_cmd (&remote_protocol_packets[PACKET_vCtrlC],
14360 "vCtrlC", "ctrl-c", 0);
14361
65706a29
PA
14362 add_packet_config_cmd (&remote_protocol_packets[PACKET_QThreadEvents],
14363 "QThreadEvents", "thread-events", 0);
14364
f2faf941
PA
14365 add_packet_config_cmd (&remote_protocol_packets[PACKET_no_resumed],
14366 "N stop reply", "no-resumed-stop-reply", 0);
14367
0b736949
DB
14368 /* Assert that we've registered "set remote foo-packet" commands
14369 for all packet configs. */
ca4f7f8b
PA
14370 {
14371 int i;
14372
14373 for (i = 0; i < PACKET_MAX; i++)
14374 {
14375 /* Ideally all configs would have a command associated. Some
14376 still don't though. */
14377 int excepted;
14378
14379 switch (i)
14380 {
14381 case PACKET_QNonStop:
ca4f7f8b
PA
14382 case PACKET_EnableDisableTracepoints_feature:
14383 case PACKET_tracenz_feature:
14384 case PACKET_DisconnectedTracing_feature:
14385 case PACKET_augmented_libraries_svr4_read_feature:
936d2992
PA
14386 case PACKET_qCRC:
14387 /* Additions to this list need to be well justified:
14388 pre-existing packets are OK; new packets are not. */
ca4f7f8b
PA
14389 excepted = 1;
14390 break;
14391 default:
14392 excepted = 0;
14393 break;
14394 }
14395
14396 /* This catches both forgetting to add a config command, and
14397 forgetting to remove a packet from the exception list. */
14398 gdb_assert (excepted == (remote_protocol_packets[i].name == NULL));
14399 }
14400 }
14401
37a105a1
DJ
14402 /* Keep the old ``set remote Z-packet ...'' working. Each individual
14403 Z sub-packet has its own set and show commands, but users may
14404 have sets to this variable in their .gdbinit files (or in their
14405 documentation). */
e9e68a56 14406 add_setshow_auto_boolean_cmd ("Z-packet", class_obscure,
7915a72c
AC
14407 &remote_Z_packet_detect, _("\
14408Set use of remote protocol `Z' packets"), _("\
14409Show use of remote protocol `Z' packets "), _("\
3b64bf98 14410When set, GDB will attempt to use the remote breakpoint and watchpoint\n\
7915a72c 14411packets."),
e9e68a56 14412 set_remote_protocol_Z_packet_cmd,
3e43a32a
MS
14413 show_remote_protocol_Z_packet_cmd,
14414 /* FIXME: i18n: Use of remote protocol
14415 `Z' packets is %s. */
e9e68a56 14416 &remote_set_cmdlist, &remote_show_cmdlist);
449092f6 14417
a6b151f1
DJ
14418 add_prefix_cmd ("remote", class_files, remote_command, _("\
14419Manipulate files on the remote system\n\
14420Transfer files to and from the remote target system."),
14421 &remote_cmdlist, "remote ",
14422 0 /* allow-unknown */, &cmdlist);
14423
14424 add_cmd ("put", class_files, remote_put_command,
14425 _("Copy a local file to the remote system."),
14426 &remote_cmdlist);
14427
14428 add_cmd ("get", class_files, remote_get_command,
14429 _("Copy a remote file to the local system."),
14430 &remote_cmdlist);
14431
14432 add_cmd ("delete", class_files, remote_delete_command,
14433 _("Delete a remote file."),
14434 &remote_cmdlist);
14435
2d717e4f 14436 add_setshow_string_noescape_cmd ("exec-file", class_files,
94585166 14437 &remote_exec_file_var, _("\
2d717e4f 14438Set the remote pathname for \"run\""), _("\
94585166
DB
14439Show the remote pathname for \"run\""), NULL,
14440 set_remote_exec_file,
14441 show_remote_exec_file,
14442 &remote_set_cmdlist,
14443 &remote_show_cmdlist);
2d717e4f 14444
c1e36e3e
PA
14445 add_setshow_boolean_cmd ("range-stepping", class_run,
14446 &use_range_stepping, _("\
14447Enable or disable range stepping."), _("\
14448Show whether target-assisted range stepping is enabled."), _("\
14449If on, and the target supports it, when stepping a source line, GDB\n\
14450tells the target to step the corresponding range of addresses itself instead\n\
14451of issuing multiple single-steps. This speeds up source level\n\
14452stepping. If off, GDB always issues single-steps, even if range\n\
14453stepping is supported by the target. The default is on."),
14454 set_range_stepping,
14455 show_range_stepping,
14456 &setlist,
14457 &showlist);
14458
449092f6
CV
14459 /* Eventually initialize fileio. See fileio.c */
14460 initialize_remote_fileio (remote_set_cmdlist, remote_show_cmdlist);
79d7f229 14461
ba348170 14462 /* Take advantage of the fact that the TID field is not used, to tag
79d7f229 14463 special ptids with it set to != 0. */
ba348170
PA
14464 magic_null_ptid = ptid_build (42000, -1, 1);
14465 not_sent_ptid = ptid_build (42000, -2, 1);
14466 any_thread_ptid = ptid_build (42000, 0, 1);
35b1e5cc
SS
14467
14468 target_buf_size = 2048;
224c3ddb 14469 target_buf = (char *) xmalloc (target_buf_size);
c906108c 14470}
10760264 14471
This page took 3.915151 seconds and 4 git commands to generate.