]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/remote.c
Automatic date update in version.in
[thirdparty/binutils-gdb.git] / gdb / remote.c
CommitLineData
c906108c 1/* Remote target communications for serial-line targets in custom GDB protocol
8926118c 2
618f726f 3 Copyright (C) 1988-2016 Free Software Foundation, Inc.
c906108c 4
c5aa993b
JM
5 This file is part of GDB.
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
a9762ec7 9 the Free Software Foundation; either version 3 of the License, or
c5aa993b
JM
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
a9762ec7 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
c5aa993b 19
23860348 20/* See the GDB User Guide for details of the GDB remote protocol. */
c5aa993b 21
c906108c 22#include "defs.h"
c906108c
SS
23#include <ctype.h>
24#include <fcntl.h>
c906108c 25#include "inferior.h"
45741a9c 26#include "infrun.h"
c906108c
SS
27#include "bfd.h"
28#include "symfile.h"
29#include "target.h"
c5aa993b 30/*#include "terminal.h" */
c906108c
SS
31#include "gdbcmd.h"
32#include "objfiles.h"
33#include "gdb-stabs.h"
34#include "gdbthread.h"
c2c6d25f 35#include "remote.h"
722247f1 36#include "remote-notif.h"
4e052eda 37#include "regcache.h"
fd0407d6 38#include "value.h"
6867ae3e 39#include "observer.h"
a77053c2 40#include "solib.h"
37a105a1
DJ
41#include "cli/cli-decode.h"
42#include "cli/cli-setshow.h"
424163ea 43#include "target-descriptions.h"
a4453b7e 44#include "gdb_bfd.h"
614c279d 45#include "filestuff.h"
9c3d6531 46#include "rsp-low.h"
6b940e6a 47#include "disasm.h"
f00aae0f 48#include "location.h"
c906108c 49
438e1e42 50#include "gdb_sys_time.h"
c906108c 51
43ff13b4 52#include "event-loop.h"
c2c6d25f 53#include "event-top.h"
2acceee2 54#include "inf-loop.h"
43ff13b4 55
c906108c
SS
56#include <signal.h>
57#include "serial.h"
58
6240bebf
MS
59#include "gdbcore.h" /* for exec_bfd */
60
449092f6 61#include "remote-fileio.h"
a6b151f1 62#include "gdb/fileio.h"
53ce3c39 63#include <sys/stat.h>
dc146f7c 64#include "xml-support.h"
449092f6 65
fd79ecee
DJ
66#include "memory-map.h"
67
35b1e5cc
SS
68#include "tracepoint.h"
69#include "ax.h"
70#include "ax-gdb.h"
d1feda86 71#include "agent.h"
9accd112 72#include "btrace.h"
c0272db5 73#include "record-btrace.h"
325fac50 74#include <algorithm>
35b1e5cc 75
0df8b418 76/* Temp hacks for tracepoint encoding migration. */
35b1e5cc
SS
77static char *target_buf;
78static long target_buf_size;
35b1e5cc 79
94585166
DB
80/* Per-program-space data key. */
81static const struct program_space_data *remote_pspace_data;
82
83/* The variable registered as the control variable used by the
84 remote exec-file commands. While the remote exec-file setting is
85 per-program-space, the set/show machinery uses this as the
86 location of the remote exec-file value. */
87static char *remote_exec_file_var;
88
6765f3e5
DJ
89/* The size to align memory write packets, when practical. The protocol
90 does not guarantee any alignment, and gdb will generate short
91 writes and unaligned writes, but even as a best-effort attempt this
92 can improve bulk transfers. For instance, if a write is misaligned
93 relative to the target's data bus, the stub may need to make an extra
94 round trip fetching data from the target. This doesn't make a
95 huge difference, but it's easy to do, so we try to be helpful.
96
97 The alignment chosen is arbitrary; usually data bus width is
98 important here, not the possibly larger cache line size. */
99enum { REMOTE_ALIGN_WRITES = 16 };
100
23860348 101/* Prototypes for local functions. */
6d820c5c 102static int getpkt_sane (char **buf, long *sizeof_buf, int forever);
74531fed 103static int getpkt_or_notif_sane (char **buf, long *sizeof_buf,
fee9eda9 104 int forever, int *is_notif);
6426a772 105
a14ed312 106static void remote_files_info (struct target_ops *ignore);
c906108c 107
f32dbf8c
MM
108static void remote_prepare_to_store (struct target_ops *self,
109 struct regcache *regcache);
c906108c 110
014f9477
TT
111static void remote_open_1 (const char *, int, struct target_ops *,
112 int extended_p);
c906108c 113
de90e03d 114static void remote_close (struct target_ops *self);
c906108c 115
cbb8991c
DB
116struct remote_state;
117
118static int remote_vkill (int pid, struct remote_state *rs);
119
8020350c
DB
120static void remote_kill_k (void);
121
136d6dae 122static void remote_mourn (struct target_ops *ops);
c906108c 123
a14ed312 124static void extended_remote_restart (void);
c906108c 125
6d820c5c 126static void remote_send (char **buf, long *sizeof_buf_p);
c906108c 127
a14ed312 128static int readchar (int timeout);
c906108c 129
c33e31fd
PA
130static void remote_serial_write (const char *str, int len);
131
7d85a9c0 132static void remote_kill (struct target_ops *ops);
c906108c 133
6a109b6b 134static int remote_can_async_p (struct target_ops *);
75c99385 135
6a109b6b 136static int remote_is_async_p (struct target_ops *);
75c99385 137
6a3753b3 138static void remote_async (struct target_ops *ops, int enable);
75c99385 139
65706a29
PA
140static void remote_thread_events (struct target_ops *ops, int enable);
141
a14ed312 142static void interrupt_query (void);
c906108c 143
79d7f229
PA
144static void set_general_thread (struct ptid ptid);
145static void set_continue_thread (struct ptid ptid);
c906108c 146
a14ed312 147static void get_offsets (void);
c906108c 148
6d820c5c
DJ
149static void skip_frame (void);
150
151static long read_frame (char **buf_p, long *sizeof_buf);
c906108c 152
a14ed312 153static int hexnumlen (ULONGEST num);
c906108c 154
a14ed312 155static void init_remote_ops (void);
c906108c 156
a14ed312 157static void init_extended_remote_ops (void);
c906108c 158
1eab8a48 159static void remote_stop (struct target_ops *self, ptid_t);
c906108c 160
a14ed312 161static int stubhex (int ch);
c906108c 162
a14ed312 163static int hexnumstr (char *, ULONGEST);
c906108c 164
a14ed312 165static int hexnumnstr (char *, ULONGEST, int);
2df3850c 166
a14ed312 167static CORE_ADDR remote_address_masked (CORE_ADDR);
c906108c 168
baa336ce 169static void print_packet (const char *);
c906108c 170
a14ed312 171static void compare_sections_command (char *, int);
c906108c 172
a14ed312 173static void packet_command (char *, int);
c906108c 174
a14ed312 175static int stub_unpack_int (char *buff, int fieldlength);
c906108c 176
39f77062 177static ptid_t remote_current_thread (ptid_t oldptid);
c906108c 178
baa336ce 179static int putpkt_binary (const char *buf, int cnt);
c906108c 180
a14ed312 181static void check_binary_download (CORE_ADDR addr);
c906108c 182
5a2468f5 183struct packet_config;
5a2468f5 184
a14ed312 185static void show_packet_config_cmd (struct packet_config *config);
5a2468f5 186
bb572ddd
DJ
187static void show_remote_protocol_packet_cmd (struct ui_file *file,
188 int from_tty,
189 struct cmd_list_element *c,
190 const char *value);
191
82f73884
PA
192static char *write_ptid (char *buf, const char *endbuf, ptid_t ptid);
193static ptid_t read_ptid (char *buf, char **obuf);
194
c378d69d 195static void remote_set_permissions (struct target_ops *self);
d914c394 196
8bd200f1
TT
197static int remote_get_trace_status (struct target_ops *self,
198 struct trace_status *ts);
d5551862 199
ab6617cc
TT
200static int remote_upload_tracepoints (struct target_ops *self,
201 struct uploaded_tp **utpp);
00bf0b85 202
181e3713
TT
203static int remote_upload_trace_state_variables (struct target_ops *self,
204 struct uploaded_tsv **utsvp);
00bf0b85 205
c8d104ad
PA
206static void remote_query_supported (void);
207
36d25514 208static void remote_check_symbols (void);
c8d104ad 209
a14ed312 210void _initialize_remote (void);
c906108c 211
74531fed 212struct stop_reply;
74531fed 213static void stop_reply_xfree (struct stop_reply *);
722247f1 214static void remote_parse_stop_reply (char *, struct stop_reply *);
74531fed 215static void push_stop_reply (struct stop_reply *);
bcc75809 216static void discard_pending_stop_replies_in_queue (struct remote_state *);
74531fed
PA
217static int peek_stop_reply (ptid_t ptid);
218
cbb8991c
DB
219struct threads_listing_context;
220static void remove_new_fork_children (struct threads_listing_context *);
221
74531fed 222static void remote_async_inferior_event_handler (gdb_client_data);
74531fed 223
e3594fd1 224static void remote_terminal_ours (struct target_ops *self);
d3fd5342 225
d962ef82
DJ
226static int remote_read_description_p (struct target_ops *target);
227
176a6961 228static void remote_console_output (char *msg);
dde08ee1 229
efcc2da7 230static int remote_supports_cond_breakpoints (struct target_ops *self);
b775012e 231
78eff0ec 232static int remote_can_run_breakpoint_commands (struct target_ops *self);
d3ce09f5 233
f4abbc16
MM
234static void remote_btrace_reset (void);
235
c0272db5
TW
236static void remote_btrace_maybe_reopen (void);
237
221e1a37
PA
238static int stop_reply_queue_length (void);
239
80152258
PA
240static void readahead_cache_invalidate (void);
241
048094ac
PA
242static void remote_unpush_and_throw (void);
243
a6b151f1
DJ
244/* For "remote". */
245
246static struct cmd_list_element *remote_cmdlist;
247
bb572ddd
DJ
248/* For "set remote" and "show remote". */
249
250static struct cmd_list_element *remote_set_cmdlist;
251static struct cmd_list_element *remote_show_cmdlist;
252
d458bd84
PA
253/* Stub vCont actions support.
254
255 Each field is a boolean flag indicating whether the stub reports
256 support for the corresponding action. */
257
258struct vCont_action_support
259{
260 /* vCont;t */
261 int t;
c1e36e3e
PA
262
263 /* vCont;r */
264 int r;
750ce8d1
YQ
265
266 /* vCont;s */
267 int s;
268
269 /* vCont;S */
270 int S;
d458bd84
PA
271};
272
c1e36e3e
PA
273/* Controls whether GDB is willing to use range stepping. */
274
275static int use_range_stepping = 1;
276
0d031856
TT
277#define OPAQUETHREADBYTES 8
278
279/* a 64 bit opaque identifier */
280typedef unsigned char threadref[OPAQUETHREADBYTES];
281
282/* About this many threadisds fit in a packet. */
283
284#define MAXTHREADLISTRESULTS 32
285
80152258
PA
286/* Data for the vFile:pread readahead cache. */
287
288struct readahead_cache
289{
290 /* The file descriptor for the file that is being cached. -1 if the
291 cache is invalid. */
292 int fd;
293
294 /* The offset into the file that the cache buffer corresponds
295 to. */
296 ULONGEST offset;
297
298 /* The buffer holding the cache contents. */
299 gdb_byte *buf;
300 /* The buffer's size. We try to read as much as fits into a packet
301 at a time. */
302 size_t bufsize;
303
304 /* Cache hit and miss counters. */
305 ULONGEST hit_count;
306 ULONGEST miss_count;
307};
308
ea9c271d
DJ
309/* Description of the remote protocol state for the currently
310 connected target. This is per-target state, and independent of the
311 selected architecture. */
312
313struct remote_state
314{
315 /* A buffer to use for incoming packets, and its current size. The
316 buffer is grown dynamically for larger incoming packets.
317 Outgoing packets may also be constructed in this buffer.
318 BUF_SIZE is always at least REMOTE_PACKET_SIZE;
319 REMOTE_PACKET_SIZE should be used to limit the length of outgoing
320 packets. */
321 char *buf;
322 long buf_size;
be2a5f71 323
1e51243a
PA
324 /* True if we're going through initial connection setup (finding out
325 about the remote side's threads, relocating symbols, etc.). */
326 int starting_up;
327
be2a5f71
DJ
328 /* If we negotiated packet size explicitly (and thus can bypass
329 heuristics for the largest packet size that will not overflow
330 a buffer in the stub), this will be set to that packet size.
331 Otherwise zero, meaning to use the guessed size. */
332 long explicit_packet_size;
2d717e4f
DJ
333
334 /* remote_wait is normally called when the target is running and
335 waits for a stop reply packet. But sometimes we need to call it
336 when the target is already stopped. We can send a "?" packet
337 and have remote_wait read the response. Or, if we already have
338 the response, we can stash it in BUF and tell remote_wait to
339 skip calling getpkt. This flag is set when BUF contains a
340 stop reply packet and the target is not waiting. */
341 int cached_wait_status;
a6f3e723
SL
342
343 /* True, if in no ack mode. That is, neither GDB nor the stub will
344 expect acks from each other. The connection is assumed to be
345 reliable. */
346 int noack_mode;
82f73884
PA
347
348 /* True if we're connected in extended remote mode. */
349 int extended;
350
e24a49d8
PA
351 /* True if we resumed the target and we're waiting for the target to
352 stop. In the mean time, we can't start another command/query.
353 The remote server wouldn't be ready to process it, so we'd
354 timeout waiting for a reply that would never come and eventually
355 we'd close the connection. This can happen in asynchronous mode
356 because we allow GDB commands while the target is running. */
357 int waiting_for_stop_reply;
74531fed 358
d458bd84
PA
359 /* The status of the stub support for the various vCont actions. */
360 struct vCont_action_support supports_vCont;
782b2b07 361
3a29589a
DJ
362 /* Nonzero if the user has pressed Ctrl-C, but the target hasn't
363 responded to that. */
364 int ctrlc_pending_p;
5d93a237 365
048094ac
PA
366 /* True if we saw a Ctrl-C while reading or writing from/to the
367 remote descriptor. At that point it is not safe to send a remote
368 interrupt packet, so we instead remember we saw the Ctrl-C and
369 process it once we're done with sending/receiving the current
370 packet, which should be shortly. If however that takes too long,
371 and the user presses Ctrl-C again, we offer to disconnect. */
372 int got_ctrlc_during_io;
373
5d93a237
TT
374 /* Descriptor for I/O to remote machine. Initialize it to NULL so that
375 remote_open knows that we don't have a file open when the program
376 starts. */
377 struct serial *remote_desc;
47f8a51d
TT
378
379 /* These are the threads which we last sent to the remote system. The
380 TID member will be -1 for all or -2 for not sent yet. */
381 ptid_t general_thread;
382 ptid_t continue_thread;
262e1174
TT
383
384 /* This is the traceframe which we last selected on the remote system.
385 It will be -1 if no traceframe is selected. */
386 int remote_traceframe_number;
747dc59d
TT
387
388 char *last_pass_packet;
5e4a05c4
TT
389
390 /* The last QProgramSignals packet sent to the target. We bypass
391 sending a new program signals list down to the target if the new
392 packet is exactly the same as the last we sent. IOW, we only let
393 the target know about program signals list changes. */
394 char *last_program_signals_packet;
b73be471
TT
395
396 enum gdb_signal last_sent_signal;
280ceea3
TT
397
398 int last_sent_step;
8e88304f 399
3a00c802
PA
400 /* The execution direction of the last resume we got. */
401 enum exec_direction_kind last_resume_exec_dir;
402
8e88304f
TT
403 char *finished_object;
404 char *finished_annex;
405 ULONGEST finished_offset;
b80fafe3
TT
406
407 /* Should we try the 'ThreadInfo' query packet?
408
409 This variable (NOT available to the user: auto-detect only!)
410 determines whether GDB will use the new, simpler "ThreadInfo"
411 query or the older, more complex syntax for thread queries.
412 This is an auto-detect variable (set to true at each connect,
413 and set to false when the target fails to recognize it). */
414 int use_threadinfo_query;
415 int use_threadextra_query;
88b496c3 416
0d031856
TT
417 threadref echo_nextthread;
418 threadref nextthread;
419 threadref resultthreadlist[MAXTHREADLISTRESULTS];
5965e028
YQ
420
421 /* The state of remote notification. */
422 struct remote_notif_state *notif_state;
f4abbc16
MM
423
424 /* The branch trace configuration. */
425 struct btrace_config btrace_config;
15a201c8
GB
426
427 /* The argument to the last "vFile:setfs:" packet we sent, used
428 to avoid sending repeated unnecessary "vFile:setfs:" packets.
429 Initialized to -1 to indicate that no "vFile:setfs:" packet
430 has yet been sent. */
431 int fs_pid;
80152258
PA
432
433 /* A readahead cache for vFile:pread. Often, reading a binary
434 involves a sequence of small reads. E.g., when parsing an ELF
435 file. A readahead cache helps mostly the case of remote
436 debugging on a connection with higher latency, due to the
437 request/reply nature of the RSP. We only cache data for a single
438 file descriptor at a time. */
439 struct readahead_cache readahead_cache;
ea9c271d
DJ
440};
441
dc146f7c
VP
442/* Private data that we'll store in (struct thread_info)->private. */
443struct private_thread_info
444{
445 char *extra;
79efa585 446 char *name;
dc146f7c 447 int core;
799a2abe
PA
448
449 /* Whether the target stopped for a breakpoint/watchpoint. */
450 enum target_stop_reason stop_reason;
451
452 /* This is set to the data address of the access causing the target
453 to stop for a watchpoint. */
454 CORE_ADDR watch_data_address;
dc146f7c
VP
455};
456
457static void
458free_private_thread_info (struct private_thread_info *info)
459{
460 xfree (info->extra);
79efa585 461 xfree (info->name);
dc146f7c
VP
462 xfree (info);
463}
464
ea9c271d
DJ
465/* This data could be associated with a target, but we do not always
466 have access to the current target when we need it, so for now it is
467 static. This will be fine for as long as only one target is in use
468 at a time. */
cf792862 469static struct remote_state *remote_state;
ea9c271d
DJ
470
471static struct remote_state *
0b83947e 472get_remote_state_raw (void)
ea9c271d 473{
cf792862
TT
474 return remote_state;
475}
476
477/* Allocate a new struct remote_state with xmalloc, initialize it, and
478 return it. */
479
480static struct remote_state *
481new_remote_state (void)
482{
483 struct remote_state *result = XCNEW (struct remote_state);
484
485 /* The default buffer size is unimportant; it will be expanded
486 whenever a larger buffer is needed. */
487 result->buf_size = 400;
224c3ddb 488 result->buf = (char *) xmalloc (result->buf_size);
262e1174 489 result->remote_traceframe_number = -1;
b73be471 490 result->last_sent_signal = GDB_SIGNAL_0;
3a00c802 491 result->last_resume_exec_dir = EXEC_FORWARD;
15a201c8 492 result->fs_pid = -1;
cf792862
TT
493
494 return result;
ea9c271d
DJ
495}
496
497/* Description of the remote protocol for a given architecture. */
d01949b6 498
ad10f812
AC
499struct packet_reg
500{
501 long offset; /* Offset into G packet. */
502 long regnum; /* GDB's internal register number. */
503 LONGEST pnum; /* Remote protocol register number. */
b323314b 504 int in_g_packet; /* Always part of G packet. */
f5656ead 505 /* long size in bytes; == register_size (target_gdbarch (), regnum);
23860348 506 at present. */
f5656ead 507 /* char *name; == gdbarch_register_name (target_gdbarch (), regnum);
c9f4d572 508 at present. */
ad10f812
AC
509};
510
ea9c271d 511struct remote_arch_state
d01949b6 512{
ad10f812
AC
513 /* Description of the remote protocol registers. */
514 long sizeof_g_packet;
b323314b
AC
515
516 /* Description of the remote protocol registers indexed by REGNUM
f57d151a 517 (making an array gdbarch_num_regs in size). */
b323314b 518 struct packet_reg *regs;
ad10f812 519
d01949b6
AC
520 /* This is the size (in chars) of the first response to the ``g''
521 packet. It is used as a heuristic when determining the maximum
522 size of memory-read and memory-write packets. A target will
523 typically only reserve a buffer large enough to hold the ``g''
524 packet. The size does not include packet overhead (headers and
23860348 525 trailers). */
d01949b6
AC
526 long actual_register_packet_size;
527
528 /* This is the maximum size (in chars) of a non read/write packet.
23860348 529 It is also used as a cap on the size of read/write packets. */
d01949b6
AC
530 long remote_packet_size;
531};
532
35b1e5cc
SS
533/* Utility: generate error from an incoming stub packet. */
534static void
535trace_error (char *buf)
536{
537 if (*buf++ != 'E')
538 return; /* not an error msg */
539 switch (*buf)
540 {
541 case '1': /* malformed packet error */
542 if (*++buf == '0') /* general case: */
543 error (_("remote.c: error in outgoing packet."));
544 else
545 error (_("remote.c: error in outgoing packet at field #%ld."),
546 strtol (buf, NULL, 16));
35b1e5cc
SS
547 default:
548 error (_("Target returns error code '%s'."), buf);
549 }
550}
551
552/* Utility: wait for reply from stub, while accepting "O" packets. */
553static char *
554remote_get_noisy_reply (char **buf_p,
555 long *sizeof_buf)
556{
557 do /* Loop on reply from remote stub. */
558 {
559 char *buf;
a744cf53 560
0df8b418 561 QUIT; /* Allow user to bail out with ^C. */
35b1e5cc
SS
562 getpkt (buf_p, sizeof_buf, 0);
563 buf = *buf_p;
ad91cd99 564 if (buf[0] == 'E')
35b1e5cc 565 trace_error (buf);
61012eef 566 else if (startswith (buf, "qRelocInsn:"))
dde08ee1
PA
567 {
568 ULONGEST ul;
569 CORE_ADDR from, to, org_to;
570 char *p, *pp;
571 int adjusted_size = 0;
7556d4a4 572 int relocated = 0;
dde08ee1
PA
573
574 p = buf + strlen ("qRelocInsn:");
575 pp = unpack_varlen_hex (p, &ul);
576 if (*pp != ';')
cb91c06a 577 error (_("invalid qRelocInsn packet: %s"), buf);
dde08ee1
PA
578 from = ul;
579
580 p = pp + 1;
a9cbf802 581 unpack_varlen_hex (p, &ul);
dde08ee1
PA
582 to = ul;
583
584 org_to = to;
585
492d29ea 586 TRY
dde08ee1 587 {
f5656ead 588 gdbarch_relocate_instruction (target_gdbarch (), &to, from);
7556d4a4 589 relocated = 1;
dde08ee1 590 }
492d29ea 591 CATCH (ex, RETURN_MASK_ALL)
7556d4a4
PA
592 {
593 if (ex.error == MEMORY_ERROR)
594 {
595 /* Propagate memory errors silently back to the
596 target. The stub may have limited the range of
597 addresses we can write to, for example. */
598 }
599 else
600 {
601 /* Something unexpectedly bad happened. Be verbose
602 so we can tell what, and propagate the error back
603 to the stub, so it doesn't get stuck waiting for
604 a response. */
605 exception_fprintf (gdb_stderr, ex,
606 _("warning: relocating instruction: "));
607 }
608 putpkt ("E01");
609 }
492d29ea 610 END_CATCH
7556d4a4
PA
611
612 if (relocated)
dde08ee1
PA
613 {
614 adjusted_size = to - org_to;
615
bba74b36 616 xsnprintf (buf, *sizeof_buf, "qRelocInsn:%x", adjusted_size);
dde08ee1
PA
617 putpkt (buf);
618 }
dde08ee1 619 }
ad91cd99 620 else if (buf[0] == 'O' && buf[1] != 'K')
35b1e5cc
SS
621 remote_console_output (buf + 1); /* 'O' message from stub */
622 else
0df8b418 623 return buf; /* Here's the actual reply. */
35b1e5cc
SS
624 }
625 while (1);
626}
3c3bea1c 627
d01949b6
AC
628/* Handle for retreving the remote protocol data from gdbarch. */
629static struct gdbarch_data *remote_gdbarch_data_handle;
630
ea9c271d
DJ
631static struct remote_arch_state *
632get_remote_arch_state (void)
d01949b6 633{
17d8546e 634 gdb_assert (target_gdbarch () != NULL);
19ba03f4
SM
635 return ((struct remote_arch_state *)
636 gdbarch_data (target_gdbarch (), remote_gdbarch_data_handle));
d01949b6
AC
637}
638
0b83947e
DJ
639/* Fetch the global remote target state. */
640
641static struct remote_state *
642get_remote_state (void)
643{
644 /* Make sure that the remote architecture state has been
645 initialized, because doing so might reallocate rs->buf. Any
646 function which calls getpkt also needs to be mindful of changes
647 to rs->buf, but this call limits the number of places which run
648 into trouble. */
649 get_remote_arch_state ();
650
651 return get_remote_state_raw ();
652}
653
94585166
DB
654/* Cleanup routine for the remote module's pspace data. */
655
656static void
657remote_pspace_data_cleanup (struct program_space *pspace, void *arg)
658{
19ba03f4 659 char *remote_exec_file = (char *) arg;
94585166
DB
660
661 xfree (remote_exec_file);
662}
663
664/* Fetch the remote exec-file from the current program space. */
665
666static const char *
667get_remote_exec_file (void)
668{
669 char *remote_exec_file;
670
19ba03f4
SM
671 remote_exec_file
672 = (char *) program_space_data (current_program_space,
673 remote_pspace_data);
94585166
DB
674 if (remote_exec_file == NULL)
675 return "";
676
677 return remote_exec_file;
678}
679
680/* Set the remote exec file for PSPACE. */
681
682static void
683set_pspace_remote_exec_file (struct program_space *pspace,
684 char *remote_exec_file)
685{
19ba03f4 686 char *old_file = (char *) program_space_data (pspace, remote_pspace_data);
94585166
DB
687
688 xfree (old_file);
689 set_program_space_data (pspace, remote_pspace_data,
690 xstrdup (remote_exec_file));
691}
692
693/* The "set/show remote exec-file" set command hook. */
694
695static void
696set_remote_exec_file (char *ignored, int from_tty,
697 struct cmd_list_element *c)
698{
699 gdb_assert (remote_exec_file_var != NULL);
700 set_pspace_remote_exec_file (current_program_space, remote_exec_file_var);
701}
702
703/* The "set/show remote exec-file" show command hook. */
704
705static void
706show_remote_exec_file (struct ui_file *file, int from_tty,
707 struct cmd_list_element *cmd, const char *value)
708{
709 fprintf_filtered (file, "%s\n", remote_exec_file_var);
710}
711
74ca34ce
DJ
712static int
713compare_pnums (const void *lhs_, const void *rhs_)
714{
19ba03f4
SM
715 const struct packet_reg * const *lhs
716 = (const struct packet_reg * const *) lhs_;
717 const struct packet_reg * const *rhs
718 = (const struct packet_reg * const *) rhs_;
74ca34ce
DJ
719
720 if ((*lhs)->pnum < (*rhs)->pnum)
721 return -1;
722 else if ((*lhs)->pnum == (*rhs)->pnum)
723 return 0;
724 else
725 return 1;
726}
727
c21236dc
PA
728static int
729map_regcache_remote_table (struct gdbarch *gdbarch, struct packet_reg *regs)
d01949b6 730{
74ca34ce 731 int regnum, num_remote_regs, offset;
74ca34ce 732 struct packet_reg **remote_regs;
ea9c271d 733
4a22f64d 734 for (regnum = 0; regnum < gdbarch_num_regs (gdbarch); regnum++)
ad10f812 735 {
c21236dc 736 struct packet_reg *r = &regs[regnum];
baef701f 737
4a22f64d 738 if (register_size (gdbarch, regnum) == 0)
baef701f
DJ
739 /* Do not try to fetch zero-sized (placeholder) registers. */
740 r->pnum = -1;
741 else
742 r->pnum = gdbarch_remote_register_number (gdbarch, regnum);
743
b323314b 744 r->regnum = regnum;
74ca34ce
DJ
745 }
746
747 /* Define the g/G packet format as the contents of each register
748 with a remote protocol number, in order of ascending protocol
749 number. */
750
224c3ddb 751 remote_regs = XALLOCAVEC (struct packet_reg *, gdbarch_num_regs (gdbarch));
f57d151a 752 for (num_remote_regs = 0, regnum = 0;
4a22f64d 753 regnum < gdbarch_num_regs (gdbarch);
f57d151a 754 regnum++)
c21236dc
PA
755 if (regs[regnum].pnum != -1)
756 remote_regs[num_remote_regs++] = &regs[regnum];
7d58c67d 757
74ca34ce
DJ
758 qsort (remote_regs, num_remote_regs, sizeof (struct packet_reg *),
759 compare_pnums);
760
761 for (regnum = 0, offset = 0; regnum < num_remote_regs; regnum++)
762 {
763 remote_regs[regnum]->in_g_packet = 1;
764 remote_regs[regnum]->offset = offset;
4a22f64d 765 offset += register_size (gdbarch, remote_regs[regnum]->regnum);
ad10f812
AC
766 }
767
c21236dc
PA
768 return offset;
769}
770
771/* Given the architecture described by GDBARCH, return the remote
772 protocol register's number and the register's offset in the g/G
773 packets of GDB register REGNUM, in PNUM and POFFSET respectively.
774 If the target does not have a mapping for REGNUM, return false,
775 otherwise, return true. */
776
777int
778remote_register_number_and_offset (struct gdbarch *gdbarch, int regnum,
779 int *pnum, int *poffset)
780{
c21236dc
PA
781 struct packet_reg *regs;
782 struct cleanup *old_chain;
783
784 gdb_assert (regnum < gdbarch_num_regs (gdbarch));
785
224c3ddb 786 regs = XCNEWVEC (struct packet_reg, gdbarch_num_regs (gdbarch));
c21236dc
PA
787 old_chain = make_cleanup (xfree, regs);
788
54887903 789 map_regcache_remote_table (gdbarch, regs);
c21236dc
PA
790
791 *pnum = regs[regnum].pnum;
792 *poffset = regs[regnum].offset;
793
794 do_cleanups (old_chain);
795
796 return *pnum != -1;
797}
798
799static void *
800init_remote_state (struct gdbarch *gdbarch)
801{
802 struct remote_state *rs = get_remote_state_raw ();
803 struct remote_arch_state *rsa;
804
805 rsa = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct remote_arch_state);
806
807 /* Use the architecture to build a regnum<->pnum table, which will be
808 1:1 unless a feature set specifies otherwise. */
809 rsa->regs = GDBARCH_OBSTACK_CALLOC (gdbarch,
810 gdbarch_num_regs (gdbarch),
811 struct packet_reg);
812
74ca34ce
DJ
813 /* Record the maximum possible size of the g packet - it may turn out
814 to be smaller. */
c21236dc 815 rsa->sizeof_g_packet = map_regcache_remote_table (gdbarch, rsa->regs);
74ca34ce 816
0df8b418 817 /* Default maximum number of characters in a packet body. Many
d01949b6
AC
818 remote stubs have a hardwired buffer size of 400 bytes
819 (c.f. BUFMAX in m68k-stub.c and i386-stub.c). BUFMAX-1 is used
820 as the maximum packet-size to ensure that the packet and an extra
821 NUL character can always fit in the buffer. This stops GDB
822 trashing stubs that try to squeeze an extra NUL into what is
ea9c271d
DJ
823 already a full buffer (As of 1999-12-04 that was most stubs). */
824 rsa->remote_packet_size = 400 - 1;
d01949b6 825
ea9c271d
DJ
826 /* This one is filled in when a ``g'' packet is received. */
827 rsa->actual_register_packet_size = 0;
828
829 /* Should rsa->sizeof_g_packet needs more space than the
0df8b418
MS
830 default, adjust the size accordingly. Remember that each byte is
831 encoded as two characters. 32 is the overhead for the packet
832 header / footer. NOTE: cagney/1999-10-26: I suspect that 8
d01949b6 833 (``$NN:G...#NN'') is a better guess, the below has been padded a
23860348 834 little. */
ea9c271d
DJ
835 if (rsa->sizeof_g_packet > ((rsa->remote_packet_size - 32) / 2))
836 rsa->remote_packet_size = (rsa->sizeof_g_packet * 2 + 32);
802188a7 837
ea9c271d
DJ
838 /* Make sure that the packet buffer is plenty big enough for
839 this architecture. */
840 if (rs->buf_size < rsa->remote_packet_size)
841 {
842 rs->buf_size = 2 * rsa->remote_packet_size;
224c3ddb 843 rs->buf = (char *) xrealloc (rs->buf, rs->buf_size);
ea9c271d 844 }
6d820c5c 845
ea9c271d
DJ
846 return rsa;
847}
848
849/* Return the current allowed size of a remote packet. This is
850 inferred from the current architecture, and should be used to
851 limit the length of outgoing packets. */
852static long
853get_remote_packet_size (void)
854{
be2a5f71 855 struct remote_state *rs = get_remote_state ();
ea9c271d
DJ
856 struct remote_arch_state *rsa = get_remote_arch_state ();
857
be2a5f71
DJ
858 if (rs->explicit_packet_size)
859 return rs->explicit_packet_size;
860
ea9c271d 861 return rsa->remote_packet_size;
d01949b6
AC
862}
863
ad10f812 864static struct packet_reg *
ea9c271d 865packet_reg_from_regnum (struct remote_arch_state *rsa, long regnum)
ad10f812 866{
f5656ead 867 if (regnum < 0 && regnum >= gdbarch_num_regs (target_gdbarch ()))
b323314b
AC
868 return NULL;
869 else
ad10f812 870 {
ea9c271d 871 struct packet_reg *r = &rsa->regs[regnum];
a744cf53 872
b323314b
AC
873 gdb_assert (r->regnum == regnum);
874 return r;
ad10f812 875 }
ad10f812
AC
876}
877
878static struct packet_reg *
ea9c271d 879packet_reg_from_pnum (struct remote_arch_state *rsa, LONGEST pnum)
ad10f812 880{
b323314b 881 int i;
a744cf53 882
f5656ead 883 for (i = 0; i < gdbarch_num_regs (target_gdbarch ()); i++)
ad10f812 884 {
ea9c271d 885 struct packet_reg *r = &rsa->regs[i];
a744cf53 886
b323314b
AC
887 if (r->pnum == pnum)
888 return r;
ad10f812
AC
889 }
890 return NULL;
d01949b6
AC
891}
892
c906108c
SS
893static struct target_ops remote_ops;
894
895static struct target_ops extended_remote_ops;
896
6426a772
JM
897/* FIXME: cagney/1999-09-23: Even though getpkt was called with
898 ``forever'' still use the normal timeout mechanism. This is
899 currently used by the ASYNC code to guarentee that target reads
900 during the initial connect always time-out. Once getpkt has been
901 modified to return a timeout indication and, in turn
902 remote_wait()/wait_for_inferior() have gained a timeout parameter
23860348 903 this can go away. */
6426a772
JM
904static int wait_forever_enabled_p = 1;
905
9a7071a8
JB
906/* Allow the user to specify what sequence to send to the remote
907 when he requests a program interruption: Although ^C is usually
908 what remote systems expect (this is the default, here), it is
909 sometimes preferable to send a break. On other systems such
910 as the Linux kernel, a break followed by g, which is Magic SysRq g
911 is required in order to interrupt the execution. */
912const char interrupt_sequence_control_c[] = "Ctrl-C";
913const char interrupt_sequence_break[] = "BREAK";
914const char interrupt_sequence_break_g[] = "BREAK-g";
40478521 915static const char *const interrupt_sequence_modes[] =
9a7071a8
JB
916 {
917 interrupt_sequence_control_c,
918 interrupt_sequence_break,
919 interrupt_sequence_break_g,
920 NULL
921 };
922static const char *interrupt_sequence_mode = interrupt_sequence_control_c;
923
924static void
925show_interrupt_sequence (struct ui_file *file, int from_tty,
926 struct cmd_list_element *c,
927 const char *value)
928{
929 if (interrupt_sequence_mode == interrupt_sequence_control_c)
930 fprintf_filtered (file,
931 _("Send the ASCII ETX character (Ctrl-c) "
932 "to the remote target to interrupt the "
933 "execution of the program.\n"));
934 else if (interrupt_sequence_mode == interrupt_sequence_break)
935 fprintf_filtered (file,
936 _("send a break signal to the remote target "
937 "to interrupt the execution of the program.\n"));
938 else if (interrupt_sequence_mode == interrupt_sequence_break_g)
939 fprintf_filtered (file,
940 _("Send a break signal and 'g' a.k.a. Magic SysRq g to "
941 "the remote target to interrupt the execution "
942 "of Linux kernel.\n"));
943 else
944 internal_error (__FILE__, __LINE__,
945 _("Invalid value for interrupt_sequence_mode: %s."),
946 interrupt_sequence_mode);
947}
6426a772 948
9a7071a8
JB
949/* This boolean variable specifies whether interrupt_sequence is sent
950 to the remote target when gdb connects to it.
951 This is mostly needed when you debug the Linux kernel: The Linux kernel
952 expects BREAK g which is Magic SysRq g for connecting gdb. */
953static int interrupt_on_connect = 0;
c906108c 954
9a7071a8
JB
955/* This variable is used to implement the "set/show remotebreak" commands.
956 Since these commands are now deprecated in favor of "set/show remote
957 interrupt-sequence", it no longer has any effect on the code. */
c906108c
SS
958static int remote_break;
959
9a7071a8
JB
960static void
961set_remotebreak (char *args, int from_tty, struct cmd_list_element *c)
962{
963 if (remote_break)
964 interrupt_sequence_mode = interrupt_sequence_break;
965 else
966 interrupt_sequence_mode = interrupt_sequence_control_c;
967}
968
969static void
970show_remotebreak (struct ui_file *file, int from_tty,
971 struct cmd_list_element *c,
972 const char *value)
973{
974}
975
c906108c
SS
976/* This variable sets the number of bits in an address that are to be
977 sent in a memory ("M" or "m") packet. Normally, after stripping
0df8b418 978 leading zeros, the entire address would be sent. This variable
c906108c
SS
979 restricts the address to REMOTE_ADDRESS_SIZE bits. HISTORY: The
980 initial implementation of remote.c restricted the address sent in
981 memory packets to ``host::sizeof long'' bytes - (typically 32
982 bits). Consequently, for 64 bit targets, the upper 32 bits of an
983 address was never sent. Since fixing this bug may cause a break in
984 some remote targets this variable is principly provided to
23860348 985 facilitate backward compatibility. */
c906108c 986
883b9c6c 987static unsigned int remote_address_size;
c906108c 988
75c99385
PA
989/* Temporary to track who currently owns the terminal. See
990 remote_terminal_* for more details. */
6426a772
JM
991
992static int remote_async_terminal_ours_p;
993
11cf8741 994\f
11cf8741 995/* User configurable variables for the number of characters in a
ea9c271d
DJ
996 memory read/write packet. MIN (rsa->remote_packet_size,
997 rsa->sizeof_g_packet) is the default. Some targets need smaller
24b06219 998 values (fifo overruns, et.al.) and some users need larger values
ad10f812
AC
999 (speed up transfers). The variables ``preferred_*'' (the user
1000 request), ``current_*'' (what was actually set) and ``forced_*''
23860348 1001 (Positive - a soft limit, negative - a hard limit). */
11cf8741
JM
1002
1003struct memory_packet_config
1004{
1005 char *name;
1006 long size;
1007 int fixed_p;
1008};
1009
a5c0808e
PA
1010/* The default max memory-write-packet-size. The 16k is historical.
1011 (It came from older GDB's using alloca for buffers and the
1012 knowledge (folklore?) that some hosts don't cope very well with
1013 large alloca calls.) */
1014#define DEFAULT_MAX_MEMORY_PACKET_SIZE 16384
1015
1016/* The minimum remote packet size for memory transfers. Ensures we
1017 can write at least one byte. */
1018#define MIN_MEMORY_PACKET_SIZE 20
1019
11cf8741
JM
1020/* Compute the current size of a read/write packet. Since this makes
1021 use of ``actual_register_packet_size'' the computation is dynamic. */
1022
1023static long
1024get_memory_packet_size (struct memory_packet_config *config)
1025{
d01949b6 1026 struct remote_state *rs = get_remote_state ();
ea9c271d
DJ
1027 struct remote_arch_state *rsa = get_remote_arch_state ();
1028
11cf8741
JM
1029 long what_they_get;
1030 if (config->fixed_p)
1031 {
1032 if (config->size <= 0)
a5c0808e 1033 what_they_get = DEFAULT_MAX_MEMORY_PACKET_SIZE;
11cf8741
JM
1034 else
1035 what_they_get = config->size;
1036 }
1037 else
1038 {
ea9c271d 1039 what_they_get = get_remote_packet_size ();
23860348 1040 /* Limit the packet to the size specified by the user. */
11cf8741
JM
1041 if (config->size > 0
1042 && what_they_get > config->size)
1043 what_they_get = config->size;
be2a5f71
DJ
1044
1045 /* Limit it to the size of the targets ``g'' response unless we have
1046 permission from the stub to use a larger packet size. */
1047 if (rs->explicit_packet_size == 0
1048 && rsa->actual_register_packet_size > 0
1049 && what_they_get > rsa->actual_register_packet_size)
1050 what_they_get = rsa->actual_register_packet_size;
11cf8741 1051 }
a5c0808e
PA
1052 if (what_they_get < MIN_MEMORY_PACKET_SIZE)
1053 what_they_get = MIN_MEMORY_PACKET_SIZE;
6d820c5c
DJ
1054
1055 /* Make sure there is room in the global buffer for this packet
1056 (including its trailing NUL byte). */
1057 if (rs->buf_size < what_they_get + 1)
1058 {
1059 rs->buf_size = 2 * what_they_get;
224c3ddb 1060 rs->buf = (char *) xrealloc (rs->buf, 2 * what_they_get);
6d820c5c
DJ
1061 }
1062
11cf8741
JM
1063 return what_they_get;
1064}
1065
0df8b418 1066/* Update the size of a read/write packet. If they user wants
23860348 1067 something really big then do a sanity check. */
11cf8741
JM
1068
1069static void
1070set_memory_packet_size (char *args, struct memory_packet_config *config)
1071{
1072 int fixed_p = config->fixed_p;
1073 long size = config->size;
a744cf53 1074
11cf8741 1075 if (args == NULL)
8a3fe4f8 1076 error (_("Argument required (integer, `fixed' or `limited')."));
11cf8741
JM
1077 else if (strcmp (args, "hard") == 0
1078 || strcmp (args, "fixed") == 0)
1079 fixed_p = 1;
1080 else if (strcmp (args, "soft") == 0
1081 || strcmp (args, "limit") == 0)
1082 fixed_p = 0;
1083 else
1084 {
1085 char *end;
a744cf53 1086
11cf8741
JM
1087 size = strtoul (args, &end, 0);
1088 if (args == end)
8a3fe4f8 1089 error (_("Invalid %s (bad syntax)."), config->name);
a5c0808e
PA
1090
1091 /* Instead of explicitly capping the size of a packet to or
1092 disallowing it, the user is allowed to set the size to
1093 something arbitrarily large. */
11cf8741 1094 }
a5c0808e
PA
1095
1096 /* So that the query shows the correct value. */
1097 if (size <= 0)
1098 size = DEFAULT_MAX_MEMORY_PACKET_SIZE;
1099
23860348 1100 /* Extra checks? */
11cf8741
JM
1101 if (fixed_p && !config->fixed_p)
1102 {
e2e0b3e5
AC
1103 if (! query (_("The target may not be able to correctly handle a %s\n"
1104 "of %ld bytes. Change the packet size? "),
11cf8741 1105 config->name, size))
8a3fe4f8 1106 error (_("Packet size not changed."));
11cf8741 1107 }
23860348 1108 /* Update the config. */
11cf8741
JM
1109 config->fixed_p = fixed_p;
1110 config->size = size;
1111}
1112
1113static void
1114show_memory_packet_size (struct memory_packet_config *config)
1115{
a3f17187 1116 printf_filtered (_("The %s is %ld. "), config->name, config->size);
11cf8741 1117 if (config->fixed_p)
a3f17187 1118 printf_filtered (_("Packets are fixed at %ld bytes.\n"),
11cf8741
JM
1119 get_memory_packet_size (config));
1120 else
a3f17187 1121 printf_filtered (_("Packets are limited to %ld bytes.\n"),
11cf8741
JM
1122 get_memory_packet_size (config));
1123}
1124
1125static struct memory_packet_config memory_write_packet_config =
1126{
1127 "memory-write-packet-size",
1128};
1129
1130static void
1131set_memory_write_packet_size (char *args, int from_tty)
1132{
1133 set_memory_packet_size (args, &memory_write_packet_config);
1134}
1135
1136static void
1137show_memory_write_packet_size (char *args, int from_tty)
1138{
1139 show_memory_packet_size (&memory_write_packet_config);
1140}
1141
1142static long
1143get_memory_write_packet_size (void)
1144{
1145 return get_memory_packet_size (&memory_write_packet_config);
1146}
1147
1148static struct memory_packet_config memory_read_packet_config =
1149{
1150 "memory-read-packet-size",
1151};
1152
1153static void
1154set_memory_read_packet_size (char *args, int from_tty)
1155{
1156 set_memory_packet_size (args, &memory_read_packet_config);
1157}
1158
1159static void
1160show_memory_read_packet_size (char *args, int from_tty)
1161{
1162 show_memory_packet_size (&memory_read_packet_config);
1163}
1164
1165static long
1166get_memory_read_packet_size (void)
1167{
1168 long size = get_memory_packet_size (&memory_read_packet_config);
a744cf53 1169
11cf8741
JM
1170 /* FIXME: cagney/1999-11-07: Functions like getpkt() need to get an
1171 extra buffer size argument before the memory read size can be
ea9c271d
DJ
1172 increased beyond this. */
1173 if (size > get_remote_packet_size ())
1174 size = get_remote_packet_size ();
11cf8741
JM
1175 return size;
1176}
1177
11cf8741 1178\f
5a2468f5 1179/* Generic configuration support for packets the stub optionally
0df8b418 1180 supports. Allows the user to specify the use of the packet as well
23860348 1181 as allowing GDB to auto-detect support in the remote stub. */
5a2468f5
JM
1182
1183enum packet_support
1184 {
1185 PACKET_SUPPORT_UNKNOWN = 0,
1186 PACKET_ENABLE,
1187 PACKET_DISABLE
1188 };
1189
5a2468f5
JM
1190struct packet_config
1191 {
bb572ddd
DJ
1192 const char *name;
1193 const char *title;
4082afcc
PA
1194
1195 /* If auto, GDB auto-detects support for this packet or feature,
1196 either through qSupported, or by trying the packet and looking
1197 at the response. If true, GDB assumes the target supports this
ca4f7f8b
PA
1198 packet. If false, the packet is disabled. Configs that don't
1199 have an associated command always have this set to auto. */
7f19b9a2 1200 enum auto_boolean detect;
4082afcc
PA
1201
1202 /* Does the target support this packet? */
5a2468f5
JM
1203 enum packet_support support;
1204 };
1205
d471ea57 1206/* Analyze a packet's return value and update the packet config
23860348 1207 accordingly. */
d471ea57
AC
1208
1209enum packet_result
1210{
1211 PACKET_ERROR,
1212 PACKET_OK,
1213 PACKET_UNKNOWN
1214};
1215
4082afcc
PA
1216static enum packet_support packet_config_support (struct packet_config *config);
1217static enum packet_support packet_support (int packet);
5a2468f5
JM
1218
1219static void
fba45db2 1220show_packet_config_cmd (struct packet_config *config)
5a2468f5
JM
1221{
1222 char *support = "internal-error";
a744cf53 1223
4082afcc 1224 switch (packet_config_support (config))
5a2468f5
JM
1225 {
1226 case PACKET_ENABLE:
1227 support = "enabled";
1228 break;
1229 case PACKET_DISABLE:
1230 support = "disabled";
1231 break;
1232 case PACKET_SUPPORT_UNKNOWN:
1233 support = "unknown";
1234 break;
1235 }
1236 switch (config->detect)
1237 {
7f19b9a2 1238 case AUTO_BOOLEAN_AUTO:
3e43a32a
MS
1239 printf_filtered (_("Support for the `%s' packet "
1240 "is auto-detected, currently %s.\n"),
37a105a1 1241 config->name, support);
5a2468f5 1242 break;
7f19b9a2
AC
1243 case AUTO_BOOLEAN_TRUE:
1244 case AUTO_BOOLEAN_FALSE:
37a105a1
DJ
1245 printf_filtered (_("Support for the `%s' packet is currently %s.\n"),
1246 config->name, support);
8e248173 1247 break;
5a2468f5
JM
1248 }
1249}
1250
1251static void
bb572ddd
DJ
1252add_packet_config_cmd (struct packet_config *config, const char *name,
1253 const char *title, int legacy)
d471ea57 1254{
5a2468f5
JM
1255 char *set_doc;
1256 char *show_doc;
d471ea57 1257 char *cmd_name;
3ed07be4 1258
5a2468f5
JM
1259 config->name = name;
1260 config->title = title;
b435e160
AC
1261 set_doc = xstrprintf ("Set use of remote protocol `%s' (%s) packet",
1262 name, title);
3e43a32a
MS
1263 show_doc = xstrprintf ("Show current use of remote "
1264 "protocol `%s' (%s) packet",
b435e160 1265 name, title);
d471ea57 1266 /* set/show TITLE-packet {auto,on,off} */
b435e160 1267 cmd_name = xstrprintf ("%s-packet", title);
e9e68a56 1268 add_setshow_auto_boolean_cmd (cmd_name, class_obscure,
3e43a32a
MS
1269 &config->detect, set_doc,
1270 show_doc, NULL, /* help_doc */
4082afcc 1271 NULL,
bb572ddd
DJ
1272 show_remote_protocol_packet_cmd,
1273 &remote_set_cmdlist, &remote_show_cmdlist);
1eefb858
TT
1274 /* The command code copies the documentation strings. */
1275 xfree (set_doc);
1276 xfree (show_doc);
23860348 1277 /* set/show remote NAME-packet {auto,on,off} -- legacy. */
d471ea57
AC
1278 if (legacy)
1279 {
1280 char *legacy_name;
a744cf53 1281
b435e160 1282 legacy_name = xstrprintf ("%s-packet", name);
d471ea57 1283 add_alias_cmd (legacy_name, cmd_name, class_obscure, 0,
bb572ddd 1284 &remote_set_cmdlist);
d471ea57 1285 add_alias_cmd (legacy_name, cmd_name, class_obscure, 0,
bb572ddd 1286 &remote_show_cmdlist);
d471ea57 1287 }
5a2468f5
JM
1288}
1289
d471ea57 1290static enum packet_result
a76d924d 1291packet_check_result (const char *buf)
5a2468f5 1292{
d471ea57 1293 if (buf[0] != '\0')
5a2468f5 1294 {
d471ea57 1295 /* The stub recognized the packet request. Check that the
23860348 1296 operation succeeded. */
a76d924d
DJ
1297 if (buf[0] == 'E'
1298 && isxdigit (buf[1]) && isxdigit (buf[2])
1299 && buf[3] == '\0')
1300 /* "Enn" - definitly an error. */
1301 return PACKET_ERROR;
1302
1303 /* Always treat "E." as an error. This will be used for
1304 more verbose error messages, such as E.memtypes. */
1305 if (buf[0] == 'E' && buf[1] == '.')
1306 return PACKET_ERROR;
1307
1308 /* The packet may or may not be OK. Just assume it is. */
1309 return PACKET_OK;
1310 }
1311 else
1312 /* The stub does not support the packet. */
1313 return PACKET_UNKNOWN;
1314}
1315
1316static enum packet_result
1317packet_ok (const char *buf, struct packet_config *config)
1318{
1319 enum packet_result result;
1320
4082afcc
PA
1321 if (config->detect != AUTO_BOOLEAN_TRUE
1322 && config->support == PACKET_DISABLE)
1323 internal_error (__FILE__, __LINE__,
1324 _("packet_ok: attempt to use a disabled packet"));
1325
a76d924d
DJ
1326 result = packet_check_result (buf);
1327 switch (result)
1328 {
1329 case PACKET_OK:
1330 case PACKET_ERROR:
1331 /* The stub recognized the packet request. */
4082afcc 1332 if (config->support == PACKET_SUPPORT_UNKNOWN)
d471ea57 1333 {
d471ea57
AC
1334 if (remote_debug)
1335 fprintf_unfiltered (gdb_stdlog,
4082afcc
PA
1336 "Packet %s (%s) is supported\n",
1337 config->name, config->title);
d471ea57 1338 config->support = PACKET_ENABLE;
d471ea57 1339 }
a76d924d
DJ
1340 break;
1341 case PACKET_UNKNOWN:
23860348 1342 /* The stub does not support the packet. */
4082afcc
PA
1343 if (config->detect == AUTO_BOOLEAN_AUTO
1344 && config->support == PACKET_ENABLE)
d471ea57 1345 {
4082afcc
PA
1346 /* If the stub previously indicated that the packet was
1347 supported then there is a protocol error. */
1348 error (_("Protocol error: %s (%s) conflicting enabled responses."),
1349 config->name, config->title);
1350 }
1351 else if (config->detect == AUTO_BOOLEAN_TRUE)
1352 {
1353 /* The user set it wrong. */
1354 error (_("Enabled packet %s (%s) not recognized by stub"),
1355 config->name, config->title);
d471ea57 1356 }
4082afcc
PA
1357
1358 if (remote_debug)
1359 fprintf_unfiltered (gdb_stdlog,
1360 "Packet %s (%s) is NOT supported\n",
1361 config->name, config->title);
1362 config->support = PACKET_DISABLE;
a76d924d 1363 break;
5a2468f5 1364 }
a76d924d
DJ
1365
1366 return result;
5a2468f5
JM
1367}
1368
444abaca
DJ
1369enum {
1370 PACKET_vCont = 0,
1371 PACKET_X,
1372 PACKET_qSymbol,
1373 PACKET_P,
1374 PACKET_p,
1375 PACKET_Z0,
1376 PACKET_Z1,
1377 PACKET_Z2,
1378 PACKET_Z3,
1379 PACKET_Z4,
15a201c8 1380 PACKET_vFile_setfs,
a6b151f1
DJ
1381 PACKET_vFile_open,
1382 PACKET_vFile_pread,
1383 PACKET_vFile_pwrite,
1384 PACKET_vFile_close,
1385 PACKET_vFile_unlink,
b9e7b9c3 1386 PACKET_vFile_readlink,
0a93529c 1387 PACKET_vFile_fstat,
0876f84a 1388 PACKET_qXfer_auxv,
23181151 1389 PACKET_qXfer_features,
c78fa86a 1390 PACKET_qXfer_exec_file,
cfa9d6d9 1391 PACKET_qXfer_libraries,
2268b414 1392 PACKET_qXfer_libraries_svr4,
fd79ecee 1393 PACKET_qXfer_memory_map,
0e7f50da
UW
1394 PACKET_qXfer_spu_read,
1395 PACKET_qXfer_spu_write,
07e059b5 1396 PACKET_qXfer_osdata,
dc146f7c 1397 PACKET_qXfer_threads,
0fb4aa4b 1398 PACKET_qXfer_statictrace_read,
b3b9301e 1399 PACKET_qXfer_traceframe_info,
169081d0 1400 PACKET_qXfer_uib,
711e434b 1401 PACKET_qGetTIBAddr,
444abaca 1402 PACKET_qGetTLSAddr,
be2a5f71 1403 PACKET_qSupported,
bd3eecc3 1404 PACKET_qTStatus,
89be2091 1405 PACKET_QPassSignals,
82075af2 1406 PACKET_QCatchSyscalls,
9b224c5e 1407 PACKET_QProgramSignals,
936d2992 1408 PACKET_qCRC,
08388c79 1409 PACKET_qSearch_memory,
2d717e4f
DJ
1410 PACKET_vAttach,
1411 PACKET_vRun,
a6f3e723 1412 PACKET_QStartNoAckMode,
82f73884 1413 PACKET_vKill,
4aa995e1
PA
1414 PACKET_qXfer_siginfo_read,
1415 PACKET_qXfer_siginfo_write,
0b16c5cf 1416 PACKET_qAttached,
4082afcc
PA
1417
1418 /* Support for conditional tracepoints. */
782b2b07 1419 PACKET_ConditionalTracepoints,
4082afcc
PA
1420
1421 /* Support for target-side breakpoint conditions. */
3788aec7 1422 PACKET_ConditionalBreakpoints,
4082afcc
PA
1423
1424 /* Support for target-side breakpoint commands. */
d3ce09f5 1425 PACKET_BreakpointCommands,
4082afcc
PA
1426
1427 /* Support for fast tracepoints. */
7a697b8d 1428 PACKET_FastTracepoints,
4082afcc
PA
1429
1430 /* Support for static tracepoints. */
0fb4aa4b 1431 PACKET_StaticTracepoints,
4082afcc
PA
1432
1433 /* Support for installing tracepoints while a trace experiment is
1434 running. */
1e4d1764 1435 PACKET_InstallInTrace,
4082afcc 1436
40ab02ce
MS
1437 PACKET_bc,
1438 PACKET_bs,
409873ef 1439 PACKET_TracepointSource,
d914c394 1440 PACKET_QAllow,
78d85199 1441 PACKET_qXfer_fdpic,
03583c20 1442 PACKET_QDisableRandomization,
d1feda86 1443 PACKET_QAgent,
f6f899bf 1444 PACKET_QTBuffer_size,
9accd112
MM
1445 PACKET_Qbtrace_off,
1446 PACKET_Qbtrace_bts,
b20a6524 1447 PACKET_Qbtrace_pt,
9accd112 1448 PACKET_qXfer_btrace,
4082afcc
PA
1449
1450 /* Support for the QNonStop packet. */
1451 PACKET_QNonStop,
1452
65706a29
PA
1453 /* Support for the QThreadEvents packet. */
1454 PACKET_QThreadEvents,
1455
4082afcc
PA
1456 /* Support for multi-process extensions. */
1457 PACKET_multiprocess_feature,
1458
1459 /* Support for enabling and disabling tracepoints while a trace
1460 experiment is running. */
1461 PACKET_EnableDisableTracepoints_feature,
1462
1463 /* Support for collecting strings using the tracenz bytecode. */
1464 PACKET_tracenz_feature,
1465
1466 /* Support for continuing to run a trace experiment while GDB is
1467 disconnected. */
1468 PACKET_DisconnectedTracing_feature,
1469
1470 /* Support for qXfer:libraries-svr4:read with a non-empty annex. */
1471 PACKET_augmented_libraries_svr4_read_feature,
1472
f4abbc16
MM
1473 /* Support for the qXfer:btrace-conf:read packet. */
1474 PACKET_qXfer_btrace_conf,
1475
d33501a5
MM
1476 /* Support for the Qbtrace-conf:bts:size packet. */
1477 PACKET_Qbtrace_conf_bts_size,
1478
f7e6eed5
PA
1479 /* Support for swbreak+ feature. */
1480 PACKET_swbreak_feature,
1481
1482 /* Support for hwbreak+ feature. */
1483 PACKET_hwbreak_feature,
1484
89245bc0
DB
1485 /* Support for fork events. */
1486 PACKET_fork_event_feature,
1487
1488 /* Support for vfork events. */
1489 PACKET_vfork_event_feature,
1490
b20a6524
MM
1491 /* Support for the Qbtrace-conf:pt:size packet. */
1492 PACKET_Qbtrace_conf_pt_size,
1493
94585166
DB
1494 /* Support for exec events. */
1495 PACKET_exec_event_feature,
1496
750ce8d1
YQ
1497 /* Support for query supported vCont actions. */
1498 PACKET_vContSupported,
1499
de979965
PA
1500 /* Support remote CTRL-C. */
1501 PACKET_vCtrlC,
1502
f2faf941
PA
1503 /* Support TARGET_WAITKIND_NO_RESUMED. */
1504 PACKET_no_resumed,
1505
444abaca
DJ
1506 PACKET_MAX
1507};
506fb367 1508
444abaca 1509static struct packet_config remote_protocol_packets[PACKET_MAX];
dc8acb97 1510
f7e6eed5
PA
1511/* Returns the packet's corresponding "set remote foo-packet" command
1512 state. See struct packet_config for more details. */
1513
1514static enum auto_boolean
1515packet_set_cmd_state (int packet)
1516{
1517 return remote_protocol_packets[packet].detect;
1518}
1519
4082afcc
PA
1520/* Returns whether a given packet or feature is supported. This takes
1521 into account the state of the corresponding "set remote foo-packet"
1522 command, which may be used to bypass auto-detection. */
dc8acb97 1523
4082afcc
PA
1524static enum packet_support
1525packet_config_support (struct packet_config *config)
1526{
1527 switch (config->detect)
444abaca 1528 {
4082afcc
PA
1529 case AUTO_BOOLEAN_TRUE:
1530 return PACKET_ENABLE;
1531 case AUTO_BOOLEAN_FALSE:
1532 return PACKET_DISABLE;
1533 case AUTO_BOOLEAN_AUTO:
1534 return config->support;
1535 default:
1536 gdb_assert_not_reached (_("bad switch"));
444abaca 1537 }
4082afcc
PA
1538}
1539
1540/* Same as packet_config_support, but takes the packet's enum value as
1541 argument. */
1542
1543static enum packet_support
1544packet_support (int packet)
1545{
1546 struct packet_config *config = &remote_protocol_packets[packet];
1547
1548 return packet_config_support (config);
dc8acb97
MS
1549}
1550
5a2468f5 1551static void
444abaca
DJ
1552show_remote_protocol_packet_cmd (struct ui_file *file, int from_tty,
1553 struct cmd_list_element *c,
1554 const char *value)
5a2468f5 1555{
444abaca 1556 struct packet_config *packet;
5a2468f5 1557
444abaca
DJ
1558 for (packet = remote_protocol_packets;
1559 packet < &remote_protocol_packets[PACKET_MAX];
1560 packet++)
1561 {
1562 if (&packet->detect == c->var)
1563 {
1564 show_packet_config_cmd (packet);
1565 return;
1566 }
1567 }
9b20d036 1568 internal_error (__FILE__, __LINE__, _("Could not find config for %s"),
444abaca 1569 c->name);
5a2468f5
JM
1570}
1571
d471ea57
AC
1572/* Should we try one of the 'Z' requests? */
1573
1574enum Z_packet_type
1575{
1576 Z_PACKET_SOFTWARE_BP,
1577 Z_PACKET_HARDWARE_BP,
1578 Z_PACKET_WRITE_WP,
1579 Z_PACKET_READ_WP,
1580 Z_PACKET_ACCESS_WP,
1581 NR_Z_PACKET_TYPES
1582};
96baa820 1583
d471ea57 1584/* For compatibility with older distributions. Provide a ``set remote
23860348 1585 Z-packet ...'' command that updates all the Z packet types. */
d471ea57 1586
7f19b9a2 1587static enum auto_boolean remote_Z_packet_detect;
96baa820
JM
1588
1589static void
fba45db2
KB
1590set_remote_protocol_Z_packet_cmd (char *args, int from_tty,
1591 struct cmd_list_element *c)
96baa820 1592{
d471ea57 1593 int i;
a744cf53 1594
d471ea57 1595 for (i = 0; i < NR_Z_PACKET_TYPES; i++)
4082afcc 1596 remote_protocol_packets[PACKET_Z0 + i].detect = remote_Z_packet_detect;
96baa820
JM
1597}
1598
1599static void
08546159
AC
1600show_remote_protocol_Z_packet_cmd (struct ui_file *file, int from_tty,
1601 struct cmd_list_element *c,
1602 const char *value)
96baa820 1603{
d471ea57 1604 int i;
a744cf53 1605
d471ea57
AC
1606 for (i = 0; i < NR_Z_PACKET_TYPES; i++)
1607 {
444abaca 1608 show_packet_config_cmd (&remote_protocol_packets[PACKET_Z0 + i]);
d471ea57 1609 }
96baa820
JM
1610}
1611
4082afcc
PA
1612/* Returns true if the multi-process extensions are in effect. */
1613
1614static int
1615remote_multi_process_p (struct remote_state *rs)
1616{
1617 return packet_support (PACKET_multiprocess_feature) == PACKET_ENABLE;
1618}
1619
de0d863e
DB
1620/* Returns true if fork events are supported. */
1621
1622static int
1623remote_fork_event_p (struct remote_state *rs)
1624{
1625 return packet_support (PACKET_fork_event_feature) == PACKET_ENABLE;
1626}
1627
c269dbdb
DB
1628/* Returns true if vfork events are supported. */
1629
1630static int
1631remote_vfork_event_p (struct remote_state *rs)
1632{
1633 return packet_support (PACKET_vfork_event_feature) == PACKET_ENABLE;
1634}
1635
d46addbb
DB
1636/* Returns true if exec events are supported. */
1637
1638static int
1639remote_exec_event_p (struct remote_state *rs)
1640{
1641 return packet_support (PACKET_exec_event_feature) == PACKET_ENABLE;
1642}
1643
cbb8991c
DB
1644/* Insert fork catchpoint target routine. If fork events are enabled
1645 then return success, nothing more to do. */
1646
1647static int
1648remote_insert_fork_catchpoint (struct target_ops *ops, int pid)
1649{
1650 struct remote_state *rs = get_remote_state ();
1651
1652 return !remote_fork_event_p (rs);
1653}
1654
1655/* Remove fork catchpoint target routine. Nothing to do, just
1656 return success. */
1657
1658static int
1659remote_remove_fork_catchpoint (struct target_ops *ops, int pid)
1660{
1661 return 0;
1662}
1663
1664/* Insert vfork catchpoint target routine. If vfork events are enabled
1665 then return success, nothing more to do. */
1666
1667static int
1668remote_insert_vfork_catchpoint (struct target_ops *ops, int pid)
1669{
1670 struct remote_state *rs = get_remote_state ();
1671
1672 return !remote_vfork_event_p (rs);
1673}
1674
1675/* Remove vfork catchpoint target routine. Nothing to do, just
1676 return success. */
1677
1678static int
1679remote_remove_vfork_catchpoint (struct target_ops *ops, int pid)
1680{
1681 return 0;
1682}
1683
d46addbb
DB
1684/* Insert exec catchpoint target routine. If exec events are
1685 enabled, just return success. */
1686
1687static int
1688remote_insert_exec_catchpoint (struct target_ops *ops, int pid)
1689{
1690 struct remote_state *rs = get_remote_state ();
1691
1692 return !remote_exec_event_p (rs);
1693}
1694
1695/* Remove exec catchpoint target routine. Nothing to do, just
1696 return success. */
1697
1698static int
1699remote_remove_exec_catchpoint (struct target_ops *ops, int pid)
1700{
1701 return 0;
1702}
1703
74531fed
PA
1704\f
1705/* Asynchronous signal handle registered as event loop source for
1706 when we have pending events ready to be passed to the core. */
1707
1708static struct async_event_handler *remote_async_inferior_event_token;
1709
c906108c
SS
1710\f
1711
79d7f229
PA
1712static ptid_t magic_null_ptid;
1713static ptid_t not_sent_ptid;
1714static ptid_t any_thread_ptid;
1715
0b16c5cf
PA
1716/* Find out if the stub attached to PID (and hence GDB should offer to
1717 detach instead of killing it when bailing out). */
1718
1719static int
1720remote_query_attached (int pid)
1721{
1722 struct remote_state *rs = get_remote_state ();
bba74b36 1723 size_t size = get_remote_packet_size ();
0b16c5cf 1724
4082afcc 1725 if (packet_support (PACKET_qAttached) == PACKET_DISABLE)
0b16c5cf
PA
1726 return 0;
1727
1728 if (remote_multi_process_p (rs))
bba74b36 1729 xsnprintf (rs->buf, size, "qAttached:%x", pid);
0b16c5cf 1730 else
bba74b36 1731 xsnprintf (rs->buf, size, "qAttached");
0b16c5cf
PA
1732
1733 putpkt (rs->buf);
1734 getpkt (&rs->buf, &rs->buf_size, 0);
1735
1736 switch (packet_ok (rs->buf,
1554e9be 1737 &remote_protocol_packets[PACKET_qAttached]))
0b16c5cf
PA
1738 {
1739 case PACKET_OK:
1740 if (strcmp (rs->buf, "1") == 0)
1741 return 1;
1742 break;
1743 case PACKET_ERROR:
1744 warning (_("Remote failure reply: %s"), rs->buf);
1745 break;
1746 case PACKET_UNKNOWN:
1747 break;
1748 }
1749
1750 return 0;
1751}
1752
49c62f2e
PA
1753/* Add PID to GDB's inferior table. If FAKE_PID_P is true, then PID
1754 has been invented by GDB, instead of reported by the target. Since
1755 we can be connected to a remote system before before knowing about
1756 any inferior, mark the target with execution when we find the first
1757 inferior. If ATTACHED is 1, then we had just attached to this
1758 inferior. If it is 0, then we just created this inferior. If it
1759 is -1, then try querying the remote stub to find out if it had
1b6e6f5c
GB
1760 attached to the inferior or not. If TRY_OPEN_EXEC is true then
1761 attempt to open this inferior's executable as the main executable
1762 if no main executable is open already. */
1941c569
PA
1763
1764static struct inferior *
1b6e6f5c
GB
1765remote_add_inferior (int fake_pid_p, int pid, int attached,
1766 int try_open_exec)
1941c569 1767{
1941c569
PA
1768 struct inferior *inf;
1769
0b16c5cf
PA
1770 /* Check whether this process we're learning about is to be
1771 considered attached, or if is to be considered to have been
1772 spawned by the stub. */
1773 if (attached == -1)
1774 attached = remote_query_attached (pid);
1775
f5656ead 1776 if (gdbarch_has_global_solist (target_gdbarch ()))
6c95b8df
PA
1777 {
1778 /* If the target shares code across all inferiors, then every
1779 attach adds a new inferior. */
1780 inf = add_inferior (pid);
1781
1782 /* ... and every inferior is bound to the same program space.
1783 However, each inferior may still have its own address
1784 space. */
1785 inf->aspace = maybe_new_address_space ();
1786 inf->pspace = current_program_space;
1787 }
1788 else
1789 {
1790 /* In the traditional debugging scenario, there's a 1-1 match
1791 between program/address spaces. We simply bind the inferior
1792 to the program space's address space. */
1793 inf = current_inferior ();
1794 inferior_appeared (inf, pid);
1795 }
1941c569 1796
0b16c5cf 1797 inf->attach_flag = attached;
49c62f2e 1798 inf->fake_pid_p = fake_pid_p;
0b16c5cf 1799
1b6e6f5c
GB
1800 /* If no main executable is currently open then attempt to
1801 open the file that was executed to create this inferior. */
835205d0 1802 if (try_open_exec && get_exec_file (0) == NULL)
1b6e6f5c
GB
1803 exec_file_locate_attach (pid, 1);
1804
1941c569
PA
1805 return inf;
1806}
1807
1808/* Add thread PTID to GDB's thread list. Tag it as executing/running
1809 according to RUNNING. */
1810
c906108c 1811static void
0d5b594f 1812remote_add_thread (ptid_t ptid, int running, int executing)
c906108c 1813{
b7ea362b
PA
1814 struct remote_state *rs = get_remote_state ();
1815
1816 /* GDB historically didn't pull threads in the initial connection
1817 setup. If the remote target doesn't even have a concept of
1818 threads (e.g., a bare-metal target), even if internally we
1819 consider that a single-threaded target, mentioning a new thread
1820 might be confusing to the user. Be silent then, preserving the
1821 age old behavior. */
1822 if (rs->starting_up)
1823 add_thread_silent (ptid);
1824 else
1825 add_thread (ptid);
1941c569 1826
0d5b594f 1827 set_executing (ptid, executing);
1941c569
PA
1828 set_running (ptid, running);
1829}
1830
1831/* Come here when we learn about a thread id from the remote target.
1832 It may be the first time we hear about such thread, so take the
1833 opportunity to add it to GDB's thread list. In case this is the
1834 first time we're noticing its corresponding inferior, add it to
0d5b594f
PA
1835 GDB's inferior list as well. EXECUTING indicates whether the
1836 thread is (internally) executing or stopped. */
1941c569
PA
1837
1838static void
0d5b594f 1839remote_notice_new_inferior (ptid_t currthread, int executing)
1941c569 1840{
0d5b594f
PA
1841 /* In non-stop mode, we assume new found threads are (externally)
1842 running until proven otherwise with a stop reply. In all-stop,
1843 we can only get here if all threads are stopped. */
1844 int running = target_is_non_stop_p () ? 1 : 0;
1845
c906108c
SS
1846 /* If this is a new thread, add it to GDB's thread list.
1847 If we leave it up to WFI to do this, bad things will happen. */
82f73884
PA
1848
1849 if (in_thread_list (currthread) && is_exited (currthread))
1850 {
1851 /* We're seeing an event on a thread id we knew had exited.
1852 This has to be a new thread reusing the old id. Add it. */
0d5b594f 1853 remote_add_thread (currthread, running, executing);
82f73884
PA
1854 return;
1855 }
1856
79d7f229 1857 if (!in_thread_list (currthread))
c0a2216e 1858 {
1941c569 1859 struct inferior *inf = NULL;
bad34192 1860 int pid = ptid_get_pid (currthread);
1941c569 1861
bad34192
PA
1862 if (ptid_is_pid (inferior_ptid)
1863 && pid == ptid_get_pid (inferior_ptid))
c0a2216e
PA
1864 {
1865 /* inferior_ptid has no thread member yet. This can happen
1866 with the vAttach -> remote_wait,"TAAthread:" path if the
1867 stub doesn't support qC. This is the first stop reported
1868 after an attach, so this is the main thread. Update the
1869 ptid in the thread list. */
bad34192
PA
1870 if (in_thread_list (pid_to_ptid (pid)))
1871 thread_change_ptid (inferior_ptid, currthread);
1872 else
1873 {
0d5b594f 1874 remote_add_thread (currthread, running, executing);
bad34192
PA
1875 inferior_ptid = currthread;
1876 }
dc146f7c 1877 return;
c0a2216e 1878 }
82f73884
PA
1879
1880 if (ptid_equal (magic_null_ptid, inferior_ptid))
c0a2216e
PA
1881 {
1882 /* inferior_ptid is not set yet. This can happen with the
1883 vRun -> remote_wait,"TAAthread:" path if the stub
1884 doesn't support qC. This is the first stop reported
1885 after an attach, so this is the main thread. Update the
1886 ptid in the thread list. */
dc146f7c 1887 thread_change_ptid (inferior_ptid, currthread);
82f73884 1888 return;
c0a2216e 1889 }
82f73884 1890
29c87f7f
PA
1891 /* When connecting to a target remote, or to a target
1892 extended-remote which already was debugging an inferior, we
1893 may not know about it yet. Add it before adding its child
1894 thread, so notifications are emitted in a sensible order. */
1895 if (!in_inferior_list (ptid_get_pid (currthread)))
49c62f2e
PA
1896 {
1897 struct remote_state *rs = get_remote_state ();
1898 int fake_pid_p = !remote_multi_process_p (rs);
1899
1900 inf = remote_add_inferior (fake_pid_p,
1b6e6f5c 1901 ptid_get_pid (currthread), -1, 1);
49c62f2e 1902 }
29c87f7f 1903
82f73884 1904 /* This is really a new thread. Add it. */
0d5b594f 1905 remote_add_thread (currthread, running, executing);
1941c569
PA
1906
1907 /* If we found a new inferior, let the common code do whatever
1908 it needs to with it (e.g., read shared libraries, insert
b7ea362b
PA
1909 breakpoints), unless we're just setting up an all-stop
1910 connection. */
1941c569 1911 if (inf != NULL)
b7ea362b
PA
1912 {
1913 struct remote_state *rs = get_remote_state ();
1914
6efcd9a8 1915 if (!rs->starting_up)
0d5b594f 1916 notice_new_inferior (currthread, executing, 0);
b7ea362b 1917 }
c0a2216e 1918 }
c906108c
SS
1919}
1920
dc146f7c
VP
1921/* Return the private thread data, creating it if necessary. */
1922
70221824 1923static struct private_thread_info *
dc146f7c
VP
1924demand_private_info (ptid_t ptid)
1925{
1926 struct thread_info *info = find_thread_ptid (ptid);
1927
1928 gdb_assert (info);
1929
fe978cb0 1930 if (!info->priv)
dc146f7c 1931 {
8d749320 1932 info->priv = XNEW (struct private_thread_info);
dc146f7c 1933 info->private_dtor = free_private_thread_info;
fe978cb0 1934 info->priv->core = -1;
8020350c
DB
1935 info->priv->extra = NULL;
1936 info->priv->name = NULL;
dc146f7c
VP
1937 }
1938
fe978cb0 1939 return info->priv;
dc146f7c
VP
1940}
1941
74531fed
PA
1942/* Call this function as a result of
1943 1) A halt indication (T packet) containing a thread id
1944 2) A direct query of currthread
0df8b418 1945 3) Successful execution of set thread */
74531fed
PA
1946
1947static void
47f8a51d 1948record_currthread (struct remote_state *rs, ptid_t currthread)
74531fed 1949{
47f8a51d 1950 rs->general_thread = currthread;
74531fed
PA
1951}
1952
89be2091
DJ
1953/* If 'QPassSignals' is supported, tell the remote stub what signals
1954 it can simply pass through to the inferior without reporting. */
1955
1956static void
94bedb42
TT
1957remote_pass_signals (struct target_ops *self,
1958 int numsigs, unsigned char *pass_signals)
89be2091 1959{
4082afcc 1960 if (packet_support (PACKET_QPassSignals) != PACKET_DISABLE)
89be2091
DJ
1961 {
1962 char *pass_packet, *p;
89be2091 1963 int count = 0, i;
747dc59d 1964 struct remote_state *rs = get_remote_state ();
89be2091
DJ
1965
1966 gdb_assert (numsigs < 256);
1967 for (i = 0; i < numsigs; i++)
1968 {
2455069d 1969 if (pass_signals[i])
89be2091
DJ
1970 count++;
1971 }
224c3ddb 1972 pass_packet = (char *) xmalloc (count * 3 + strlen ("QPassSignals:") + 1);
89be2091
DJ
1973 strcpy (pass_packet, "QPassSignals:");
1974 p = pass_packet + strlen (pass_packet);
1975 for (i = 0; i < numsigs; i++)
1976 {
2455069d 1977 if (pass_signals[i])
89be2091
DJ
1978 {
1979 if (i >= 16)
1980 *p++ = tohex (i >> 4);
1981 *p++ = tohex (i & 15);
1982 if (count)
1983 *p++ = ';';
1984 else
1985 break;
1986 count--;
1987 }
1988 }
1989 *p = 0;
747dc59d 1990 if (!rs->last_pass_packet || strcmp (rs->last_pass_packet, pass_packet))
89be2091 1991 {
89be2091
DJ
1992 putpkt (pass_packet);
1993 getpkt (&rs->buf, &rs->buf_size, 0);
8dc5b319 1994 packet_ok (rs->buf, &remote_protocol_packets[PACKET_QPassSignals]);
747dc59d
TT
1995 if (rs->last_pass_packet)
1996 xfree (rs->last_pass_packet);
1997 rs->last_pass_packet = pass_packet;
89be2091
DJ
1998 }
1999 else
2000 xfree (pass_packet);
2001 }
2002}
2003
82075af2
JS
2004/* If 'QCatchSyscalls' is supported, tell the remote stub
2005 to report syscalls to GDB. */
2006
2007static int
2008remote_set_syscall_catchpoint (struct target_ops *self,
2009 int pid, int needed, int any_count,
2010 int table_size, int *table)
2011{
2012 char *catch_packet;
2013 enum packet_result result;
2014 int n_sysno = 0;
2015
2016 if (packet_support (PACKET_QCatchSyscalls) == PACKET_DISABLE)
2017 {
2018 /* Not supported. */
2019 return 1;
2020 }
2021
2022 if (needed && !any_count)
2023 {
2024 int i;
2025
2026 /* Count how many syscalls are to be caught (table[sysno] != 0). */
2027 for (i = 0; i < table_size; i++)
2028 {
2029 if (table[i] != 0)
2030 n_sysno++;
2031 }
2032 }
2033
2034 if (remote_debug)
2035 {
2036 fprintf_unfiltered (gdb_stdlog,
2037 "remote_set_syscall_catchpoint "
2038 "pid %d needed %d any_count %d n_sysno %d\n",
2039 pid, needed, any_count, n_sysno);
2040 }
2041
2042 if (needed)
2043 {
2044 /* Prepare a packet with the sysno list, assuming max 8+1
2045 characters for a sysno. If the resulting packet size is too
2046 big, fallback on the non-selective packet. */
2047 const int maxpktsz = strlen ("QCatchSyscalls:1") + n_sysno * 9 + 1;
2048
c0518081 2049 catch_packet = (char *) xmalloc (maxpktsz);
82075af2
JS
2050 strcpy (catch_packet, "QCatchSyscalls:1");
2051 if (!any_count)
2052 {
2053 int i;
2054 char *p;
2055
2056 p = catch_packet;
2057 p += strlen (p);
2058
2059 /* Add in catch_packet each syscall to be caught (table[i] != 0). */
2060 for (i = 0; i < table_size; i++)
2061 {
2062 if (table[i] != 0)
2063 p += xsnprintf (p, catch_packet + maxpktsz - p, ";%x", i);
2064 }
2065 }
2066 if (strlen (catch_packet) > get_remote_packet_size ())
2067 {
2068 /* catch_packet too big. Fallback to less efficient
2069 non selective mode, with GDB doing the filtering. */
2070 catch_packet[sizeof ("QCatchSyscalls:1") - 1] = 0;
2071 }
2072 }
2073 else
2074 catch_packet = xstrdup ("QCatchSyscalls:0");
2075
2076 {
2077 struct cleanup *old_chain = make_cleanup (xfree, catch_packet);
2078 struct remote_state *rs = get_remote_state ();
2079
2080 putpkt (catch_packet);
2081 getpkt (&rs->buf, &rs->buf_size, 0);
2082 result = packet_ok (rs->buf, &remote_protocol_packets[PACKET_QCatchSyscalls]);
2083 do_cleanups (old_chain);
2084 if (result == PACKET_OK)
2085 return 0;
2086 else
2087 return -1;
2088 }
2089}
2090
9b224c5e
PA
2091/* If 'QProgramSignals' is supported, tell the remote stub what
2092 signals it should pass through to the inferior when detaching. */
2093
2094static void
daf5e9b6
TT
2095remote_program_signals (struct target_ops *self,
2096 int numsigs, unsigned char *signals)
9b224c5e 2097{
4082afcc 2098 if (packet_support (PACKET_QProgramSignals) != PACKET_DISABLE)
9b224c5e
PA
2099 {
2100 char *packet, *p;
2101 int count = 0, i;
5e4a05c4 2102 struct remote_state *rs = get_remote_state ();
9b224c5e
PA
2103
2104 gdb_assert (numsigs < 256);
2105 for (i = 0; i < numsigs; i++)
2106 {
2107 if (signals[i])
2108 count++;
2109 }
224c3ddb 2110 packet = (char *) xmalloc (count * 3 + strlen ("QProgramSignals:") + 1);
9b224c5e
PA
2111 strcpy (packet, "QProgramSignals:");
2112 p = packet + strlen (packet);
2113 for (i = 0; i < numsigs; i++)
2114 {
2115 if (signal_pass_state (i))
2116 {
2117 if (i >= 16)
2118 *p++ = tohex (i >> 4);
2119 *p++ = tohex (i & 15);
2120 if (count)
2121 *p++ = ';';
2122 else
2123 break;
2124 count--;
2125 }
2126 }
2127 *p = 0;
5e4a05c4
TT
2128 if (!rs->last_program_signals_packet
2129 || strcmp (rs->last_program_signals_packet, packet) != 0)
9b224c5e 2130 {
9b224c5e
PA
2131 putpkt (packet);
2132 getpkt (&rs->buf, &rs->buf_size, 0);
8dc5b319 2133 packet_ok (rs->buf, &remote_protocol_packets[PACKET_QProgramSignals]);
5e4a05c4
TT
2134 xfree (rs->last_program_signals_packet);
2135 rs->last_program_signals_packet = packet;
9b224c5e
PA
2136 }
2137 else
2138 xfree (packet);
2139 }
2140}
2141
79d7f229
PA
2142/* If PTID is MAGIC_NULL_PTID, don't set any thread. If PTID is
2143 MINUS_ONE_PTID, set the thread to -1, so the stub returns the
2144 thread. If GEN is set, set the general thread, if not, then set
2145 the step/continue thread. */
c906108c 2146static void
79d7f229 2147set_thread (struct ptid ptid, int gen)
c906108c 2148{
d01949b6 2149 struct remote_state *rs = get_remote_state ();
47f8a51d 2150 ptid_t state = gen ? rs->general_thread : rs->continue_thread;
6d820c5c 2151 char *buf = rs->buf;
79d7f229 2152 char *endbuf = rs->buf + get_remote_packet_size ();
c906108c 2153
79d7f229 2154 if (ptid_equal (state, ptid))
c906108c
SS
2155 return;
2156
79d7f229
PA
2157 *buf++ = 'H';
2158 *buf++ = gen ? 'g' : 'c';
2159 if (ptid_equal (ptid, magic_null_ptid))
2160 xsnprintf (buf, endbuf - buf, "0");
2161 else if (ptid_equal (ptid, any_thread_ptid))
2162 xsnprintf (buf, endbuf - buf, "0");
2163 else if (ptid_equal (ptid, minus_one_ptid))
2164 xsnprintf (buf, endbuf - buf, "-1");
2165 else
82f73884 2166 write_ptid (buf, endbuf, ptid);
79d7f229 2167 putpkt (rs->buf);
6d820c5c 2168 getpkt (&rs->buf, &rs->buf_size, 0);
c906108c 2169 if (gen)
47f8a51d 2170 rs->general_thread = ptid;
c906108c 2171 else
47f8a51d 2172 rs->continue_thread = ptid;
c906108c 2173}
79d7f229
PA
2174
2175static void
2176set_general_thread (struct ptid ptid)
2177{
2178 set_thread (ptid, 1);
2179}
2180
2181static void
2182set_continue_thread (struct ptid ptid)
2183{
2184 set_thread (ptid, 0);
2185}
2186
3c9c4b83
PA
2187/* Change the remote current process. Which thread within the process
2188 ends up selected isn't important, as long as it is the same process
2189 as what INFERIOR_PTID points to.
2190
2191 This comes from that fact that there is no explicit notion of
2192 "selected process" in the protocol. The selected process for
2193 general operations is the process the selected general thread
2194 belongs to. */
2195
2196static void
2197set_general_process (void)
2198{
2199 struct remote_state *rs = get_remote_state ();
2200
2201 /* If the remote can't handle multiple processes, don't bother. */
8020350c 2202 if (!remote_multi_process_p (rs))
3c9c4b83
PA
2203 return;
2204
2205 /* We only need to change the remote current thread if it's pointing
2206 at some other process. */
47f8a51d 2207 if (ptid_get_pid (rs->general_thread) != ptid_get_pid (inferior_ptid))
3c9c4b83
PA
2208 set_general_thread (inferior_ptid);
2209}
2210
c906108c 2211\f
7d1a114c
PA
2212/* Return nonzero if this is the main thread that we made up ourselves
2213 to model non-threaded targets as single-threaded. */
c906108c
SS
2214
2215static int
7d1a114c 2216remote_thread_always_alive (struct target_ops *ops, ptid_t ptid)
c906108c 2217{
c0a2216e
PA
2218 if (ptid_equal (ptid, magic_null_ptid))
2219 /* The main thread is always alive. */
2220 return 1;
2221
ba348170 2222 if (ptid_get_pid (ptid) != 0 && ptid_get_lwp (ptid) == 0)
c0a2216e
PA
2223 /* The main thread is always alive. This can happen after a
2224 vAttach, if the remote side doesn't support
2225 multi-threading. */
2226 return 1;
2227
7d1a114c
PA
2228 return 0;
2229}
2230
2231/* Return nonzero if the thread PTID is still alive on the remote
2232 system. */
2233
2234static int
2235remote_thread_alive (struct target_ops *ops, ptid_t ptid)
2236{
2237 struct remote_state *rs = get_remote_state ();
2238 char *p, *endp;
2239
2240 /* Check if this is a thread that we made up ourselves to model
2241 non-threaded targets as single-threaded. */
2242 if (remote_thread_always_alive (ops, ptid))
2243 return 1;
2244
82f73884
PA
2245 p = rs->buf;
2246 endp = rs->buf + get_remote_packet_size ();
2247
2248 *p++ = 'T';
2249 write_ptid (p, endp, ptid);
2250
2e9f7625 2251 putpkt (rs->buf);
6d820c5c 2252 getpkt (&rs->buf, &rs->buf_size, 0);
2e9f7625 2253 return (rs->buf[0] == 'O' && rs->buf[1] == 'K');
c906108c
SS
2254}
2255
79efa585
SM
2256/* Return a pointer to a thread name if we know it and NULL otherwise.
2257 The thread_info object owns the memory for the name. */
2258
2259static const char *
2260remote_thread_name (struct target_ops *ops, struct thread_info *info)
2261{
2262 if (info->priv != NULL)
2263 return info->priv->name;
2264
2265 return NULL;
2266}
2267
c906108c
SS
2268/* About these extended threadlist and threadinfo packets. They are
2269 variable length packets but, the fields within them are often fixed
2270 length. They are redundent enough to send over UDP as is the
2271 remote protocol in general. There is a matching unit test module
2272 in libstub. */
2273
23860348 2274/* WARNING: This threadref data structure comes from the remote O.S.,
0df8b418 2275 libstub protocol encoding, and remote.c. It is not particularly
23860348 2276 changable. */
cce74817
JM
2277
2278/* Right now, the internal structure is int. We want it to be bigger.
0df8b418 2279 Plan to fix this. */
cce74817 2280
23860348 2281typedef int gdb_threadref; /* Internal GDB thread reference. */
cce74817 2282
9d1f7ab2 2283/* gdb_ext_thread_info is an internal GDB data structure which is
cfde0993 2284 equivalent to the reply of the remote threadinfo packet. */
cce74817
JM
2285
2286struct gdb_ext_thread_info
c5aa993b 2287 {
23860348 2288 threadref threadid; /* External form of thread reference. */
2bc416ba 2289 int active; /* Has state interesting to GDB?
23860348 2290 regs, stack. */
2bc416ba 2291 char display[256]; /* Brief state display, name,
cedea757 2292 blocked/suspended. */
23860348 2293 char shortname[32]; /* To be used to name threads. */
2bc416ba 2294 char more_display[256]; /* Long info, statistics, queue depth,
23860348 2295 whatever. */
c5aa993b 2296 };
cce74817
JM
2297
2298/* The volume of remote transfers can be limited by submitting
2299 a mask containing bits specifying the desired information.
2300 Use a union of these values as the 'selection' parameter to
0df8b418 2301 get_thread_info. FIXME: Make these TAG names more thread specific. */
cce74817
JM
2302
2303#define TAG_THREADID 1
2304#define TAG_EXISTS 2
2305#define TAG_DISPLAY 4
2306#define TAG_THREADNAME 8
c5aa993b 2307#define TAG_MOREDISPLAY 16
cce74817 2308
23860348 2309#define BUF_THREAD_ID_SIZE (OPAQUETHREADBYTES * 2)
c906108c 2310
a14ed312 2311static char *unpack_nibble (char *buf, int *val);
cce74817 2312
a14ed312 2313static char *unpack_byte (char *buf, int *value);
cce74817 2314
a14ed312 2315static char *pack_int (char *buf, int value);
cce74817 2316
a14ed312 2317static char *unpack_int (char *buf, int *value);
cce74817 2318
a14ed312 2319static char *unpack_string (char *src, char *dest, int length);
cce74817 2320
23860348 2321static char *pack_threadid (char *pkt, threadref *id);
cce74817 2322
23860348 2323static char *unpack_threadid (char *inbuf, threadref *id);
cce74817 2324
23860348 2325void int_to_threadref (threadref *id, int value);
cce74817 2326
23860348 2327static int threadref_to_int (threadref *ref);
cce74817 2328
23860348 2329static void copy_threadref (threadref *dest, threadref *src);
cce74817 2330
23860348 2331static int threadmatch (threadref *dest, threadref *src);
cce74817 2332
2bc416ba 2333static char *pack_threadinfo_request (char *pkt, int mode,
23860348 2334 threadref *id);
cce74817 2335
a14ed312 2336static int remote_unpack_thread_info_response (char *pkt,
23860348 2337 threadref *expectedref,
a14ed312
KB
2338 struct gdb_ext_thread_info
2339 *info);
cce74817
JM
2340
2341
2bc416ba 2342static int remote_get_threadinfo (threadref *threadid,
23860348 2343 int fieldset, /*TAG mask */
a14ed312 2344 struct gdb_ext_thread_info *info);
cce74817 2345
a14ed312
KB
2346static char *pack_threadlist_request (char *pkt, int startflag,
2347 int threadcount,
23860348 2348 threadref *nextthread);
cce74817 2349
a14ed312
KB
2350static int parse_threadlist_response (char *pkt,
2351 int result_limit,
23860348 2352 threadref *original_echo,
2bc416ba 2353 threadref *resultlist,
23860348 2354 int *doneflag);
cce74817 2355
a14ed312 2356static int remote_get_threadlist (int startflag,
23860348 2357 threadref *nextthread,
a14ed312
KB
2358 int result_limit,
2359 int *done,
2bc416ba 2360 int *result_count,
23860348 2361 threadref *threadlist);
cce74817 2362
23860348 2363typedef int (*rmt_thread_action) (threadref *ref, void *context);
cce74817 2364
a14ed312
KB
2365static int remote_threadlist_iterator (rmt_thread_action stepfunction,
2366 void *context, int looplimit);
cce74817 2367
23860348 2368static int remote_newthread_step (threadref *ref, void *context);
cce74817 2369
82f73884
PA
2370
2371/* Write a PTID to BUF. ENDBUF points to one-passed-the-end of the
2372 buffer we're allowed to write to. Returns
2373 BUF+CHARACTERS_WRITTEN. */
2374
2375static char *
2376write_ptid (char *buf, const char *endbuf, ptid_t ptid)
2377{
2378 int pid, tid;
2379 struct remote_state *rs = get_remote_state ();
2380
2381 if (remote_multi_process_p (rs))
2382 {
2383 pid = ptid_get_pid (ptid);
2384 if (pid < 0)
2385 buf += xsnprintf (buf, endbuf - buf, "p-%x.", -pid);
2386 else
2387 buf += xsnprintf (buf, endbuf - buf, "p%x.", pid);
2388 }
ba348170 2389 tid = ptid_get_lwp (ptid);
82f73884
PA
2390 if (tid < 0)
2391 buf += xsnprintf (buf, endbuf - buf, "-%x", -tid);
2392 else
2393 buf += xsnprintf (buf, endbuf - buf, "%x", tid);
2394
2395 return buf;
2396}
2397
2398/* Extract a PTID from BUF. If non-null, OBUF is set to the to one
2399 passed the last parsed char. Returns null_ptid on error. */
2400
2401static ptid_t
2402read_ptid (char *buf, char **obuf)
2403{
2404 char *p = buf;
2405 char *pp;
2406 ULONGEST pid = 0, tid = 0;
82f73884
PA
2407
2408 if (*p == 'p')
2409 {
2410 /* Multi-process ptid. */
2411 pp = unpack_varlen_hex (p + 1, &pid);
2412 if (*pp != '.')
b37520b6 2413 error (_("invalid remote ptid: %s"), p);
82f73884
PA
2414
2415 p = pp;
2416 pp = unpack_varlen_hex (p + 1, &tid);
2417 if (obuf)
2418 *obuf = pp;
ba348170 2419 return ptid_build (pid, tid, 0);
82f73884
PA
2420 }
2421
2422 /* No multi-process. Just a tid. */
2423 pp = unpack_varlen_hex (p, &tid);
2424
c9f35b34
KB
2425 /* Return null_ptid when no thread id is found. */
2426 if (p == pp)
2427 {
2428 if (obuf)
2429 *obuf = pp;
2430 return null_ptid;
2431 }
2432
82f73884 2433 /* Since the stub is not sending a process id, then default to
ca19bf23
PA
2434 what's in inferior_ptid, unless it's null at this point. If so,
2435 then since there's no way to know the pid of the reported
2436 threads, use the magic number. */
2437 if (ptid_equal (inferior_ptid, null_ptid))
2438 pid = ptid_get_pid (magic_null_ptid);
2439 else
2440 pid = ptid_get_pid (inferior_ptid);
82f73884
PA
2441
2442 if (obuf)
2443 *obuf = pp;
ba348170 2444 return ptid_build (pid, tid, 0);
82f73884
PA
2445}
2446
c906108c 2447static int
fba45db2 2448stubhex (int ch)
c906108c
SS
2449{
2450 if (ch >= 'a' && ch <= 'f')
2451 return ch - 'a' + 10;
2452 if (ch >= '0' && ch <= '9')
2453 return ch - '0';
2454 if (ch >= 'A' && ch <= 'F')
2455 return ch - 'A' + 10;
2456 return -1;
2457}
2458
2459static int
fba45db2 2460stub_unpack_int (char *buff, int fieldlength)
c906108c
SS
2461{
2462 int nibble;
2463 int retval = 0;
2464
2465 while (fieldlength)
2466 {
2467 nibble = stubhex (*buff++);
2468 retval |= nibble;
2469 fieldlength--;
2470 if (fieldlength)
2471 retval = retval << 4;
2472 }
2473 return retval;
2474}
2475
c906108c 2476static char *
fba45db2 2477unpack_nibble (char *buf, int *val)
c906108c 2478{
b7589f7d 2479 *val = fromhex (*buf++);
c906108c
SS
2480 return buf;
2481}
2482
c906108c 2483static char *
fba45db2 2484unpack_byte (char *buf, int *value)
c906108c
SS
2485{
2486 *value = stub_unpack_int (buf, 2);
2487 return buf + 2;
2488}
2489
2490static char *
fba45db2 2491pack_int (char *buf, int value)
c906108c
SS
2492{
2493 buf = pack_hex_byte (buf, (value >> 24) & 0xff);
2494 buf = pack_hex_byte (buf, (value >> 16) & 0xff);
2495 buf = pack_hex_byte (buf, (value >> 8) & 0x0ff);
2496 buf = pack_hex_byte (buf, (value & 0xff));
2497 return buf;
2498}
2499
2500static char *
fba45db2 2501unpack_int (char *buf, int *value)
c906108c
SS
2502{
2503 *value = stub_unpack_int (buf, 8);
2504 return buf + 8;
2505}
2506
23860348 2507#if 0 /* Currently unused, uncomment when needed. */
a14ed312 2508static char *pack_string (char *pkt, char *string);
c906108c
SS
2509
2510static char *
fba45db2 2511pack_string (char *pkt, char *string)
c906108c
SS
2512{
2513 char ch;
2514 int len;
2515
2516 len = strlen (string);
2517 if (len > 200)
23860348 2518 len = 200; /* Bigger than most GDB packets, junk??? */
c906108c
SS
2519 pkt = pack_hex_byte (pkt, len);
2520 while (len-- > 0)
2521 {
2522 ch = *string++;
2523 if ((ch == '\0') || (ch == '#'))
23860348 2524 ch = '*'; /* Protect encapsulation. */
c906108c
SS
2525 *pkt++ = ch;
2526 }
2527 return pkt;
2528}
2529#endif /* 0 (unused) */
2530
2531static char *
fba45db2 2532unpack_string (char *src, char *dest, int length)
c906108c
SS
2533{
2534 while (length--)
2535 *dest++ = *src++;
2536 *dest = '\0';
2537 return src;
2538}
2539
2540static char *
fba45db2 2541pack_threadid (char *pkt, threadref *id)
c906108c
SS
2542{
2543 char *limit;
2544 unsigned char *altid;
2545
2546 altid = (unsigned char *) id;
2547 limit = pkt + BUF_THREAD_ID_SIZE;
2548 while (pkt < limit)
2549 pkt = pack_hex_byte (pkt, *altid++);
2550 return pkt;
2551}
2552
2553
2554static char *
fba45db2 2555unpack_threadid (char *inbuf, threadref *id)
c906108c
SS
2556{
2557 char *altref;
2558 char *limit = inbuf + BUF_THREAD_ID_SIZE;
2559 int x, y;
2560
2561 altref = (char *) id;
2562
2563 while (inbuf < limit)
2564 {
2565 x = stubhex (*inbuf++);
2566 y = stubhex (*inbuf++);
2567 *altref++ = (x << 4) | y;
2568 }
2569 return inbuf;
2570}
2571
2572/* Externally, threadrefs are 64 bits but internally, they are still
0df8b418 2573 ints. This is due to a mismatch of specifications. We would like
c906108c
SS
2574 to use 64bit thread references internally. This is an adapter
2575 function. */
2576
2577void
fba45db2 2578int_to_threadref (threadref *id, int value)
c906108c
SS
2579{
2580 unsigned char *scan;
2581
2582 scan = (unsigned char *) id;
2583 {
2584 int i = 4;
2585 while (i--)
2586 *scan++ = 0;
2587 }
2588 *scan++ = (value >> 24) & 0xff;
2589 *scan++ = (value >> 16) & 0xff;
2590 *scan++ = (value >> 8) & 0xff;
2591 *scan++ = (value & 0xff);
2592}
2593
2594static int
fba45db2 2595threadref_to_int (threadref *ref)
c906108c
SS
2596{
2597 int i, value = 0;
2598 unsigned char *scan;
2599
cfd77fa1 2600 scan = *ref;
c906108c
SS
2601 scan += 4;
2602 i = 4;
2603 while (i-- > 0)
2604 value = (value << 8) | ((*scan++) & 0xff);
2605 return value;
2606}
2607
2608static void
fba45db2 2609copy_threadref (threadref *dest, threadref *src)
c906108c
SS
2610{
2611 int i;
2612 unsigned char *csrc, *cdest;
2613
2614 csrc = (unsigned char *) src;
2615 cdest = (unsigned char *) dest;
2616 i = 8;
2617 while (i--)
2618 *cdest++ = *csrc++;
2619}
2620
2621static int
fba45db2 2622threadmatch (threadref *dest, threadref *src)
c906108c 2623{
23860348 2624 /* Things are broken right now, so just assume we got a match. */
c906108c
SS
2625#if 0
2626 unsigned char *srcp, *destp;
2627 int i, result;
2628 srcp = (char *) src;
2629 destp = (char *) dest;
2630
2631 result = 1;
2632 while (i-- > 0)
2633 result &= (*srcp++ == *destp++) ? 1 : 0;
2634 return result;
2635#endif
2636 return 1;
2637}
2638
2639/*
c5aa993b
JM
2640 threadid:1, # always request threadid
2641 context_exists:2,
2642 display:4,
2643 unique_name:8,
2644 more_display:16
2645 */
c906108c
SS
2646
2647/* Encoding: 'Q':8,'P':8,mask:32,threadid:64 */
2648
2649static char *
fba45db2 2650pack_threadinfo_request (char *pkt, int mode, threadref *id)
c906108c 2651{
23860348
MS
2652 *pkt++ = 'q'; /* Info Query */
2653 *pkt++ = 'P'; /* process or thread info */
2654 pkt = pack_int (pkt, mode); /* mode */
c906108c 2655 pkt = pack_threadid (pkt, id); /* threadid */
23860348 2656 *pkt = '\0'; /* terminate */
c906108c
SS
2657 return pkt;
2658}
2659
23860348 2660/* These values tag the fields in a thread info response packet. */
c906108c 2661/* Tagging the fields allows us to request specific fields and to
23860348 2662 add more fields as time goes by. */
c906108c 2663
23860348 2664#define TAG_THREADID 1 /* Echo the thread identifier. */
c5aa993b 2665#define TAG_EXISTS 2 /* Is this process defined enough to
23860348 2666 fetch registers and its stack? */
c5aa993b 2667#define TAG_DISPLAY 4 /* A short thing maybe to put on a window */
23860348 2668#define TAG_THREADNAME 8 /* string, maps 1-to-1 with a thread is. */
802188a7 2669#define TAG_MOREDISPLAY 16 /* Whatever the kernel wants to say about
23860348 2670 the process. */
c906108c
SS
2671
2672static int
fba45db2
KB
2673remote_unpack_thread_info_response (char *pkt, threadref *expectedref,
2674 struct gdb_ext_thread_info *info)
c906108c 2675{
d01949b6 2676 struct remote_state *rs = get_remote_state ();
c906108c 2677 int mask, length;
cfd77fa1 2678 int tag;
c906108c 2679 threadref ref;
6d820c5c 2680 char *limit = pkt + rs->buf_size; /* Plausible parsing limit. */
c906108c
SS
2681 int retval = 1;
2682
23860348 2683 /* info->threadid = 0; FIXME: implement zero_threadref. */
c906108c
SS
2684 info->active = 0;
2685 info->display[0] = '\0';
2686 info->shortname[0] = '\0';
2687 info->more_display[0] = '\0';
2688
23860348
MS
2689 /* Assume the characters indicating the packet type have been
2690 stripped. */
c906108c
SS
2691 pkt = unpack_int (pkt, &mask); /* arg mask */
2692 pkt = unpack_threadid (pkt, &ref);
2693
2694 if (mask == 0)
8a3fe4f8 2695 warning (_("Incomplete response to threadinfo request."));
c906108c 2696 if (!threadmatch (&ref, expectedref))
23860348 2697 { /* This is an answer to a different request. */
8a3fe4f8 2698 warning (_("ERROR RMT Thread info mismatch."));
c906108c
SS
2699 return 0;
2700 }
2701 copy_threadref (&info->threadid, &ref);
2702
23860348 2703 /* Loop on tagged fields , try to bail if somthing goes wrong. */
c906108c 2704
23860348
MS
2705 /* Packets are terminated with nulls. */
2706 while ((pkt < limit) && mask && *pkt)
c906108c
SS
2707 {
2708 pkt = unpack_int (pkt, &tag); /* tag */
23860348
MS
2709 pkt = unpack_byte (pkt, &length); /* length */
2710 if (!(tag & mask)) /* Tags out of synch with mask. */
c906108c 2711 {
8a3fe4f8 2712 warning (_("ERROR RMT: threadinfo tag mismatch."));
c906108c
SS
2713 retval = 0;
2714 break;
2715 }
2716 if (tag == TAG_THREADID)
2717 {
2718 if (length != 16)
2719 {
8a3fe4f8 2720 warning (_("ERROR RMT: length of threadid is not 16."));
c906108c
SS
2721 retval = 0;
2722 break;
2723 }
2724 pkt = unpack_threadid (pkt, &ref);
2725 mask = mask & ~TAG_THREADID;
2726 continue;
2727 }
2728 if (tag == TAG_EXISTS)
2729 {
2730 info->active = stub_unpack_int (pkt, length);
2731 pkt += length;
2732 mask = mask & ~(TAG_EXISTS);
2733 if (length > 8)
2734 {
8a3fe4f8 2735 warning (_("ERROR RMT: 'exists' length too long."));
c906108c
SS
2736 retval = 0;
2737 break;
2738 }
2739 continue;
2740 }
2741 if (tag == TAG_THREADNAME)
2742 {
2743 pkt = unpack_string (pkt, &info->shortname[0], length);
2744 mask = mask & ~TAG_THREADNAME;
2745 continue;
2746 }
2747 if (tag == TAG_DISPLAY)
2748 {
2749 pkt = unpack_string (pkt, &info->display[0], length);
2750 mask = mask & ~TAG_DISPLAY;
2751 continue;
2752 }
2753 if (tag == TAG_MOREDISPLAY)
2754 {
2755 pkt = unpack_string (pkt, &info->more_display[0], length);
2756 mask = mask & ~TAG_MOREDISPLAY;
2757 continue;
2758 }
8a3fe4f8 2759 warning (_("ERROR RMT: unknown thread info tag."));
23860348 2760 break; /* Not a tag we know about. */
c906108c
SS
2761 }
2762 return retval;
2763}
2764
2765static int
fba45db2
KB
2766remote_get_threadinfo (threadref *threadid, int fieldset, /* TAG mask */
2767 struct gdb_ext_thread_info *info)
c906108c 2768{
d01949b6 2769 struct remote_state *rs = get_remote_state ();
c906108c 2770 int result;
c906108c 2771
2e9f7625
DJ
2772 pack_threadinfo_request (rs->buf, fieldset, threadid);
2773 putpkt (rs->buf);
6d820c5c 2774 getpkt (&rs->buf, &rs->buf_size, 0);
3084dd77
PA
2775
2776 if (rs->buf[0] == '\0')
2777 return 0;
2778
2e9f7625 2779 result = remote_unpack_thread_info_response (rs->buf + 2,
23860348 2780 threadid, info);
c906108c
SS
2781 return result;
2782}
2783
c906108c
SS
2784/* Format: i'Q':8,i"L":8,initflag:8,batchsize:16,lastthreadid:32 */
2785
2786static char *
fba45db2
KB
2787pack_threadlist_request (char *pkt, int startflag, int threadcount,
2788 threadref *nextthread)
c906108c
SS
2789{
2790 *pkt++ = 'q'; /* info query packet */
2791 *pkt++ = 'L'; /* Process LIST or threadLIST request */
23860348 2792 pkt = pack_nibble (pkt, startflag); /* initflag 1 bytes */
c906108c
SS
2793 pkt = pack_hex_byte (pkt, threadcount); /* threadcount 2 bytes */
2794 pkt = pack_threadid (pkt, nextthread); /* 64 bit thread identifier */
2795 *pkt = '\0';
2796 return pkt;
2797}
2798
2799/* Encoding: 'q':8,'M':8,count:16,done:8,argthreadid:64,(threadid:64)* */
2800
2801static int
fba45db2
KB
2802parse_threadlist_response (char *pkt, int result_limit,
2803 threadref *original_echo, threadref *resultlist,
2804 int *doneflag)
c906108c 2805{
d01949b6 2806 struct remote_state *rs = get_remote_state ();
c906108c
SS
2807 char *limit;
2808 int count, resultcount, done;
2809
2810 resultcount = 0;
2811 /* Assume the 'q' and 'M chars have been stripped. */
6d820c5c 2812 limit = pkt + (rs->buf_size - BUF_THREAD_ID_SIZE);
23860348 2813 /* done parse past here */
c906108c
SS
2814 pkt = unpack_byte (pkt, &count); /* count field */
2815 pkt = unpack_nibble (pkt, &done);
2816 /* The first threadid is the argument threadid. */
2817 pkt = unpack_threadid (pkt, original_echo); /* should match query packet */
2818 while ((count-- > 0) && (pkt < limit))
2819 {
2820 pkt = unpack_threadid (pkt, resultlist++);
2821 if (resultcount++ >= result_limit)
2822 break;
2823 }
2824 if (doneflag)
2825 *doneflag = done;
2826 return resultcount;
2827}
2828
6dc54d91
PA
2829/* Fetch the next batch of threads from the remote. Returns -1 if the
2830 qL packet is not supported, 0 on error and 1 on success. */
2831
c906108c 2832static int
fba45db2
KB
2833remote_get_threadlist (int startflag, threadref *nextthread, int result_limit,
2834 int *done, int *result_count, threadref *threadlist)
c906108c 2835{
d01949b6 2836 struct remote_state *rs = get_remote_state ();
c906108c
SS
2837 int result = 1;
2838
23860348 2839 /* Trancate result limit to be smaller than the packet size. */
3e43a32a
MS
2840 if ((((result_limit + 1) * BUF_THREAD_ID_SIZE) + 10)
2841 >= get_remote_packet_size ())
ea9c271d 2842 result_limit = (get_remote_packet_size () / BUF_THREAD_ID_SIZE) - 2;
c906108c 2843
6d820c5c
DJ
2844 pack_threadlist_request (rs->buf, startflag, result_limit, nextthread);
2845 putpkt (rs->buf);
2846 getpkt (&rs->buf, &rs->buf_size, 0);
d8f2712d 2847 if (*rs->buf == '\0')
6dc54d91
PA
2848 {
2849 /* Packet not supported. */
2850 return -1;
2851 }
2852
2853 *result_count =
2854 parse_threadlist_response (rs->buf + 2, result_limit,
2855 &rs->echo_nextthread, threadlist, done);
c906108c 2856
0d031856 2857 if (!threadmatch (&rs->echo_nextthread, nextthread))
c906108c 2858 {
23860348
MS
2859 /* FIXME: This is a good reason to drop the packet. */
2860 /* Possably, there is a duplicate response. */
c906108c
SS
2861 /* Possabilities :
2862 retransmit immediatly - race conditions
2863 retransmit after timeout - yes
2864 exit
2865 wait for packet, then exit
2866 */
8a3fe4f8 2867 warning (_("HMM: threadlist did not echo arg thread, dropping it."));
23860348 2868 return 0; /* I choose simply exiting. */
c906108c
SS
2869 }
2870 if (*result_count <= 0)
2871 {
2872 if (*done != 1)
2873 {
8a3fe4f8 2874 warning (_("RMT ERROR : failed to get remote thread list."));
c906108c
SS
2875 result = 0;
2876 }
2877 return result; /* break; */
2878 }
2879 if (*result_count > result_limit)
2880 {
2881 *result_count = 0;
8a3fe4f8 2882 warning (_("RMT ERROR: threadlist response longer than requested."));
c906108c
SS
2883 return 0;
2884 }
2885 return result;
2886}
2887
6dc54d91
PA
2888/* Fetch the list of remote threads, with the qL packet, and call
2889 STEPFUNCTION for each thread found. Stops iterating and returns 1
2890 if STEPFUNCTION returns true. Stops iterating and returns 0 if the
2891 STEPFUNCTION returns false. If the packet is not supported,
2892 returns -1. */
c906108c 2893
c906108c 2894static int
fba45db2
KB
2895remote_threadlist_iterator (rmt_thread_action stepfunction, void *context,
2896 int looplimit)
c906108c 2897{
0d031856 2898 struct remote_state *rs = get_remote_state ();
c906108c
SS
2899 int done, i, result_count;
2900 int startflag = 1;
2901 int result = 1;
2902 int loopcount = 0;
c906108c
SS
2903
2904 done = 0;
2905 while (!done)
2906 {
2907 if (loopcount++ > looplimit)
2908 {
2909 result = 0;
8a3fe4f8 2910 warning (_("Remote fetch threadlist -infinite loop-."));
c906108c
SS
2911 break;
2912 }
6dc54d91
PA
2913 result = remote_get_threadlist (startflag, &rs->nextthread,
2914 MAXTHREADLISTRESULTS,
2915 &done, &result_count,
2916 rs->resultthreadlist);
2917 if (result <= 0)
2918 break;
23860348 2919 /* Clear for later iterations. */
c906108c
SS
2920 startflag = 0;
2921 /* Setup to resume next batch of thread references, set nextthread. */
2922 if (result_count >= 1)
0d031856
TT
2923 copy_threadref (&rs->nextthread,
2924 &rs->resultthreadlist[result_count - 1]);
c906108c
SS
2925 i = 0;
2926 while (result_count--)
6dc54d91
PA
2927 {
2928 if (!(*stepfunction) (&rs->resultthreadlist[i++], context))
2929 {
2930 result = 0;
2931 break;
2932 }
2933 }
c906108c
SS
2934 }
2935 return result;
2936}
2937
6dc54d91
PA
2938/* A thread found on the remote target. */
2939
2940typedef struct thread_item
2941{
2942 /* The thread's PTID. */
2943 ptid_t ptid;
2944
2945 /* The thread's extra info. May be NULL. */
2946 char *extra;
2947
79efa585
SM
2948 /* The thread's name. May be NULL. */
2949 char *name;
2950
6dc54d91
PA
2951 /* The core the thread was running on. -1 if not known. */
2952 int core;
2953} thread_item_t;
2954DEF_VEC_O(thread_item_t);
2955
2956/* Context passed around to the various methods listing remote
2957 threads. As new threads are found, they're added to the ITEMS
2958 vector. */
2959
2960struct threads_listing_context
2961{
2962 /* The threads found on the remote target. */
2963 VEC (thread_item_t) *items;
2964};
2965
80134cf5
PA
2966/* Discard the contents of the constructed thread listing context. */
2967
2968static void
2969clear_threads_listing_context (void *p)
2970{
19ba03f4
SM
2971 struct threads_listing_context *context
2972 = (struct threads_listing_context *) p;
80134cf5
PA
2973 int i;
2974 struct thread_item *item;
2975
2976 for (i = 0; VEC_iterate (thread_item_t, context->items, i, item); ++i)
79efa585
SM
2977 {
2978 xfree (item->extra);
2979 xfree (item->name);
2980 }
80134cf5
PA
2981
2982 VEC_free (thread_item_t, context->items);
2983}
2984
cbb8991c
DB
2985/* Remove the thread specified as the related_pid field of WS
2986 from the CONTEXT list. */
2987
2988static void
2989threads_listing_context_remove (struct target_waitstatus *ws,
2990 struct threads_listing_context *context)
2991{
2992 struct thread_item *item;
2993 int i;
2994 ptid_t child_ptid = ws->value.related_pid;
2995
2996 for (i = 0; VEC_iterate (thread_item_t, context->items, i, item); ++i)
2997 {
2998 if (ptid_equal (item->ptid, child_ptid))
2999 {
3000 VEC_ordered_remove (thread_item_t, context->items, i);
3001 break;
3002 }
3003 }
3004}
3005
c906108c 3006static int
6dc54d91 3007remote_newthread_step (threadref *ref, void *data)
c906108c 3008{
19ba03f4
SM
3009 struct threads_listing_context *context
3010 = (struct threads_listing_context *) data;
6dc54d91 3011 struct thread_item item;
79d7f229 3012 int pid = ptid_get_pid (inferior_ptid);
39f77062 3013
6dc54d91
PA
3014 item.ptid = ptid_build (pid, threadref_to_int (ref), 0);
3015 item.core = -1;
2e3b657e 3016 item.name = NULL;
6dc54d91
PA
3017 item.extra = NULL;
3018
3019 VEC_safe_push (thread_item_t, context->items, &item);
3020
c906108c
SS
3021 return 1; /* continue iterator */
3022}
3023
3024#define CRAZY_MAX_THREADS 1000
3025
39f77062
KB
3026static ptid_t
3027remote_current_thread (ptid_t oldpid)
c906108c 3028{
d01949b6 3029 struct remote_state *rs = get_remote_state ();
c906108c
SS
3030
3031 putpkt ("qC");
6d820c5c 3032 getpkt (&rs->buf, &rs->buf_size, 0);
2e9f7625 3033 if (rs->buf[0] == 'Q' && rs->buf[1] == 'C')
c9f35b34
KB
3034 {
3035 char *obuf;
3036 ptid_t result;
3037
3038 result = read_ptid (&rs->buf[2], &obuf);
3039 if (*obuf != '\0' && remote_debug)
3040 fprintf_unfiltered (gdb_stdlog,
3041 "warning: garbage in qC reply\n");
3042
3043 return result;
3044 }
c906108c
SS
3045 else
3046 return oldpid;
3047}
3048
6dc54d91 3049/* List remote threads using the deprecated qL packet. */
cce74817 3050
6dc54d91
PA
3051static int
3052remote_get_threads_with_ql (struct target_ops *ops,
3053 struct threads_listing_context *context)
c906108c 3054{
6dc54d91
PA
3055 if (remote_threadlist_iterator (remote_newthread_step, context,
3056 CRAZY_MAX_THREADS) >= 0)
3057 return 1;
3058
3059 return 0;
c906108c
SS
3060}
3061
dc146f7c
VP
3062#if defined(HAVE_LIBEXPAT)
3063
dc146f7c
VP
3064static void
3065start_thread (struct gdb_xml_parser *parser,
3066 const struct gdb_xml_element *element,
3067 void *user_data, VEC(gdb_xml_value_s) *attributes)
3068{
19ba03f4
SM
3069 struct threads_listing_context *data
3070 = (struct threads_listing_context *) user_data;
dc146f7c
VP
3071
3072 struct thread_item item;
3073 char *id;
3d2c1d41 3074 struct gdb_xml_value *attr;
dc146f7c 3075
19ba03f4 3076 id = (char *) xml_find_attribute (attributes, "id")->value;
dc146f7c
VP
3077 item.ptid = read_ptid (id, NULL);
3078
3d2c1d41
PA
3079 attr = xml_find_attribute (attributes, "core");
3080 if (attr != NULL)
3081 item.core = *(ULONGEST *) attr->value;
dc146f7c
VP
3082 else
3083 item.core = -1;
3084
79efa585 3085 attr = xml_find_attribute (attributes, "name");
e1961661 3086 item.name = attr != NULL ? xstrdup ((const char *) attr->value) : NULL;
79efa585 3087
dc146f7c
VP
3088 item.extra = 0;
3089
3090 VEC_safe_push (thread_item_t, data->items, &item);
3091}
3092
3093static void
3094end_thread (struct gdb_xml_parser *parser,
3095 const struct gdb_xml_element *element,
3096 void *user_data, const char *body_text)
3097{
19ba03f4
SM
3098 struct threads_listing_context *data
3099 = (struct threads_listing_context *) user_data;
dc146f7c
VP
3100
3101 if (body_text && *body_text)
2ae2a0b7 3102 VEC_last (thread_item_t, data->items)->extra = xstrdup (body_text);
dc146f7c
VP
3103}
3104
3105const struct gdb_xml_attribute thread_attributes[] = {
3106 { "id", GDB_XML_AF_NONE, NULL, NULL },
3107 { "core", GDB_XML_AF_OPTIONAL, gdb_xml_parse_attr_ulongest, NULL },
79efa585 3108 { "name", GDB_XML_AF_OPTIONAL, NULL, NULL },
dc146f7c
VP
3109 { NULL, GDB_XML_AF_NONE, NULL, NULL }
3110};
3111
3112const struct gdb_xml_element thread_children[] = {
3113 { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
3114};
3115
3116const struct gdb_xml_element threads_children[] = {
3117 { "thread", thread_attributes, thread_children,
3118 GDB_XML_EF_REPEATABLE | GDB_XML_EF_OPTIONAL,
3119 start_thread, end_thread },
3120 { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
3121};
3122
3123const struct gdb_xml_element threads_elements[] = {
3124 { "threads", NULL, threads_children,
3125 GDB_XML_EF_NONE, NULL, NULL },
3126 { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
3127};
3128
3129#endif
3130
6dc54d91 3131/* List remote threads using qXfer:threads:read. */
9d1f7ab2 3132
6dc54d91
PA
3133static int
3134remote_get_threads_with_qxfer (struct target_ops *ops,
3135 struct threads_listing_context *context)
0f71a2f6 3136{
dc146f7c 3137#if defined(HAVE_LIBEXPAT)
4082afcc 3138 if (packet_support (PACKET_qXfer_threads) == PACKET_ENABLE)
dc146f7c 3139 {
6dc54d91 3140 char *xml = target_read_stralloc (ops, TARGET_OBJECT_THREADS, NULL);
dc146f7c 3141 struct cleanup *back_to = make_cleanup (xfree, xml);
efc0eabd 3142
6dc54d91 3143 if (xml != NULL && *xml != '\0')
dc146f7c 3144 {
6dc54d91
PA
3145 gdb_xml_parse_quick (_("threads"), "threads.dtd",
3146 threads_elements, xml, context);
dc146f7c
VP
3147 }
3148
3149 do_cleanups (back_to);
6dc54d91 3150 return 1;
dc146f7c
VP
3151 }
3152#endif
3153
6dc54d91
PA
3154 return 0;
3155}
3156
3157/* List remote threads using qfThreadInfo/qsThreadInfo. */
3158
3159static int
3160remote_get_threads_with_qthreadinfo (struct target_ops *ops,
3161 struct threads_listing_context *context)
3162{
3163 struct remote_state *rs = get_remote_state ();
3164
b80fafe3 3165 if (rs->use_threadinfo_query)
9d1f7ab2 3166 {
6dc54d91
PA
3167 char *bufp;
3168
9d1f7ab2 3169 putpkt ("qfThreadInfo");
6d820c5c 3170 getpkt (&rs->buf, &rs->buf_size, 0);
2e9f7625 3171 bufp = rs->buf;
9d1f7ab2 3172 if (bufp[0] != '\0') /* q packet recognized */
802188a7 3173 {
9d1f7ab2
MS
3174 while (*bufp++ == 'm') /* reply contains one or more TID */
3175 {
3176 do
3177 {
6dc54d91
PA
3178 struct thread_item item;
3179
3180 item.ptid = read_ptid (bufp, &bufp);
3181 item.core = -1;
2e3b657e 3182 item.name = NULL;
6dc54d91
PA
3183 item.extra = NULL;
3184
3185 VEC_safe_push (thread_item_t, context->items, &item);
9d1f7ab2
MS
3186 }
3187 while (*bufp++ == ','); /* comma-separated list */
3188 putpkt ("qsThreadInfo");
6d820c5c 3189 getpkt (&rs->buf, &rs->buf_size, 0);
6dc54d91 3190 bufp = rs->buf;
9d1f7ab2 3191 }
6dc54d91
PA
3192 return 1;
3193 }
3194 else
3195 {
3196 /* Packet not recognized. */
3197 rs->use_threadinfo_query = 0;
9d1f7ab2
MS
3198 }
3199 }
3200
6dc54d91
PA
3201 return 0;
3202}
3203
e8032dde 3204/* Implement the to_update_thread_list function for the remote
6dc54d91
PA
3205 targets. */
3206
3207static void
e8032dde 3208remote_update_thread_list (struct target_ops *ops)
6dc54d91 3209{
6dc54d91
PA
3210 struct threads_listing_context context;
3211 struct cleanup *old_chain;
ab970af1 3212 int got_list = 0;
e8032dde 3213
6dc54d91
PA
3214 context.items = NULL;
3215 old_chain = make_cleanup (clear_threads_listing_context, &context);
3216
3217 /* We have a few different mechanisms to fetch the thread list. Try
3218 them all, starting with the most preferred one first, falling
3219 back to older methods. */
3220 if (remote_get_threads_with_qxfer (ops, &context)
3221 || remote_get_threads_with_qthreadinfo (ops, &context)
3222 || remote_get_threads_with_ql (ops, &context))
3223 {
3224 int i;
3225 struct thread_item *item;
ab970af1
PA
3226 struct thread_info *tp, *tmp;
3227
3228 got_list = 1;
3229
7d1a114c
PA
3230 if (VEC_empty (thread_item_t, context.items)
3231 && remote_thread_always_alive (ops, inferior_ptid))
3232 {
3233 /* Some targets don't really support threads, but still
3234 reply an (empty) thread list in response to the thread
3235 listing packets, instead of replying "packet not
3236 supported". Exit early so we don't delete the main
3237 thread. */
3238 do_cleanups (old_chain);
3239 return;
3240 }
3241
ab970af1
PA
3242 /* CONTEXT now holds the current thread list on the remote
3243 target end. Delete GDB-side threads no longer found on the
3244 target. */
8a06aea7 3245 ALL_THREADS_SAFE (tp, tmp)
cbb8991c 3246 {
ab970af1
PA
3247 for (i = 0;
3248 VEC_iterate (thread_item_t, context.items, i, item);
3249 ++i)
3250 {
3251 if (ptid_equal (item->ptid, tp->ptid))
3252 break;
3253 }
3254
3255 if (i == VEC_length (thread_item_t, context.items))
3256 {
3257 /* Not found. */
3258 delete_thread (tp->ptid);
3259 }
cbb8991c
DB
3260 }
3261
3262 /* Remove any unreported fork child threads from CONTEXT so
3263 that we don't interfere with follow fork, which is where
3264 creation of such threads is handled. */
3265 remove_new_fork_children (&context);
74531fed 3266
ab970af1 3267 /* And now add threads we don't know about yet to our list. */
6dc54d91
PA
3268 for (i = 0;
3269 VEC_iterate (thread_item_t, context.items, i, item);
3270 ++i)
3271 {
3272 if (!ptid_equal (item->ptid, null_ptid))
3273 {
3274 struct private_thread_info *info;
3275 /* In non-stop mode, we assume new found threads are
0d5b594f
PA
3276 executing until proven otherwise with a stop reply.
3277 In all-stop, we can only get here if all threads are
6dc54d91 3278 stopped. */
0d5b594f 3279 int executing = target_is_non_stop_p () ? 1 : 0;
6dc54d91 3280
0d5b594f 3281 remote_notice_new_inferior (item->ptid, executing);
6dc54d91
PA
3282
3283 info = demand_private_info (item->ptid);
3284 info->core = item->core;
3285 info->extra = item->extra;
3286 item->extra = NULL;
79efa585
SM
3287 info->name = item->name;
3288 item->name = NULL;
6dc54d91
PA
3289 }
3290 }
3291 }
3292
ab970af1
PA
3293 if (!got_list)
3294 {
3295 /* If no thread listing method is supported, then query whether
3296 each known thread is alive, one by one, with the T packet.
3297 If the target doesn't support threads at all, then this is a
3298 no-op. See remote_thread_alive. */
3299 prune_threads ();
3300 }
3301
6dc54d91 3302 do_cleanups (old_chain);
9d1f7ab2
MS
3303}
3304
802188a7 3305/*
9d1f7ab2
MS
3306 * Collect a descriptive string about the given thread.
3307 * The target may say anything it wants to about the thread
3308 * (typically info about its blocked / runnable state, name, etc.).
3309 * This string will appear in the info threads display.
802188a7 3310 *
9d1f7ab2
MS
3311 * Optional: targets are not required to implement this function.
3312 */
3313
3314static char *
c15906d8 3315remote_threads_extra_info (struct target_ops *self, struct thread_info *tp)
9d1f7ab2 3316{
d01949b6 3317 struct remote_state *rs = get_remote_state ();
9d1f7ab2
MS
3318 int result;
3319 int set;
3320 threadref id;
3321 struct gdb_ext_thread_info threadinfo;
23860348 3322 static char display_buf[100]; /* arbitrary... */
9d1f7ab2
MS
3323 int n = 0; /* position in display_buf */
3324
5d93a237 3325 if (rs->remote_desc == 0) /* paranoia */
8e65ff28 3326 internal_error (__FILE__, __LINE__,
e2e0b3e5 3327 _("remote_threads_extra_info"));
9d1f7ab2 3328
60e569b9 3329 if (ptid_equal (tp->ptid, magic_null_ptid)
ba348170 3330 || (ptid_get_pid (tp->ptid) != 0 && ptid_get_lwp (tp->ptid) == 0))
60e569b9
PA
3331 /* This is the main thread which was added by GDB. The remote
3332 server doesn't know about it. */
3333 return NULL;
3334
4082afcc 3335 if (packet_support (PACKET_qXfer_threads) == PACKET_ENABLE)
dc146f7c
VP
3336 {
3337 struct thread_info *info = find_thread_ptid (tp->ptid);
a744cf53 3338
fe978cb0
PA
3339 if (info && info->priv)
3340 return info->priv->extra;
dc146f7c
VP
3341 else
3342 return NULL;
3343 }
3344
b80fafe3 3345 if (rs->use_threadextra_query)
9d1f7ab2 3346 {
82f73884
PA
3347 char *b = rs->buf;
3348 char *endb = rs->buf + get_remote_packet_size ();
3349
3350 xsnprintf (b, endb - b, "qThreadExtraInfo,");
3351 b += strlen (b);
3352 write_ptid (b, endb, tp->ptid);
3353
2e9f7625 3354 putpkt (rs->buf);
6d820c5c 3355 getpkt (&rs->buf, &rs->buf_size, 0);
2e9f7625 3356 if (rs->buf[0] != 0)
9d1f7ab2 3357 {
325fac50 3358 n = std::min (strlen (rs->buf) / 2, sizeof (display_buf));
2e9f7625 3359 result = hex2bin (rs->buf, (gdb_byte *) display_buf, n);
30559e10 3360 display_buf [result] = '\0';
9d1f7ab2
MS
3361 return display_buf;
3362 }
0f71a2f6 3363 }
9d1f7ab2
MS
3364
3365 /* If the above query fails, fall back to the old method. */
b80fafe3 3366 rs->use_threadextra_query = 0;
9d1f7ab2
MS
3367 set = TAG_THREADID | TAG_EXISTS | TAG_THREADNAME
3368 | TAG_MOREDISPLAY | TAG_DISPLAY;
ba348170 3369 int_to_threadref (&id, ptid_get_lwp (tp->ptid));
9d1f7ab2
MS
3370 if (remote_get_threadinfo (&id, set, &threadinfo))
3371 if (threadinfo.active)
0f71a2f6 3372 {
9d1f7ab2 3373 if (*threadinfo.shortname)
2bc416ba 3374 n += xsnprintf (&display_buf[0], sizeof (display_buf) - n,
ecbc58df 3375 " Name: %s,", threadinfo.shortname);
9d1f7ab2 3376 if (*threadinfo.display)
2bc416ba 3377 n += xsnprintf (&display_buf[n], sizeof (display_buf) - n,
ecbc58df 3378 " State: %s,", threadinfo.display);
9d1f7ab2 3379 if (*threadinfo.more_display)
2bc416ba 3380 n += xsnprintf (&display_buf[n], sizeof (display_buf) - n,
ecbc58df 3381 " Priority: %s", threadinfo.more_display);
9d1f7ab2
MS
3382
3383 if (n > 0)
c5aa993b 3384 {
23860348 3385 /* For purely cosmetic reasons, clear up trailing commas. */
9d1f7ab2
MS
3386 if (',' == display_buf[n-1])
3387 display_buf[n-1] = ' ';
3388 return display_buf;
c5aa993b 3389 }
0f71a2f6 3390 }
9d1f7ab2 3391 return NULL;
0f71a2f6 3392}
c906108c 3393\f
c5aa993b 3394
0fb4aa4b 3395static int
61fc905d 3396remote_static_tracepoint_marker_at (struct target_ops *self, CORE_ADDR addr,
0fb4aa4b
PA
3397 struct static_tracepoint_marker *marker)
3398{
3399 struct remote_state *rs = get_remote_state ();
3400 char *p = rs->buf;
3401
bba74b36 3402 xsnprintf (p, get_remote_packet_size (), "qTSTMat:");
0fb4aa4b
PA
3403 p += strlen (p);
3404 p += hexnumstr (p, addr);
3405 putpkt (rs->buf);
3406 getpkt (&rs->buf, &rs->buf_size, 0);
3407 p = rs->buf;
3408
3409 if (*p == 'E')
3410 error (_("Remote failure reply: %s"), p);
3411
3412 if (*p++ == 'm')
3413 {
3414 parse_static_tracepoint_marker_definition (p, &p, marker);
3415 return 1;
3416 }
3417
3418 return 0;
3419}
3420
0fb4aa4b 3421static VEC(static_tracepoint_marker_p) *
c686c57f
TT
3422remote_static_tracepoint_markers_by_strid (struct target_ops *self,
3423 const char *strid)
0fb4aa4b
PA
3424{
3425 struct remote_state *rs = get_remote_state ();
3426 VEC(static_tracepoint_marker_p) *markers = NULL;
3427 struct static_tracepoint_marker *marker = NULL;
3428 struct cleanup *old_chain;
3429 char *p;
3430
3431 /* Ask for a first packet of static tracepoint marker
3432 definition. */
3433 putpkt ("qTfSTM");
3434 getpkt (&rs->buf, &rs->buf_size, 0);
3435 p = rs->buf;
3436 if (*p == 'E')
3437 error (_("Remote failure reply: %s"), p);
3438
3439 old_chain = make_cleanup (free_current_marker, &marker);
3440
3441 while (*p++ == 'm')
3442 {
3443 if (marker == NULL)
3444 marker = XCNEW (struct static_tracepoint_marker);
3445
3446 do
3447 {
3448 parse_static_tracepoint_marker_definition (p, &p, marker);
3449
3450 if (strid == NULL || strcmp (strid, marker->str_id) == 0)
3451 {
3452 VEC_safe_push (static_tracepoint_marker_p,
3453 markers, marker);
3454 marker = NULL;
3455 }
3456 else
3457 {
3458 release_static_tracepoint_marker (marker);
3459 memset (marker, 0, sizeof (*marker));
3460 }
3461 }
3462 while (*p++ == ','); /* comma-separated list */
3463 /* Ask for another packet of static tracepoint definition. */
3464 putpkt ("qTsSTM");
3465 getpkt (&rs->buf, &rs->buf_size, 0);
3466 p = rs->buf;
3467 }
3468
3469 do_cleanups (old_chain);
3470 return markers;
3471}
3472
3473\f
10760264
JB
3474/* Implement the to_get_ada_task_ptid function for the remote targets. */
3475
3476static ptid_t
1e6b91a4 3477remote_get_ada_task_ptid (struct target_ops *self, long lwp, long thread)
10760264 3478{
ba348170 3479 return ptid_build (ptid_get_pid (inferior_ptid), lwp, 0);
10760264
JB
3480}
3481\f
3482
24b06219 3483/* Restart the remote side; this is an extended protocol operation. */
c906108c
SS
3484
3485static void
fba45db2 3486extended_remote_restart (void)
c906108c 3487{
d01949b6 3488 struct remote_state *rs = get_remote_state ();
c906108c
SS
3489
3490 /* Send the restart command; for reasons I don't understand the
3491 remote side really expects a number after the "R". */
ea9c271d 3492 xsnprintf (rs->buf, get_remote_packet_size (), "R%x", 0);
6d820c5c 3493 putpkt (rs->buf);
c906108c 3494
ad9a8f3f 3495 remote_fileio_reset ();
c906108c
SS
3496}
3497\f
3498/* Clean up connection to a remote debugger. */
3499
c906108c 3500static void
de90e03d 3501remote_close (struct target_ops *self)
c906108c 3502{
5d93a237
TT
3503 struct remote_state *rs = get_remote_state ();
3504
3505 if (rs->remote_desc == NULL)
d3fd5342
PA
3506 return; /* already closed */
3507
048094ac 3508 /* Make sure we leave stdin registered in the event loop. */
e3594fd1 3509 remote_terminal_ours (self);
ce5ce7ed 3510
5d93a237
TT
3511 serial_close (rs->remote_desc);
3512 rs->remote_desc = NULL;
ce5ce7ed
PA
3513
3514 /* We don't have a connection to the remote stub anymore. Get rid
f67fd822
PM
3515 of all the inferiors and their threads we were controlling.
3516 Reset inferior_ptid to null_ptid first, as otherwise has_stack_frame
3517 will be unable to find the thread corresponding to (pid, 0, 0). */
0f2caa1b 3518 inferior_ptid = null_ptid;
f67fd822 3519 discard_all_inferiors ();
ce5ce7ed 3520
f48ff2a7
YQ
3521 /* We are closing the remote target, so we should discard
3522 everything of this target. */
bcc75809 3523 discard_pending_stop_replies_in_queue (rs);
74531fed
PA
3524
3525 if (remote_async_inferior_event_token)
3526 delete_async_event_handler (&remote_async_inferior_event_token);
722247f1 3527
5965e028 3528 remote_notif_state_xfree (rs->notif_state);
aef525cb
YQ
3529
3530 trace_reset_local_state ();
c906108c
SS
3531}
3532
23860348 3533/* Query the remote side for the text, data and bss offsets. */
c906108c
SS
3534
3535static void
fba45db2 3536get_offsets (void)
c906108c 3537{
d01949b6 3538 struct remote_state *rs = get_remote_state ();
2e9f7625 3539 char *buf;
085dd6e6 3540 char *ptr;
31d99776
DJ
3541 int lose, num_segments = 0, do_sections, do_segments;
3542 CORE_ADDR text_addr, data_addr, bss_addr, segments[2];
c906108c 3543 struct section_offsets *offs;
31d99776
DJ
3544 struct symfile_segment_data *data;
3545
3546 if (symfile_objfile == NULL)
3547 return;
c906108c
SS
3548
3549 putpkt ("qOffsets");
6d820c5c 3550 getpkt (&rs->buf, &rs->buf_size, 0);
2e9f7625 3551 buf = rs->buf;
c906108c
SS
3552
3553 if (buf[0] == '\000')
3554 return; /* Return silently. Stub doesn't support
23860348 3555 this command. */
c906108c
SS
3556 if (buf[0] == 'E')
3557 {
8a3fe4f8 3558 warning (_("Remote failure reply: %s"), buf);
c906108c
SS
3559 return;
3560 }
3561
3562 /* Pick up each field in turn. This used to be done with scanf, but
3563 scanf will make trouble if CORE_ADDR size doesn't match
3564 conversion directives correctly. The following code will work
3565 with any size of CORE_ADDR. */
3566 text_addr = data_addr = bss_addr = 0;
3567 ptr = buf;
3568 lose = 0;
3569
61012eef 3570 if (startswith (ptr, "Text="))
c906108c
SS
3571 {
3572 ptr += 5;
3573 /* Don't use strtol, could lose on big values. */
3574 while (*ptr && *ptr != ';')
3575 text_addr = (text_addr << 4) + fromhex (*ptr++);
c906108c 3576
61012eef 3577 if (startswith (ptr, ";Data="))
31d99776
DJ
3578 {
3579 ptr += 6;
3580 while (*ptr && *ptr != ';')
3581 data_addr = (data_addr << 4) + fromhex (*ptr++);
3582 }
3583 else
3584 lose = 1;
3585
61012eef 3586 if (!lose && startswith (ptr, ";Bss="))
31d99776
DJ
3587 {
3588 ptr += 5;
3589 while (*ptr && *ptr != ';')
3590 bss_addr = (bss_addr << 4) + fromhex (*ptr++);
c906108c 3591
31d99776
DJ
3592 if (bss_addr != data_addr)
3593 warning (_("Target reported unsupported offsets: %s"), buf);
3594 }
3595 else
3596 lose = 1;
3597 }
61012eef 3598 else if (startswith (ptr, "TextSeg="))
c906108c 3599 {
31d99776
DJ
3600 ptr += 8;
3601 /* Don't use strtol, could lose on big values. */
c906108c 3602 while (*ptr && *ptr != ';')
31d99776
DJ
3603 text_addr = (text_addr << 4) + fromhex (*ptr++);
3604 num_segments = 1;
3605
61012eef 3606 if (startswith (ptr, ";DataSeg="))
31d99776
DJ
3607 {
3608 ptr += 9;
3609 while (*ptr && *ptr != ';')
3610 data_addr = (data_addr << 4) + fromhex (*ptr++);
3611 num_segments++;
3612 }
c906108c
SS
3613 }
3614 else
3615 lose = 1;
3616
3617 if (lose)
8a3fe4f8 3618 error (_("Malformed response to offset query, %s"), buf);
31d99776
DJ
3619 else if (*ptr != '\0')
3620 warning (_("Target reported unsupported offsets: %s"), buf);
c906108c 3621
802188a7 3622 offs = ((struct section_offsets *)
a39a16c4 3623 alloca (SIZEOF_N_SECTION_OFFSETS (symfile_objfile->num_sections)));
802188a7 3624 memcpy (offs, symfile_objfile->section_offsets,
a39a16c4 3625 SIZEOF_N_SECTION_OFFSETS (symfile_objfile->num_sections));
c906108c 3626
31d99776
DJ
3627 data = get_symfile_segment_data (symfile_objfile->obfd);
3628 do_segments = (data != NULL);
3629 do_sections = num_segments == 0;
c906108c 3630
28c32713 3631 if (num_segments > 0)
31d99776 3632 {
31d99776
DJ
3633 segments[0] = text_addr;
3634 segments[1] = data_addr;
3635 }
28c32713
JB
3636 /* If we have two segments, we can still try to relocate everything
3637 by assuming that the .text and .data offsets apply to the whole
3638 text and data segments. Convert the offsets given in the packet
3639 to base addresses for symfile_map_offsets_to_segments. */
3640 else if (data && data->num_segments == 2)
3641 {
3642 segments[0] = data->segment_bases[0] + text_addr;
3643 segments[1] = data->segment_bases[1] + data_addr;
3644 num_segments = 2;
3645 }
8d385431
DJ
3646 /* If the object file has only one segment, assume that it is text
3647 rather than data; main programs with no writable data are rare,
3648 but programs with no code are useless. Of course the code might
3649 have ended up in the data segment... to detect that we would need
3650 the permissions here. */
3651 else if (data && data->num_segments == 1)
3652 {
3653 segments[0] = data->segment_bases[0] + text_addr;
3654 num_segments = 1;
3655 }
28c32713
JB
3656 /* There's no way to relocate by segment. */
3657 else
3658 do_segments = 0;
31d99776
DJ
3659
3660 if (do_segments)
3661 {
3662 int ret = symfile_map_offsets_to_segments (symfile_objfile->obfd, data,
3663 offs, num_segments, segments);
3664
3665 if (ret == 0 && !do_sections)
3e43a32a
MS
3666 error (_("Can not handle qOffsets TextSeg "
3667 "response with this symbol file"));
31d99776
DJ
3668
3669 if (ret > 0)
3670 do_sections = 0;
3671 }
c906108c 3672
9ef895d6
DJ
3673 if (data)
3674 free_symfile_segment_data (data);
31d99776
DJ
3675
3676 if (do_sections)
3677 {
3678 offs->offsets[SECT_OFF_TEXT (symfile_objfile)] = text_addr;
3679
3e43a32a
MS
3680 /* This is a temporary kludge to force data and bss to use the
3681 same offsets because that's what nlmconv does now. The real
3682 solution requires changes to the stub and remote.c that I
3683 don't have time to do right now. */
31d99776
DJ
3684
3685 offs->offsets[SECT_OFF_DATA (symfile_objfile)] = data_addr;
3686 offs->offsets[SECT_OFF_BSS (symfile_objfile)] = data_addr;
3687 }
c906108c
SS
3688
3689 objfile_relocate (symfile_objfile, offs);
3690}
3691
9a7071a8
JB
3692/* Send interrupt_sequence to remote target. */
3693static void
eeae04df 3694send_interrupt_sequence (void)
9a7071a8 3695{
5d93a237
TT
3696 struct remote_state *rs = get_remote_state ();
3697
9a7071a8 3698 if (interrupt_sequence_mode == interrupt_sequence_control_c)
c33e31fd 3699 remote_serial_write ("\x03", 1);
9a7071a8 3700 else if (interrupt_sequence_mode == interrupt_sequence_break)
5d93a237 3701 serial_send_break (rs->remote_desc);
9a7071a8
JB
3702 else if (interrupt_sequence_mode == interrupt_sequence_break_g)
3703 {
5d93a237 3704 serial_send_break (rs->remote_desc);
c33e31fd 3705 remote_serial_write ("g", 1);
9a7071a8
JB
3706 }
3707 else
3708 internal_error (__FILE__, __LINE__,
3709 _("Invalid value for interrupt_sequence_mode: %s."),
3710 interrupt_sequence_mode);
3711}
3712
3405876a
PA
3713
3714/* If STOP_REPLY is a T stop reply, look for the "thread" register,
3715 and extract the PTID. Returns NULL_PTID if not found. */
3716
3717static ptid_t
3718stop_reply_extract_thread (char *stop_reply)
3719{
3720 if (stop_reply[0] == 'T' && strlen (stop_reply) > 3)
3721 {
3722 char *p;
3723
3724 /* Txx r:val ; r:val (...) */
3725 p = &stop_reply[3];
3726
3727 /* Look for "register" named "thread". */
3728 while (*p != '\0')
3729 {
3730 char *p1;
3731
3732 p1 = strchr (p, ':');
3733 if (p1 == NULL)
3734 return null_ptid;
3735
3736 if (strncmp (p, "thread", p1 - p) == 0)
3737 return read_ptid (++p1, &p);
3738
3739 p1 = strchr (p, ';');
3740 if (p1 == NULL)
3741 return null_ptid;
3742 p1++;
3743
3744 p = p1;
3745 }
3746 }
3747
3748 return null_ptid;
3749}
3750
b7ea362b
PA
3751/* Determine the remote side's current thread. If we have a stop
3752 reply handy (in WAIT_STATUS), maybe it's a T stop reply with a
3753 "thread" register we can extract the current thread from. If not,
3754 ask the remote which is the current thread with qC. The former
3755 method avoids a roundtrip. */
3756
3757static ptid_t
3758get_current_thread (char *wait_status)
3759{
6a49a997 3760 ptid_t ptid = null_ptid;
b7ea362b
PA
3761
3762 /* Note we don't use remote_parse_stop_reply as that makes use of
3763 the target architecture, which we haven't yet fully determined at
3764 this point. */
3765 if (wait_status != NULL)
3766 ptid = stop_reply_extract_thread (wait_status);
3767 if (ptid_equal (ptid, null_ptid))
3768 ptid = remote_current_thread (inferior_ptid);
3769
3770 return ptid;
3771}
3772
49c62f2e
PA
3773/* Query the remote target for which is the current thread/process,
3774 add it to our tables, and update INFERIOR_PTID. The caller is
3775 responsible for setting the state such that the remote end is ready
3405876a
PA
3776 to return the current thread.
3777
3778 This function is called after handling the '?' or 'vRun' packets,
3779 whose response is a stop reply from which we can also try
3780 extracting the thread. If the target doesn't support the explicit
3781 qC query, we infer the current thread from that stop reply, passed
3782 in in WAIT_STATUS, which may be NULL. */
49c62f2e
PA
3783
3784static void
3405876a 3785add_current_inferior_and_thread (char *wait_status)
49c62f2e
PA
3786{
3787 struct remote_state *rs = get_remote_state ();
3788 int fake_pid_p = 0;
6a49a997 3789 ptid_t ptid;
49c62f2e
PA
3790
3791 inferior_ptid = null_ptid;
3792
b7ea362b
PA
3793 /* Now, if we have thread information, update inferior_ptid. */
3794 ptid = get_current_thread (wait_status);
3405876a 3795
49c62f2e
PA
3796 if (!ptid_equal (ptid, null_ptid))
3797 {
3798 if (!remote_multi_process_p (rs))
3799 fake_pid_p = 1;
3800
3801 inferior_ptid = ptid;
3802 }
3803 else
3804 {
3805 /* Without this, some commands which require an active target
3806 (such as kill) won't work. This variable serves (at least)
3807 double duty as both the pid of the target process (if it has
3808 such), and as a flag indicating that a target is active. */
3809 inferior_ptid = magic_null_ptid;
3810 fake_pid_p = 1;
3811 }
3812
1b6e6f5c 3813 remote_add_inferior (fake_pid_p, ptid_get_pid (inferior_ptid), -1, 1);
49c62f2e
PA
3814
3815 /* Add the main thread. */
3816 add_thread_silent (inferior_ptid);
3817}
3818
6efcd9a8
PA
3819/* Print info about a thread that was found already stopped on
3820 connection. */
3821
3822static void
3823print_one_stopped_thread (struct thread_info *thread)
3824{
3825 struct target_waitstatus *ws = &thread->suspend.waitstatus;
3826
3827 switch_to_thread (thread->ptid);
3828 stop_pc = get_frame_pc (get_current_frame ());
3829 set_current_sal_from_frame (get_current_frame ());
3830
3831 thread->suspend.waitstatus_pending_p = 0;
3832
3833 if (ws->kind == TARGET_WAITKIND_STOPPED)
3834 {
3835 enum gdb_signal sig = ws->value.sig;
3836
3837 if (signal_print_state (sig))
3838 observer_notify_signal_received (sig);
3839 }
3840 observer_notify_normal_stop (NULL, 1);
3841}
3842
221e1a37
PA
3843/* Process all initial stop replies the remote side sent in response
3844 to the ? packet. These indicate threads that were already stopped
3845 on initial connection. We mark these threads as stopped and print
3846 their current frame before giving the user the prompt. */
3847
3848static void
6efcd9a8 3849process_initial_stop_replies (int from_tty)
221e1a37
PA
3850{
3851 int pending_stop_replies = stop_reply_queue_length ();
6efcd9a8
PA
3852 struct inferior *inf;
3853 struct thread_info *thread;
3854 struct thread_info *selected = NULL;
3855 struct thread_info *lowest_stopped = NULL;
3856 struct thread_info *first = NULL;
221e1a37
PA
3857
3858 /* Consume the initial pending events. */
3859 while (pending_stop_replies-- > 0)
3860 {
3861 ptid_t waiton_ptid = minus_one_ptid;
3862 ptid_t event_ptid;
3863 struct target_waitstatus ws;
3864 int ignore_event = 0;
6efcd9a8 3865 struct thread_info *thread;
221e1a37
PA
3866
3867 memset (&ws, 0, sizeof (ws));
3868 event_ptid = target_wait (waiton_ptid, &ws, TARGET_WNOHANG);
3869 if (remote_debug)
3870 print_target_wait_results (waiton_ptid, event_ptid, &ws);
3871
3872 switch (ws.kind)
3873 {
3874 case TARGET_WAITKIND_IGNORE:
3875 case TARGET_WAITKIND_NO_RESUMED:
3876 case TARGET_WAITKIND_SIGNALLED:
3877 case TARGET_WAITKIND_EXITED:
3878 /* We shouldn't see these, but if we do, just ignore. */
3879 if (remote_debug)
3880 fprintf_unfiltered (gdb_stdlog, "remote: event ignored\n");
3881 ignore_event = 1;
3882 break;
3883
3884 case TARGET_WAITKIND_EXECD:
3885 xfree (ws.value.execd_pathname);
3886 break;
3887 default:
3888 break;
3889 }
3890
3891 if (ignore_event)
3892 continue;
3893
6efcd9a8 3894 thread = find_thread_ptid (event_ptid);
221e1a37
PA
3895
3896 if (ws.kind == TARGET_WAITKIND_STOPPED)
3897 {
3898 enum gdb_signal sig = ws.value.sig;
3899
3900 /* Stubs traditionally report SIGTRAP as initial signal,
3901 instead of signal 0. Suppress it. */
3902 if (sig == GDB_SIGNAL_TRAP)
3903 sig = GDB_SIGNAL_0;
6efcd9a8
PA
3904 thread->suspend.stop_signal = sig;
3905 ws.value.sig = sig;
3906 }
221e1a37 3907
6efcd9a8
PA
3908 thread->suspend.waitstatus = ws;
3909
3910 if (ws.kind != TARGET_WAITKIND_STOPPED
3911 || ws.value.sig != GDB_SIGNAL_0)
3912 thread->suspend.waitstatus_pending_p = 1;
3913
3914 set_executing (event_ptid, 0);
3915 set_running (event_ptid, 0);
3916 }
3917
3918 /* "Notice" the new inferiors before anything related to
3919 registers/memory. */
3920 ALL_INFERIORS (inf)
3921 {
3922 if (inf->pid == 0)
3923 continue;
3924
3925 inf->needs_setup = 1;
3926
3927 if (non_stop)
3928 {
3929 thread = any_live_thread_of_process (inf->pid);
3930 notice_new_inferior (thread->ptid,
3931 thread->state == THREAD_RUNNING,
3932 from_tty);
3933 }
3934 }
3935
3936 /* If all-stop on top of non-stop, pause all threads. Note this
3937 records the threads' stop pc, so must be done after "noticing"
3938 the inferiors. */
3939 if (!non_stop)
3940 {
3941 stop_all_threads ();
3942
3943 /* If all threads of an inferior were already stopped, we
3944 haven't setup the inferior yet. */
3945 ALL_INFERIORS (inf)
3946 {
3947 if (inf->pid == 0)
3948 continue;
221e1a37 3949
6efcd9a8
PA
3950 if (inf->needs_setup)
3951 {
3952 thread = any_live_thread_of_process (inf->pid);
3953 switch_to_thread_no_regs (thread);
3954 setup_inferior (0);
3955 }
3956 }
221e1a37 3957 }
6efcd9a8
PA
3958
3959 /* Now go over all threads that are stopped, and print their current
3960 frame. If all-stop, then if there's a signalled thread, pick
3961 that as current. */
3962 ALL_NON_EXITED_THREADS (thread)
3963 {
6efcd9a8
PA
3964 if (first == NULL)
3965 first = thread;
3966
3967 if (!non_stop)
3968 set_running (thread->ptid, 0);
3969 else if (thread->state != THREAD_STOPPED)
3970 continue;
3971
6efcd9a8
PA
3972 if (selected == NULL
3973 && thread->suspend.waitstatus_pending_p)
3974 selected = thread;
3975
5d5658a1
PA
3976 if (lowest_stopped == NULL
3977 || thread->inf->num < lowest_stopped->inf->num
3978 || thread->per_inf_num < lowest_stopped->per_inf_num)
6efcd9a8
PA
3979 lowest_stopped = thread;
3980
3981 if (non_stop)
3982 print_one_stopped_thread (thread);
3983 }
3984
3985 /* In all-stop, we only print the status of one thread, and leave
3986 others with their status pending. */
3987 if (!non_stop)
3988 {
3989 thread = selected;
3990 if (thread == NULL)
3991 thread = lowest_stopped;
3992 if (thread == NULL)
3993 thread = first;
3994
3995 print_one_stopped_thread (thread);
3996 }
3997
3998 /* For "info program". */
3999 thread = inferior_thread ();
4000 if (thread->state == THREAD_STOPPED)
4001 set_last_target_status (inferior_ptid, thread->suspend.waitstatus);
221e1a37
PA
4002}
4003
048094ac
PA
4004/* Start the remote connection and sync state. */
4005
9cbc821d 4006static void
04bd08de 4007remote_start_remote (int from_tty, struct target_ops *target, int extended_p)
c906108c 4008{
c8d104ad
PA
4009 struct remote_state *rs = get_remote_state ();
4010 struct packet_config *noack_config;
2d717e4f 4011 char *wait_status = NULL;
8621d6a9 4012
048094ac
PA
4013 /* Signal other parts that we're going through the initial setup,
4014 and so things may not be stable yet. E.g., we don't try to
4015 install tracepoints until we've relocated symbols. Also, a
4016 Ctrl-C before we're connected and synced up can't interrupt the
4017 target. Instead, it offers to drop the (potentially wedged)
4018 connection. */
4019 rs->starting_up = 1;
4020
522002f9 4021 QUIT;
c906108c 4022
9a7071a8
JB
4023 if (interrupt_on_connect)
4024 send_interrupt_sequence ();
4025
57e12211 4026 /* Ack any packet which the remote side has already sent. */
048094ac 4027 remote_serial_write ("+", 1);
1e51243a 4028
c8d104ad
PA
4029 /* The first packet we send to the target is the optional "supported
4030 packets" request. If the target can answer this, it will tell us
4031 which later probes to skip. */
4032 remote_query_supported ();
4033
d914c394 4034 /* If the stub wants to get a QAllow, compose one and send it. */
4082afcc 4035 if (packet_support (PACKET_QAllow) != PACKET_DISABLE)
c378d69d 4036 remote_set_permissions (target);
d914c394 4037
57809e5e
JK
4038 /* gdbserver < 7.7 (before its fix from 2013-12-11) did reply to any
4039 unknown 'v' packet with string "OK". "OK" gets interpreted by GDB
4040 as a reply to known packet. For packet "vFile:setfs:" it is an
4041 invalid reply and GDB would return error in
4042 remote_hostio_set_filesystem, making remote files access impossible.
4043 Disable "vFile:setfs:" in such case. Do not disable other 'v' packets as
4044 other "vFile" packets get correctly detected even on gdbserver < 7.7. */
4045 {
4046 const char v_mustreplyempty[] = "vMustReplyEmpty";
4047
4048 putpkt (v_mustreplyempty);
4049 getpkt (&rs->buf, &rs->buf_size, 0);
4050 if (strcmp (rs->buf, "OK") == 0)
4051 remote_protocol_packets[PACKET_vFile_setfs].support = PACKET_DISABLE;
4052 else if (strcmp (rs->buf, "") != 0)
4053 error (_("Remote replied unexpectedly to '%s': %s"), v_mustreplyempty,
4054 rs->buf);
4055 }
4056
c8d104ad
PA
4057 /* Next, we possibly activate noack mode.
4058
4059 If the QStartNoAckMode packet configuration is set to AUTO,
4060 enable noack mode if the stub reported a wish for it with
4061 qSupported.
4062
4063 If set to TRUE, then enable noack mode even if the stub didn't
4064 report it in qSupported. If the stub doesn't reply OK, the
4065 session ends with an error.
4066
4067 If FALSE, then don't activate noack mode, regardless of what the
4068 stub claimed should be the default with qSupported. */
4069
4070 noack_config = &remote_protocol_packets[PACKET_QStartNoAckMode];
4082afcc 4071 if (packet_config_support (noack_config) != PACKET_DISABLE)
c8d104ad
PA
4072 {
4073 putpkt ("QStartNoAckMode");
4074 getpkt (&rs->buf, &rs->buf_size, 0);
4075 if (packet_ok (rs->buf, noack_config) == PACKET_OK)
4076 rs->noack_mode = 1;
4077 }
4078
04bd08de 4079 if (extended_p)
5fe04517
PA
4080 {
4081 /* Tell the remote that we are using the extended protocol. */
4082 putpkt ("!");
4083 getpkt (&rs->buf, &rs->buf_size, 0);
4084 }
4085
9b224c5e
PA
4086 /* Let the target know which signals it is allowed to pass down to
4087 the program. */
4088 update_signals_program_target ();
4089
d962ef82
DJ
4090 /* Next, if the target can specify a description, read it. We do
4091 this before anything involving memory or registers. */
4092 target_find_description ();
4093
6c95b8df
PA
4094 /* Next, now that we know something about the target, update the
4095 address spaces in the program spaces. */
4096 update_address_spaces ();
4097
50c71eaf
PA
4098 /* On OSs where the list of libraries is global to all
4099 processes, we fetch them early. */
f5656ead 4100 if (gdbarch_has_global_solist (target_gdbarch ()))
04bd08de 4101 solib_add (NULL, from_tty, target, auto_solib_add);
50c71eaf 4102
6efcd9a8 4103 if (target_is_non_stop_p ())
74531fed 4104 {
4082afcc 4105 if (packet_support (PACKET_QNonStop) != PACKET_ENABLE)
3e43a32a
MS
4106 error (_("Non-stop mode requested, but remote "
4107 "does not support non-stop"));
74531fed
PA
4108
4109 putpkt ("QNonStop:1");
4110 getpkt (&rs->buf, &rs->buf_size, 0);
4111
4112 if (strcmp (rs->buf, "OK") != 0)
9b20d036 4113 error (_("Remote refused setting non-stop mode with: %s"), rs->buf);
74531fed
PA
4114
4115 /* Find about threads and processes the stub is already
4116 controlling. We default to adding them in the running state.
4117 The '?' query below will then tell us about which threads are
4118 stopped. */
e8032dde 4119 remote_update_thread_list (target);
74531fed 4120 }
4082afcc 4121 else if (packet_support (PACKET_QNonStop) == PACKET_ENABLE)
74531fed
PA
4122 {
4123 /* Don't assume that the stub can operate in all-stop mode.
e6f3fa52 4124 Request it explicitly. */
74531fed
PA
4125 putpkt ("QNonStop:0");
4126 getpkt (&rs->buf, &rs->buf_size, 0);
4127
4128 if (strcmp (rs->buf, "OK") != 0)
9b20d036 4129 error (_("Remote refused setting all-stop mode with: %s"), rs->buf);
74531fed
PA
4130 }
4131
a0743c90
YQ
4132 /* Upload TSVs regardless of whether the target is running or not. The
4133 remote stub, such as GDBserver, may have some predefined or builtin
4134 TSVs, even if the target is not running. */
8bd200f1 4135 if (remote_get_trace_status (target, current_trace_status ()) != -1)
a0743c90
YQ
4136 {
4137 struct uploaded_tsv *uploaded_tsvs = NULL;
4138
181e3713 4139 remote_upload_trace_state_variables (target, &uploaded_tsvs);
a0743c90
YQ
4140 merge_uploaded_trace_state_variables (&uploaded_tsvs);
4141 }
4142
2d717e4f
DJ
4143 /* Check whether the target is running now. */
4144 putpkt ("?");
4145 getpkt (&rs->buf, &rs->buf_size, 0);
4146
6efcd9a8 4147 if (!target_is_non_stop_p ())
2d717e4f 4148 {
74531fed 4149 if (rs->buf[0] == 'W' || rs->buf[0] == 'X')
2d717e4f 4150 {
04bd08de 4151 if (!extended_p)
74531fed 4152 error (_("The target is not running (try extended-remote?)"));
c35b1492
PA
4153
4154 /* We're connected, but not running. Drop out before we
4155 call start_remote. */
e278ad5b 4156 rs->starting_up = 0;
c35b1492 4157 return;
2d717e4f
DJ
4158 }
4159 else
74531fed 4160 {
74531fed 4161 /* Save the reply for later. */
224c3ddb 4162 wait_status = (char *) alloca (strlen (rs->buf) + 1);
74531fed
PA
4163 strcpy (wait_status, rs->buf);
4164 }
4165
b7ea362b 4166 /* Fetch thread list. */
e8032dde 4167 target_update_thread_list ();
b7ea362b 4168
74531fed
PA
4169 /* Let the stub know that we want it to return the thread. */
4170 set_continue_thread (minus_one_ptid);
4171
b7ea362b
PA
4172 if (thread_count () == 0)
4173 {
4174 /* Target has no concept of threads at all. GDB treats
4175 non-threaded target as single-threaded; add a main
4176 thread. */
4177 add_current_inferior_and_thread (wait_status);
4178 }
4179 else
4180 {
4181 /* We have thread information; select the thread the target
4182 says should be current. If we're reconnecting to a
4183 multi-threaded program, this will ideally be the thread
4184 that last reported an event before GDB disconnected. */
4185 inferior_ptid = get_current_thread (wait_status);
4186 if (ptid_equal (inferior_ptid, null_ptid))
4187 {
4188 /* Odd... The target was able to list threads, but not
4189 tell us which thread was current (no "thread"
4190 register in T stop reply?). Just pick the first
4191 thread in the thread list then. */
c9f35b34
KB
4192
4193 if (remote_debug)
4194 fprintf_unfiltered (gdb_stdlog,
4195 "warning: couldn't determine remote "
4196 "current thread; picking first in list.\n");
4197
b7ea362b
PA
4198 inferior_ptid = thread_list->ptid;
4199 }
4200 }
74531fed 4201
6e586cc5
YQ
4202 /* init_wait_for_inferior should be called before get_offsets in order
4203 to manage `inserted' flag in bp loc in a correct state.
4204 breakpoint_init_inferior, called from init_wait_for_inferior, set
4205 `inserted' flag to 0, while before breakpoint_re_set, called from
4206 start_remote, set `inserted' flag to 1. In the initialization of
4207 inferior, breakpoint_init_inferior should be called first, and then
4208 breakpoint_re_set can be called. If this order is broken, state of
4209 `inserted' flag is wrong, and cause some problems on breakpoint
4210 manipulation. */
4211 init_wait_for_inferior ();
4212
74531fed
PA
4213 get_offsets (); /* Get text, data & bss offsets. */
4214
d962ef82
DJ
4215 /* If we could not find a description using qXfer, and we know
4216 how to do it some other way, try again. This is not
4217 supported for non-stop; it could be, but it is tricky if
4218 there are no stopped threads when we connect. */
04bd08de 4219 if (remote_read_description_p (target)
f5656ead 4220 && gdbarch_target_desc (target_gdbarch ()) == NULL)
d962ef82
DJ
4221 {
4222 target_clear_description ();
4223 target_find_description ();
4224 }
4225
74531fed
PA
4226 /* Use the previously fetched status. */
4227 gdb_assert (wait_status != NULL);
4228 strcpy (rs->buf, wait_status);
4229 rs->cached_wait_status = 1;
4230
04bd08de 4231 start_remote (from_tty); /* Initialize gdb process mechanisms. */
2d717e4f
DJ
4232 }
4233 else
4234 {
68c97600
PA
4235 /* Clear WFI global state. Do this before finding about new
4236 threads and inferiors, and setting the current inferior.
4237 Otherwise we would clear the proceed status of the current
4238 inferior when we want its stop_soon state to be preserved
4239 (see notice_new_inferior). */
4240 init_wait_for_inferior ();
4241
74531fed
PA
4242 /* In non-stop, we will either get an "OK", meaning that there
4243 are no stopped threads at this time; or, a regular stop
4244 reply. In the latter case, there may be more than one thread
4245 stopped --- we pull them all out using the vStopped
4246 mechanism. */
4247 if (strcmp (rs->buf, "OK") != 0)
4248 {
722247f1 4249 struct notif_client *notif = &notif_client_stop;
2d717e4f 4250
722247f1
YQ
4251 /* remote_notif_get_pending_replies acks this one, and gets
4252 the rest out. */
f48ff2a7 4253 rs->notif_state->pending_event[notif_client_stop.id]
722247f1
YQ
4254 = remote_notif_parse (notif, rs->buf);
4255 remote_notif_get_pending_events (notif);
74531fed 4256 }
2d717e4f 4257
74531fed
PA
4258 if (thread_count () == 0)
4259 {
04bd08de 4260 if (!extended_p)
74531fed 4261 error (_("The target is not running (try extended-remote?)"));
82f73884 4262
c35b1492
PA
4263 /* We're connected, but not running. Drop out before we
4264 call start_remote. */
e278ad5b 4265 rs->starting_up = 0;
c35b1492
PA
4266 return;
4267 }
74531fed 4268
74531fed
PA
4269 /* In non-stop mode, any cached wait status will be stored in
4270 the stop reply queue. */
4271 gdb_assert (wait_status == NULL);
f0223081 4272
2455069d 4273 /* Report all signals during attach/startup. */
94bedb42 4274 remote_pass_signals (target, 0, NULL);
221e1a37
PA
4275
4276 /* If there are already stopped threads, mark them stopped and
4277 report their stops before giving the prompt to the user. */
6efcd9a8 4278 process_initial_stop_replies (from_tty);
221e1a37
PA
4279
4280 if (target_can_async_p ())
4281 target_async (1);
74531fed 4282 }
c8d104ad 4283
c8d104ad
PA
4284 /* If we connected to a live target, do some additional setup. */
4285 if (target_has_execution)
4286 {
f4ccffad 4287 if (symfile_objfile) /* No use without a symbol-file. */
36d25514 4288 remote_check_symbols ();
c8d104ad 4289 }
50c71eaf 4290
d5551862
SS
4291 /* Possibly the target has been engaged in a trace run started
4292 previously; find out where things are at. */
8bd200f1 4293 if (remote_get_trace_status (target, current_trace_status ()) != -1)
d5551862 4294 {
00bf0b85 4295 struct uploaded_tp *uploaded_tps = NULL;
00bf0b85 4296
00bf0b85
SS
4297 if (current_trace_status ()->running)
4298 printf_filtered (_("Trace is already running on the target.\n"));
4299
ab6617cc 4300 remote_upload_tracepoints (target, &uploaded_tps);
00bf0b85
SS
4301
4302 merge_uploaded_tracepoints (&uploaded_tps);
d5551862
SS
4303 }
4304
c0272db5
TW
4305 /* Possibly the target has been engaged in a btrace record started
4306 previously; find out where things are at. */
4307 remote_btrace_maybe_reopen ();
4308
1e51243a
PA
4309 /* The thread and inferior lists are now synchronized with the
4310 target, our symbols have been relocated, and we're merged the
4311 target's tracepoints with ours. We're done with basic start
4312 up. */
4313 rs->starting_up = 0;
4314
a25a5a45
PA
4315 /* Maybe breakpoints are global and need to be inserted now. */
4316 if (breakpoints_should_be_inserted_now ())
50c71eaf 4317 insert_breakpoints ();
c906108c
SS
4318}
4319
4320/* Open a connection to a remote debugger.
4321 NAME is the filename used for communication. */
4322
4323static void
014f9477 4324remote_open (const char *name, int from_tty)
c906108c 4325{
75c99385 4326 remote_open_1 (name, from_tty, &remote_ops, 0);
43ff13b4
JM
4327}
4328
c906108c
SS
4329/* Open a connection to a remote debugger using the extended
4330 remote gdb protocol. NAME is the filename used for communication. */
4331
4332static void
014f9477 4333extended_remote_open (const char *name, int from_tty)
c906108c 4334{
75c99385 4335 remote_open_1 (name, from_tty, &extended_remote_ops, 1 /*extended_p */);
43ff13b4
JM
4336}
4337
ca4f7f8b
PA
4338/* Reset all packets back to "unknown support". Called when opening a
4339 new connection to a remote target. */
c906108c 4340
d471ea57 4341static void
ca4f7f8b 4342reset_all_packet_configs_support (void)
d471ea57
AC
4343{
4344 int i;
a744cf53 4345
444abaca 4346 for (i = 0; i < PACKET_MAX; i++)
4082afcc 4347 remote_protocol_packets[i].support = PACKET_SUPPORT_UNKNOWN;
d471ea57
AC
4348}
4349
ca4f7f8b
PA
4350/* Initialize all packet configs. */
4351
4352static void
4353init_all_packet_configs (void)
4354{
4355 int i;
4356
4357 for (i = 0; i < PACKET_MAX; i++)
4358 {
4359 remote_protocol_packets[i].detect = AUTO_BOOLEAN_AUTO;
4360 remote_protocol_packets[i].support = PACKET_SUPPORT_UNKNOWN;
4361 }
4362}
4363
23860348 4364/* Symbol look-up. */
dc8acb97
MS
4365
4366static void
36d25514 4367remote_check_symbols (void)
dc8acb97 4368{
d01949b6 4369 struct remote_state *rs = get_remote_state ();
dc8acb97 4370 char *msg, *reply, *tmp;
dc8acb97 4371 int end;
28170b88 4372 long reply_size;
a5c0808e 4373 struct cleanup *old_chain;
dc8acb97 4374
63154eca
PA
4375 /* The remote side has no concept of inferiors that aren't running
4376 yet, it only knows about running processes. If we're connected
4377 but our current inferior is not running, we should not invite the
4378 remote target to request symbol lookups related to its
4379 (unrelated) current process. */
4380 if (!target_has_execution)
4381 return;
4382
4082afcc 4383 if (packet_support (PACKET_qSymbol) == PACKET_DISABLE)
dc8acb97
MS
4384 return;
4385
63154eca
PA
4386 /* Make sure the remote is pointing at the right process. Note
4387 there's no way to select "no process". */
3c9c4b83
PA
4388 set_general_process ();
4389
6d820c5c
DJ
4390 /* Allocate a message buffer. We can't reuse the input buffer in RS,
4391 because we need both at the same time. */
224c3ddb 4392 msg = (char *) xmalloc (get_remote_packet_size ());
a5c0808e 4393 old_chain = make_cleanup (xfree, msg);
28170b88
MK
4394 reply = (char *) xmalloc (get_remote_packet_size ());
4395 make_cleanup (free_current_contents, &reply);
4396 reply_size = get_remote_packet_size ();
6d820c5c 4397
23860348 4398 /* Invite target to request symbol lookups. */
dc8acb97
MS
4399
4400 putpkt ("qSymbol::");
28170b88
MK
4401 getpkt (&reply, &reply_size, 0);
4402 packet_ok (reply, &remote_protocol_packets[PACKET_qSymbol]);
dc8acb97 4403
61012eef 4404 while (startswith (reply, "qSymbol:"))
dc8acb97 4405 {
77e371c0
TT
4406 struct bound_minimal_symbol sym;
4407
dc8acb97 4408 tmp = &reply[8];
cfd77fa1 4409 end = hex2bin (tmp, (gdb_byte *) msg, strlen (tmp) / 2);
dc8acb97
MS
4410 msg[end] = '\0';
4411 sym = lookup_minimal_symbol (msg, NULL, NULL);
3b7344d5 4412 if (sym.minsym == NULL)
ea9c271d 4413 xsnprintf (msg, get_remote_packet_size (), "qSymbol::%s", &reply[8]);
dc8acb97 4414 else
2bbe3cc1 4415 {
f5656ead 4416 int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
77e371c0 4417 CORE_ADDR sym_addr = BMSYMBOL_VALUE_ADDRESS (sym);
2bbe3cc1
DJ
4418
4419 /* If this is a function address, return the start of code
4420 instead of any data function descriptor. */
f5656ead 4421 sym_addr = gdbarch_convert_from_func_ptr_addr (target_gdbarch (),
2bbe3cc1
DJ
4422 sym_addr,
4423 &current_target);
4424
4425 xsnprintf (msg, get_remote_packet_size (), "qSymbol:%s:%s",
5af949e3 4426 phex_nz (sym_addr, addr_size), &reply[8]);
2bbe3cc1
DJ
4427 }
4428
dc8acb97 4429 putpkt (msg);
28170b88 4430 getpkt (&reply, &reply_size, 0);
dc8acb97 4431 }
a5c0808e
PA
4432
4433 do_cleanups (old_chain);
dc8acb97
MS
4434}
4435
9db8d71f 4436static struct serial *
baa336ce 4437remote_serial_open (const char *name)
9db8d71f
DJ
4438{
4439 static int udp_warning = 0;
4440
4441 /* FIXME: Parsing NAME here is a hack. But we want to warn here instead
4442 of in ser-tcp.c, because it is the remote protocol assuming that the
4443 serial connection is reliable and not the serial connection promising
4444 to be. */
61012eef 4445 if (!udp_warning && startswith (name, "udp:"))
9db8d71f 4446 {
3e43a32a
MS
4447 warning (_("The remote protocol may be unreliable over UDP.\n"
4448 "Some events may be lost, rendering further debugging "
4449 "impossible."));
9db8d71f
DJ
4450 udp_warning = 1;
4451 }
4452
4453 return serial_open (name);
4454}
4455
d914c394
SS
4456/* Inform the target of our permission settings. The permission flags
4457 work without this, but if the target knows the settings, it can do
4458 a couple things. First, it can add its own check, to catch cases
4459 that somehow manage to get by the permissions checks in target
4460 methods. Second, if the target is wired to disallow particular
4461 settings (for instance, a system in the field that is not set up to
4462 be able to stop at a breakpoint), it can object to any unavailable
4463 permissions. */
4464
4465void
c378d69d 4466remote_set_permissions (struct target_ops *self)
d914c394
SS
4467{
4468 struct remote_state *rs = get_remote_state ();
4469
bba74b36
YQ
4470 xsnprintf (rs->buf, get_remote_packet_size (), "QAllow:"
4471 "WriteReg:%x;WriteMem:%x;"
4472 "InsertBreak:%x;InsertTrace:%x;"
4473 "InsertFastTrace:%x;Stop:%x",
4474 may_write_registers, may_write_memory,
4475 may_insert_breakpoints, may_insert_tracepoints,
4476 may_insert_fast_tracepoints, may_stop);
d914c394
SS
4477 putpkt (rs->buf);
4478 getpkt (&rs->buf, &rs->buf_size, 0);
4479
4480 /* If the target didn't like the packet, warn the user. Do not try
4481 to undo the user's settings, that would just be maddening. */
4482 if (strcmp (rs->buf, "OK") != 0)
7ea6d463 4483 warning (_("Remote refused setting permissions with: %s"), rs->buf);
d914c394
SS
4484}
4485
be2a5f71
DJ
4486/* This type describes each known response to the qSupported
4487 packet. */
4488struct protocol_feature
4489{
4490 /* The name of this protocol feature. */
4491 const char *name;
4492
4493 /* The default for this protocol feature. */
4494 enum packet_support default_support;
4495
4496 /* The function to call when this feature is reported, or after
4497 qSupported processing if the feature is not supported.
4498 The first argument points to this structure. The second
4499 argument indicates whether the packet requested support be
4500 enabled, disabled, or probed (or the default, if this function
4501 is being called at the end of processing and this feature was
4502 not reported). The third argument may be NULL; if not NULL, it
4503 is a NUL-terminated string taken from the packet following
4504 this feature's name and an equals sign. */
4505 void (*func) (const struct protocol_feature *, enum packet_support,
4506 const char *);
4507
4508 /* The corresponding packet for this feature. Only used if
4509 FUNC is remote_supported_packet. */
4510 int packet;
4511};
4512
be2a5f71
DJ
4513static void
4514remote_supported_packet (const struct protocol_feature *feature,
4515 enum packet_support support,
4516 const char *argument)
4517{
4518 if (argument)
4519 {
4520 warning (_("Remote qSupported response supplied an unexpected value for"
4521 " \"%s\"."), feature->name);
4522 return;
4523 }
4524
4082afcc 4525 remote_protocol_packets[feature->packet].support = support;
be2a5f71 4526}
be2a5f71
DJ
4527
4528static void
4529remote_packet_size (const struct protocol_feature *feature,
4530 enum packet_support support, const char *value)
4531{
4532 struct remote_state *rs = get_remote_state ();
4533
4534 int packet_size;
4535 char *value_end;
4536
4537 if (support != PACKET_ENABLE)
4538 return;
4539
4540 if (value == NULL || *value == '\0')
4541 {
4542 warning (_("Remote target reported \"%s\" without a size."),
4543 feature->name);
4544 return;
4545 }
4546
4547 errno = 0;
4548 packet_size = strtol (value, &value_end, 16);
4549 if (errno != 0 || *value_end != '\0' || packet_size < 0)
4550 {
4551 warning (_("Remote target reported \"%s\" with a bad size: \"%s\"."),
4552 feature->name, value);
4553 return;
4554 }
4555
be2a5f71
DJ
4556 /* Record the new maximum packet size. */
4557 rs->explicit_packet_size = packet_size;
4558}
4559
dc473cfb 4560static const struct protocol_feature remote_protocol_features[] = {
0876f84a 4561 { "PacketSize", PACKET_DISABLE, remote_packet_size, -1 },
40e57cf2 4562 { "qXfer:auxv:read", PACKET_DISABLE, remote_supported_packet,
fd79ecee 4563 PACKET_qXfer_auxv },
c78fa86a
GB
4564 { "qXfer:exec-file:read", PACKET_DISABLE, remote_supported_packet,
4565 PACKET_qXfer_exec_file },
23181151
DJ
4566 { "qXfer:features:read", PACKET_DISABLE, remote_supported_packet,
4567 PACKET_qXfer_features },
cfa9d6d9
DJ
4568 { "qXfer:libraries:read", PACKET_DISABLE, remote_supported_packet,
4569 PACKET_qXfer_libraries },
2268b414
JK
4570 { "qXfer:libraries-svr4:read", PACKET_DISABLE, remote_supported_packet,
4571 PACKET_qXfer_libraries_svr4 },
ced63ec0 4572 { "augmented-libraries-svr4-read", PACKET_DISABLE,
4082afcc 4573 remote_supported_packet, PACKET_augmented_libraries_svr4_read_feature },
fd79ecee 4574 { "qXfer:memory-map:read", PACKET_DISABLE, remote_supported_packet,
89be2091 4575 PACKET_qXfer_memory_map },
4de6483e
UW
4576 { "qXfer:spu:read", PACKET_DISABLE, remote_supported_packet,
4577 PACKET_qXfer_spu_read },
4578 { "qXfer:spu:write", PACKET_DISABLE, remote_supported_packet,
4579 PACKET_qXfer_spu_write },
07e059b5
VP
4580 { "qXfer:osdata:read", PACKET_DISABLE, remote_supported_packet,
4581 PACKET_qXfer_osdata },
dc146f7c
VP
4582 { "qXfer:threads:read", PACKET_DISABLE, remote_supported_packet,
4583 PACKET_qXfer_threads },
b3b9301e
PA
4584 { "qXfer:traceframe-info:read", PACKET_DISABLE, remote_supported_packet,
4585 PACKET_qXfer_traceframe_info },
89be2091
DJ
4586 { "QPassSignals", PACKET_DISABLE, remote_supported_packet,
4587 PACKET_QPassSignals },
82075af2
JS
4588 { "QCatchSyscalls", PACKET_DISABLE, remote_supported_packet,
4589 PACKET_QCatchSyscalls },
9b224c5e
PA
4590 { "QProgramSignals", PACKET_DISABLE, remote_supported_packet,
4591 PACKET_QProgramSignals },
a6f3e723
SL
4592 { "QStartNoAckMode", PACKET_DISABLE, remote_supported_packet,
4593 PACKET_QStartNoAckMode },
4082afcc
PA
4594 { "multiprocess", PACKET_DISABLE, remote_supported_packet,
4595 PACKET_multiprocess_feature },
4596 { "QNonStop", PACKET_DISABLE, remote_supported_packet, PACKET_QNonStop },
4aa995e1
PA
4597 { "qXfer:siginfo:read", PACKET_DISABLE, remote_supported_packet,
4598 PACKET_qXfer_siginfo_read },
4599 { "qXfer:siginfo:write", PACKET_DISABLE, remote_supported_packet,
4600 PACKET_qXfer_siginfo_write },
4082afcc 4601 { "ConditionalTracepoints", PACKET_DISABLE, remote_supported_packet,
782b2b07 4602 PACKET_ConditionalTracepoints },
4082afcc 4603 { "ConditionalBreakpoints", PACKET_DISABLE, remote_supported_packet,
3788aec7 4604 PACKET_ConditionalBreakpoints },
4082afcc 4605 { "BreakpointCommands", PACKET_DISABLE, remote_supported_packet,
d3ce09f5 4606 PACKET_BreakpointCommands },
4082afcc 4607 { "FastTracepoints", PACKET_DISABLE, remote_supported_packet,
7a697b8d 4608 PACKET_FastTracepoints },
4082afcc 4609 { "StaticTracepoints", PACKET_DISABLE, remote_supported_packet,
0fb4aa4b 4610 PACKET_StaticTracepoints },
4082afcc 4611 {"InstallInTrace", PACKET_DISABLE, remote_supported_packet,
1e4d1764 4612 PACKET_InstallInTrace},
4082afcc
PA
4613 { "DisconnectedTracing", PACKET_DISABLE, remote_supported_packet,
4614 PACKET_DisconnectedTracing_feature },
40ab02ce
MS
4615 { "ReverseContinue", PACKET_DISABLE, remote_supported_packet,
4616 PACKET_bc },
4617 { "ReverseStep", PACKET_DISABLE, remote_supported_packet,
4618 PACKET_bs },
409873ef
SS
4619 { "TracepointSource", PACKET_DISABLE, remote_supported_packet,
4620 PACKET_TracepointSource },
d914c394
SS
4621 { "QAllow", PACKET_DISABLE, remote_supported_packet,
4622 PACKET_QAllow },
4082afcc
PA
4623 { "EnableDisableTracepoints", PACKET_DISABLE, remote_supported_packet,
4624 PACKET_EnableDisableTracepoints_feature },
78d85199
YQ
4625 { "qXfer:fdpic:read", PACKET_DISABLE, remote_supported_packet,
4626 PACKET_qXfer_fdpic },
169081d0
TG
4627 { "qXfer:uib:read", PACKET_DISABLE, remote_supported_packet,
4628 PACKET_qXfer_uib },
03583c20
UW
4629 { "QDisableRandomization", PACKET_DISABLE, remote_supported_packet,
4630 PACKET_QDisableRandomization },
d1feda86 4631 { "QAgent", PACKET_DISABLE, remote_supported_packet, PACKET_QAgent},
f6f899bf
HAQ
4632 { "QTBuffer:size", PACKET_DISABLE,
4633 remote_supported_packet, PACKET_QTBuffer_size},
4082afcc 4634 { "tracenz", PACKET_DISABLE, remote_supported_packet, PACKET_tracenz_feature },
9accd112
MM
4635 { "Qbtrace:off", PACKET_DISABLE, remote_supported_packet, PACKET_Qbtrace_off },
4636 { "Qbtrace:bts", PACKET_DISABLE, remote_supported_packet, PACKET_Qbtrace_bts },
b20a6524 4637 { "Qbtrace:pt", PACKET_DISABLE, remote_supported_packet, PACKET_Qbtrace_pt },
9accd112 4638 { "qXfer:btrace:read", PACKET_DISABLE, remote_supported_packet,
f4abbc16
MM
4639 PACKET_qXfer_btrace },
4640 { "qXfer:btrace-conf:read", PACKET_DISABLE, remote_supported_packet,
d33501a5
MM
4641 PACKET_qXfer_btrace_conf },
4642 { "Qbtrace-conf:bts:size", PACKET_DISABLE, remote_supported_packet,
f7e6eed5
PA
4643 PACKET_Qbtrace_conf_bts_size },
4644 { "swbreak", PACKET_DISABLE, remote_supported_packet, PACKET_swbreak_feature },
0a93529c 4645 { "hwbreak", PACKET_DISABLE, remote_supported_packet, PACKET_hwbreak_feature },
89245bc0
DB
4646 { "fork-events", PACKET_DISABLE, remote_supported_packet,
4647 PACKET_fork_event_feature },
4648 { "vfork-events", PACKET_DISABLE, remote_supported_packet,
4649 PACKET_vfork_event_feature },
94585166
DB
4650 { "exec-events", PACKET_DISABLE, remote_supported_packet,
4651 PACKET_exec_event_feature },
b20a6524 4652 { "Qbtrace-conf:pt:size", PACKET_DISABLE, remote_supported_packet,
750ce8d1 4653 PACKET_Qbtrace_conf_pt_size },
65706a29
PA
4654 { "vContSupported", PACKET_DISABLE, remote_supported_packet, PACKET_vContSupported },
4655 { "QThreadEvents", PACKET_DISABLE, remote_supported_packet, PACKET_QThreadEvents },
f2faf941 4656 { "no-resumed", PACKET_DISABLE, remote_supported_packet, PACKET_no_resumed },
be2a5f71
DJ
4657};
4658
c8d5aac9
L
4659static char *remote_support_xml;
4660
4661/* Register string appended to "xmlRegisters=" in qSupported query. */
4662
4663void
6e39997a 4664register_remote_support_xml (const char *xml)
c8d5aac9
L
4665{
4666#if defined(HAVE_LIBEXPAT)
4667 if (remote_support_xml == NULL)
c4f7c687 4668 remote_support_xml = concat ("xmlRegisters=", xml, (char *) NULL);
c8d5aac9
L
4669 else
4670 {
4671 char *copy = xstrdup (remote_support_xml + 13);
4672 char *p = strtok (copy, ",");
4673
4674 do
4675 {
4676 if (strcmp (p, xml) == 0)
4677 {
4678 /* already there */
4679 xfree (copy);
4680 return;
4681 }
4682 }
4683 while ((p = strtok (NULL, ",")) != NULL);
4684 xfree (copy);
4685
94b0dee1
PA
4686 remote_support_xml = reconcat (remote_support_xml,
4687 remote_support_xml, ",", xml,
4688 (char *) NULL);
c8d5aac9
L
4689 }
4690#endif
4691}
4692
4693static char *
4694remote_query_supported_append (char *msg, const char *append)
4695{
4696 if (msg)
94b0dee1 4697 return reconcat (msg, msg, ";", append, (char *) NULL);
c8d5aac9
L
4698 else
4699 return xstrdup (append);
4700}
4701
be2a5f71
DJ
4702static void
4703remote_query_supported (void)
4704{
4705 struct remote_state *rs = get_remote_state ();
4706 char *next;
4707 int i;
4708 unsigned char seen [ARRAY_SIZE (remote_protocol_features)];
4709
4710 /* The packet support flags are handled differently for this packet
4711 than for most others. We treat an error, a disabled packet, and
4712 an empty response identically: any features which must be reported
4713 to be used will be automatically disabled. An empty buffer
4714 accomplishes this, since that is also the representation for a list
4715 containing no features. */
4716
4717 rs->buf[0] = 0;
4082afcc 4718 if (packet_support (PACKET_qSupported) != PACKET_DISABLE)
be2a5f71 4719 {
c8d5aac9 4720 char *q = NULL;
94b0dee1 4721 struct cleanup *old_chain = make_cleanup (free_current_contents, &q);
c8d5aac9 4722
73b8c1fd
PA
4723 if (packet_set_cmd_state (PACKET_multiprocess_feature) != AUTO_BOOLEAN_FALSE)
4724 q = remote_query_supported_append (q, "multiprocess+");
c8d5aac9 4725
f7e6eed5
PA
4726 if (packet_set_cmd_state (PACKET_swbreak_feature) != AUTO_BOOLEAN_FALSE)
4727 q = remote_query_supported_append (q, "swbreak+");
4728 if (packet_set_cmd_state (PACKET_hwbreak_feature) != AUTO_BOOLEAN_FALSE)
4729 q = remote_query_supported_append (q, "hwbreak+");
4730
dde08ee1
PA
4731 q = remote_query_supported_append (q, "qRelocInsn+");
4732
8020350c
DB
4733 if (packet_set_cmd_state (PACKET_fork_event_feature)
4734 != AUTO_BOOLEAN_FALSE)
4735 q = remote_query_supported_append (q, "fork-events+");
4736 if (packet_set_cmd_state (PACKET_vfork_event_feature)
4737 != AUTO_BOOLEAN_FALSE)
4738 q = remote_query_supported_append (q, "vfork-events+");
4739 if (packet_set_cmd_state (PACKET_exec_event_feature)
4740 != AUTO_BOOLEAN_FALSE)
4741 q = remote_query_supported_append (q, "exec-events+");
89245bc0 4742
750ce8d1
YQ
4743 if (packet_set_cmd_state (PACKET_vContSupported) != AUTO_BOOLEAN_FALSE)
4744 q = remote_query_supported_append (q, "vContSupported+");
4745
65706a29
PA
4746 if (packet_set_cmd_state (PACKET_QThreadEvents) != AUTO_BOOLEAN_FALSE)
4747 q = remote_query_supported_append (q, "QThreadEvents+");
4748
f2faf941
PA
4749 if (packet_set_cmd_state (PACKET_no_resumed) != AUTO_BOOLEAN_FALSE)
4750 q = remote_query_supported_append (q, "no-resumed+");
4751
b35d5edb
PA
4752 /* Keep this one last to work around a gdbserver <= 7.10 bug in
4753 the qSupported:xmlRegisters=i386 handling. */
4754 if (remote_support_xml != NULL)
4755 q = remote_query_supported_append (q, remote_support_xml);
4756
dde08ee1
PA
4757 q = reconcat (q, "qSupported:", q, (char *) NULL);
4758 putpkt (q);
82f73884 4759
94b0dee1
PA
4760 do_cleanups (old_chain);
4761
be2a5f71
DJ
4762 getpkt (&rs->buf, &rs->buf_size, 0);
4763
4764 /* If an error occured, warn, but do not return - just reset the
4765 buffer to empty and go on to disable features. */
4766 if (packet_ok (rs->buf, &remote_protocol_packets[PACKET_qSupported])
4767 == PACKET_ERROR)
4768 {
4769 warning (_("Remote failure reply: %s"), rs->buf);
4770 rs->buf[0] = 0;
4771 }
4772 }
4773
4774 memset (seen, 0, sizeof (seen));
4775
4776 next = rs->buf;
4777 while (*next)
4778 {
4779 enum packet_support is_supported;
4780 char *p, *end, *name_end, *value;
4781
4782 /* First separate out this item from the rest of the packet. If
4783 there's another item after this, we overwrite the separator
4784 (terminated strings are much easier to work with). */
4785 p = next;
4786 end = strchr (p, ';');
4787 if (end == NULL)
4788 {
4789 end = p + strlen (p);
4790 next = end;
4791 }
4792 else
4793 {
89be2091
DJ
4794 *end = '\0';
4795 next = end + 1;
4796
be2a5f71
DJ
4797 if (end == p)
4798 {
4799 warning (_("empty item in \"qSupported\" response"));
4800 continue;
4801 }
be2a5f71
DJ
4802 }
4803
4804 name_end = strchr (p, '=');
4805 if (name_end)
4806 {
4807 /* This is a name=value entry. */
4808 is_supported = PACKET_ENABLE;
4809 value = name_end + 1;
4810 *name_end = '\0';
4811 }
4812 else
4813 {
4814 value = NULL;
4815 switch (end[-1])
4816 {
4817 case '+':
4818 is_supported = PACKET_ENABLE;
4819 break;
4820
4821 case '-':
4822 is_supported = PACKET_DISABLE;
4823 break;
4824
4825 case '?':
4826 is_supported = PACKET_SUPPORT_UNKNOWN;
4827 break;
4828
4829 default:
3e43a32a
MS
4830 warning (_("unrecognized item \"%s\" "
4831 "in \"qSupported\" response"), p);
be2a5f71
DJ
4832 continue;
4833 }
4834 end[-1] = '\0';
4835 }
4836
4837 for (i = 0; i < ARRAY_SIZE (remote_protocol_features); i++)
4838 if (strcmp (remote_protocol_features[i].name, p) == 0)
4839 {
4840 const struct protocol_feature *feature;
4841
4842 seen[i] = 1;
4843 feature = &remote_protocol_features[i];
4844 feature->func (feature, is_supported, value);
4845 break;
4846 }
4847 }
4848
4849 /* If we increased the packet size, make sure to increase the global
4850 buffer size also. We delay this until after parsing the entire
4851 qSupported packet, because this is the same buffer we were
4852 parsing. */
4853 if (rs->buf_size < rs->explicit_packet_size)
4854 {
4855 rs->buf_size = rs->explicit_packet_size;
224c3ddb 4856 rs->buf = (char *) xrealloc (rs->buf, rs->buf_size);
be2a5f71
DJ
4857 }
4858
4859 /* Handle the defaults for unmentioned features. */
4860 for (i = 0; i < ARRAY_SIZE (remote_protocol_features); i++)
4861 if (!seen[i])
4862 {
4863 const struct protocol_feature *feature;
4864
4865 feature = &remote_protocol_features[i];
4866 feature->func (feature, feature->default_support, NULL);
4867 }
4868}
4869
048094ac
PA
4870/* Serial QUIT handler for the remote serial descriptor.
4871
4872 Defers handling a Ctrl-C until we're done with the current
4873 command/response packet sequence, unless:
4874
4875 - We're setting up the connection. Don't send a remote interrupt
4876 request, as we're not fully synced yet. Quit immediately
4877 instead.
4878
4879 - The target has been resumed in the foreground
4880 (target_terminal_is_ours is false) with a synchronous resume
4881 packet, and we're blocked waiting for the stop reply, thus a
4882 Ctrl-C should be immediately sent to the target.
4883
4884 - We get a second Ctrl-C while still within the same serial read or
4885 write. In that case the serial is seemingly wedged --- offer to
4886 quit/disconnect.
4887
4888 - We see a second Ctrl-C without target response, after having
4889 previously interrupted the target. In that case the target/stub
4890 is probably wedged --- offer to quit/disconnect.
4891*/
4892
4893static void
4894remote_serial_quit_handler (void)
4895{
4896 struct remote_state *rs = get_remote_state ();
4897
4898 if (check_quit_flag ())
4899 {
4900 /* If we're starting up, we're not fully synced yet. Quit
4901 immediately. */
4902 if (rs->starting_up)
4903 quit ();
4904 else if (rs->got_ctrlc_during_io)
4905 {
4906 if (query (_("The target is not responding to GDB commands.\n"
4907 "Stop debugging it? ")))
4908 remote_unpush_and_throw ();
4909 }
4910 /* If ^C has already been sent once, offer to disconnect. */
4911 else if (!target_terminal_is_ours () && rs->ctrlc_pending_p)
4912 interrupt_query ();
4913 /* All-stop protocol, and blocked waiting for stop reply. Send
4914 an interrupt request. */
4915 else if (!target_terminal_is_ours () && rs->waiting_for_stop_reply)
4916 target_interrupt (inferior_ptid);
4917 else
4918 rs->got_ctrlc_during_io = 1;
4919 }
4920}
4921
78a095c3
JK
4922/* Remove any of the remote.c targets from target stack. Upper targets depend
4923 on it so remove them first. */
4924
4925static void
4926remote_unpush_target (void)
4927{
915ef8b1 4928 pop_all_targets_at_and_above (process_stratum);
78a095c3 4929}
be2a5f71 4930
048094ac
PA
4931static void
4932remote_unpush_and_throw (void)
4933{
4934 remote_unpush_target ();
4935 throw_error (TARGET_CLOSE_ERROR, _("Disconnected from target."));
4936}
4937
c906108c 4938static void
014f9477 4939remote_open_1 (const char *name, int from_tty,
3e43a32a 4940 struct target_ops *target, int extended_p)
c906108c 4941{
d01949b6 4942 struct remote_state *rs = get_remote_state ();
a6f3e723 4943
c906108c 4944 if (name == 0)
8a3fe4f8 4945 error (_("To open a remote debug connection, you need to specify what\n"
22e04375 4946 "serial device is attached to the remote system\n"
8a3fe4f8 4947 "(e.g. /dev/ttyS0, /dev/ttya, COM1, etc.)."));
c906108c 4948
23860348 4949 /* See FIXME above. */
c6ebd6cf 4950 if (!target_async_permitted)
92d1e331 4951 wait_forever_enabled_p = 1;
6426a772 4952
2d717e4f 4953 /* If we're connected to a running target, target_preopen will kill it.
78a095c3
JK
4954 Ask this question first, before target_preopen has a chance to kill
4955 anything. */
5d93a237 4956 if (rs->remote_desc != NULL && !have_inferiors ())
2d717e4f 4957 {
78a095c3
JK
4958 if (from_tty
4959 && !query (_("Already connected to a remote target. Disconnect? ")))
2d717e4f
DJ
4960 error (_("Still connected."));
4961 }
4962
78a095c3 4963 /* Here the possibly existing remote target gets unpushed. */
c906108c
SS
4964 target_preopen (from_tty);
4965
89be2091 4966 /* Make sure we send the passed signals list the next time we resume. */
747dc59d
TT
4967 xfree (rs->last_pass_packet);
4968 rs->last_pass_packet = NULL;
89be2091 4969
9b224c5e
PA
4970 /* Make sure we send the program signals list the next time we
4971 resume. */
5e4a05c4
TT
4972 xfree (rs->last_program_signals_packet);
4973 rs->last_program_signals_packet = NULL;
9b224c5e 4974
ad9a8f3f 4975 remote_fileio_reset ();
1dd41f16
NS
4976 reopen_exec_file ();
4977 reread_symbols ();
4978
5d93a237
TT
4979 rs->remote_desc = remote_serial_open (name);
4980 if (!rs->remote_desc)
c906108c
SS
4981 perror_with_name (name);
4982
4983 if (baud_rate != -1)
4984 {
5d93a237 4985 if (serial_setbaudrate (rs->remote_desc, baud_rate))
c906108c 4986 {
9b74d5d3
KB
4987 /* The requested speed could not be set. Error out to
4988 top level after closing remote_desc. Take care to
4989 set remote_desc to NULL to avoid closing remote_desc
4990 more than once. */
5d93a237
TT
4991 serial_close (rs->remote_desc);
4992 rs->remote_desc = NULL;
c906108c
SS
4993 perror_with_name (name);
4994 }
4995 }
4996
236af5e3 4997 serial_setparity (rs->remote_desc, serial_parity);
5d93a237 4998 serial_raw (rs->remote_desc);
c906108c
SS
4999
5000 /* If there is something sitting in the buffer we might take it as a
5001 response to a command, which would be bad. */
5d93a237 5002 serial_flush_input (rs->remote_desc);
c906108c
SS
5003
5004 if (from_tty)
5005 {
5006 puts_filtered ("Remote debugging using ");
5007 puts_filtered (name);
5008 puts_filtered ("\n");
5009 }
23860348 5010 push_target (target); /* Switch to using remote target now. */
c906108c 5011
74531fed
PA
5012 /* Register extra event sources in the event loop. */
5013 remote_async_inferior_event_token
5014 = create_async_event_handler (remote_async_inferior_event_handler,
5015 NULL);
5965e028 5016 rs->notif_state = remote_notif_state_allocate ();
74531fed 5017
be2a5f71
DJ
5018 /* Reset the target state; these things will be queried either by
5019 remote_query_supported or as they are needed. */
ca4f7f8b 5020 reset_all_packet_configs_support ();
74531fed 5021 rs->cached_wait_status = 0;
be2a5f71 5022 rs->explicit_packet_size = 0;
a6f3e723 5023 rs->noack_mode = 0;
82f73884 5024 rs->extended = extended_p;
e24a49d8 5025 rs->waiting_for_stop_reply = 0;
3a29589a 5026 rs->ctrlc_pending_p = 0;
048094ac 5027 rs->got_ctrlc_during_io = 0;
802188a7 5028
47f8a51d
TT
5029 rs->general_thread = not_sent_ptid;
5030 rs->continue_thread = not_sent_ptid;
262e1174 5031 rs->remote_traceframe_number = -1;
c906108c 5032
3a00c802
PA
5033 rs->last_resume_exec_dir = EXEC_FORWARD;
5034
9d1f7ab2 5035 /* Probe for ability to use "ThreadInfo" query, as required. */
b80fafe3
TT
5036 rs->use_threadinfo_query = 1;
5037 rs->use_threadextra_query = 1;
9d1f7ab2 5038
80152258
PA
5039 readahead_cache_invalidate ();
5040
048094ac
PA
5041 /* Start out by owning the terminal. */
5042 remote_async_terminal_ours_p = 1;
5043
c6ebd6cf 5044 if (target_async_permitted)
92d1e331 5045 {
92d1e331
DJ
5046 /* FIXME: cagney/1999-09-23: During the initial connection it is
5047 assumed that the target is already ready and able to respond to
0df8b418 5048 requests. Unfortunately remote_start_remote() eventually calls
92d1e331 5049 wait_for_inferior() with no timeout. wait_forever_enabled_p gets
0df8b418 5050 around this. Eventually a mechanism that allows
92d1e331 5051 wait_for_inferior() to expect/get timeouts will be
23860348 5052 implemented. */
92d1e331
DJ
5053 wait_forever_enabled_p = 0;
5054 }
5055
23860348 5056 /* First delete any symbols previously loaded from shared libraries. */
f78f6cf1 5057 no_shared_libraries (NULL, 0);
f78f6cf1 5058
74531fed
PA
5059 /* Start afresh. */
5060 init_thread_list ();
5061
36918e70 5062 /* Start the remote connection. If error() or QUIT, discard this
165b8e33
AC
5063 target (we'd otherwise be in an inconsistent state) and then
5064 propogate the error on up the exception chain. This ensures that
5065 the caller doesn't stumble along blindly assuming that the
5066 function succeeded. The CLI doesn't have this problem but other
5067 UI's, such as MI do.
36918e70
AC
5068
5069 FIXME: cagney/2002-05-19: Instead of re-throwing the exception,
5070 this function should return an error indication letting the
ce2826aa 5071 caller restore the previous state. Unfortunately the command
36918e70
AC
5072 ``target remote'' is directly wired to this function making that
5073 impossible. On a positive note, the CLI side of this problem has
5074 been fixed - the function set_cmd_context() makes it possible for
5075 all the ``target ....'' commands to share a common callback
5076 function. See cli-dump.c. */
109c3e39 5077 {
2d717e4f 5078
492d29ea 5079 TRY
04bd08de
TT
5080 {
5081 remote_start_remote (from_tty, target, extended_p);
5082 }
492d29ea 5083 CATCH (ex, RETURN_MASK_ALL)
109c3e39 5084 {
c8d104ad
PA
5085 /* Pop the partially set up target - unless something else did
5086 already before throwing the exception. */
5d93a237 5087 if (rs->remote_desc != NULL)
78a095c3 5088 remote_unpush_target ();
c6ebd6cf 5089 if (target_async_permitted)
109c3e39
AC
5090 wait_forever_enabled_p = 1;
5091 throw_exception (ex);
5092 }
492d29ea 5093 END_CATCH
109c3e39 5094 }
c906108c 5095
f4abbc16
MM
5096 remote_btrace_reset ();
5097
c6ebd6cf 5098 if (target_async_permitted)
92d1e331 5099 wait_forever_enabled_p = 1;
43ff13b4
JM
5100}
5101
de0d863e
DB
5102/* Detach the specified process. */
5103
5104static void
5105remote_detach_pid (int pid)
5106{
5107 struct remote_state *rs = get_remote_state ();
5108
5109 if (remote_multi_process_p (rs))
5110 xsnprintf (rs->buf, get_remote_packet_size (), "D;%x", pid);
5111 else
5112 strcpy (rs->buf, "D");
5113
5114 putpkt (rs->buf);
5115 getpkt (&rs->buf, &rs->buf_size, 0);
5116
5117 if (rs->buf[0] == 'O' && rs->buf[1] == 'K')
5118 ;
5119 else if (rs->buf[0] == '\0')
5120 error (_("Remote doesn't know how to detach"));
5121 else
5122 error (_("Can't detach process."));
5123}
5124
5125/* This detaches a program to which we previously attached, using
5126 inferior_ptid to identify the process. After this is done, GDB
5127 can be used to debug some other program. We better not have left
5128 any breakpoints in the target program or it'll die when it hits
5129 one. */
c906108c
SS
5130
5131static void
de0d863e 5132remote_detach_1 (const char *args, int from_tty)
c906108c 5133{
82f73884 5134 int pid = ptid_get_pid (inferior_ptid);
d01949b6 5135 struct remote_state *rs = get_remote_state ();
de0d863e
DB
5136 struct thread_info *tp = find_thread_ptid (inferior_ptid);
5137 int is_fork_parent;
c906108c
SS
5138
5139 if (args)
8a3fe4f8 5140 error (_("Argument given to \"detach\" when remotely debugging."));
c906108c 5141
2d717e4f
DJ
5142 if (!target_has_execution)
5143 error (_("No process to detach from."));
5144
0f48b757 5145 target_announce_detach (from_tty);
7cee1e54 5146
c906108c 5147 /* Tell the remote target to detach. */
de0d863e 5148 remote_detach_pid (pid);
82f73884 5149
8020350c
DB
5150 /* Exit only if this is the only active inferior. */
5151 if (from_tty && !rs->extended && number_of_live_inferiors () == 1)
7cee1e54 5152 puts_filtered (_("Ending remote debugging.\n"));
82f73884 5153
de0d863e
DB
5154 /* Check to see if we are detaching a fork parent. Note that if we
5155 are detaching a fork child, tp == NULL. */
5156 is_fork_parent = (tp != NULL
5157 && tp->pending_follow.kind == TARGET_WAITKIND_FORKED);
5158
5159 /* If doing detach-on-fork, we don't mourn, because that will delete
5160 breakpoints that should be available for the followed inferior. */
5161 if (!is_fork_parent)
5162 target_mourn_inferior ();
5163 else
5164 {
5165 inferior_ptid = null_ptid;
5166 detach_inferior (pid);
5167 }
2d717e4f
DJ
5168}
5169
5170static void
52554a0e 5171remote_detach (struct target_ops *ops, const char *args, int from_tty)
2d717e4f 5172{
de0d863e 5173 remote_detach_1 (args, from_tty);
2d717e4f
DJ
5174}
5175
5176static void
52554a0e 5177extended_remote_detach (struct target_ops *ops, const char *args, int from_tty)
2d717e4f 5178{
de0d863e
DB
5179 remote_detach_1 (args, from_tty);
5180}
5181
5182/* Target follow-fork function for remote targets. On entry, and
5183 at return, the current inferior is the fork parent.
5184
5185 Note that although this is currently only used for extended-remote,
5186 it is named remote_follow_fork in anticipation of using it for the
5187 remote target as well. */
5188
5189static int
5190remote_follow_fork (struct target_ops *ops, int follow_child,
5191 int detach_fork)
5192{
5193 struct remote_state *rs = get_remote_state ();
c269dbdb 5194 enum target_waitkind kind = inferior_thread ()->pending_follow.kind;
de0d863e 5195
c269dbdb
DB
5196 if ((kind == TARGET_WAITKIND_FORKED && remote_fork_event_p (rs))
5197 || (kind == TARGET_WAITKIND_VFORKED && remote_vfork_event_p (rs)))
de0d863e
DB
5198 {
5199 /* When following the parent and detaching the child, we detach
5200 the child here. For the case of following the child and
5201 detaching the parent, the detach is done in the target-
5202 independent follow fork code in infrun.c. We can't use
5203 target_detach when detaching an unfollowed child because
5204 the client side doesn't know anything about the child. */
5205 if (detach_fork && !follow_child)
5206 {
5207 /* Detach the fork child. */
5208 ptid_t child_ptid;
5209 pid_t child_pid;
5210
5211 child_ptid = inferior_thread ()->pending_follow.value.related_pid;
5212 child_pid = ptid_get_pid (child_ptid);
5213
5214 remote_detach_pid (child_pid);
5215 detach_inferior (child_pid);
5216 }
5217 }
5218 return 0;
c906108c
SS
5219}
5220
94585166
DB
5221/* Target follow-exec function for remote targets. Save EXECD_PATHNAME
5222 in the program space of the new inferior. On entry and at return the
5223 current inferior is the exec'ing inferior. INF is the new exec'd
5224 inferior, which may be the same as the exec'ing inferior unless
5225 follow-exec-mode is "new". */
5226
5227static void
5228remote_follow_exec (struct target_ops *ops,
5229 struct inferior *inf, char *execd_pathname)
5230{
5231 /* We know that this is a target file name, so if it has the "target:"
5232 prefix we strip it off before saving it in the program space. */
5233 if (is_target_filename (execd_pathname))
5234 execd_pathname += strlen (TARGET_SYSROOT_PREFIX);
5235
5236 set_pspace_remote_exec_file (inf->pspace, execd_pathname);
5237}
5238
6ad8ae5c
DJ
5239/* Same as remote_detach, but don't send the "D" packet; just disconnect. */
5240
43ff13b4 5241static void
fee354ee 5242remote_disconnect (struct target_ops *target, const char *args, int from_tty)
43ff13b4 5243{
43ff13b4 5244 if (args)
2d717e4f 5245 error (_("Argument given to \"disconnect\" when remotely debugging."));
43ff13b4 5246
8020350c
DB
5247 /* Make sure we unpush even the extended remote targets. Calling
5248 target_mourn_inferior won't unpush, and remote_mourn won't
5249 unpush if there is more than one inferior left. */
5250 unpush_target (target);
5251 generic_mourn_inferior ();
2d717e4f 5252
43ff13b4
JM
5253 if (from_tty)
5254 puts_filtered ("Ending remote debugging.\n");
5255}
5256
2d717e4f
DJ
5257/* Attach to the process specified by ARGS. If FROM_TTY is non-zero,
5258 be chatty about it. */
5259
5260static void
20f796c9
GB
5261extended_remote_attach (struct target_ops *target, const char *args,
5262 int from_tty)
2d717e4f
DJ
5263{
5264 struct remote_state *rs = get_remote_state ();
be86555c 5265 int pid;
96ef3384 5266 char *wait_status = NULL;
2d717e4f 5267
74164c56 5268 pid = parse_pid_to_attach (args);
2d717e4f 5269
74164c56
JK
5270 /* Remote PID can be freely equal to getpid, do not check it here the same
5271 way as in other targets. */
2d717e4f 5272
4082afcc 5273 if (packet_support (PACKET_vAttach) == PACKET_DISABLE)
2d717e4f
DJ
5274 error (_("This target does not support attaching to a process"));
5275
7cee1e54
PA
5276 if (from_tty)
5277 {
5278 char *exec_file = get_exec_file (0);
5279
5280 if (exec_file)
5281 printf_unfiltered (_("Attaching to program: %s, %s\n"), exec_file,
5282 target_pid_to_str (pid_to_ptid (pid)));
5283 else
5284 printf_unfiltered (_("Attaching to %s\n"),
5285 target_pid_to_str (pid_to_ptid (pid)));
5286
5287 gdb_flush (gdb_stdout);
5288 }
5289
bba74b36 5290 xsnprintf (rs->buf, get_remote_packet_size (), "vAttach;%x", pid);
2d717e4f
DJ
5291 putpkt (rs->buf);
5292 getpkt (&rs->buf, &rs->buf_size, 0);
5293
4082afcc
PA
5294 switch (packet_ok (rs->buf,
5295 &remote_protocol_packets[PACKET_vAttach]))
2d717e4f 5296 {
4082afcc 5297 case PACKET_OK:
6efcd9a8 5298 if (!target_is_non_stop_p ())
74531fed
PA
5299 {
5300 /* Save the reply for later. */
224c3ddb 5301 wait_status = (char *) alloca (strlen (rs->buf) + 1);
74531fed
PA
5302 strcpy (wait_status, rs->buf);
5303 }
5304 else if (strcmp (rs->buf, "OK") != 0)
5305 error (_("Attaching to %s failed with: %s"),
5306 target_pid_to_str (pid_to_ptid (pid)),
5307 rs->buf);
4082afcc
PA
5308 break;
5309 case PACKET_UNKNOWN:
5310 error (_("This target does not support attaching to a process"));
5311 default:
5312 error (_("Attaching to %s failed"),
5313 target_pid_to_str (pid_to_ptid (pid)));
2d717e4f 5314 }
2d717e4f 5315
1b6e6f5c 5316 set_current_inferior (remote_add_inferior (0, pid, 1, 0));
bad34192 5317
2d717e4f 5318 inferior_ptid = pid_to_ptid (pid);
79d7f229 5319
6efcd9a8 5320 if (target_is_non_stop_p ())
bad34192
PA
5321 {
5322 struct thread_info *thread;
79d7f229 5323
bad34192 5324 /* Get list of threads. */
e8032dde 5325 remote_update_thread_list (target);
82f73884 5326
bad34192
PA
5327 thread = first_thread_of_process (pid);
5328 if (thread)
5329 inferior_ptid = thread->ptid;
5330 else
5331 inferior_ptid = pid_to_ptid (pid);
5332
5333 /* Invalidate our notion of the remote current thread. */
47f8a51d 5334 record_currthread (rs, minus_one_ptid);
bad34192 5335 }
74531fed 5336 else
bad34192
PA
5337 {
5338 /* Now, if we have thread information, update inferior_ptid. */
5339 inferior_ptid = remote_current_thread (inferior_ptid);
5340
5341 /* Add the main thread to the thread list. */
5342 add_thread_silent (inferior_ptid);
5343 }
c0a2216e 5344
96ef3384
UW
5345 /* Next, if the target can specify a description, read it. We do
5346 this before anything involving memory or registers. */
5347 target_find_description ();
5348
6efcd9a8 5349 if (!target_is_non_stop_p ())
74531fed
PA
5350 {
5351 /* Use the previously fetched status. */
5352 gdb_assert (wait_status != NULL);
5353
5354 if (target_can_async_p ())
5355 {
722247f1
YQ
5356 struct notif_event *reply
5357 = remote_notif_parse (&notif_client_stop, wait_status);
74531fed 5358
722247f1 5359 push_stop_reply ((struct stop_reply *) reply);
74531fed 5360
6a3753b3 5361 target_async (1);
74531fed
PA
5362 }
5363 else
5364 {
5365 gdb_assert (wait_status != NULL);
5366 strcpy (rs->buf, wait_status);
5367 rs->cached_wait_status = 1;
5368 }
5369 }
5370 else
5371 gdb_assert (wait_status == NULL);
2d717e4f
DJ
5372}
5373
b9c1d481
AS
5374/* Implementation of the to_post_attach method. */
5375
5376static void
5377extended_remote_post_attach (struct target_ops *ops, int pid)
5378{
6efcd9a8
PA
5379 /* Get text, data & bss offsets. */
5380 get_offsets ();
5381
b9c1d481
AS
5382 /* In certain cases GDB might not have had the chance to start
5383 symbol lookup up until now. This could happen if the debugged
5384 binary is not using shared libraries, the vsyscall page is not
5385 present (on Linux) and the binary itself hadn't changed since the
5386 debugging process was started. */
5387 if (symfile_objfile != NULL)
5388 remote_check_symbols();
5389}
5390
c906108c 5391\f
506fb367
DJ
5392/* Check for the availability of vCont. This function should also check
5393 the response. */
c906108c
SS
5394
5395static void
6d820c5c 5396remote_vcont_probe (struct remote_state *rs)
c906108c 5397{
2e9f7625 5398 char *buf;
6d820c5c 5399
2e9f7625
DJ
5400 strcpy (rs->buf, "vCont?");
5401 putpkt (rs->buf);
6d820c5c 5402 getpkt (&rs->buf, &rs->buf_size, 0);
2e9f7625 5403 buf = rs->buf;
c906108c 5404
506fb367 5405 /* Make sure that the features we assume are supported. */
61012eef 5406 if (startswith (buf, "vCont"))
506fb367
DJ
5407 {
5408 char *p = &buf[5];
750ce8d1 5409 int support_c, support_C;
506fb367 5410
750ce8d1
YQ
5411 rs->supports_vCont.s = 0;
5412 rs->supports_vCont.S = 0;
506fb367
DJ
5413 support_c = 0;
5414 support_C = 0;
d458bd84 5415 rs->supports_vCont.t = 0;
c1e36e3e 5416 rs->supports_vCont.r = 0;
506fb367
DJ
5417 while (p && *p == ';')
5418 {
5419 p++;
5420 if (*p == 's' && (*(p + 1) == ';' || *(p + 1) == 0))
750ce8d1 5421 rs->supports_vCont.s = 1;
506fb367 5422 else if (*p == 'S' && (*(p + 1) == ';' || *(p + 1) == 0))
750ce8d1 5423 rs->supports_vCont.S = 1;
506fb367
DJ
5424 else if (*p == 'c' && (*(p + 1) == ';' || *(p + 1) == 0))
5425 support_c = 1;
5426 else if (*p == 'C' && (*(p + 1) == ';' || *(p + 1) == 0))
5427 support_C = 1;
74531fed 5428 else if (*p == 't' && (*(p + 1) == ';' || *(p + 1) == 0))
d458bd84 5429 rs->supports_vCont.t = 1;
c1e36e3e
PA
5430 else if (*p == 'r' && (*(p + 1) == ';' || *(p + 1) == 0))
5431 rs->supports_vCont.r = 1;
506fb367
DJ
5432
5433 p = strchr (p, ';');
5434 }
c906108c 5435
750ce8d1
YQ
5436 /* If c, and C are not all supported, we can't use vCont. Clearing
5437 BUF will make packet_ok disable the packet. */
5438 if (!support_c || !support_C)
506fb367
DJ
5439 buf[0] = 0;
5440 }
c906108c 5441
444abaca 5442 packet_ok (buf, &remote_protocol_packets[PACKET_vCont]);
506fb367 5443}
c906108c 5444
0d8f58ca
PA
5445/* Helper function for building "vCont" resumptions. Write a
5446 resumption to P. ENDP points to one-passed-the-end of the buffer
5447 we're allowed to write to. Returns BUF+CHARACTERS_WRITTEN. The
5448 thread to be resumed is PTID; STEP and SIGGNAL indicate whether the
5449 resumed thread should be single-stepped and/or signalled. If PTID
5450 equals minus_one_ptid, then all threads are resumed; if PTID
5451 represents a process, then all threads of the process are resumed;
5452 the thread to be stepped and/or signalled is given in the global
5453 INFERIOR_PTID. */
5454
5455static char *
5456append_resumption (char *p, char *endp,
2ea28649 5457 ptid_t ptid, int step, enum gdb_signal siggnal)
0d8f58ca
PA
5458{
5459 struct remote_state *rs = get_remote_state ();
5460
a493e3e2 5461 if (step && siggnal != GDB_SIGNAL_0)
0d8f58ca 5462 p += xsnprintf (p, endp - p, ";S%02x", siggnal);
c1e36e3e
PA
5463 else if (step
5464 /* GDB is willing to range step. */
5465 && use_range_stepping
5466 /* Target supports range stepping. */
5467 && rs->supports_vCont.r
5468 /* We don't currently support range stepping multiple
5469 threads with a wildcard (though the protocol allows it,
5470 so stubs shouldn't make an active effort to forbid
5471 it). */
5472 && !(remote_multi_process_p (rs) && ptid_is_pid (ptid)))
5473 {
5474 struct thread_info *tp;
5475
5476 if (ptid_equal (ptid, minus_one_ptid))
5477 {
5478 /* If we don't know about the target thread's tid, then
5479 we're resuming magic_null_ptid (see caller). */
5480 tp = find_thread_ptid (magic_null_ptid);
5481 }
5482 else
5483 tp = find_thread_ptid (ptid);
5484 gdb_assert (tp != NULL);
5485
5486 if (tp->control.may_range_step)
5487 {
5488 int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
5489
5490 p += xsnprintf (p, endp - p, ";r%s,%s",
5491 phex_nz (tp->control.step_range_start,
5492 addr_size),
5493 phex_nz (tp->control.step_range_end,
5494 addr_size));
5495 }
5496 else
5497 p += xsnprintf (p, endp - p, ";s");
5498 }
0d8f58ca
PA
5499 else if (step)
5500 p += xsnprintf (p, endp - p, ";s");
a493e3e2 5501 else if (siggnal != GDB_SIGNAL_0)
0d8f58ca
PA
5502 p += xsnprintf (p, endp - p, ";C%02x", siggnal);
5503 else
5504 p += xsnprintf (p, endp - p, ";c");
5505
5506 if (remote_multi_process_p (rs) && ptid_is_pid (ptid))
5507 {
5508 ptid_t nptid;
5509
5510 /* All (-1) threads of process. */
ba348170 5511 nptid = ptid_build (ptid_get_pid (ptid), -1, 0);
0d8f58ca
PA
5512
5513 p += xsnprintf (p, endp - p, ":");
5514 p = write_ptid (p, endp, nptid);
5515 }
5516 else if (!ptid_equal (ptid, minus_one_ptid))
5517 {
5518 p += xsnprintf (p, endp - p, ":");
5519 p = write_ptid (p, endp, ptid);
5520 }
5521
5522 return p;
5523}
5524
799a2abe
PA
5525/* Clear the thread's private info on resume. */
5526
5527static void
5528resume_clear_thread_private_info (struct thread_info *thread)
5529{
5530 if (thread->priv != NULL)
5531 {
5532 thread->priv->stop_reason = TARGET_STOPPED_BY_NO_REASON;
5533 thread->priv->watch_data_address = 0;
5534 }
5535}
5536
e5ef252a
PA
5537/* Append a vCont continue-with-signal action for threads that have a
5538 non-zero stop signal. */
5539
5540static char *
5541append_pending_thread_resumptions (char *p, char *endp, ptid_t ptid)
5542{
5543 struct thread_info *thread;
5544
034f788c 5545 ALL_NON_EXITED_THREADS (thread)
e5ef252a
PA
5546 if (ptid_match (thread->ptid, ptid)
5547 && !ptid_equal (inferior_ptid, thread->ptid)
70509625 5548 && thread->suspend.stop_signal != GDB_SIGNAL_0)
e5ef252a
PA
5549 {
5550 p = append_resumption (p, endp, thread->ptid,
5551 0, thread->suspend.stop_signal);
5552 thread->suspend.stop_signal = GDB_SIGNAL_0;
799a2abe 5553 resume_clear_thread_private_info (thread);
e5ef252a
PA
5554 }
5555
5556 return p;
5557}
5558
506fb367
DJ
5559/* Resume the remote inferior by using a "vCont" packet. The thread
5560 to be resumed is PTID; STEP and SIGGNAL indicate whether the
79d7f229
PA
5561 resumed thread should be single-stepped and/or signalled. If PTID
5562 equals minus_one_ptid, then all threads are resumed; the thread to
5563 be stepped and/or signalled is given in the global INFERIOR_PTID.
5564 This function returns non-zero iff it resumes the inferior.
44eaed12 5565
506fb367
DJ
5566 This function issues a strict subset of all possible vCont commands at the
5567 moment. */
44eaed12 5568
506fb367 5569static int
2ea28649 5570remote_vcont_resume (ptid_t ptid, int step, enum gdb_signal siggnal)
506fb367
DJ
5571{
5572 struct remote_state *rs = get_remote_state ();
82f73884
PA
5573 char *p;
5574 char *endp;
44eaed12 5575
4082afcc 5576 if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
6d820c5c 5577 remote_vcont_probe (rs);
44eaed12 5578
4082afcc 5579 if (packet_support (PACKET_vCont) == PACKET_DISABLE)
6d820c5c 5580 return 0;
44eaed12 5581
82f73884
PA
5582 p = rs->buf;
5583 endp = rs->buf + get_remote_packet_size ();
5584
506fb367
DJ
5585 /* If we could generate a wider range of packets, we'd have to worry
5586 about overflowing BUF. Should there be a generic
5587 "multi-part-packet" packet? */
5588
0d8f58ca
PA
5589 p += xsnprintf (p, endp - p, "vCont");
5590
79d7f229 5591 if (ptid_equal (ptid, magic_null_ptid))
c906108c 5592 {
79d7f229
PA
5593 /* MAGIC_NULL_PTID means that we don't have any active threads,
5594 so we don't have any TID numbers the inferior will
5595 understand. Make sure to only send forms that do not specify
5596 a TID. */
a9cbf802 5597 append_resumption (p, endp, minus_one_ptid, step, siggnal);
506fb367 5598 }
0d8f58ca 5599 else if (ptid_equal (ptid, minus_one_ptid) || ptid_is_pid (ptid))
506fb367 5600 {
0d8f58ca
PA
5601 /* Resume all threads (of all processes, or of a single
5602 process), with preference for INFERIOR_PTID. This assumes
5603 inferior_ptid belongs to the set of all threads we are about
5604 to resume. */
a493e3e2 5605 if (step || siggnal != GDB_SIGNAL_0)
82f73884 5606 {
0d8f58ca
PA
5607 /* Step inferior_ptid, with or without signal. */
5608 p = append_resumption (p, endp, inferior_ptid, step, siggnal);
82f73884 5609 }
0d8f58ca 5610
e5ef252a
PA
5611 /* Also pass down any pending signaled resumption for other
5612 threads not the current. */
5613 p = append_pending_thread_resumptions (p, endp, ptid);
5614
0d8f58ca 5615 /* And continue others without a signal. */
a493e3e2 5616 append_resumption (p, endp, ptid, /*step=*/ 0, GDB_SIGNAL_0);
c906108c
SS
5617 }
5618 else
506fb367
DJ
5619 {
5620 /* Scheduler locking; resume only PTID. */
a9cbf802 5621 append_resumption (p, endp, ptid, step, siggnal);
506fb367 5622 }
c906108c 5623
82f73884
PA
5624 gdb_assert (strlen (rs->buf) < get_remote_packet_size ());
5625 putpkt (rs->buf);
506fb367 5626
6efcd9a8 5627 if (target_is_non_stop_p ())
74531fed
PA
5628 {
5629 /* In non-stop, the stub replies to vCont with "OK". The stop
5630 reply will be reported asynchronously by means of a `%Stop'
5631 notification. */
5632 getpkt (&rs->buf, &rs->buf_size, 0);
5633 if (strcmp (rs->buf, "OK") != 0)
5634 error (_("Unexpected vCont reply in non-stop mode: %s"), rs->buf);
5635 }
5636
506fb367 5637 return 1;
c906108c 5638}
43ff13b4 5639
506fb367
DJ
5640/* Tell the remote machine to resume. */
5641
43ff13b4 5642static void
28439f5e 5643remote_resume (struct target_ops *ops,
2ea28649 5644 ptid_t ptid, int step, enum gdb_signal siggnal)
43ff13b4 5645{
d01949b6 5646 struct remote_state *rs = get_remote_state ();
2e9f7625 5647 char *buf;
799a2abe 5648 struct thread_info *thread;
43ff13b4 5649
722247f1
YQ
5650 /* In all-stop, we can't mark REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN
5651 (explained in remote-notif.c:handle_notification) so
5652 remote_notif_process is not called. We need find a place where
5653 it is safe to start a 'vNotif' sequence. It is good to do it
5654 before resuming inferior, because inferior was stopped and no RSP
5655 traffic at that moment. */
6efcd9a8 5656 if (!target_is_non_stop_p ())
5965e028 5657 remote_notif_process (rs->notif_state, &notif_client_stop);
722247f1 5658
b73be471 5659 rs->last_sent_signal = siggnal;
280ceea3 5660 rs->last_sent_step = step;
43ff13b4 5661
3a00c802
PA
5662 rs->last_resume_exec_dir = execution_direction;
5663
506fb367 5664 /* The vCont packet doesn't need to specify threads via Hc. */
40ab02ce
MS
5665 /* No reverse support (yet) for vCont. */
5666 if (execution_direction != EXEC_REVERSE)
5667 if (remote_vcont_resume (ptid, step, siggnal))
5668 goto done;
506fb367 5669
79d7f229
PA
5670 /* All other supported resume packets do use Hc, so set the continue
5671 thread. */
5672 if (ptid_equal (ptid, minus_one_ptid))
5673 set_continue_thread (any_thread_ptid);
506fb367 5674 else
79d7f229 5675 set_continue_thread (ptid);
506fb367 5676
799a2abe
PA
5677 ALL_NON_EXITED_THREADS (thread)
5678 resume_clear_thread_private_info (thread);
5679
2e9f7625 5680 buf = rs->buf;
b2175913
MS
5681 if (execution_direction == EXEC_REVERSE)
5682 {
5683 /* We don't pass signals to the target in reverse exec mode. */
a493e3e2 5684 if (info_verbose && siggnal != GDB_SIGNAL_0)
7ea6d463 5685 warning (_(" - Can't pass signal %d to target in reverse: ignored."),
b2175913 5686 siggnal);
40ab02ce 5687
4082afcc 5688 if (step && packet_support (PACKET_bs) == PACKET_DISABLE)
40ab02ce 5689 error (_("Remote reverse-step not supported."));
4082afcc 5690 if (!step && packet_support (PACKET_bc) == PACKET_DISABLE)
08c93ed9 5691 error (_("Remote reverse-continue not supported."));
40ab02ce 5692
b2175913
MS
5693 strcpy (buf, step ? "bs" : "bc");
5694 }
a493e3e2 5695 else if (siggnal != GDB_SIGNAL_0)
43ff13b4
JM
5696 {
5697 buf[0] = step ? 'S' : 'C';
c5aa993b 5698 buf[1] = tohex (((int) siggnal >> 4) & 0xf);
506fb367 5699 buf[2] = tohex (((int) siggnal) & 0xf);
43ff13b4
JM
5700 buf[3] = '\0';
5701 }
5702 else
c5aa993b 5703 strcpy (buf, step ? "s" : "c");
506fb367 5704
44eaed12 5705 putpkt (buf);
43ff13b4 5706
75c99385 5707 done:
2acceee2 5708 /* We are about to start executing the inferior, let's register it
0df8b418
MS
5709 with the event loop. NOTE: this is the one place where all the
5710 execution commands end up. We could alternatively do this in each
23860348 5711 of the execution commands in infcmd.c. */
2acceee2
JM
5712 /* FIXME: ezannoni 1999-09-28: We may need to move this out of here
5713 into infcmd.c in order to allow inferior function calls to work
23860348 5714 NOT asynchronously. */
362646f5 5715 if (target_can_async_p ())
6a3753b3 5716 target_async (1);
e24a49d8
PA
5717
5718 /* We've just told the target to resume. The remote server will
5719 wait for the inferior to stop, and then send a stop reply. In
5720 the mean time, we can't start another command/query ourselves
74531fed
PA
5721 because the stub wouldn't be ready to process it. This applies
5722 only to the base all-stop protocol, however. In non-stop (which
5723 only supports vCont), the stub replies with an "OK", and is
5724 immediate able to process further serial input. */
6efcd9a8 5725 if (!target_is_non_stop_p ())
74531fed 5726 rs->waiting_for_stop_reply = 1;
43ff13b4 5727}
c906108c 5728\f
43ff13b4 5729
74531fed
PA
5730/* Non-stop version of target_stop. Uses `vCont;t' to stop a remote
5731 thread, all threads of a remote process, or all threads of all
5732 processes. */
5733
5734static void
5735remote_stop_ns (ptid_t ptid)
5736{
5737 struct remote_state *rs = get_remote_state ();
5738 char *p = rs->buf;
5739 char *endp = rs->buf + get_remote_packet_size ();
74531fed 5740
4082afcc 5741 if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
74531fed
PA
5742 remote_vcont_probe (rs);
5743
d458bd84 5744 if (!rs->supports_vCont.t)
74531fed
PA
5745 error (_("Remote server does not support stopping threads"));
5746
f91d3df5
PA
5747 if (ptid_equal (ptid, minus_one_ptid)
5748 || (!remote_multi_process_p (rs) && ptid_is_pid (ptid)))
74531fed
PA
5749 p += xsnprintf (p, endp - p, "vCont;t");
5750 else
5751 {
5752 ptid_t nptid;
5753
74531fed
PA
5754 p += xsnprintf (p, endp - p, "vCont;t:");
5755
5756 if (ptid_is_pid (ptid))
5757 /* All (-1) threads of process. */
ba348170 5758 nptid = ptid_build (ptid_get_pid (ptid), -1, 0);
74531fed
PA
5759 else
5760 {
5761 /* Small optimization: if we already have a stop reply for
5762 this thread, no use in telling the stub we want this
5763 stopped. */
5764 if (peek_stop_reply (ptid))
5765 return;
5766
5767 nptid = ptid;
5768 }
5769
a9cbf802 5770 write_ptid (p, endp, nptid);
74531fed
PA
5771 }
5772
5773 /* In non-stop, we get an immediate OK reply. The stop reply will
5774 come in asynchronously by notification. */
5775 putpkt (rs->buf);
5776 getpkt (&rs->buf, &rs->buf_size, 0);
5777 if (strcmp (rs->buf, "OK") != 0)
5778 error (_("Stopping %s failed: %s"), target_pid_to_str (ptid), rs->buf);
5779}
5780
bfedc46a
PA
5781/* All-stop version of target_interrupt. Sends a break or a ^C to
5782 interrupt the remote target. It is undefined which thread of which
5783 process reports the interrupt. */
74531fed
PA
5784
5785static void
de979965 5786remote_interrupt_as (void)
74531fed
PA
5787{
5788 struct remote_state *rs = get_remote_state ();
5789
3a29589a
DJ
5790 rs->ctrlc_pending_p = 1;
5791
74531fed
PA
5792 /* If the inferior is stopped already, but the core didn't know
5793 about it yet, just ignore the request. The cached wait status
5794 will be collected in remote_wait. */
5795 if (rs->cached_wait_status)
5796 return;
5797
9a7071a8
JB
5798 /* Send interrupt_sequence to remote target. */
5799 send_interrupt_sequence ();
74531fed
PA
5800}
5801
de979965
PA
5802/* Non-stop version of target_interrupt. Uses `vCtrlC' to interrupt
5803 the remote target. It is undefined which thread of which process
e42de8c7
PA
5804 reports the interrupt. Throws an error if the packet is not
5805 supported by the server. */
de979965 5806
e42de8c7 5807static void
de979965
PA
5808remote_interrupt_ns (void)
5809{
5810 struct remote_state *rs = get_remote_state ();
5811 char *p = rs->buf;
5812 char *endp = rs->buf + get_remote_packet_size ();
5813
5814 xsnprintf (p, endp - p, "vCtrlC");
5815
5816 /* In non-stop, we get an immediate OK reply. The stop reply will
5817 come in asynchronously by notification. */
5818 putpkt (rs->buf);
5819 getpkt (&rs->buf, &rs->buf_size, 0);
5820
5821 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_vCtrlC]))
5822 {
5823 case PACKET_OK:
5824 break;
5825 case PACKET_UNKNOWN:
e42de8c7 5826 error (_("No support for interrupting the remote target."));
de979965
PA
5827 case PACKET_ERROR:
5828 error (_("Interrupting target failed: %s"), rs->buf);
5829 }
de979965
PA
5830}
5831
bfedc46a 5832/* Implement the to_stop function for the remote targets. */
74531fed 5833
c906108c 5834static void
1eab8a48 5835remote_stop (struct target_ops *self, ptid_t ptid)
c906108c 5836{
7a292a7a 5837 if (remote_debug)
0f71a2f6 5838 fprintf_unfiltered (gdb_stdlog, "remote_stop called\n");
c906108c 5839
6efcd9a8 5840 if (target_is_non_stop_p ())
74531fed 5841 remote_stop_ns (ptid);
c906108c 5842 else
bfedc46a
PA
5843 {
5844 /* We don't currently have a way to transparently pause the
5845 remote target in all-stop mode. Interrupt it instead. */
de979965 5846 remote_interrupt_as ();
bfedc46a
PA
5847 }
5848}
5849
5850/* Implement the to_interrupt function for the remote targets. */
5851
5852static void
5853remote_interrupt (struct target_ops *self, ptid_t ptid)
5854{
e42de8c7
PA
5855 struct remote_state *rs = get_remote_state ();
5856
bfedc46a
PA
5857 if (remote_debug)
5858 fprintf_unfiltered (gdb_stdlog, "remote_interrupt called\n");
5859
e42de8c7
PA
5860 if (target_is_non_stop_p ())
5861 remote_interrupt_ns ();
bfedc46a 5862 else
e42de8c7 5863 remote_interrupt_as ();
c906108c
SS
5864}
5865
93692b58
PA
5866/* Implement the to_pass_ctrlc function for the remote targets. */
5867
5868static void
5869remote_pass_ctrlc (struct target_ops *self)
5870{
5871 struct remote_state *rs = get_remote_state ();
5872
5873 if (remote_debug)
5874 fprintf_unfiltered (gdb_stdlog, "remote_pass_ctrlc called\n");
5875
5876 /* If we're starting up, we're not fully synced yet. Quit
5877 immediately. */
5878 if (rs->starting_up)
5879 quit ();
5880 /* If ^C has already been sent once, offer to disconnect. */
5881 else if (rs->ctrlc_pending_p)
5882 interrupt_query ();
5883 else
5884 target_interrupt (inferior_ptid);
5885}
5886
c906108c
SS
5887/* Ask the user what to do when an interrupt is received. */
5888
5889static void
fba45db2 5890interrupt_query (void)
c906108c 5891{
abc56d60 5892 struct remote_state *rs = get_remote_state ();
c906108c 5893
abc56d60 5894 if (rs->waiting_for_stop_reply && rs->ctrlc_pending_p)
74531fed 5895 {
abc56d60
PA
5896 if (query (_("The target is not responding to interrupt requests.\n"
5897 "Stop debugging it? ")))
74531fed 5898 {
78a095c3 5899 remote_unpush_target ();
abc56d60 5900 throw_error (TARGET_CLOSE_ERROR, _("Disconnected from target."));
74531fed
PA
5901 }
5902 }
abc56d60
PA
5903 else
5904 {
5905 if (query (_("Interrupted while waiting for the program.\n"
5906 "Give up waiting? ")))
5907 quit ();
5908 }
c906108c
SS
5909}
5910
6426a772
JM
5911/* Enable/disable target terminal ownership. Most targets can use
5912 terminal groups to control terminal ownership. Remote targets are
5913 different in that explicit transfer of ownership to/from GDB/target
23860348 5914 is required. */
6426a772
JM
5915
5916static void
d2f640d4 5917remote_terminal_inferior (struct target_ops *self)
6426a772 5918{
d9d2d8b6
PA
5919 /* FIXME: cagney/1999-09-27: Make calls to target_terminal_*()
5920 idempotent. The event-loop GDB talking to an asynchronous target
5921 with a synchronous command calls this function from both
5922 event-top.c and infrun.c/infcmd.c. Once GDB stops trying to
5923 transfer the terminal to the target when it shouldn't this guard
5924 can go away. */
6426a772
JM
5925 if (!remote_async_terminal_ours_p)
5926 return;
6426a772 5927 remote_async_terminal_ours_p = 0;
6426a772
JM
5928 /* NOTE: At this point we could also register our selves as the
5929 recipient of all input. Any characters typed could then be
23860348 5930 passed on down to the target. */
6426a772
JM
5931}
5932
5933static void
e3594fd1 5934remote_terminal_ours (struct target_ops *self)
6426a772 5935{
75c99385 5936 /* See FIXME in remote_terminal_inferior. */
6426a772
JM
5937 if (remote_async_terminal_ours_p)
5938 return;
6426a772
JM
5939 remote_async_terminal_ours_p = 1;
5940}
5941
176a6961 5942static void
917317f4 5943remote_console_output (char *msg)
c906108c
SS
5944{
5945 char *p;
5946
c5aa993b 5947 for (p = msg; p[0] && p[1]; p += 2)
c906108c
SS
5948 {
5949 char tb[2];
5950 char c = fromhex (p[0]) * 16 + fromhex (p[1]);
a744cf53 5951
c906108c
SS
5952 tb[0] = c;
5953 tb[1] = 0;
43ff13b4 5954 fputs_unfiltered (tb, gdb_stdtarg);
c906108c 5955 }
00db5b94
PA
5956 gdb_flush (gdb_stdtarg);
5957}
74531fed
PA
5958
5959typedef struct cached_reg
5960{
5961 int num;
5962 gdb_byte data[MAX_REGISTER_SIZE];
5963} cached_reg_t;
5964
5965DEF_VEC_O(cached_reg_t);
5966
722247f1 5967typedef struct stop_reply
74531fed 5968{
722247f1 5969 struct notif_event base;
74531fed 5970
722247f1 5971 /* The identifier of the thread about this event */
74531fed
PA
5972 ptid_t ptid;
5973
340e3c99 5974 /* The remote state this event is associated with. When the remote
bcc75809
YQ
5975 connection, represented by a remote_state object, is closed,
5976 all the associated stop_reply events should be released. */
5977 struct remote_state *rs;
5978
74531fed
PA
5979 struct target_waitstatus ws;
5980
15148d6a
PA
5981 /* Expedited registers. This makes remote debugging a bit more
5982 efficient for those targets that provide critical registers as
5983 part of their normal status mechanism (as another roundtrip to
5984 fetch them is avoided). */
74531fed
PA
5985 VEC(cached_reg_t) *regcache;
5986
f7e6eed5
PA
5987 enum target_stop_reason stop_reason;
5988
74531fed
PA
5989 CORE_ADDR watch_data_address;
5990
dc146f7c 5991 int core;
722247f1 5992} *stop_reply_p;
a744cf53 5993
722247f1
YQ
5994DECLARE_QUEUE_P (stop_reply_p);
5995DEFINE_QUEUE_P (stop_reply_p);
5996/* The list of already fetched and acknowledged stop events. This
5997 queue is used for notification Stop, and other notifications
5998 don't need queue for their events, because the notification events
5999 of Stop can't be consumed immediately, so that events should be
6000 queued first, and be consumed by remote_wait_{ns,as} one per
6001 time. Other notifications can consume their events immediately,
6002 so queue is not needed for them. */
6003static QUEUE (stop_reply_p) *stop_reply_queue;
74531fed
PA
6004
6005static void
6006stop_reply_xfree (struct stop_reply *r)
6007{
f48ff2a7 6008 notif_event_xfree ((struct notif_event *) r);
c906108c
SS
6009}
6010
221e1a37
PA
6011/* Return the length of the stop reply queue. */
6012
6013static int
6014stop_reply_queue_length (void)
6015{
6016 return QUEUE_length (stop_reply_p, stop_reply_queue);
6017}
6018
722247f1
YQ
6019static void
6020remote_notif_stop_parse (struct notif_client *self, char *buf,
6021 struct notif_event *event)
6022{
6023 remote_parse_stop_reply (buf, (struct stop_reply *) event);
6024}
6025
6026static void
6027remote_notif_stop_ack (struct notif_client *self, char *buf,
6028 struct notif_event *event)
6029{
6030 struct stop_reply *stop_reply = (struct stop_reply *) event;
6031
6032 /* acknowledge */
f5c4fcd9 6033 putpkt (self->ack_command);
722247f1
YQ
6034
6035 if (stop_reply->ws.kind == TARGET_WAITKIND_IGNORE)
6036 /* We got an unknown stop reply. */
6037 error (_("Unknown stop reply"));
6038
6039 push_stop_reply (stop_reply);
6040}
6041
6042static int
6043remote_notif_stop_can_get_pending_events (struct notif_client *self)
6044{
6045 /* We can't get pending events in remote_notif_process for
6046 notification stop, and we have to do this in remote_wait_ns
6047 instead. If we fetch all queued events from stub, remote stub
6048 may exit and we have no chance to process them back in
6049 remote_wait_ns. */
6050 mark_async_event_handler (remote_async_inferior_event_token);
6051 return 0;
6052}
6053
6054static void
6055stop_reply_dtr (struct notif_event *event)
6056{
6057 struct stop_reply *r = (struct stop_reply *) event;
6058
6059 VEC_free (cached_reg_t, r->regcache);
6060}
6061
6062static struct notif_event *
6063remote_notif_stop_alloc_reply (void)
6064{
8d749320
SM
6065 /* We cast to a pointer to the "base class". */
6066 struct notif_event *r = (struct notif_event *) XNEW (struct stop_reply);
722247f1
YQ
6067
6068 r->dtr = stop_reply_dtr;
6069
6070 return r;
6071}
6072
6073/* A client of notification Stop. */
6074
6075struct notif_client notif_client_stop =
6076{
6077 "Stop",
6078 "vStopped",
6079 remote_notif_stop_parse,
6080 remote_notif_stop_ack,
6081 remote_notif_stop_can_get_pending_events,
6082 remote_notif_stop_alloc_reply,
f48ff2a7 6083 REMOTE_NOTIF_STOP,
722247f1
YQ
6084};
6085
6086/* A parameter to pass data in and out. */
6087
6088struct queue_iter_param
6089{
6090 void *input;
6091 struct stop_reply *output;
6092};
6093
cbb8991c
DB
6094/* Determine if THREAD is a pending fork parent thread. ARG contains
6095 the pid of the process that owns the threads we want to check, or
6096 -1 if we want to check all threads. */
6097
6098static int
6099is_pending_fork_parent (struct target_waitstatus *ws, int event_pid,
6100 ptid_t thread_ptid)
6101{
6102 if (ws->kind == TARGET_WAITKIND_FORKED
6103 || ws->kind == TARGET_WAITKIND_VFORKED)
6104 {
6105 if (event_pid == -1 || event_pid == ptid_get_pid (thread_ptid))
6106 return 1;
6107 }
6108
6109 return 0;
6110}
6111
6112/* Check whether EVENT is a fork event, and if it is, remove the
6113 fork child from the context list passed in DATA. */
6114
6115static int
6116remove_child_of_pending_fork (QUEUE (stop_reply_p) *q,
6117 QUEUE_ITER (stop_reply_p) *iter,
6118 stop_reply_p event,
6119 void *data)
6120{
19ba03f4
SM
6121 struct queue_iter_param *param = (struct queue_iter_param *) data;
6122 struct threads_listing_context *context
6123 = (struct threads_listing_context *) param->input;
cbb8991c
DB
6124
6125 if (event->ws.kind == TARGET_WAITKIND_FORKED
65706a29
PA
6126 || event->ws.kind == TARGET_WAITKIND_VFORKED
6127 || event->ws.kind == TARGET_WAITKIND_THREAD_EXITED)
6128 threads_listing_context_remove (&event->ws, context);
cbb8991c
DB
6129
6130 return 1;
6131}
6132
6133/* If CONTEXT contains any fork child threads that have not been
6134 reported yet, remove them from the CONTEXT list. If such a
6135 thread exists it is because we are stopped at a fork catchpoint
6136 and have not yet called follow_fork, which will set up the
6137 host-side data structures for the new process. */
6138
6139static void
6140remove_new_fork_children (struct threads_listing_context *context)
6141{
6142 struct thread_info * thread;
6143 int pid = -1;
6144 struct notif_client *notif = &notif_client_stop;
6145 struct queue_iter_param param;
6146
6147 /* For any threads stopped at a fork event, remove the corresponding
6148 fork child threads from the CONTEXT list. */
6149 ALL_NON_EXITED_THREADS (thread)
6150 {
4041ed77
DB
6151 struct target_waitstatus *ws;
6152
6153 if (thread->suspend.waitstatus_pending_p)
6154 ws = &thread->suspend.waitstatus;
6155 else
6156 ws = &thread->pending_follow;
cbb8991c
DB
6157
6158 if (is_pending_fork_parent (ws, pid, thread->ptid))
6159 {
6160 threads_listing_context_remove (ws, context);
6161 }
6162 }
6163
6164 /* Check for any pending fork events (not reported or processed yet)
6165 in process PID and remove those fork child threads from the
6166 CONTEXT list as well. */
6167 remote_notif_get_pending_events (notif);
6168 param.input = context;
6169 param.output = NULL;
6170 QUEUE_iterate (stop_reply_p, stop_reply_queue,
6171 remove_child_of_pending_fork, &param);
6172}
6173
f48ff2a7
YQ
6174/* Remove stop replies in the queue if its pid is equal to the given
6175 inferior's pid. */
722247f1
YQ
6176
6177static int
f48ff2a7
YQ
6178remove_stop_reply_for_inferior (QUEUE (stop_reply_p) *q,
6179 QUEUE_ITER (stop_reply_p) *iter,
6180 stop_reply_p event,
6181 void *data)
722247f1 6182{
19ba03f4
SM
6183 struct queue_iter_param *param = (struct queue_iter_param *) data;
6184 struct inferior *inf = (struct inferior *) param->input;
722247f1 6185
f48ff2a7 6186 if (ptid_get_pid (event->ptid) == inf->pid)
722247f1
YQ
6187 {
6188 stop_reply_xfree (event);
6189 QUEUE_remove_elem (stop_reply_p, q, iter);
6190 }
6191
6192 return 1;
6193}
6194
f48ff2a7 6195/* Discard all pending stop replies of inferior INF. */
c906108c 6196
74531fed 6197static void
5f4cf0bb 6198discard_pending_stop_replies (struct inferior *inf)
c906108c 6199{
722247f1 6200 struct queue_iter_param param;
f48ff2a7
YQ
6201 struct stop_reply *reply;
6202 struct remote_state *rs = get_remote_state ();
6203 struct remote_notif_state *rns = rs->notif_state;
6204
6205 /* This function can be notified when an inferior exists. When the
6206 target is not remote, the notification state is NULL. */
6207 if (rs->remote_desc == NULL)
6208 return;
6209
6210 reply = (struct stop_reply *) rns->pending_event[notif_client_stop.id];
c906108c 6211
74531fed 6212 /* Discard the in-flight notification. */
f48ff2a7 6213 if (reply != NULL && ptid_get_pid (reply->ptid) == inf->pid)
74531fed 6214 {
722247f1 6215 stop_reply_xfree (reply);
f48ff2a7 6216 rns->pending_event[notif_client_stop.id] = NULL;
74531fed 6217 }
c906108c 6218
722247f1
YQ
6219 param.input = inf;
6220 param.output = NULL;
74531fed
PA
6221 /* Discard the stop replies we have already pulled with
6222 vStopped. */
722247f1 6223 QUEUE_iterate (stop_reply_p, stop_reply_queue,
f48ff2a7
YQ
6224 remove_stop_reply_for_inferior, &param);
6225}
6226
bcc75809
YQ
6227/* If its remote state is equal to the given remote state,
6228 remove EVENT from the stop reply queue. */
6229
6230static int
6231remove_stop_reply_of_remote_state (QUEUE (stop_reply_p) *q,
6232 QUEUE_ITER (stop_reply_p) *iter,
6233 stop_reply_p event,
6234 void *data)
6235{
19ba03f4
SM
6236 struct queue_iter_param *param = (struct queue_iter_param *) data;
6237 struct remote_state *rs = (struct remote_state *) param->input;
bcc75809
YQ
6238
6239 if (event->rs == rs)
6240 {
6241 stop_reply_xfree (event);
6242 QUEUE_remove_elem (stop_reply_p, q, iter);
6243 }
6244
6245 return 1;
6246}
6247
6248/* Discard the stop replies for RS in stop_reply_queue. */
f48ff2a7
YQ
6249
6250static void
bcc75809 6251discard_pending_stop_replies_in_queue (struct remote_state *rs)
f48ff2a7
YQ
6252{
6253 struct queue_iter_param param;
6254
bcc75809 6255 param.input = rs;
f48ff2a7
YQ
6256 param.output = NULL;
6257 /* Discard the stop replies we have already pulled with
6258 vStopped. */
6259 QUEUE_iterate (stop_reply_p, stop_reply_queue,
bcc75809 6260 remove_stop_reply_of_remote_state, &param);
722247f1 6261}
74531fed 6262
722247f1
YQ
6263/* A parameter to pass data in and out. */
6264
6265static int
6266remote_notif_remove_once_on_match (QUEUE (stop_reply_p) *q,
6267 QUEUE_ITER (stop_reply_p) *iter,
6268 stop_reply_p event,
6269 void *data)
6270{
19ba03f4
SM
6271 struct queue_iter_param *param = (struct queue_iter_param *) data;
6272 ptid_t *ptid = (ptid_t *) param->input;
722247f1
YQ
6273
6274 if (ptid_match (event->ptid, *ptid))
6275 {
6276 param->output = event;
6277 QUEUE_remove_elem (stop_reply_p, q, iter);
6278 return 0;
c8e38a49 6279 }
722247f1
YQ
6280
6281 return 1;
74531fed 6282}
43ff13b4 6283
722247f1
YQ
6284/* Remove the first reply in 'stop_reply_queue' which matches
6285 PTID. */
2e9f7625 6286
722247f1
YQ
6287static struct stop_reply *
6288remote_notif_remove_queued_reply (ptid_t ptid)
74531fed 6289{
722247f1
YQ
6290 struct queue_iter_param param;
6291
6292 param.input = &ptid;
6293 param.output = NULL;
6294
6295 QUEUE_iterate (stop_reply_p, stop_reply_queue,
6296 remote_notif_remove_once_on_match, &param);
6297 if (notif_debug)
6298 fprintf_unfiltered (gdb_stdlog,
6299 "notif: discard queued event: 'Stop' in %s\n",
6300 target_pid_to_str (ptid));
a744cf53 6301
722247f1 6302 return param.output;
74531fed 6303}
75c99385 6304
74531fed
PA
6305/* Look for a queued stop reply belonging to PTID. If one is found,
6306 remove it from the queue, and return it. Returns NULL if none is
6307 found. If there are still queued events left to process, tell the
6308 event loop to get back to target_wait soon. */
e24a49d8 6309
74531fed
PA
6310static struct stop_reply *
6311queued_stop_reply (ptid_t ptid)
6312{
722247f1 6313 struct stop_reply *r = remote_notif_remove_queued_reply (ptid);
74531fed 6314
722247f1 6315 if (!QUEUE_is_empty (stop_reply_p, stop_reply_queue))
74531fed
PA
6316 /* There's still at least an event left. */
6317 mark_async_event_handler (remote_async_inferior_event_token);
6318
722247f1 6319 return r;
74531fed
PA
6320}
6321
6322/* Push a fully parsed stop reply in the stop reply queue. Since we
6323 know that we now have at least one queued event left to pass to the
6324 core side, tell the event loop to get back to target_wait soon. */
6325
6326static void
6327push_stop_reply (struct stop_reply *new_event)
6328{
722247f1 6329 QUEUE_enque (stop_reply_p, stop_reply_queue, new_event);
74531fed 6330
722247f1
YQ
6331 if (notif_debug)
6332 fprintf_unfiltered (gdb_stdlog,
6333 "notif: push 'Stop' %s to queue %d\n",
6334 target_pid_to_str (new_event->ptid),
6335 QUEUE_length (stop_reply_p,
6336 stop_reply_queue));
74531fed
PA
6337
6338 mark_async_event_handler (remote_async_inferior_event_token);
6339}
6340
722247f1
YQ
6341static int
6342stop_reply_match_ptid_and_ws (QUEUE (stop_reply_p) *q,
6343 QUEUE_ITER (stop_reply_p) *iter,
6344 struct stop_reply *event,
6345 void *data)
6346{
19ba03f4 6347 ptid_t *ptid = (ptid_t *) data;
722247f1
YQ
6348
6349 return !(ptid_equal (*ptid, event->ptid)
6350 && event->ws.kind == TARGET_WAITKIND_STOPPED);
6351}
6352
74531fed
PA
6353/* Returns true if we have a stop reply for PTID. */
6354
6355static int
6356peek_stop_reply (ptid_t ptid)
6357{
722247f1
YQ
6358 return !QUEUE_iterate (stop_reply_p, stop_reply_queue,
6359 stop_reply_match_ptid_and_ws, &ptid);
74531fed
PA
6360}
6361
26d56a93
SL
6362/* Helper for remote_parse_stop_reply. Return nonzero if the substring
6363 starting with P and ending with PEND matches PREFIX. */
6364
6365static int
6366strprefix (const char *p, const char *pend, const char *prefix)
6367{
6368 for ( ; p < pend; p++, prefix++)
6369 if (*p != *prefix)
6370 return 0;
6371 return *prefix == '\0';
6372}
6373
74531fed
PA
6374/* Parse the stop reply in BUF. Either the function succeeds, and the
6375 result is stored in EVENT, or throws an error. */
6376
6377static void
6378remote_parse_stop_reply (char *buf, struct stop_reply *event)
6379{
6380 struct remote_arch_state *rsa = get_remote_arch_state ();
6381 ULONGEST addr;
6382 char *p;
94585166 6383 int skipregs = 0;
74531fed
PA
6384
6385 event->ptid = null_ptid;
bcc75809 6386 event->rs = get_remote_state ();
74531fed
PA
6387 event->ws.kind = TARGET_WAITKIND_IGNORE;
6388 event->ws.value.integer = 0;
f7e6eed5 6389 event->stop_reason = TARGET_STOPPED_BY_NO_REASON;
74531fed 6390 event->regcache = NULL;
dc146f7c 6391 event->core = -1;
74531fed
PA
6392
6393 switch (buf[0])
6394 {
6395 case 'T': /* Status with PC, SP, FP, ... */
cea39f65
MS
6396 /* Expedited reply, containing Signal, {regno, reg} repeat. */
6397 /* format is: 'Tssn...:r...;n...:r...;n...:r...;#cc', where
6398 ss = signal number
6399 n... = register number
6400 r... = register contents
6401 */
6402
6403 p = &buf[3]; /* after Txx */
6404 while (*p)
6405 {
6406 char *p1;
cea39f65 6407 int fieldsize;
43ff13b4 6408
1f10ba14
PA
6409 p1 = strchr (p, ':');
6410 if (p1 == NULL)
6411 error (_("Malformed packet(a) (missing colon): %s\n\
6412Packet: '%s'\n"),
6413 p, buf);
6414 if (p == p1)
6415 error (_("Malformed packet(a) (missing register number): %s\n\
6416Packet: '%s'\n"),
6417 p, buf);
3c3bea1c 6418
1f10ba14
PA
6419 /* Some "registers" are actually extended stop information.
6420 Note if you're adding a new entry here: GDB 7.9 and
6421 earlier assume that all register "numbers" that start
6422 with an hex digit are real register numbers. Make sure
6423 the server only sends such a packet if it knows the
6424 client understands it. */
c8e38a49 6425
26d56a93 6426 if (strprefix (p, p1, "thread"))
1f10ba14 6427 event->ptid = read_ptid (++p1, &p);
82075af2
JS
6428 else if (strprefix (p, p1, "syscall_entry"))
6429 {
6430 ULONGEST sysno;
6431
6432 event->ws.kind = TARGET_WAITKIND_SYSCALL_ENTRY;
6433 p = unpack_varlen_hex (++p1, &sysno);
6434 event->ws.value.syscall_number = (int) sysno;
6435 }
6436 else if (strprefix (p, p1, "syscall_return"))
6437 {
6438 ULONGEST sysno;
6439
6440 event->ws.kind = TARGET_WAITKIND_SYSCALL_RETURN;
6441 p = unpack_varlen_hex (++p1, &sysno);
6442 event->ws.value.syscall_number = (int) sysno;
6443 }
26d56a93
SL
6444 else if (strprefix (p, p1, "watch")
6445 || strprefix (p, p1, "rwatch")
6446 || strprefix (p, p1, "awatch"))
cea39f65 6447 {
f7e6eed5 6448 event->stop_reason = TARGET_STOPPED_BY_WATCHPOINT;
1f10ba14
PA
6449 p = unpack_varlen_hex (++p1, &addr);
6450 event->watch_data_address = (CORE_ADDR) addr;
cea39f65 6451 }
26d56a93 6452 else if (strprefix (p, p1, "swbreak"))
f7e6eed5
PA
6453 {
6454 event->stop_reason = TARGET_STOPPED_BY_SW_BREAKPOINT;
6455
6456 /* Make sure the stub doesn't forget to indicate support
6457 with qSupported. */
6458 if (packet_support (PACKET_swbreak_feature) != PACKET_ENABLE)
6459 error (_("Unexpected swbreak stop reason"));
6460
6461 /* The value part is documented as "must be empty",
6462 though we ignore it, in case we ever decide to make
6463 use of it in a backward compatible way. */
8424cc97 6464 p = strchrnul (p1 + 1, ';');
f7e6eed5 6465 }
26d56a93 6466 else if (strprefix (p, p1, "hwbreak"))
f7e6eed5
PA
6467 {
6468 event->stop_reason = TARGET_STOPPED_BY_HW_BREAKPOINT;
6469
6470 /* Make sure the stub doesn't forget to indicate support
6471 with qSupported. */
6472 if (packet_support (PACKET_hwbreak_feature) != PACKET_ENABLE)
6473 error (_("Unexpected hwbreak stop reason"));
6474
6475 /* See above. */
8424cc97 6476 p = strchrnul (p1 + 1, ';');
f7e6eed5 6477 }
26d56a93 6478 else if (strprefix (p, p1, "library"))
cea39f65 6479 {
1f10ba14 6480 event->ws.kind = TARGET_WAITKIND_LOADED;
8424cc97 6481 p = strchrnul (p1 + 1, ';');
1f10ba14 6482 }
26d56a93 6483 else if (strprefix (p, p1, "replaylog"))
1f10ba14
PA
6484 {
6485 event->ws.kind = TARGET_WAITKIND_NO_HISTORY;
6486 /* p1 will indicate "begin" or "end", but it makes
6487 no difference for now, so ignore it. */
8424cc97 6488 p = strchrnul (p1 + 1, ';');
1f10ba14 6489 }
26d56a93 6490 else if (strprefix (p, p1, "core"))
1f10ba14
PA
6491 {
6492 ULONGEST c;
a744cf53 6493
1f10ba14
PA
6494 p = unpack_varlen_hex (++p1, &c);
6495 event->core = c;
cea39f65 6496 }
26d56a93 6497 else if (strprefix (p, p1, "fork"))
de0d863e
DB
6498 {
6499 event->ws.value.related_pid = read_ptid (++p1, &p);
6500 event->ws.kind = TARGET_WAITKIND_FORKED;
6501 }
26d56a93 6502 else if (strprefix (p, p1, "vfork"))
c269dbdb
DB
6503 {
6504 event->ws.value.related_pid = read_ptid (++p1, &p);
6505 event->ws.kind = TARGET_WAITKIND_VFORKED;
6506 }
26d56a93 6507 else if (strprefix (p, p1, "vforkdone"))
c269dbdb
DB
6508 {
6509 event->ws.kind = TARGET_WAITKIND_VFORK_DONE;
8424cc97 6510 p = strchrnul (p1 + 1, ';');
c269dbdb 6511 }
6ab24463 6512 else if (strprefix (p, p1, "exec"))
94585166
DB
6513 {
6514 ULONGEST ignored;
6515 char pathname[PATH_MAX];
6516 int pathlen;
6517
6518 /* Determine the length of the execd pathname. */
6519 p = unpack_varlen_hex (++p1, &ignored);
6520 pathlen = (p - p1) / 2;
6521
6522 /* Save the pathname for event reporting and for
6523 the next run command. */
6524 hex2bin (p1, (gdb_byte *) pathname, pathlen);
6525 pathname[pathlen] = '\0';
6526
6527 /* This is freed during event handling. */
6528 event->ws.value.execd_pathname = xstrdup (pathname);
6529 event->ws.kind = TARGET_WAITKIND_EXECD;
6530
6531 /* Skip the registers included in this packet, since
6532 they may be for an architecture different from the
6533 one used by the original program. */
6534 skipregs = 1;
6535 }
65706a29
PA
6536 else if (strprefix (p, p1, "create"))
6537 {
6538 event->ws.kind = TARGET_WAITKIND_THREAD_CREATED;
8424cc97 6539 p = strchrnul (p1 + 1, ';');
65706a29 6540 }
cea39f65
MS
6541 else
6542 {
1f10ba14
PA
6543 ULONGEST pnum;
6544 char *p_temp;
6545
94585166
DB
6546 if (skipregs)
6547 {
8424cc97 6548 p = strchrnul (p1 + 1, ';');
94585166
DB
6549 p++;
6550 continue;
6551 }
6552
1f10ba14
PA
6553 /* Maybe a real ``P'' register number. */
6554 p_temp = unpack_varlen_hex (p, &pnum);
6555 /* If the first invalid character is the colon, we got a
6556 register number. Otherwise, it's an unknown stop
6557 reason. */
6558 if (p_temp == p1)
6559 {
6560 struct packet_reg *reg = packet_reg_from_pnum (rsa, pnum);
6561 cached_reg_t cached_reg;
43ff13b4 6562
1f10ba14
PA
6563 if (reg == NULL)
6564 error (_("Remote sent bad register number %s: %s\n\
8a3fe4f8 6565Packet: '%s'\n"),
1f10ba14 6566 hex_string (pnum), p, buf);
c8e38a49 6567
1f10ba14 6568 cached_reg.num = reg->regnum;
4100683b 6569
1f10ba14
PA
6570 p = p1 + 1;
6571 fieldsize = hex2bin (p, cached_reg.data,
6572 register_size (target_gdbarch (),
6573 reg->regnum));
6574 p += 2 * fieldsize;
6575 if (fieldsize < register_size (target_gdbarch (),
6576 reg->regnum))
6577 warning (_("Remote reply is too short: %s"), buf);
74531fed 6578
1f10ba14
PA
6579 VEC_safe_push (cached_reg_t, event->regcache, &cached_reg);
6580 }
6581 else
6582 {
6583 /* Not a number. Silently skip unknown optional
6584 info. */
8424cc97 6585 p = strchrnul (p1 + 1, ';');
1f10ba14 6586 }
cea39f65 6587 }
c8e38a49 6588
cea39f65
MS
6589 if (*p != ';')
6590 error (_("Remote register badly formatted: %s\nhere: %s"),
6591 buf, p);
6592 ++p;
6593 }
5b5596ff
PA
6594
6595 if (event->ws.kind != TARGET_WAITKIND_IGNORE)
6596 break;
6597
c8e38a49
PA
6598 /* fall through */
6599 case 'S': /* Old style status, just signal only. */
3a09da41
PA
6600 {
6601 int sig;
6602
6603 event->ws.kind = TARGET_WAITKIND_STOPPED;
6604 sig = (fromhex (buf[1]) << 4) + fromhex (buf[2]);
6605 if (GDB_SIGNAL_FIRST <= sig && sig < GDB_SIGNAL_LAST)
6606 event->ws.value.sig = (enum gdb_signal) sig;
6607 else
6608 event->ws.value.sig = GDB_SIGNAL_UNKNOWN;
6609 }
c8e38a49 6610 break;
65706a29
PA
6611 case 'w': /* Thread exited. */
6612 {
6613 char *p;
6614 ULONGEST value;
6615
6616 event->ws.kind = TARGET_WAITKIND_THREAD_EXITED;
6617 p = unpack_varlen_hex (&buf[1], &value);
6618 event->ws.value.integer = value;
6619 if (*p != ';')
6620 error (_("stop reply packet badly formatted: %s"), buf);
974eac9d 6621 event->ptid = read_ptid (++p, NULL);
65706a29
PA
6622 break;
6623 }
c8e38a49
PA
6624 case 'W': /* Target exited. */
6625 case 'X':
6626 {
6627 char *p;
6628 int pid;
6629 ULONGEST value;
82f73884 6630
c8e38a49
PA
6631 /* GDB used to accept only 2 hex chars here. Stubs should
6632 only send more if they detect GDB supports multi-process
6633 support. */
6634 p = unpack_varlen_hex (&buf[1], &value);
82f73884 6635
c8e38a49
PA
6636 if (buf[0] == 'W')
6637 {
6638 /* The remote process exited. */
74531fed
PA
6639 event->ws.kind = TARGET_WAITKIND_EXITED;
6640 event->ws.value.integer = value;
c8e38a49
PA
6641 }
6642 else
6643 {
6644 /* The remote process exited with a signal. */
74531fed 6645 event->ws.kind = TARGET_WAITKIND_SIGNALLED;
3a09da41
PA
6646 if (GDB_SIGNAL_FIRST <= value && value < GDB_SIGNAL_LAST)
6647 event->ws.value.sig = (enum gdb_signal) value;
6648 else
6649 event->ws.value.sig = GDB_SIGNAL_UNKNOWN;
c8e38a49 6650 }
82f73884 6651
c8e38a49
PA
6652 /* If no process is specified, assume inferior_ptid. */
6653 pid = ptid_get_pid (inferior_ptid);
6654 if (*p == '\0')
6655 ;
6656 else if (*p == ';')
6657 {
6658 p++;
6659
0b24eb2d 6660 if (*p == '\0')
82f73884 6661 ;
61012eef 6662 else if (startswith (p, "process:"))
82f73884 6663 {
c8e38a49 6664 ULONGEST upid;
a744cf53 6665
c8e38a49
PA
6666 p += sizeof ("process:") - 1;
6667 unpack_varlen_hex (p, &upid);
6668 pid = upid;
82f73884
PA
6669 }
6670 else
6671 error (_("unknown stop reply packet: %s"), buf);
43ff13b4 6672 }
c8e38a49
PA
6673 else
6674 error (_("unknown stop reply packet: %s"), buf);
74531fed
PA
6675 event->ptid = pid_to_ptid (pid);
6676 }
6677 break;
f2faf941
PA
6678 case 'N':
6679 event->ws.kind = TARGET_WAITKIND_NO_RESUMED;
6680 event->ptid = minus_one_ptid;
6681 break;
74531fed
PA
6682 }
6683
6efcd9a8 6684 if (target_is_non_stop_p () && ptid_equal (event->ptid, null_ptid))
74531fed
PA
6685 error (_("No process or thread specified in stop reply: %s"), buf);
6686}
6687
722247f1
YQ
6688/* When the stub wants to tell GDB about a new notification reply, it
6689 sends a notification (%Stop, for example). Those can come it at
6690 any time, hence, we have to make sure that any pending
6691 putpkt/getpkt sequence we're making is finished, before querying
6692 the stub for more events with the corresponding ack command
6693 (vStopped, for example). E.g., if we started a vStopped sequence
6694 immediately upon receiving the notification, something like this
6695 could happen:
74531fed
PA
6696
6697 1.1) --> Hg 1
6698 1.2) <-- OK
6699 1.3) --> g
6700 1.4) <-- %Stop
6701 1.5) --> vStopped
6702 1.6) <-- (registers reply to step #1.3)
6703
6704 Obviously, the reply in step #1.6 would be unexpected to a vStopped
6705 query.
6706
796cb314 6707 To solve this, whenever we parse a %Stop notification successfully,
74531fed
PA
6708 we mark the REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN, and carry on
6709 doing whatever we were doing:
6710
6711 2.1) --> Hg 1
6712 2.2) <-- OK
6713 2.3) --> g
6714 2.4) <-- %Stop
6715 <GDB marks the REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN>
6716 2.5) <-- (registers reply to step #2.3)
6717
6718 Eventualy after step #2.5, we return to the event loop, which
6719 notices there's an event on the
6720 REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN event and calls the
6721 associated callback --- the function below. At this point, we're
6722 always safe to start a vStopped sequence. :
6723
6724 2.6) --> vStopped
6725 2.7) <-- T05 thread:2
6726 2.8) --> vStopped
6727 2.9) --> OK
6728*/
6729
722247f1
YQ
6730void
6731remote_notif_get_pending_events (struct notif_client *nc)
74531fed
PA
6732{
6733 struct remote_state *rs = get_remote_state ();
74531fed 6734
f48ff2a7 6735 if (rs->notif_state->pending_event[nc->id] != NULL)
74531fed 6736 {
722247f1
YQ
6737 if (notif_debug)
6738 fprintf_unfiltered (gdb_stdlog,
6739 "notif: process: '%s' ack pending event\n",
6740 nc->name);
74531fed 6741
722247f1 6742 /* acknowledge */
f48ff2a7
YQ
6743 nc->ack (nc, rs->buf, rs->notif_state->pending_event[nc->id]);
6744 rs->notif_state->pending_event[nc->id] = NULL;
74531fed
PA
6745
6746 while (1)
6747 {
6748 getpkt (&rs->buf, &rs->buf_size, 0);
6749 if (strcmp (rs->buf, "OK") == 0)
6750 break;
6751 else
722247f1 6752 remote_notif_ack (nc, rs->buf);
74531fed
PA
6753 }
6754 }
722247f1
YQ
6755 else
6756 {
6757 if (notif_debug)
6758 fprintf_unfiltered (gdb_stdlog,
6759 "notif: process: '%s' no pending reply\n",
6760 nc->name);
6761 }
74531fed
PA
6762}
6763
74531fed
PA
6764/* Called when it is decided that STOP_REPLY holds the info of the
6765 event that is to be returned to the core. This function always
6766 destroys STOP_REPLY. */
6767
6768static ptid_t
6769process_stop_reply (struct stop_reply *stop_reply,
6770 struct target_waitstatus *status)
6771{
6772 ptid_t ptid;
6773
6774 *status = stop_reply->ws;
6775 ptid = stop_reply->ptid;
6776
6777 /* If no thread/process was reported by the stub, assume the current
6778 inferior. */
6779 if (ptid_equal (ptid, null_ptid))
6780 ptid = inferior_ptid;
6781
5f3563ea 6782 if (status->kind != TARGET_WAITKIND_EXITED
f2faf941
PA
6783 && status->kind != TARGET_WAITKIND_SIGNALLED
6784 && status->kind != TARGET_WAITKIND_NO_RESUMED)
74531fed 6785 {
799a2abe 6786 struct private_thread_info *remote_thr;
ee154bee 6787
5f3563ea
PA
6788 /* Expedited registers. */
6789 if (stop_reply->regcache)
6790 {
217f1f79 6791 struct regcache *regcache
f5656ead 6792 = get_thread_arch_regcache (ptid, target_gdbarch ());
5f3563ea
PA
6793 cached_reg_t *reg;
6794 int ix;
6795
6796 for (ix = 0;
6797 VEC_iterate(cached_reg_t, stop_reply->regcache, ix, reg);
6798 ix++)
217f1f79 6799 regcache_raw_supply (regcache, reg->num, reg->data);
5f3563ea
PA
6800 VEC_free (cached_reg_t, stop_reply->regcache);
6801 }
74531fed 6802
1941c569 6803 remote_notice_new_inferior (ptid, 0);
799a2abe
PA
6804 remote_thr = demand_private_info (ptid);
6805 remote_thr->core = stop_reply->core;
6806 remote_thr->stop_reason = stop_reply->stop_reason;
6807 remote_thr->watch_data_address = stop_reply->watch_data_address;
74531fed
PA
6808 }
6809
74531fed
PA
6810 stop_reply_xfree (stop_reply);
6811 return ptid;
6812}
6813
6814/* The non-stop mode version of target_wait. */
6815
6816static ptid_t
47608cb1 6817remote_wait_ns (ptid_t ptid, struct target_waitstatus *status, int options)
74531fed
PA
6818{
6819 struct remote_state *rs = get_remote_state ();
74531fed
PA
6820 struct stop_reply *stop_reply;
6821 int ret;
fee9eda9 6822 int is_notif = 0;
74531fed
PA
6823
6824 /* If in non-stop mode, get out of getpkt even if a
6825 notification is received. */
6826
6827 ret = getpkt_or_notif_sane (&rs->buf, &rs->buf_size,
fee9eda9 6828 0 /* forever */, &is_notif);
74531fed
PA
6829 while (1)
6830 {
fee9eda9 6831 if (ret != -1 && !is_notif)
74531fed
PA
6832 switch (rs->buf[0])
6833 {
6834 case 'E': /* Error of some sort. */
6835 /* We're out of sync with the target now. Did it continue
6836 or not? We can't tell which thread it was in non-stop,
6837 so just ignore this. */
6838 warning (_("Remote failure reply: %s"), rs->buf);
6839 break;
6840 case 'O': /* Console output. */
6841 remote_console_output (rs->buf + 1);
6842 break;
6843 default:
6844 warning (_("Invalid remote reply: %s"), rs->buf);
6845 break;
6846 }
6847
6848 /* Acknowledge a pending stop reply that may have arrived in the
6849 mean time. */
f48ff2a7 6850 if (rs->notif_state->pending_event[notif_client_stop.id] != NULL)
722247f1 6851 remote_notif_get_pending_events (&notif_client_stop);
74531fed
PA
6852
6853 /* If indeed we noticed a stop reply, we're done. */
6854 stop_reply = queued_stop_reply (ptid);
6855 if (stop_reply != NULL)
6856 return process_stop_reply (stop_reply, status);
6857
47608cb1 6858 /* Still no event. If we're just polling for an event, then
74531fed 6859 return to the event loop. */
47608cb1 6860 if (options & TARGET_WNOHANG)
74531fed
PA
6861 {
6862 status->kind = TARGET_WAITKIND_IGNORE;
6863 return minus_one_ptid;
6864 }
6865
47608cb1 6866 /* Otherwise do a blocking wait. */
74531fed 6867 ret = getpkt_or_notif_sane (&rs->buf, &rs->buf_size,
fee9eda9 6868 1 /* forever */, &is_notif);
74531fed
PA
6869 }
6870}
6871
6872/* Wait until the remote machine stops, then return, storing status in
6873 STATUS just as `wait' would. */
6874
6875static ptid_t
47608cb1 6876remote_wait_as (ptid_t ptid, struct target_waitstatus *status, int options)
74531fed
PA
6877{
6878 struct remote_state *rs = get_remote_state ();
74531fed 6879 ptid_t event_ptid = null_ptid;
cea39f65 6880 char *buf;
74531fed
PA
6881 struct stop_reply *stop_reply;
6882
47608cb1
PA
6883 again:
6884
74531fed
PA
6885 status->kind = TARGET_WAITKIND_IGNORE;
6886 status->value.integer = 0;
6887
6888 stop_reply = queued_stop_reply (ptid);
6889 if (stop_reply != NULL)
6890 return process_stop_reply (stop_reply, status);
6891
6892 if (rs->cached_wait_status)
6893 /* Use the cached wait status, but only once. */
6894 rs->cached_wait_status = 0;
6895 else
6896 {
6897 int ret;
722247f1 6898 int is_notif;
567420d1
PA
6899 int forever = ((options & TARGET_WNOHANG) == 0
6900 && wait_forever_enabled_p);
6901
6902 if (!rs->waiting_for_stop_reply)
6903 {
6904 status->kind = TARGET_WAITKIND_NO_RESUMED;
6905 return minus_one_ptid;
6906 }
74531fed 6907
74531fed
PA
6908 /* FIXME: cagney/1999-09-27: If we're in async mode we should
6909 _never_ wait for ever -> test on target_is_async_p().
6910 However, before we do that we need to ensure that the caller
6911 knows how to take the target into/out of async mode. */
722247f1 6912 ret = getpkt_or_notif_sane (&rs->buf, &rs->buf_size,
567420d1 6913 forever, &is_notif);
722247f1
YQ
6914
6915 /* GDB gets a notification. Return to core as this event is
6916 not interesting. */
6917 if (ret != -1 && is_notif)
6918 return minus_one_ptid;
567420d1
PA
6919
6920 if (ret == -1 && (options & TARGET_WNOHANG) != 0)
6921 return minus_one_ptid;
74531fed
PA
6922 }
6923
6924 buf = rs->buf;
6925
3a29589a
DJ
6926 /* Assume that the target has acknowledged Ctrl-C unless we receive
6927 an 'F' or 'O' packet. */
6928 if (buf[0] != 'F' && buf[0] != 'O')
6929 rs->ctrlc_pending_p = 0;
6930
74531fed
PA
6931 switch (buf[0])
6932 {
6933 case 'E': /* Error of some sort. */
6934 /* We're out of sync with the target now. Did it continue or
6935 not? Not is more likely, so report a stop. */
29090fb6
LM
6936 rs->waiting_for_stop_reply = 0;
6937
74531fed
PA
6938 warning (_("Remote failure reply: %s"), buf);
6939 status->kind = TARGET_WAITKIND_STOPPED;
a493e3e2 6940 status->value.sig = GDB_SIGNAL_0;
74531fed
PA
6941 break;
6942 case 'F': /* File-I/O request. */
e42e5352
YQ
6943 /* GDB may access the inferior memory while handling the File-I/O
6944 request, but we don't want GDB accessing memory while waiting
6945 for a stop reply. See the comments in putpkt_binary. Set
6946 waiting_for_stop_reply to 0 temporarily. */
6947 rs->waiting_for_stop_reply = 0;
3a29589a
DJ
6948 remote_fileio_request (buf, rs->ctrlc_pending_p);
6949 rs->ctrlc_pending_p = 0;
e42e5352
YQ
6950 /* GDB handled the File-I/O request, and the target is running
6951 again. Keep waiting for events. */
6952 rs->waiting_for_stop_reply = 1;
74531fed 6953 break;
f2faf941 6954 case 'N': case 'T': case 'S': case 'X': case 'W':
74531fed 6955 {
29090fb6
LM
6956 struct stop_reply *stop_reply;
6957
6958 /* There is a stop reply to handle. */
6959 rs->waiting_for_stop_reply = 0;
6960
6961 stop_reply
722247f1
YQ
6962 = (struct stop_reply *) remote_notif_parse (&notif_client_stop,
6963 rs->buf);
74531fed 6964
74531fed 6965 event_ptid = process_stop_reply (stop_reply, status);
c8e38a49
PA
6966 break;
6967 }
6968 case 'O': /* Console output. */
6969 remote_console_output (buf + 1);
c8e38a49
PA
6970 break;
6971 case '\0':
b73be471 6972 if (rs->last_sent_signal != GDB_SIGNAL_0)
c8e38a49
PA
6973 {
6974 /* Zero length reply means that we tried 'S' or 'C' and the
6975 remote system doesn't support it. */
6976 target_terminal_ours_for_output ();
6977 printf_filtered
6978 ("Can't send signals to this remote system. %s not sent.\n",
b73be471
TT
6979 gdb_signal_to_name (rs->last_sent_signal));
6980 rs->last_sent_signal = GDB_SIGNAL_0;
c8e38a49
PA
6981 target_terminal_inferior ();
6982
f5c4fcd9
TT
6983 strcpy (buf, rs->last_sent_step ? "s" : "c");
6984 putpkt (buf);
c8e38a49 6985 break;
43ff13b4 6986 }
c8e38a49
PA
6987 /* else fallthrough */
6988 default:
6989 warning (_("Invalid remote reply: %s"), buf);
c8e38a49 6990 break;
43ff13b4 6991 }
c8e38a49 6992
f2faf941
PA
6993 if (status->kind == TARGET_WAITKIND_NO_RESUMED)
6994 return minus_one_ptid;
6995 else if (status->kind == TARGET_WAITKIND_IGNORE)
47608cb1
PA
6996 {
6997 /* Nothing interesting happened. If we're doing a non-blocking
6998 poll, we're done. Otherwise, go back to waiting. */
6999 if (options & TARGET_WNOHANG)
7000 return minus_one_ptid;
7001 else
7002 goto again;
7003 }
74531fed
PA
7004 else if (status->kind != TARGET_WAITKIND_EXITED
7005 && status->kind != TARGET_WAITKIND_SIGNALLED)
82f73884
PA
7006 {
7007 if (!ptid_equal (event_ptid, null_ptid))
47f8a51d 7008 record_currthread (rs, event_ptid);
82f73884
PA
7009 else
7010 event_ptid = inferior_ptid;
43ff13b4 7011 }
74531fed
PA
7012 else
7013 /* A process exit. Invalidate our notion of current thread. */
47f8a51d 7014 record_currthread (rs, minus_one_ptid);
79d7f229 7015
82f73884 7016 return event_ptid;
43ff13b4
JM
7017}
7018
74531fed
PA
7019/* Wait until the remote machine stops, then return, storing status in
7020 STATUS just as `wait' would. */
7021
c8e38a49 7022static ptid_t
117de6a9 7023remote_wait (struct target_ops *ops,
47608cb1 7024 ptid_t ptid, struct target_waitstatus *status, int options)
c8e38a49
PA
7025{
7026 ptid_t event_ptid;
7027
6efcd9a8 7028 if (target_is_non_stop_p ())
47608cb1 7029 event_ptid = remote_wait_ns (ptid, status, options);
74531fed 7030 else
47608cb1 7031 event_ptid = remote_wait_as (ptid, status, options);
c8e38a49 7032
d9d41e78 7033 if (target_is_async_p ())
c8e38a49 7034 {
74531fed
PA
7035 /* If there are are events left in the queue tell the event loop
7036 to return here. */
722247f1 7037 if (!QUEUE_is_empty (stop_reply_p, stop_reply_queue))
74531fed 7038 mark_async_event_handler (remote_async_inferior_event_token);
c8e38a49 7039 }
c8e38a49
PA
7040
7041 return event_ptid;
7042}
7043
74ca34ce 7044/* Fetch a single register using a 'p' packet. */
c906108c 7045
b96ec7ac 7046static int
56be3814 7047fetch_register_using_p (struct regcache *regcache, struct packet_reg *reg)
b96ec7ac
AC
7048{
7049 struct remote_state *rs = get_remote_state ();
2e9f7625 7050 char *buf, *p;
b96ec7ac
AC
7051 char regp[MAX_REGISTER_SIZE];
7052 int i;
7053
4082afcc 7054 if (packet_support (PACKET_p) == PACKET_DISABLE)
74ca34ce
DJ
7055 return 0;
7056
7057 if (reg->pnum == -1)
7058 return 0;
7059
2e9f7625 7060 p = rs->buf;
fcad0fa4 7061 *p++ = 'p';
74ca34ce 7062 p += hexnumstr (p, reg->pnum);
fcad0fa4 7063 *p++ = '\0';
1f4437a4
MS
7064 putpkt (rs->buf);
7065 getpkt (&rs->buf, &rs->buf_size, 0);
3f9a994c 7066
2e9f7625
DJ
7067 buf = rs->buf;
7068
74ca34ce
DJ
7069 switch (packet_ok (buf, &remote_protocol_packets[PACKET_p]))
7070 {
7071 case PACKET_OK:
7072 break;
7073 case PACKET_UNKNOWN:
7074 return 0;
7075 case PACKET_ERROR:
27a9c0bf
MS
7076 error (_("Could not fetch register \"%s\"; remote failure reply '%s'"),
7077 gdbarch_register_name (get_regcache_arch (regcache),
7078 reg->regnum),
7079 buf);
74ca34ce 7080 }
3f9a994c
JB
7081
7082 /* If this register is unfetchable, tell the regcache. */
7083 if (buf[0] == 'x')
8480adf2 7084 {
56be3814 7085 regcache_raw_supply (regcache, reg->regnum, NULL);
8480adf2 7086 return 1;
b96ec7ac 7087 }
b96ec7ac 7088
3f9a994c
JB
7089 /* Otherwise, parse and supply the value. */
7090 p = buf;
7091 i = 0;
7092 while (p[0] != 0)
7093 {
7094 if (p[1] == 0)
74ca34ce 7095 error (_("fetch_register_using_p: early buf termination"));
3f9a994c
JB
7096
7097 regp[i++] = fromhex (p[0]) * 16 + fromhex (p[1]);
7098 p += 2;
7099 }
56be3814 7100 regcache_raw_supply (regcache, reg->regnum, regp);
3f9a994c 7101 return 1;
b96ec7ac
AC
7102}
7103
74ca34ce
DJ
7104/* Fetch the registers included in the target's 'g' packet. */
7105
29709017
DJ
7106static int
7107send_g_packet (void)
c906108c 7108{
d01949b6 7109 struct remote_state *rs = get_remote_state ();
cea39f65 7110 int buf_len;
c906108c 7111
bba74b36 7112 xsnprintf (rs->buf, get_remote_packet_size (), "g");
74ca34ce 7113 remote_send (&rs->buf, &rs->buf_size);
c906108c 7114
29709017
DJ
7115 /* We can get out of synch in various cases. If the first character
7116 in the buffer is not a hex character, assume that has happened
7117 and try to fetch another packet to read. */
7118 while ((rs->buf[0] < '0' || rs->buf[0] > '9')
7119 && (rs->buf[0] < 'A' || rs->buf[0] > 'F')
7120 && (rs->buf[0] < 'a' || rs->buf[0] > 'f')
7121 && rs->buf[0] != 'x') /* New: unavailable register value. */
7122 {
7123 if (remote_debug)
7124 fprintf_unfiltered (gdb_stdlog,
7125 "Bad register packet; fetching a new packet\n");
7126 getpkt (&rs->buf, &rs->buf_size, 0);
7127 }
7128
74ca34ce
DJ
7129 buf_len = strlen (rs->buf);
7130
7131 /* Sanity check the received packet. */
7132 if (buf_len % 2 != 0)
7133 error (_("Remote 'g' packet reply is of odd length: %s"), rs->buf);
29709017
DJ
7134
7135 return buf_len / 2;
7136}
7137
7138static void
56be3814 7139process_g_packet (struct regcache *regcache)
29709017 7140{
4a22f64d 7141 struct gdbarch *gdbarch = get_regcache_arch (regcache);
29709017
DJ
7142 struct remote_state *rs = get_remote_state ();
7143 struct remote_arch_state *rsa = get_remote_arch_state ();
7144 int i, buf_len;
7145 char *p;
7146 char *regs;
7147
7148 buf_len = strlen (rs->buf);
7149
7150 /* Further sanity checks, with knowledge of the architecture. */
74ca34ce
DJ
7151 if (buf_len > 2 * rsa->sizeof_g_packet)
7152 error (_("Remote 'g' packet reply is too long: %s"), rs->buf);
7153
7154 /* Save the size of the packet sent to us by the target. It is used
7155 as a heuristic when determining the max size of packets that the
7156 target can safely receive. */
7157 if (rsa->actual_register_packet_size == 0)
7158 rsa->actual_register_packet_size = buf_len;
7159
7160 /* If this is smaller than we guessed the 'g' packet would be,
7161 update our records. A 'g' reply that doesn't include a register's
7162 value implies either that the register is not available, or that
7163 the 'p' packet must be used. */
7164 if (buf_len < 2 * rsa->sizeof_g_packet)
b323314b 7165 {
74ca34ce
DJ
7166 rsa->sizeof_g_packet = buf_len / 2;
7167
4a22f64d 7168 for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
b96ec7ac 7169 {
74ca34ce
DJ
7170 if (rsa->regs[i].pnum == -1)
7171 continue;
7172
7173 if (rsa->regs[i].offset >= rsa->sizeof_g_packet)
7174 rsa->regs[i].in_g_packet = 0;
b96ec7ac 7175 else
74ca34ce 7176 rsa->regs[i].in_g_packet = 1;
b96ec7ac 7177 }
74ca34ce 7178 }
b323314b 7179
224c3ddb 7180 regs = (char *) alloca (rsa->sizeof_g_packet);
c906108c
SS
7181
7182 /* Unimplemented registers read as all bits zero. */
ea9c271d 7183 memset (regs, 0, rsa->sizeof_g_packet);
c906108c 7184
c906108c
SS
7185 /* Reply describes registers byte by byte, each byte encoded as two
7186 hex characters. Suck them all up, then supply them to the
7187 register cacheing/storage mechanism. */
7188
74ca34ce 7189 p = rs->buf;
ea9c271d 7190 for (i = 0; i < rsa->sizeof_g_packet; i++)
c906108c 7191 {
74ca34ce
DJ
7192 if (p[0] == 0 || p[1] == 0)
7193 /* This shouldn't happen - we adjusted sizeof_g_packet above. */
7194 internal_error (__FILE__, __LINE__,
9b20d036 7195 _("unexpected end of 'g' packet reply"));
74ca34ce 7196
c906108c 7197 if (p[0] == 'x' && p[1] == 'x')
c5aa993b 7198 regs[i] = 0; /* 'x' */
c906108c
SS
7199 else
7200 regs[i] = fromhex (p[0]) * 16 + fromhex (p[1]);
7201 p += 2;
7202 }
7203
a744cf53
MS
7204 for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
7205 {
7206 struct packet_reg *r = &rsa->regs[i];
7207
7208 if (r->in_g_packet)
7209 {
7210 if (r->offset * 2 >= strlen (rs->buf))
7211 /* This shouldn't happen - we adjusted in_g_packet above. */
7212 internal_error (__FILE__, __LINE__,
9b20d036 7213 _("unexpected end of 'g' packet reply"));
a744cf53
MS
7214 else if (rs->buf[r->offset * 2] == 'x')
7215 {
7216 gdb_assert (r->offset * 2 < strlen (rs->buf));
7217 /* The register isn't available, mark it as such (at
7218 the same time setting the value to zero). */
7219 regcache_raw_supply (regcache, r->regnum, NULL);
7220 }
7221 else
7222 regcache_raw_supply (regcache, r->regnum,
7223 regs + r->offset);
7224 }
7225 }
c906108c
SS
7226}
7227
29709017 7228static void
56be3814 7229fetch_registers_using_g (struct regcache *regcache)
29709017
DJ
7230{
7231 send_g_packet ();
56be3814 7232 process_g_packet (regcache);
29709017
DJ
7233}
7234
e6e4e701
PA
7235/* Make the remote selected traceframe match GDB's selected
7236 traceframe. */
7237
7238static void
7239set_remote_traceframe (void)
7240{
7241 int newnum;
262e1174 7242 struct remote_state *rs = get_remote_state ();
e6e4e701 7243
262e1174 7244 if (rs->remote_traceframe_number == get_traceframe_number ())
e6e4e701
PA
7245 return;
7246
7247 /* Avoid recursion, remote_trace_find calls us again. */
262e1174 7248 rs->remote_traceframe_number = get_traceframe_number ();
e6e4e701
PA
7249
7250 newnum = target_trace_find (tfind_number,
7251 get_traceframe_number (), 0, 0, NULL);
7252
7253 /* Should not happen. If it does, all bets are off. */
7254 if (newnum != get_traceframe_number ())
7255 warning (_("could not set remote traceframe"));
7256}
7257
74ca34ce 7258static void
28439f5e
PA
7259remote_fetch_registers (struct target_ops *ops,
7260 struct regcache *regcache, int regnum)
74ca34ce 7261{
74ca34ce
DJ
7262 struct remote_arch_state *rsa = get_remote_arch_state ();
7263 int i;
7264
e6e4e701 7265 set_remote_traceframe ();
79d7f229 7266 set_general_thread (inferior_ptid);
74ca34ce
DJ
7267
7268 if (regnum >= 0)
7269 {
7270 struct packet_reg *reg = packet_reg_from_regnum (rsa, regnum);
a744cf53 7271
74ca34ce
DJ
7272 gdb_assert (reg != NULL);
7273
7274 /* If this register might be in the 'g' packet, try that first -
7275 we are likely to read more than one register. If this is the
7276 first 'g' packet, we might be overly optimistic about its
7277 contents, so fall back to 'p'. */
7278 if (reg->in_g_packet)
7279 {
56be3814 7280 fetch_registers_using_g (regcache);
74ca34ce
DJ
7281 if (reg->in_g_packet)
7282 return;
7283 }
7284
56be3814 7285 if (fetch_register_using_p (regcache, reg))
74ca34ce
DJ
7286 return;
7287
7288 /* This register is not available. */
56be3814 7289 regcache_raw_supply (regcache, reg->regnum, NULL);
74ca34ce
DJ
7290
7291 return;
7292 }
7293
56be3814 7294 fetch_registers_using_g (regcache);
74ca34ce 7295
4a22f64d 7296 for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++)
74ca34ce 7297 if (!rsa->regs[i].in_g_packet)
56be3814 7298 if (!fetch_register_using_p (regcache, &rsa->regs[i]))
74ca34ce
DJ
7299 {
7300 /* This register is not available. */
56be3814 7301 regcache_raw_supply (regcache, i, NULL);
74ca34ce
DJ
7302 }
7303}
7304
c906108c
SS
7305/* Prepare to store registers. Since we may send them all (using a
7306 'G' request), we have to read out the ones we don't want to change
7307 first. */
7308
c5aa993b 7309static void
f32dbf8c 7310remote_prepare_to_store (struct target_ops *self, struct regcache *regcache)
c906108c 7311{
ea9c271d 7312 struct remote_arch_state *rsa = get_remote_arch_state ();
cf0e1e0d 7313 int i;
cfd77fa1 7314 gdb_byte buf[MAX_REGISTER_SIZE];
cf0e1e0d 7315
c906108c 7316 /* Make sure the entire registers array is valid. */
4082afcc 7317 switch (packet_support (PACKET_P))
5a2468f5
JM
7318 {
7319 case PACKET_DISABLE:
7320 case PACKET_SUPPORT_UNKNOWN:
cf0e1e0d 7321 /* Make sure all the necessary registers are cached. */
4a22f64d 7322 for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++)
ea9c271d 7323 if (rsa->regs[i].in_g_packet)
316f2060 7324 regcache_raw_read (regcache, rsa->regs[i].regnum, buf);
5a2468f5
JM
7325 break;
7326 case PACKET_ENABLE:
7327 break;
7328 }
7329}
7330
ad10f812 7331/* Helper: Attempt to store REGNUM using the P packet. Return fail IFF
23860348 7332 packet was not recognized. */
5a2468f5
JM
7333
7334static int
1f4437a4
MS
7335store_register_using_P (const struct regcache *regcache,
7336 struct packet_reg *reg)
5a2468f5 7337{
4a22f64d 7338 struct gdbarch *gdbarch = get_regcache_arch (regcache);
d01949b6 7339 struct remote_state *rs = get_remote_state ();
5a2468f5 7340 /* Try storing a single register. */
6d820c5c 7341 char *buf = rs->buf;
cfd77fa1 7342 gdb_byte regp[MAX_REGISTER_SIZE];
5a2468f5 7343 char *p;
5a2468f5 7344
4082afcc 7345 if (packet_support (PACKET_P) == PACKET_DISABLE)
74ca34ce
DJ
7346 return 0;
7347
7348 if (reg->pnum == -1)
7349 return 0;
7350
ea9c271d 7351 xsnprintf (buf, get_remote_packet_size (), "P%s=", phex_nz (reg->pnum, 0));
5a2468f5 7352 p = buf + strlen (buf);
56be3814 7353 regcache_raw_collect (regcache, reg->regnum, regp);
4a22f64d 7354 bin2hex (regp, p, register_size (gdbarch, reg->regnum));
1f4437a4
MS
7355 putpkt (rs->buf);
7356 getpkt (&rs->buf, &rs->buf_size, 0);
5a2468f5 7357
74ca34ce
DJ
7358 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_P]))
7359 {
7360 case PACKET_OK:
7361 return 1;
7362 case PACKET_ERROR:
27a9c0bf
MS
7363 error (_("Could not write register \"%s\"; remote failure reply '%s'"),
7364 gdbarch_register_name (gdbarch, reg->regnum), rs->buf);
74ca34ce
DJ
7365 case PACKET_UNKNOWN:
7366 return 0;
7367 default:
7368 internal_error (__FILE__, __LINE__, _("Bad result from packet_ok"));
7369 }
c906108c
SS
7370}
7371
23860348
MS
7372/* Store register REGNUM, or all registers if REGNUM == -1, from the
7373 contents of the register cache buffer. FIXME: ignores errors. */
c906108c
SS
7374
7375static void
56be3814 7376store_registers_using_G (const struct regcache *regcache)
c906108c 7377{
d01949b6 7378 struct remote_state *rs = get_remote_state ();
ea9c271d 7379 struct remote_arch_state *rsa = get_remote_arch_state ();
cfd77fa1 7380 gdb_byte *regs;
c906108c
SS
7381 char *p;
7382
193cb69f
AC
7383 /* Extract all the registers in the regcache copying them into a
7384 local buffer. */
7385 {
b323314b 7386 int i;
a744cf53 7387
224c3ddb 7388 regs = (gdb_byte *) alloca (rsa->sizeof_g_packet);
ea9c271d 7389 memset (regs, 0, rsa->sizeof_g_packet);
4a22f64d 7390 for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++)
193cb69f 7391 {
ea9c271d 7392 struct packet_reg *r = &rsa->regs[i];
a744cf53 7393
b323314b 7394 if (r->in_g_packet)
56be3814 7395 regcache_raw_collect (regcache, r->regnum, regs + r->offset);
193cb69f
AC
7396 }
7397 }
c906108c
SS
7398
7399 /* Command describes registers byte by byte,
7400 each byte encoded as two hex characters. */
6d820c5c 7401 p = rs->buf;
193cb69f 7402 *p++ = 'G';
74ca34ce
DJ
7403 /* remote_prepare_to_store insures that rsa->sizeof_g_packet gets
7404 updated. */
7405 bin2hex (regs, p, rsa->sizeof_g_packet);
1f4437a4
MS
7406 putpkt (rs->buf);
7407 getpkt (&rs->buf, &rs->buf_size, 0);
7408 if (packet_check_result (rs->buf) == PACKET_ERROR)
27a9c0bf
MS
7409 error (_("Could not write registers; remote failure reply '%s'"),
7410 rs->buf);
c906108c 7411}
74ca34ce
DJ
7412
7413/* Store register REGNUM, or all registers if REGNUM == -1, from the contents
7414 of the register cache buffer. FIXME: ignores errors. */
7415
7416static void
28439f5e
PA
7417remote_store_registers (struct target_ops *ops,
7418 struct regcache *regcache, int regnum)
74ca34ce 7419{
74ca34ce
DJ
7420 struct remote_arch_state *rsa = get_remote_arch_state ();
7421 int i;
7422
e6e4e701 7423 set_remote_traceframe ();
79d7f229 7424 set_general_thread (inferior_ptid);
74ca34ce
DJ
7425
7426 if (regnum >= 0)
7427 {
7428 struct packet_reg *reg = packet_reg_from_regnum (rsa, regnum);
a744cf53 7429
74ca34ce
DJ
7430 gdb_assert (reg != NULL);
7431
7432 /* Always prefer to store registers using the 'P' packet if
7433 possible; we often change only a small number of registers.
7434 Sometimes we change a larger number; we'd need help from a
7435 higher layer to know to use 'G'. */
56be3814 7436 if (store_register_using_P (regcache, reg))
74ca34ce
DJ
7437 return;
7438
7439 /* For now, don't complain if we have no way to write the
7440 register. GDB loses track of unavailable registers too
7441 easily. Some day, this may be an error. We don't have
0df8b418 7442 any way to read the register, either... */
74ca34ce
DJ
7443 if (!reg->in_g_packet)
7444 return;
7445
56be3814 7446 store_registers_using_G (regcache);
74ca34ce
DJ
7447 return;
7448 }
7449
56be3814 7450 store_registers_using_G (regcache);
74ca34ce 7451
4a22f64d 7452 for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++)
74ca34ce 7453 if (!rsa->regs[i].in_g_packet)
56be3814 7454 if (!store_register_using_P (regcache, &rsa->regs[i]))
74ca34ce
DJ
7455 /* See above for why we do not issue an error here. */
7456 continue;
7457}
c906108c
SS
7458\f
7459
7460/* Return the number of hex digits in num. */
7461
7462static int
fba45db2 7463hexnumlen (ULONGEST num)
c906108c
SS
7464{
7465 int i;
7466
7467 for (i = 0; num != 0; i++)
7468 num >>= 4;
7469
325fac50 7470 return std::max (i, 1);
c906108c
SS
7471}
7472
2df3850c 7473/* Set BUF to the minimum number of hex digits representing NUM. */
c906108c
SS
7474
7475static int
fba45db2 7476hexnumstr (char *buf, ULONGEST num)
c906108c 7477{
c906108c 7478 int len = hexnumlen (num);
a744cf53 7479
2df3850c
JM
7480 return hexnumnstr (buf, num, len);
7481}
7482
c906108c 7483
2df3850c 7484/* Set BUF to the hex digits representing NUM, padded to WIDTH characters. */
c906108c 7485
2df3850c 7486static int
fba45db2 7487hexnumnstr (char *buf, ULONGEST num, int width)
2df3850c
JM
7488{
7489 int i;
7490
7491 buf[width] = '\0';
7492
7493 for (i = width - 1; i >= 0; i--)
c906108c 7494 {
c5aa993b 7495 buf[i] = "0123456789abcdef"[(num & 0xf)];
c906108c
SS
7496 num >>= 4;
7497 }
7498
2df3850c 7499 return width;
c906108c
SS
7500}
7501
23860348 7502/* Mask all but the least significant REMOTE_ADDRESS_SIZE bits. */
c906108c
SS
7503
7504static CORE_ADDR
fba45db2 7505remote_address_masked (CORE_ADDR addr)
c906108c 7506{
883b9c6c 7507 unsigned int address_size = remote_address_size;
a744cf53 7508
911c95a5
UW
7509 /* If "remoteaddresssize" was not set, default to target address size. */
7510 if (!address_size)
f5656ead 7511 address_size = gdbarch_addr_bit (target_gdbarch ());
911c95a5
UW
7512
7513 if (address_size > 0
7514 && address_size < (sizeof (ULONGEST) * 8))
c906108c
SS
7515 {
7516 /* Only create a mask when that mask can safely be constructed
23860348 7517 in a ULONGEST variable. */
c906108c 7518 ULONGEST mask = 1;
a744cf53 7519
911c95a5 7520 mask = (mask << address_size) - 1;
c906108c
SS
7521 addr &= mask;
7522 }
7523 return addr;
7524}
7525
7526/* Determine whether the remote target supports binary downloading.
7527 This is accomplished by sending a no-op memory write of zero length
7528 to the target at the specified address. It does not suffice to send
23860348
MS
7529 the whole packet, since many stubs strip the eighth bit and
7530 subsequently compute a wrong checksum, which causes real havoc with
7531 remote_write_bytes.
7a292a7a 7532
96baa820 7533 NOTE: This can still lose if the serial line is not eight-bit
0df8b418 7534 clean. In cases like this, the user should clear "remote
23860348 7535 X-packet". */
96baa820 7536
c906108c 7537static void
fba45db2 7538check_binary_download (CORE_ADDR addr)
c906108c 7539{
d01949b6 7540 struct remote_state *rs = get_remote_state ();
24b06219 7541
4082afcc 7542 switch (packet_support (PACKET_X))
c906108c 7543 {
96baa820
JM
7544 case PACKET_DISABLE:
7545 break;
7546 case PACKET_ENABLE:
7547 break;
7548 case PACKET_SUPPORT_UNKNOWN:
7549 {
96baa820 7550 char *p;
802188a7 7551
2e9f7625 7552 p = rs->buf;
96baa820
JM
7553 *p++ = 'X';
7554 p += hexnumstr (p, (ULONGEST) addr);
7555 *p++ = ',';
7556 p += hexnumstr (p, (ULONGEST) 0);
7557 *p++ = ':';
7558 *p = '\0';
802188a7 7559
2e9f7625 7560 putpkt_binary (rs->buf, (int) (p - rs->buf));
6d820c5c 7561 getpkt (&rs->buf, &rs->buf_size, 0);
c906108c 7562
2e9f7625 7563 if (rs->buf[0] == '\0')
96baa820
JM
7564 {
7565 if (remote_debug)
7566 fprintf_unfiltered (gdb_stdlog,
3e43a32a
MS
7567 "binary downloading NOT "
7568 "supported by target\n");
444abaca 7569 remote_protocol_packets[PACKET_X].support = PACKET_DISABLE;
96baa820
JM
7570 }
7571 else
7572 {
7573 if (remote_debug)
7574 fprintf_unfiltered (gdb_stdlog,
64b9b334 7575 "binary downloading supported by target\n");
444abaca 7576 remote_protocol_packets[PACKET_X].support = PACKET_ENABLE;
96baa820
JM
7577 }
7578 break;
7579 }
c906108c
SS
7580 }
7581}
7582
124e13d9
SM
7583/* Helper function to resize the payload in order to try to get a good
7584 alignment. We try to write an amount of data such that the next write will
7585 start on an address aligned on REMOTE_ALIGN_WRITES. */
7586
7587static int
7588align_for_efficient_write (int todo, CORE_ADDR memaddr)
7589{
7590 return ((memaddr + todo) & ~(REMOTE_ALIGN_WRITES - 1)) - memaddr;
7591}
7592
c906108c
SS
7593/* Write memory data directly to the remote machine.
7594 This does not inform the data cache; the data cache uses this.
a76d924d 7595 HEADER is the starting part of the packet.
c906108c
SS
7596 MEMADDR is the address in the remote memory space.
7597 MYADDR is the address of the buffer in our space.
124e13d9
SM
7598 LEN_UNITS is the number of addressable units to write.
7599 UNIT_SIZE is the length in bytes of an addressable unit.
a76d924d
DJ
7600 PACKET_FORMAT should be either 'X' or 'M', and indicates if we
7601 should send data as binary ('X'), or hex-encoded ('M').
7602
7603 The function creates packet of the form
7604 <HEADER><ADDRESS>,<LENGTH>:<DATA>
7605
124e13d9 7606 where encoding of <DATA> is terminated by PACKET_FORMAT.
a76d924d
DJ
7607
7608 If USE_LENGTH is 0, then the <LENGTH> field and the preceding comma
7609 are omitted.
7610
9b409511 7611 Return the transferred status, error or OK (an
124e13d9
SM
7612 'enum target_xfer_status' value). Save the number of addressable units
7613 transferred in *XFERED_LEN_UNITS. Only transfer a single packet.
7614
7615 On a platform with an addressable memory size of 2 bytes (UNIT_SIZE == 2), an
7616 exchange between gdb and the stub could look like (?? in place of the
7617 checksum):
7618
7619 -> $m1000,4#??
7620 <- aaaabbbbccccdddd
7621
7622 -> $M1000,3:eeeeffffeeee#??
7623 <- OK
7624
7625 -> $m1000,4#??
7626 <- eeeeffffeeeedddd */
c906108c 7627
9b409511 7628static enum target_xfer_status
a76d924d 7629remote_write_bytes_aux (const char *header, CORE_ADDR memaddr,
124e13d9
SM
7630 const gdb_byte *myaddr, ULONGEST len_units,
7631 int unit_size, ULONGEST *xfered_len_units,
7632 char packet_format, int use_length)
c906108c 7633{
6d820c5c 7634 struct remote_state *rs = get_remote_state ();
cfd77fa1 7635 char *p;
a76d924d
DJ
7636 char *plen = NULL;
7637 int plenlen = 0;
124e13d9
SM
7638 int todo_units;
7639 int units_written;
7640 int payload_capacity_bytes;
7641 int payload_length_bytes;
a76d924d
DJ
7642
7643 if (packet_format != 'X' && packet_format != 'M')
7644 internal_error (__FILE__, __LINE__,
9b20d036 7645 _("remote_write_bytes_aux: bad packet format"));
c906108c 7646
124e13d9 7647 if (len_units == 0)
9b409511 7648 return TARGET_XFER_EOF;
b2182ed2 7649
124e13d9 7650 payload_capacity_bytes = get_memory_write_packet_size ();
2bc416ba 7651
6d820c5c
DJ
7652 /* The packet buffer will be large enough for the payload;
7653 get_memory_packet_size ensures this. */
a76d924d 7654 rs->buf[0] = '\0';
c906108c 7655
a257b5bb 7656 /* Compute the size of the actual payload by subtracting out the
0df8b418
MS
7657 packet header and footer overhead: "$M<memaddr>,<len>:...#nn". */
7658
124e13d9 7659 payload_capacity_bytes -= strlen ("$,:#NN");
a76d924d 7660 if (!use_length)
0df8b418 7661 /* The comma won't be used. */
124e13d9
SM
7662 payload_capacity_bytes += 1;
7663 payload_capacity_bytes -= strlen (header);
7664 payload_capacity_bytes -= hexnumlen (memaddr);
c906108c 7665
a76d924d 7666 /* Construct the packet excluding the data: "<header><memaddr>,<len>:". */
917317f4 7667
a76d924d
DJ
7668 strcat (rs->buf, header);
7669 p = rs->buf + strlen (header);
7670
7671 /* Compute a best guess of the number of bytes actually transfered. */
7672 if (packet_format == 'X')
c906108c 7673 {
23860348 7674 /* Best guess at number of bytes that will fit. */
325fac50
PA
7675 todo_units = std::min (len_units,
7676 (ULONGEST) payload_capacity_bytes / unit_size);
a76d924d 7677 if (use_length)
124e13d9 7678 payload_capacity_bytes -= hexnumlen (todo_units);
325fac50 7679 todo_units = std::min (todo_units, payload_capacity_bytes / unit_size);
a76d924d
DJ
7680 }
7681 else
7682 {
124e13d9 7683 /* Number of bytes that will fit. */
325fac50
PA
7684 todo_units
7685 = std::min (len_units,
7686 (ULONGEST) (payload_capacity_bytes / unit_size) / 2);
a76d924d 7687 if (use_length)
124e13d9 7688 payload_capacity_bytes -= hexnumlen (todo_units);
325fac50
PA
7689 todo_units = std::min (todo_units,
7690 (payload_capacity_bytes / unit_size) / 2);
917317f4 7691 }
a76d924d 7692
124e13d9 7693 if (todo_units <= 0)
3de11b2e 7694 internal_error (__FILE__, __LINE__,
405f8e94 7695 _("minimum packet size too small to write data"));
802188a7 7696
6765f3e5
DJ
7697 /* If we already need another packet, then try to align the end
7698 of this packet to a useful boundary. */
124e13d9
SM
7699 if (todo_units > 2 * REMOTE_ALIGN_WRITES && todo_units < len_units)
7700 todo_units = align_for_efficient_write (todo_units, memaddr);
6765f3e5 7701
a257b5bb 7702 /* Append "<memaddr>". */
917317f4
JM
7703 memaddr = remote_address_masked (memaddr);
7704 p += hexnumstr (p, (ULONGEST) memaddr);
a257b5bb 7705
a76d924d
DJ
7706 if (use_length)
7707 {
7708 /* Append ",". */
7709 *p++ = ',';
802188a7 7710
124e13d9
SM
7711 /* Append the length and retain its location and size. It may need to be
7712 adjusted once the packet body has been created. */
a76d924d 7713 plen = p;
124e13d9 7714 plenlen = hexnumstr (p, (ULONGEST) todo_units);
a76d924d
DJ
7715 p += plenlen;
7716 }
a257b5bb
AC
7717
7718 /* Append ":". */
917317f4
JM
7719 *p++ = ':';
7720 *p = '\0';
802188a7 7721
a257b5bb 7722 /* Append the packet body. */
a76d924d 7723 if (packet_format == 'X')
917317f4 7724 {
917317f4
JM
7725 /* Binary mode. Send target system values byte by byte, in
7726 increasing byte addresses. Only escape certain critical
7727 characters. */
124e13d9
SM
7728 payload_length_bytes =
7729 remote_escape_output (myaddr, todo_units, unit_size, (gdb_byte *) p,
7730 &units_written, payload_capacity_bytes);
6765f3e5 7731
124e13d9 7732 /* If not all TODO units fit, then we'll need another packet. Make
9b7194bc
DJ
7733 a second try to keep the end of the packet aligned. Don't do
7734 this if the packet is tiny. */
124e13d9 7735 if (units_written < todo_units && units_written > 2 * REMOTE_ALIGN_WRITES)
6765f3e5 7736 {
124e13d9
SM
7737 int new_todo_units;
7738
7739 new_todo_units = align_for_efficient_write (units_written, memaddr);
7740
7741 if (new_todo_units != units_written)
7742 payload_length_bytes =
7743 remote_escape_output (myaddr, new_todo_units, unit_size,
7744 (gdb_byte *) p, &units_written,
7745 payload_capacity_bytes);
6765f3e5
DJ
7746 }
7747
124e13d9
SM
7748 p += payload_length_bytes;
7749 if (use_length && units_written < todo_units)
c906108c 7750 {
802188a7 7751 /* Escape chars have filled up the buffer prematurely,
124e13d9 7752 and we have actually sent fewer units than planned.
917317f4
JM
7753 Fix-up the length field of the packet. Use the same
7754 number of characters as before. */
124e13d9
SM
7755 plen += hexnumnstr (plen, (ULONGEST) units_written,
7756 plenlen);
917317f4 7757 *plen = ':'; /* overwrite \0 from hexnumnstr() */
c906108c 7758 }
a76d924d
DJ
7759 }
7760 else
7761 {
917317f4
JM
7762 /* Normal mode: Send target system values byte by byte, in
7763 increasing byte addresses. Each byte is encoded as a two hex
7764 value. */
124e13d9
SM
7765 p += 2 * bin2hex (myaddr, p, todo_units * unit_size);
7766 units_written = todo_units;
c906108c 7767 }
802188a7 7768
2e9f7625 7769 putpkt_binary (rs->buf, (int) (p - rs->buf));
6d820c5c 7770 getpkt (&rs->buf, &rs->buf_size, 0);
802188a7 7771
2e9f7625 7772 if (rs->buf[0] == 'E')
00d84524 7773 return TARGET_XFER_E_IO;
802188a7 7774
124e13d9
SM
7775 /* Return UNITS_WRITTEN, not TODO_UNITS, in case escape chars caused us to
7776 send fewer units than we'd planned. */
7777 *xfered_len_units = (ULONGEST) units_written;
9b409511 7778 return TARGET_XFER_OK;
c906108c
SS
7779}
7780
a76d924d
DJ
7781/* Write memory data directly to the remote machine.
7782 This does not inform the data cache; the data cache uses this.
7783 MEMADDR is the address in the remote memory space.
7784 MYADDR is the address of the buffer in our space.
7785 LEN is the number of bytes.
7786
9b409511
YQ
7787 Return the transferred status, error or OK (an
7788 'enum target_xfer_status' value). Save the number of bytes
7789 transferred in *XFERED_LEN. Only transfer a single packet. */
a76d924d 7790
9b409511
YQ
7791static enum target_xfer_status
7792remote_write_bytes (CORE_ADDR memaddr, const gdb_byte *myaddr, ULONGEST len,
124e13d9 7793 int unit_size, ULONGEST *xfered_len)
a76d924d
DJ
7794{
7795 char *packet_format = 0;
7796
7797 /* Check whether the target supports binary download. */
7798 check_binary_download (memaddr);
7799
4082afcc 7800 switch (packet_support (PACKET_X))
a76d924d
DJ
7801 {
7802 case PACKET_ENABLE:
7803 packet_format = "X";
7804 break;
7805 case PACKET_DISABLE:
7806 packet_format = "M";
7807 break;
7808 case PACKET_SUPPORT_UNKNOWN:
7809 internal_error (__FILE__, __LINE__,
7810 _("remote_write_bytes: bad internal state"));
7811 default:
7812 internal_error (__FILE__, __LINE__, _("bad switch"));
7813 }
7814
7815 return remote_write_bytes_aux (packet_format,
124e13d9 7816 memaddr, myaddr, len, unit_size, xfered_len,
9b409511 7817 packet_format[0], 1);
a76d924d
DJ
7818}
7819
9217e74e
YQ
7820/* Read memory data directly from the remote machine.
7821 This does not use the data cache; the data cache uses this.
7822 MEMADDR is the address in the remote memory space.
7823 MYADDR is the address of the buffer in our space.
124e13d9
SM
7824 LEN_UNITS is the number of addressable memory units to read..
7825 UNIT_SIZE is the length in bytes of an addressable unit.
9217e74e
YQ
7826
7827 Return the transferred status, error or OK (an
7828 'enum target_xfer_status' value). Save the number of bytes
124e13d9
SM
7829 transferred in *XFERED_LEN_UNITS.
7830
7831 See the comment of remote_write_bytes_aux for an example of
7832 memory read/write exchange between gdb and the stub. */
9217e74e
YQ
7833
7834static enum target_xfer_status
124e13d9
SM
7835remote_read_bytes_1 (CORE_ADDR memaddr, gdb_byte *myaddr, ULONGEST len_units,
7836 int unit_size, ULONGEST *xfered_len_units)
9217e74e
YQ
7837{
7838 struct remote_state *rs = get_remote_state ();
124e13d9 7839 int buf_size_bytes; /* Max size of packet output buffer. */
9217e74e 7840 char *p;
124e13d9
SM
7841 int todo_units;
7842 int decoded_bytes;
9217e74e 7843
124e13d9 7844 buf_size_bytes = get_memory_read_packet_size ();
9217e74e
YQ
7845 /* The packet buffer will be large enough for the payload;
7846 get_memory_packet_size ensures this. */
7847
124e13d9 7848 /* Number of units that will fit. */
325fac50
PA
7849 todo_units = std::min (len_units,
7850 (ULONGEST) (buf_size_bytes / unit_size) / 2);
9217e74e
YQ
7851
7852 /* Construct "m"<memaddr>","<len>". */
7853 memaddr = remote_address_masked (memaddr);
7854 p = rs->buf;
7855 *p++ = 'm';
7856 p += hexnumstr (p, (ULONGEST) memaddr);
7857 *p++ = ',';
124e13d9 7858 p += hexnumstr (p, (ULONGEST) todo_units);
9217e74e
YQ
7859 *p = '\0';
7860 putpkt (rs->buf);
7861 getpkt (&rs->buf, &rs->buf_size, 0);
7862 if (rs->buf[0] == 'E'
7863 && isxdigit (rs->buf[1]) && isxdigit (rs->buf[2])
7864 && rs->buf[3] == '\0')
7865 return TARGET_XFER_E_IO;
7866 /* Reply describes memory byte by byte, each byte encoded as two hex
7867 characters. */
7868 p = rs->buf;
124e13d9 7869 decoded_bytes = hex2bin (p, myaddr, todo_units * unit_size);
9217e74e 7870 /* Return what we have. Let higher layers handle partial reads. */
124e13d9 7871 *xfered_len_units = (ULONGEST) (decoded_bytes / unit_size);
9217e74e
YQ
7872 return TARGET_XFER_OK;
7873}
7874
b55fbac4
YQ
7875/* Using the set of read-only target sections of remote, read live
7876 read-only memory.
8acf9577
YQ
7877
7878 For interface/parameters/return description see target.h,
7879 to_xfer_partial. */
7880
7881static enum target_xfer_status
b55fbac4
YQ
7882remote_xfer_live_readonly_partial (struct target_ops *ops, gdb_byte *readbuf,
7883 ULONGEST memaddr, ULONGEST len,
124e13d9 7884 int unit_size, ULONGEST *xfered_len)
8acf9577
YQ
7885{
7886 struct target_section *secp;
7887 struct target_section_table *table;
7888
7889 secp = target_section_by_addr (ops, memaddr);
7890 if (secp != NULL
7891 && (bfd_get_section_flags (secp->the_bfd_section->owner,
7892 secp->the_bfd_section)
7893 & SEC_READONLY))
7894 {
7895 struct target_section *p;
7896 ULONGEST memend = memaddr + len;
7897
7898 table = target_get_section_table (ops);
7899
7900 for (p = table->sections; p < table->sections_end; p++)
7901 {
7902 if (memaddr >= p->addr)
7903 {
7904 if (memend <= p->endaddr)
7905 {
7906 /* Entire transfer is within this section. */
124e13d9 7907 return remote_read_bytes_1 (memaddr, readbuf, len, unit_size,
b55fbac4 7908 xfered_len);
8acf9577
YQ
7909 }
7910 else if (memaddr >= p->endaddr)
7911 {
7912 /* This section ends before the transfer starts. */
7913 continue;
7914 }
7915 else
7916 {
7917 /* This section overlaps the transfer. Just do half. */
7918 len = p->endaddr - memaddr;
124e13d9 7919 return remote_read_bytes_1 (memaddr, readbuf, len, unit_size,
b55fbac4 7920 xfered_len);
8acf9577
YQ
7921 }
7922 }
7923 }
7924 }
7925
7926 return TARGET_XFER_EOF;
7927}
7928
9217e74e
YQ
7929/* Similar to remote_read_bytes_1, but it reads from the remote stub
7930 first if the requested memory is unavailable in traceframe.
7931 Otherwise, fall back to remote_read_bytes_1. */
c906108c 7932
9b409511 7933static enum target_xfer_status
8acf9577 7934remote_read_bytes (struct target_ops *ops, CORE_ADDR memaddr,
124e13d9
SM
7935 gdb_byte *myaddr, ULONGEST len, int unit_size,
7936 ULONGEST *xfered_len)
c906108c 7937{
6b6aa828 7938 if (len == 0)
96c4f946 7939 return TARGET_XFER_EOF;
b2182ed2 7940
8acf9577
YQ
7941 if (get_traceframe_number () != -1)
7942 {
7943 VEC(mem_range_s) *available;
7944
7945 /* If we fail to get the set of available memory, then the
7946 target does not support querying traceframe info, and so we
7947 attempt reading from the traceframe anyway (assuming the
7948 target implements the old QTro packet then). */
7949 if (traceframe_available_memory (&available, memaddr, len))
7950 {
7951 struct cleanup *old_chain;
7952
7953 old_chain = make_cleanup (VEC_cleanup(mem_range_s), &available);
7954
7955 if (VEC_empty (mem_range_s, available)
7956 || VEC_index (mem_range_s, available, 0)->start != memaddr)
7957 {
7958 enum target_xfer_status res;
7959
7960 /* Don't read into the traceframe's available
7961 memory. */
7962 if (!VEC_empty (mem_range_s, available))
7963 {
7964 LONGEST oldlen = len;
7965
7966 len = VEC_index (mem_range_s, available, 0)->start - memaddr;
7967 gdb_assert (len <= oldlen);
7968 }
7969
7970 do_cleanups (old_chain);
7971
7972 /* This goes through the topmost target again. */
b55fbac4 7973 res = remote_xfer_live_readonly_partial (ops, myaddr, memaddr,
124e13d9 7974 len, unit_size, xfered_len);
8acf9577
YQ
7975 if (res == TARGET_XFER_OK)
7976 return TARGET_XFER_OK;
7977 else
7978 {
7979 /* No use trying further, we know some memory starting
7980 at MEMADDR isn't available. */
7981 *xfered_len = len;
7982 return TARGET_XFER_UNAVAILABLE;
7983 }
7984 }
7985
7986 /* Don't try to read more than how much is available, in
7987 case the target implements the deprecated QTro packet to
7988 cater for older GDBs (the target's knowledge of read-only
7989 sections may be outdated by now). */
7990 len = VEC_index (mem_range_s, available, 0)->length;
7991
7992 do_cleanups (old_chain);
7993 }
7994 }
7995
124e13d9 7996 return remote_read_bytes_1 (memaddr, myaddr, len, unit_size, xfered_len);
c906108c 7997}
74531fed 7998
c906108c 7999\f
c906108c 8000
a76d924d
DJ
8001/* Sends a packet with content determined by the printf format string
8002 FORMAT and the remaining arguments, then gets the reply. Returns
8003 whether the packet was a success, a failure, or unknown. */
8004
77b64a49
PA
8005static enum packet_result remote_send_printf (const char *format, ...)
8006 ATTRIBUTE_PRINTF (1, 2);
8007
2c0b251b 8008static enum packet_result
a76d924d
DJ
8009remote_send_printf (const char *format, ...)
8010{
8011 struct remote_state *rs = get_remote_state ();
8012 int max_size = get_remote_packet_size ();
a76d924d 8013 va_list ap;
a744cf53 8014
a76d924d
DJ
8015 va_start (ap, format);
8016
8017 rs->buf[0] = '\0';
8018 if (vsnprintf (rs->buf, max_size, format, ap) >= max_size)
9b20d036 8019 internal_error (__FILE__, __LINE__, _("Too long remote packet."));
a76d924d
DJ
8020
8021 if (putpkt (rs->buf) < 0)
8022 error (_("Communication problem with target."));
8023
8024 rs->buf[0] = '\0';
8025 getpkt (&rs->buf, &rs->buf_size, 0);
8026
8027 return packet_check_result (rs->buf);
8028}
8029
8030static void
8031restore_remote_timeout (void *p)
8032{
8033 int value = *(int *)p;
a744cf53 8034
a76d924d
DJ
8035 remote_timeout = value;
8036}
8037
8038/* Flash writing can take quite some time. We'll set
8039 effectively infinite timeout for flash operations.
8040 In future, we'll need to decide on a better approach. */
8041static const int remote_flash_timeout = 1000;
8042
8043static void
8044remote_flash_erase (struct target_ops *ops,
8045 ULONGEST address, LONGEST length)
8046{
f5656ead 8047 int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
a76d924d
DJ
8048 int saved_remote_timeout = remote_timeout;
8049 enum packet_result ret;
a76d924d
DJ
8050 struct cleanup *back_to = make_cleanup (restore_remote_timeout,
8051 &saved_remote_timeout);
a744cf53 8052
a76d924d
DJ
8053 remote_timeout = remote_flash_timeout;
8054
8055 ret = remote_send_printf ("vFlashErase:%s,%s",
5af949e3 8056 phex (address, addr_size),
a76d924d
DJ
8057 phex (length, 4));
8058 switch (ret)
8059 {
8060 case PACKET_UNKNOWN:
8061 error (_("Remote target does not support flash erase"));
8062 case PACKET_ERROR:
8063 error (_("Error erasing flash with vFlashErase packet"));
8064 default:
8065 break;
8066 }
8067
8068 do_cleanups (back_to);
8069}
8070
9b409511
YQ
8071static enum target_xfer_status
8072remote_flash_write (struct target_ops *ops, ULONGEST address,
8073 ULONGEST length, ULONGEST *xfered_len,
8074 const gdb_byte *data)
a76d924d
DJ
8075{
8076 int saved_remote_timeout = remote_timeout;
9b409511 8077 enum target_xfer_status ret;
a76d924d 8078 struct cleanup *back_to = make_cleanup (restore_remote_timeout,
9b409511 8079 &saved_remote_timeout);
a76d924d
DJ
8080
8081 remote_timeout = remote_flash_timeout;
124e13d9 8082 ret = remote_write_bytes_aux ("vFlashWrite:", address, data, length, 1,
9b409511 8083 xfered_len,'X', 0);
a76d924d
DJ
8084 do_cleanups (back_to);
8085
8086 return ret;
8087}
8088
8089static void
8090remote_flash_done (struct target_ops *ops)
8091{
8092 int saved_remote_timeout = remote_timeout;
8093 int ret;
8094 struct cleanup *back_to = make_cleanup (restore_remote_timeout,
8095 &saved_remote_timeout);
8096
8097 remote_timeout = remote_flash_timeout;
8098 ret = remote_send_printf ("vFlashDone");
8099 do_cleanups (back_to);
8100
8101 switch (ret)
8102 {
8103 case PACKET_UNKNOWN:
8104 error (_("Remote target does not support vFlashDone"));
8105 case PACKET_ERROR:
8106 error (_("Error finishing flash operation"));
8107 default:
8108 break;
8109 }
8110}
8111
c906108c 8112static void
fba45db2 8113remote_files_info (struct target_ops *ignore)
c906108c
SS
8114{
8115 puts_filtered ("Debugging a target over a serial line.\n");
8116}
8117\f
8118/* Stuff for dealing with the packets which are part of this protocol.
8119 See comment at top of file for details. */
8120
1927e618
PA
8121/* Close/unpush the remote target, and throw a TARGET_CLOSE_ERROR
8122 error to higher layers. Called when a serial error is detected.
8123 The exception message is STRING, followed by a colon and a blank,
d6cb50a2
JK
8124 the system error message for errno at function entry and final dot
8125 for output compatibility with throw_perror_with_name. */
1927e618
PA
8126
8127static void
8128unpush_and_perror (const char *string)
8129{
d6cb50a2 8130 int saved_errno = errno;
1927e618
PA
8131
8132 remote_unpush_target ();
d6cb50a2
JK
8133 throw_error (TARGET_CLOSE_ERROR, "%s: %s.", string,
8134 safe_strerror (saved_errno));
1927e618
PA
8135}
8136
048094ac
PA
8137/* Read a single character from the remote end. The current quit
8138 handler is overridden to avoid quitting in the middle of packet
8139 sequence, as that would break communication with the remote server.
8140 See remote_serial_quit_handler for more detail. */
c906108c
SS
8141
8142static int
fba45db2 8143readchar (int timeout)
c906108c
SS
8144{
8145 int ch;
5d93a237 8146 struct remote_state *rs = get_remote_state ();
048094ac
PA
8147 struct cleanup *old_chain;
8148
8149 old_chain = make_cleanup_override_quit_handler (remote_serial_quit_handler);
8150
8151 rs->got_ctrlc_during_io = 0;
c906108c 8152
5d93a237 8153 ch = serial_readchar (rs->remote_desc, timeout);
c906108c 8154
048094ac
PA
8155 if (rs->got_ctrlc_during_io)
8156 set_quit_flag ();
8157
8158 do_cleanups (old_chain);
8159
2acceee2 8160 if (ch >= 0)
0876f84a 8161 return ch;
2acceee2
JM
8162
8163 switch ((enum serial_rc) ch)
c906108c
SS
8164 {
8165 case SERIAL_EOF:
78a095c3 8166 remote_unpush_target ();
598d3636 8167 throw_error (TARGET_CLOSE_ERROR, _("Remote connection closed"));
2acceee2 8168 /* no return */
c906108c 8169 case SERIAL_ERROR:
1927e618
PA
8170 unpush_and_perror (_("Remote communication error. "
8171 "Target disconnected."));
2acceee2 8172 /* no return */
c906108c 8173 case SERIAL_TIMEOUT:
2acceee2 8174 break;
c906108c 8175 }
2acceee2 8176 return ch;
c906108c
SS
8177}
8178
c33e31fd 8179/* Wrapper for serial_write that closes the target and throws if
048094ac
PA
8180 writing fails. The current quit handler is overridden to avoid
8181 quitting in the middle of packet sequence, as that would break
8182 communication with the remote server. See
8183 remote_serial_quit_handler for more detail. */
c33e31fd
PA
8184
8185static void
8186remote_serial_write (const char *str, int len)
8187{
5d93a237 8188 struct remote_state *rs = get_remote_state ();
048094ac
PA
8189 struct cleanup *old_chain;
8190
8191 old_chain = make_cleanup_override_quit_handler (remote_serial_quit_handler);
8192
8193 rs->got_ctrlc_during_io = 0;
5d93a237
TT
8194
8195 if (serial_write (rs->remote_desc, str, len))
c33e31fd 8196 {
1927e618
PA
8197 unpush_and_perror (_("Remote communication error. "
8198 "Target disconnected."));
c33e31fd 8199 }
048094ac
PA
8200
8201 if (rs->got_ctrlc_during_io)
8202 set_quit_flag ();
8203
8204 do_cleanups (old_chain);
c33e31fd
PA
8205}
8206
6d820c5c
DJ
8207/* Send the command in *BUF to the remote machine, and read the reply
8208 into *BUF. Report an error if we get an error reply. Resize
8209 *BUF using xrealloc if necessary to hold the result, and update
8210 *SIZEOF_BUF. */
c906108c
SS
8211
8212static void
6d820c5c
DJ
8213remote_send (char **buf,
8214 long *sizeof_buf)
c906108c 8215{
6d820c5c 8216 putpkt (*buf);
c2d11a7d 8217 getpkt (buf, sizeof_buf, 0);
c906108c 8218
6d820c5c
DJ
8219 if ((*buf)[0] == 'E')
8220 error (_("Remote failure reply: %s"), *buf);
c906108c
SS
8221}
8222
6e5abd65
PA
8223/* Return a pointer to an xmalloc'ed string representing an escaped
8224 version of BUF, of len N. E.g. \n is converted to \\n, \t to \\t,
8225 etc. The caller is responsible for releasing the returned
8226 memory. */
8227
8228static char *
8229escape_buffer (const char *buf, int n)
8230{
8231 struct cleanup *old_chain;
8232 struct ui_file *stb;
8233 char *str;
6e5abd65
PA
8234
8235 stb = mem_fileopen ();
8236 old_chain = make_cleanup_ui_file_delete (stb);
8237
6ef284bd 8238 fputstrn_unfiltered (buf, n, '\\', stb);
759ef836 8239 str = ui_file_xstrdup (stb, NULL);
6e5abd65
PA
8240 do_cleanups (old_chain);
8241 return str;
8242}
8243
c906108c
SS
8244/* Display a null-terminated packet on stdout, for debugging, using C
8245 string notation. */
8246
8247static void
baa336ce 8248print_packet (const char *buf)
c906108c
SS
8249{
8250 puts_filtered ("\"");
43e526b9 8251 fputstr_filtered (buf, '"', gdb_stdout);
c906108c
SS
8252 puts_filtered ("\"");
8253}
8254
8255int
baa336ce 8256putpkt (const char *buf)
c906108c
SS
8257{
8258 return putpkt_binary (buf, strlen (buf));
8259}
8260
8261/* Send a packet to the remote machine, with error checking. The data
23860348 8262 of the packet is in BUF. The string in BUF can be at most
ea9c271d 8263 get_remote_packet_size () - 5 to account for the $, # and checksum,
23860348
MS
8264 and for a possible /0 if we are debugging (remote_debug) and want
8265 to print the sent packet as a string. */
c906108c
SS
8266
8267static int
baa336ce 8268putpkt_binary (const char *buf, int cnt)
c906108c 8269{
2d717e4f 8270 struct remote_state *rs = get_remote_state ();
c906108c
SS
8271 int i;
8272 unsigned char csum = 0;
224c3ddb 8273 char *buf2 = (char *) xmalloc (cnt + 6);
a5c0808e 8274 struct cleanup *old_chain = make_cleanup (xfree, buf2);
085dd6e6 8275
c906108c
SS
8276 int ch;
8277 int tcount = 0;
8278 char *p;
8279
e24a49d8
PA
8280 /* Catch cases like trying to read memory or listing threads while
8281 we're waiting for a stop reply. The remote server wouldn't be
8282 ready to handle this request, so we'd hang and timeout. We don't
8283 have to worry about this in synchronous mode, because in that
8284 case it's not possible to issue a command while the target is
74531fed
PA
8285 running. This is not a problem in non-stop mode, because in that
8286 case, the stub is always ready to process serial input. */
6efcd9a8
PA
8287 if (!target_is_non_stop_p ()
8288 && target_is_async_p ()
8289 && rs->waiting_for_stop_reply)
9597b22a
DE
8290 {
8291 error (_("Cannot execute this command while the target is running.\n"
8292 "Use the \"interrupt\" command to stop the target\n"
8293 "and then try again."));
8294 }
e24a49d8 8295
2d717e4f
DJ
8296 /* We're sending out a new packet. Make sure we don't look at a
8297 stale cached response. */
8298 rs->cached_wait_status = 0;
8299
c906108c
SS
8300 /* Copy the packet into buffer BUF2, encapsulating it
8301 and giving it a checksum. */
8302
c906108c
SS
8303 p = buf2;
8304 *p++ = '$';
8305
8306 for (i = 0; i < cnt; i++)
8307 {
8308 csum += buf[i];
8309 *p++ = buf[i];
8310 }
8311 *p++ = '#';
8312 *p++ = tohex ((csum >> 4) & 0xf);
8313 *p++ = tohex (csum & 0xf);
8314
8315 /* Send it over and over until we get a positive ack. */
8316
8317 while (1)
8318 {
8319 int started_error_output = 0;
8320
8321 if (remote_debug)
8322 {
6e5abd65
PA
8323 struct cleanup *old_chain;
8324 char *str;
8325
c906108c 8326 *p = '\0';
6e5abd65
PA
8327 str = escape_buffer (buf2, p - buf2);
8328 old_chain = make_cleanup (xfree, str);
8329 fprintf_unfiltered (gdb_stdlog, "Sending packet: %s...", str);
0f71a2f6 8330 gdb_flush (gdb_stdlog);
6e5abd65 8331 do_cleanups (old_chain);
c906108c 8332 }
c33e31fd 8333 remote_serial_write (buf2, p - buf2);
c906108c 8334
a6f3e723
SL
8335 /* If this is a no acks version of the remote protocol, send the
8336 packet and move on. */
8337 if (rs->noack_mode)
8338 break;
8339
74531fed
PA
8340 /* Read until either a timeout occurs (-2) or '+' is read.
8341 Handle any notification that arrives in the mean time. */
c906108c
SS
8342 while (1)
8343 {
8344 ch = readchar (remote_timeout);
8345
c5aa993b 8346 if (remote_debug)
c906108c
SS
8347 {
8348 switch (ch)
8349 {
8350 case '+':
1216fa2c 8351 case '-':
c906108c
SS
8352 case SERIAL_TIMEOUT:
8353 case '$':
74531fed 8354 case '%':
c906108c
SS
8355 if (started_error_output)
8356 {
8357 putchar_unfiltered ('\n');
8358 started_error_output = 0;
8359 }
8360 }
8361 }
8362
8363 switch (ch)
8364 {
8365 case '+':
8366 if (remote_debug)
0f71a2f6 8367 fprintf_unfiltered (gdb_stdlog, "Ack\n");
a5c0808e 8368 do_cleanups (old_chain);
c906108c 8369 return 1;
1216fa2c
AC
8370 case '-':
8371 if (remote_debug)
8372 fprintf_unfiltered (gdb_stdlog, "Nak\n");
a17d146e 8373 /* FALLTHROUGH */
c906108c 8374 case SERIAL_TIMEOUT:
c5aa993b 8375 tcount++;
c906108c 8376 if (tcount > 3)
a5c0808e
PA
8377 {
8378 do_cleanups (old_chain);
8379 return 0;
8380 }
23860348 8381 break; /* Retransmit buffer. */
c906108c
SS
8382 case '$':
8383 {
40e3f985 8384 if (remote_debug)
2bc416ba 8385 fprintf_unfiltered (gdb_stdlog,
23860348 8386 "Packet instead of Ack, ignoring it\n");
d6f7abdf
AC
8387 /* It's probably an old response sent because an ACK
8388 was lost. Gobble up the packet and ack it so it
8389 doesn't get retransmitted when we resend this
8390 packet. */
6d820c5c 8391 skip_frame ();
c33e31fd 8392 remote_serial_write ("+", 1);
23860348 8393 continue; /* Now, go look for +. */
c906108c 8394 }
74531fed
PA
8395
8396 case '%':
8397 {
8398 int val;
8399
8400 /* If we got a notification, handle it, and go back to looking
8401 for an ack. */
8402 /* We've found the start of a notification. Now
8403 collect the data. */
8404 val = read_frame (&rs->buf, &rs->buf_size);
8405 if (val >= 0)
8406 {
8407 if (remote_debug)
8408 {
6e5abd65
PA
8409 struct cleanup *old_chain;
8410 char *str;
8411
8412 str = escape_buffer (rs->buf, val);
8413 old_chain = make_cleanup (xfree, str);
8414 fprintf_unfiltered (gdb_stdlog,
8415 " Notification received: %s\n",
8416 str);
8417 do_cleanups (old_chain);
74531fed 8418 }
5965e028 8419 handle_notification (rs->notif_state, rs->buf);
74531fed
PA
8420 /* We're in sync now, rewait for the ack. */
8421 tcount = 0;
8422 }
8423 else
8424 {
8425 if (remote_debug)
8426 {
8427 if (!started_error_output)
8428 {
8429 started_error_output = 1;
8430 fprintf_unfiltered (gdb_stdlog, "putpkt: Junk: ");
8431 }
8432 fputc_unfiltered (ch & 0177, gdb_stdlog);
8433 fprintf_unfiltered (gdb_stdlog, "%s", rs->buf);
8434 }
8435 }
8436 continue;
8437 }
8438 /* fall-through */
c906108c
SS
8439 default:
8440 if (remote_debug)
8441 {
8442 if (!started_error_output)
8443 {
8444 started_error_output = 1;
0f71a2f6 8445 fprintf_unfiltered (gdb_stdlog, "putpkt: Junk: ");
c906108c 8446 }
0f71a2f6 8447 fputc_unfiltered (ch & 0177, gdb_stdlog);
c906108c
SS
8448 }
8449 continue;
8450 }
23860348 8451 break; /* Here to retransmit. */
c906108c
SS
8452 }
8453
8454#if 0
8455 /* This is wrong. If doing a long backtrace, the user should be
c5aa993b
JM
8456 able to get out next time we call QUIT, without anything as
8457 violent as interrupt_query. If we want to provide a way out of
8458 here without getting to the next QUIT, it should be based on
8459 hitting ^C twice as in remote_wait. */
c906108c
SS
8460 if (quit_flag)
8461 {
8462 quit_flag = 0;
8463 interrupt_query ();
8464 }
8465#endif
8466 }
a5c0808e
PA
8467
8468 do_cleanups (old_chain);
a6f3e723 8469 return 0;
c906108c
SS
8470}
8471
6d820c5c
DJ
8472/* Come here after finding the start of a frame when we expected an
8473 ack. Do our best to discard the rest of this packet. */
8474
8475static void
8476skip_frame (void)
8477{
8478 int c;
8479
8480 while (1)
8481 {
8482 c = readchar (remote_timeout);
8483 switch (c)
8484 {
8485 case SERIAL_TIMEOUT:
8486 /* Nothing we can do. */
8487 return;
8488 case '#':
8489 /* Discard the two bytes of checksum and stop. */
8490 c = readchar (remote_timeout);
8491 if (c >= 0)
8492 c = readchar (remote_timeout);
8493
8494 return;
8495 case '*': /* Run length encoding. */
8496 /* Discard the repeat count. */
8497 c = readchar (remote_timeout);
8498 if (c < 0)
8499 return;
8500 break;
8501 default:
8502 /* A regular character. */
8503 break;
8504 }
8505 }
8506}
8507
c906108c 8508/* Come here after finding the start of the frame. Collect the rest
6d820c5c
DJ
8509 into *BUF, verifying the checksum, length, and handling run-length
8510 compression. NUL terminate the buffer. If there is not enough room,
8511 expand *BUF using xrealloc.
c906108c 8512
c2d11a7d
JM
8513 Returns -1 on error, number of characters in buffer (ignoring the
8514 trailing NULL) on success. (could be extended to return one of the
23860348 8515 SERIAL status indications). */
c2d11a7d
JM
8516
8517static long
6d820c5c
DJ
8518read_frame (char **buf_p,
8519 long *sizeof_buf)
c906108c
SS
8520{
8521 unsigned char csum;
c2d11a7d 8522 long bc;
c906108c 8523 int c;
6d820c5c 8524 char *buf = *buf_p;
a6f3e723 8525 struct remote_state *rs = get_remote_state ();
c906108c
SS
8526
8527 csum = 0;
c2d11a7d 8528 bc = 0;
c906108c
SS
8529
8530 while (1)
8531 {
8532 c = readchar (remote_timeout);
c906108c
SS
8533 switch (c)
8534 {
8535 case SERIAL_TIMEOUT:
8536 if (remote_debug)
0f71a2f6 8537 fputs_filtered ("Timeout in mid-packet, retrying\n", gdb_stdlog);
c2d11a7d 8538 return -1;
c906108c
SS
8539 case '$':
8540 if (remote_debug)
0f71a2f6
JM
8541 fputs_filtered ("Saw new packet start in middle of old one\n",
8542 gdb_stdlog);
23860348 8543 return -1; /* Start a new packet, count retries. */
c906108c
SS
8544 case '#':
8545 {
8546 unsigned char pktcsum;
e1b09194
AC
8547 int check_0 = 0;
8548 int check_1 = 0;
c906108c 8549
c2d11a7d 8550 buf[bc] = '\0';
c906108c 8551
e1b09194
AC
8552 check_0 = readchar (remote_timeout);
8553 if (check_0 >= 0)
8554 check_1 = readchar (remote_timeout);
802188a7 8555
e1b09194
AC
8556 if (check_0 == SERIAL_TIMEOUT || check_1 == SERIAL_TIMEOUT)
8557 {
8558 if (remote_debug)
2bc416ba 8559 fputs_filtered ("Timeout in checksum, retrying\n",
23860348 8560 gdb_stdlog);
e1b09194
AC
8561 return -1;
8562 }
8563 else if (check_0 < 0 || check_1 < 0)
40e3f985
FN
8564 {
8565 if (remote_debug)
2bc416ba 8566 fputs_filtered ("Communication error in checksum\n",
23860348 8567 gdb_stdlog);
40e3f985
FN
8568 return -1;
8569 }
c906108c 8570
a6f3e723
SL
8571 /* Don't recompute the checksum; with no ack packets we
8572 don't have any way to indicate a packet retransmission
8573 is necessary. */
8574 if (rs->noack_mode)
8575 return bc;
8576
e1b09194 8577 pktcsum = (fromhex (check_0) << 4) | fromhex (check_1);
c906108c 8578 if (csum == pktcsum)
c2d11a7d 8579 return bc;
c906108c 8580
c5aa993b 8581 if (remote_debug)
c906108c 8582 {
6e5abd65
PA
8583 struct cleanup *old_chain;
8584 char *str;
8585
8586 str = escape_buffer (buf, bc);
8587 old_chain = make_cleanup (xfree, str);
8588 fprintf_unfiltered (gdb_stdlog,
3e43a32a
MS
8589 "Bad checksum, sentsum=0x%x, "
8590 "csum=0x%x, buf=%s\n",
6e5abd65
PA
8591 pktcsum, csum, str);
8592 do_cleanups (old_chain);
c906108c 8593 }
c2d11a7d 8594 /* Number of characters in buffer ignoring trailing
23860348 8595 NULL. */
c2d11a7d 8596 return -1;
c906108c 8597 }
23860348 8598 case '*': /* Run length encoding. */
c2c6d25f
JM
8599 {
8600 int repeat;
c906108c 8601
a744cf53 8602 csum += c;
b4501125
AC
8603 c = readchar (remote_timeout);
8604 csum += c;
23860348 8605 repeat = c - ' ' + 3; /* Compute repeat count. */
c906108c 8606
23860348 8607 /* The character before ``*'' is repeated. */
c2d11a7d 8608
6d820c5c 8609 if (repeat > 0 && repeat <= 255 && bc > 0)
c2c6d25f 8610 {
6d820c5c
DJ
8611 if (bc + repeat - 1 >= *sizeof_buf - 1)
8612 {
8613 /* Make some more room in the buffer. */
8614 *sizeof_buf += repeat;
224c3ddb 8615 *buf_p = (char *) xrealloc (*buf_p, *sizeof_buf);
6d820c5c
DJ
8616 buf = *buf_p;
8617 }
8618
c2d11a7d
JM
8619 memset (&buf[bc], buf[bc - 1], repeat);
8620 bc += repeat;
c2c6d25f
JM
8621 continue;
8622 }
8623
c2d11a7d 8624 buf[bc] = '\0';
6d820c5c 8625 printf_filtered (_("Invalid run length encoding: %s\n"), buf);
c2d11a7d 8626 return -1;
c2c6d25f 8627 }
c906108c 8628 default:
6d820c5c 8629 if (bc >= *sizeof_buf - 1)
c906108c 8630 {
6d820c5c
DJ
8631 /* Make some more room in the buffer. */
8632 *sizeof_buf *= 2;
224c3ddb 8633 *buf_p = (char *) xrealloc (*buf_p, *sizeof_buf);
6d820c5c 8634 buf = *buf_p;
c906108c
SS
8635 }
8636
6d820c5c
DJ
8637 buf[bc++] = c;
8638 csum += c;
8639 continue;
c906108c
SS
8640 }
8641 }
8642}
8643
8644/* Read a packet from the remote machine, with error checking, and
6d820c5c
DJ
8645 store it in *BUF. Resize *BUF using xrealloc if necessary to hold
8646 the result, and update *SIZEOF_BUF. If FOREVER, wait forever
8647 rather than timing out; this is used (in synchronous mode) to wait
8648 for a target that is is executing user code to stop. */
d9fcf2fb
JM
8649/* FIXME: ezannoni 2000-02-01 this wrapper is necessary so that we
8650 don't have to change all the calls to getpkt to deal with the
8651 return value, because at the moment I don't know what the right
23860348 8652 thing to do it for those. */
c906108c 8653void
6d820c5c
DJ
8654getpkt (char **buf,
8655 long *sizeof_buf,
c2d11a7d 8656 int forever)
d9fcf2fb 8657{
54887903 8658 getpkt_sane (buf, sizeof_buf, forever);
d9fcf2fb
JM
8659}
8660
8661
8662/* Read a packet from the remote machine, with error checking, and
6d820c5c
DJ
8663 store it in *BUF. Resize *BUF using xrealloc if necessary to hold
8664 the result, and update *SIZEOF_BUF. If FOREVER, wait forever
8665 rather than timing out; this is used (in synchronous mode) to wait
8666 for a target that is is executing user code to stop. If FOREVER ==
8667 0, this function is allowed to time out gracefully and return an
74531fed
PA
8668 indication of this to the caller. Otherwise return the number of
8669 bytes read. If EXPECTING_NOTIF, consider receiving a notification
fee9eda9
YQ
8670 enough reason to return to the caller. *IS_NOTIF is an output
8671 boolean that indicates whether *BUF holds a notification or not
8672 (a regular packet). */
74531fed 8673
3172dc30 8674static int
74531fed 8675getpkt_or_notif_sane_1 (char **buf, long *sizeof_buf, int forever,
fee9eda9 8676 int expecting_notif, int *is_notif)
c906108c 8677{
2d717e4f 8678 struct remote_state *rs = get_remote_state ();
c906108c
SS
8679 int c;
8680 int tries;
8681 int timeout;
df4b58fe 8682 int val = -1;
c906108c 8683
2d717e4f
DJ
8684 /* We're reading a new response. Make sure we don't look at a
8685 previously cached response. */
8686 rs->cached_wait_status = 0;
8687
6d820c5c 8688 strcpy (*buf, "timeout");
c906108c
SS
8689
8690 if (forever)
74531fed
PA
8691 timeout = watchdog > 0 ? watchdog : -1;
8692 else if (expecting_notif)
8693 timeout = 0; /* There should already be a char in the buffer. If
8694 not, bail out. */
c906108c
SS
8695 else
8696 timeout = remote_timeout;
8697
8698#define MAX_TRIES 3
8699
74531fed
PA
8700 /* Process any number of notifications, and then return when
8701 we get a packet. */
8702 for (;;)
c906108c 8703 {
d9c43928 8704 /* If we get a timeout or bad checksum, retry up to MAX_TRIES
74531fed
PA
8705 times. */
8706 for (tries = 1; tries <= MAX_TRIES; tries++)
c906108c 8707 {
74531fed
PA
8708 /* This can loop forever if the remote side sends us
8709 characters continuously, but if it pauses, we'll get
8710 SERIAL_TIMEOUT from readchar because of timeout. Then
8711 we'll count that as a retry.
8712
8713 Note that even when forever is set, we will only wait
8714 forever prior to the start of a packet. After that, we
8715 expect characters to arrive at a brisk pace. They should
8716 show up within remote_timeout intervals. */
8717 do
8718 c = readchar (timeout);
8719 while (c != SERIAL_TIMEOUT && c != '$' && c != '%');
c906108c
SS
8720
8721 if (c == SERIAL_TIMEOUT)
8722 {
74531fed
PA
8723 if (expecting_notif)
8724 return -1; /* Don't complain, it's normal to not get
8725 anything in this case. */
8726
23860348 8727 if (forever) /* Watchdog went off? Kill the target. */
c906108c 8728 {
78a095c3 8729 remote_unpush_target ();
598d3636
JK
8730 throw_error (TARGET_CLOSE_ERROR,
8731 _("Watchdog timeout has expired. "
8732 "Target detached."));
c906108c 8733 }
c906108c 8734 if (remote_debug)
0f71a2f6 8735 fputs_filtered ("Timed out.\n", gdb_stdlog);
c906108c 8736 }
74531fed
PA
8737 else
8738 {
8739 /* We've found the start of a packet or notification.
8740 Now collect the data. */
8741 val = read_frame (buf, sizeof_buf);
8742 if (val >= 0)
8743 break;
8744 }
8745
c33e31fd 8746 remote_serial_write ("-", 1);
c906108c 8747 }
c906108c 8748
74531fed
PA
8749 if (tries > MAX_TRIES)
8750 {
8751 /* We have tried hard enough, and just can't receive the
8752 packet/notification. Give up. */
8753 printf_unfiltered (_("Ignoring packet error, continuing...\n"));
c906108c 8754
74531fed
PA
8755 /* Skip the ack char if we're in no-ack mode. */
8756 if (!rs->noack_mode)
c33e31fd 8757 remote_serial_write ("+", 1);
74531fed
PA
8758 return -1;
8759 }
c906108c 8760
74531fed
PA
8761 /* If we got an ordinary packet, return that to our caller. */
8762 if (c == '$')
c906108c
SS
8763 {
8764 if (remote_debug)
43e526b9 8765 {
6e5abd65
PA
8766 struct cleanup *old_chain;
8767 char *str;
8768
8769 str = escape_buffer (*buf, val);
8770 old_chain = make_cleanup (xfree, str);
8771 fprintf_unfiltered (gdb_stdlog, "Packet received: %s\n", str);
8772 do_cleanups (old_chain);
43e526b9 8773 }
a6f3e723
SL
8774
8775 /* Skip the ack char if we're in no-ack mode. */
8776 if (!rs->noack_mode)
c33e31fd 8777 remote_serial_write ("+", 1);
fee9eda9
YQ
8778 if (is_notif != NULL)
8779 *is_notif = 0;
0876f84a 8780 return val;
c906108c
SS
8781 }
8782
74531fed
PA
8783 /* If we got a notification, handle it, and go back to looking
8784 for a packet. */
8785 else
8786 {
8787 gdb_assert (c == '%');
8788
8789 if (remote_debug)
8790 {
6e5abd65
PA
8791 struct cleanup *old_chain;
8792 char *str;
8793
8794 str = escape_buffer (*buf, val);
8795 old_chain = make_cleanup (xfree, str);
8796 fprintf_unfiltered (gdb_stdlog,
8797 " Notification received: %s\n",
8798 str);
8799 do_cleanups (old_chain);
74531fed 8800 }
fee9eda9
YQ
8801 if (is_notif != NULL)
8802 *is_notif = 1;
c906108c 8803
5965e028 8804 handle_notification (rs->notif_state, *buf);
c906108c 8805
74531fed 8806 /* Notifications require no acknowledgement. */
a6f3e723 8807
74531fed 8808 if (expecting_notif)
fee9eda9 8809 return val;
74531fed
PA
8810 }
8811 }
8812}
8813
8814static int
8815getpkt_sane (char **buf, long *sizeof_buf, int forever)
8816{
fee9eda9 8817 return getpkt_or_notif_sane_1 (buf, sizeof_buf, forever, 0, NULL);
74531fed
PA
8818}
8819
8820static int
fee9eda9
YQ
8821getpkt_or_notif_sane (char **buf, long *sizeof_buf, int forever,
8822 int *is_notif)
74531fed 8823{
fee9eda9
YQ
8824 return getpkt_or_notif_sane_1 (buf, sizeof_buf, forever, 1,
8825 is_notif);
c906108c 8826}
74531fed 8827
cbb8991c
DB
8828/* Check whether EVENT is a fork event for the process specified
8829 by the pid passed in DATA, and if it is, kill the fork child. */
8830
8831static int
8832kill_child_of_pending_fork (QUEUE (stop_reply_p) *q,
8833 QUEUE_ITER (stop_reply_p) *iter,
8834 stop_reply_p event,
8835 void *data)
8836{
19ba03f4 8837 struct queue_iter_param *param = (struct queue_iter_param *) data;
cbb8991c
DB
8838 int parent_pid = *(int *) param->input;
8839
8840 if (is_pending_fork_parent (&event->ws, parent_pid, event->ptid))
8841 {
8842 struct remote_state *rs = get_remote_state ();
8843 int child_pid = ptid_get_pid (event->ws.value.related_pid);
8844 int res;
8845
8846 res = remote_vkill (child_pid, rs);
8847 if (res != 0)
8848 error (_("Can't kill fork child process %d"), child_pid);
8849 }
8850
8851 return 1;
8852}
8853
8854/* Kill any new fork children of process PID that haven't been
8855 processed by follow_fork. */
8856
8857static void
8858kill_new_fork_children (int pid, struct remote_state *rs)
8859{
8860 struct thread_info *thread;
8861 struct notif_client *notif = &notif_client_stop;
8862 struct queue_iter_param param;
8863
8864 /* Kill the fork child threads of any threads in process PID
8865 that are stopped at a fork event. */
8866 ALL_NON_EXITED_THREADS (thread)
8867 {
8868 struct target_waitstatus *ws = &thread->pending_follow;
8869
8870 if (is_pending_fork_parent (ws, pid, thread->ptid))
8871 {
8872 struct remote_state *rs = get_remote_state ();
8873 int child_pid = ptid_get_pid (ws->value.related_pid);
8874 int res;
8875
8876 res = remote_vkill (child_pid, rs);
8877 if (res != 0)
8878 error (_("Can't kill fork child process %d"), child_pid);
8879 }
8880 }
8881
8882 /* Check for any pending fork events (not reported or processed yet)
8883 in process PID and kill those fork child threads as well. */
8884 remote_notif_get_pending_events (notif);
8885 param.input = &pid;
8886 param.output = NULL;
8887 QUEUE_iterate (stop_reply_p, stop_reply_queue,
8888 kill_child_of_pending_fork, &param);
8889}
8890
c906108c 8891\f
8020350c
DB
8892/* Target hook to kill the current inferior. */
8893
c906108c 8894static void
7d85a9c0 8895remote_kill (struct target_ops *ops)
43ff13b4 8896{
8020350c
DB
8897 int res = -1;
8898 int pid = ptid_get_pid (inferior_ptid);
8899 struct remote_state *rs = get_remote_state ();
0fdf84ca 8900
8020350c 8901 if (packet_support (PACKET_vKill) != PACKET_DISABLE)
0fdf84ca 8902 {
8020350c
DB
8903 /* If we're stopped while forking and we haven't followed yet,
8904 kill the child task. We need to do this before killing the
8905 parent task because if this is a vfork then the parent will
8906 be sleeping. */
8907 kill_new_fork_children (pid, rs);
8908
8909 res = remote_vkill (pid, rs);
8910 if (res == 0)
0fdf84ca 8911 {
8020350c 8912 target_mourn_inferior ();
0fdf84ca
PA
8913 return;
8914 }
8020350c 8915 }
0fdf84ca 8916
8020350c
DB
8917 /* If we are in 'target remote' mode and we are killing the only
8918 inferior, then we will tell gdbserver to exit and unpush the
8919 target. */
8920 if (res == -1 && !remote_multi_process_p (rs)
8921 && number_of_live_inferiors () == 1)
8922 {
8923 remote_kill_k ();
8924
8925 /* We've killed the remote end, we get to mourn it. If we are
8926 not in extended mode, mourning the inferior also unpushes
8927 remote_ops from the target stack, which closes the remote
8928 connection. */
8929 target_mourn_inferior ();
8930
8931 return;
0fdf84ca 8932 }
43ff13b4 8933
8020350c 8934 error (_("Can't kill process"));
43ff13b4
JM
8935}
8936
8020350c
DB
8937/* Send a kill request to the target using the 'vKill' packet. */
8938
82f73884
PA
8939static int
8940remote_vkill (int pid, struct remote_state *rs)
8941{
4082afcc 8942 if (packet_support (PACKET_vKill) == PACKET_DISABLE)
82f73884
PA
8943 return -1;
8944
8945 /* Tell the remote target to detach. */
bba74b36 8946 xsnprintf (rs->buf, get_remote_packet_size (), "vKill;%x", pid);
82f73884
PA
8947 putpkt (rs->buf);
8948 getpkt (&rs->buf, &rs->buf_size, 0);
8949
4082afcc
PA
8950 switch (packet_ok (rs->buf,
8951 &remote_protocol_packets[PACKET_vKill]))
8952 {
8953 case PACKET_OK:
8954 return 0;
8955 case PACKET_ERROR:
8956 return 1;
8957 case PACKET_UNKNOWN:
8958 return -1;
8959 default:
8960 internal_error (__FILE__, __LINE__, _("Bad result from packet_ok"));
8961 }
82f73884
PA
8962}
8963
8020350c
DB
8964/* Send a kill request to the target using the 'k' packet. */
8965
82f73884 8966static void
8020350c 8967remote_kill_k (void)
82f73884 8968{
8020350c
DB
8969 /* Catch errors so the user can quit from gdb even when we
8970 aren't on speaking terms with the remote system. */
8971 TRY
82f73884 8972 {
82f73884 8973 putpkt ("k");
82f73884 8974 }
8020350c
DB
8975 CATCH (ex, RETURN_MASK_ERROR)
8976 {
8977 if (ex.error == TARGET_CLOSE_ERROR)
8978 {
8979 /* If we got an (EOF) error that caused the target
8980 to go away, then we're done, that's what we wanted.
8981 "k" is susceptible to cause a premature EOF, given
8982 that the remote server isn't actually required to
8983 reply to "k", and it can happen that it doesn't
8984 even get to reply ACK to the "k". */
8985 return;
8986 }
82f73884 8987
8020350c
DB
8988 /* Otherwise, something went wrong. We didn't actually kill
8989 the target. Just propagate the exception, and let the
8990 user or higher layers decide what to do. */
8991 throw_exception (ex);
8992 }
8993 END_CATCH
82f73884
PA
8994}
8995
c906108c 8996static void
20f796c9 8997remote_mourn (struct target_ops *target)
c906108c 8998{
8020350c 8999 struct remote_state *rs = get_remote_state ();
ce5ce7ed 9000
8020350c
DB
9001 /* In 'target remote' mode with one inferior, we close the connection. */
9002 if (!rs->extended && number_of_live_inferiors () <= 1)
9003 {
9004 unpush_target (target);
c906108c 9005
8020350c
DB
9006 /* remote_close takes care of doing most of the clean up. */
9007 generic_mourn_inferior ();
9008 return;
9009 }
c906108c 9010
e24a49d8
PA
9011 /* In case we got here due to an error, but we're going to stay
9012 connected. */
9013 rs->waiting_for_stop_reply = 0;
9014
dc1981d7
PA
9015 /* If the current general thread belonged to the process we just
9016 detached from or has exited, the remote side current general
9017 thread becomes undefined. Considering a case like this:
9018
9019 - We just got here due to a detach.
9020 - The process that we're detaching from happens to immediately
9021 report a global breakpoint being hit in non-stop mode, in the
9022 same thread we had selected before.
9023 - GDB attaches to this process again.
9024 - This event happens to be the next event we handle.
9025
9026 GDB would consider that the current general thread didn't need to
9027 be set on the stub side (with Hg), since for all it knew,
9028 GENERAL_THREAD hadn't changed.
9029
9030 Notice that although in all-stop mode, the remote server always
9031 sets the current thread to the thread reporting the stop event,
9032 that doesn't happen in non-stop mode; in non-stop, the stub *must
9033 not* change the current thread when reporting a breakpoint hit,
9034 due to the decoupling of event reporting and event handling.
9035
9036 To keep things simple, we always invalidate our notion of the
9037 current thread. */
47f8a51d 9038 record_currthread (rs, minus_one_ptid);
dc1981d7 9039
8020350c 9040 /* Call common code to mark the inferior as not running. */
48aa3c27
PA
9041 generic_mourn_inferior ();
9042
d729566a 9043 if (!have_inferiors ())
2d717e4f 9044 {
82f73884
PA
9045 if (!remote_multi_process_p (rs))
9046 {
9047 /* Check whether the target is running now - some remote stubs
9048 automatically restart after kill. */
9049 putpkt ("?");
9050 getpkt (&rs->buf, &rs->buf_size, 0);
9051
9052 if (rs->buf[0] == 'S' || rs->buf[0] == 'T')
9053 {
3e43a32a
MS
9054 /* Assume that the target has been restarted. Set
9055 inferior_ptid so that bits of core GDB realizes
9056 there's something here, e.g., so that the user can
9057 say "kill" again. */
82f73884
PA
9058 inferior_ptid = magic_null_ptid;
9059 }
82f73884 9060 }
2d717e4f
DJ
9061 }
9062}
c906108c 9063
03583c20 9064static int
2bfc0540 9065extended_remote_supports_disable_randomization (struct target_ops *self)
03583c20 9066{
4082afcc 9067 return packet_support (PACKET_QDisableRandomization) == PACKET_ENABLE;
03583c20
UW
9068}
9069
9070static void
9071extended_remote_disable_randomization (int val)
9072{
9073 struct remote_state *rs = get_remote_state ();
9074 char *reply;
9075
bba74b36
YQ
9076 xsnprintf (rs->buf, get_remote_packet_size (), "QDisableRandomization:%x",
9077 val);
03583c20
UW
9078 putpkt (rs->buf);
9079 reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
9080 if (*reply == '\0')
9081 error (_("Target does not support QDisableRandomization."));
9082 if (strcmp (reply, "OK") != 0)
9083 error (_("Bogus QDisableRandomization reply from target: %s"), reply);
9084}
9085
2d717e4f
DJ
9086static int
9087extended_remote_run (char *args)
9088{
9089 struct remote_state *rs = get_remote_state ();
2d717e4f 9090 int len;
94585166 9091 const char *remote_exec_file = get_remote_exec_file ();
c906108c 9092
2d717e4f
DJ
9093 /* If the user has disabled vRun support, or we have detected that
9094 support is not available, do not try it. */
4082afcc 9095 if (packet_support (PACKET_vRun) == PACKET_DISABLE)
2d717e4f 9096 return -1;
424163ea 9097
2d717e4f
DJ
9098 strcpy (rs->buf, "vRun;");
9099 len = strlen (rs->buf);
c906108c 9100
2d717e4f
DJ
9101 if (strlen (remote_exec_file) * 2 + len >= get_remote_packet_size ())
9102 error (_("Remote file name too long for run packet"));
9f1b45b0
TT
9103 len += 2 * bin2hex ((gdb_byte *) remote_exec_file, rs->buf + len,
9104 strlen (remote_exec_file));
2d717e4f 9105
d1a41061 9106 gdb_assert (args != NULL);
2d717e4f
DJ
9107 if (*args)
9108 {
9109 struct cleanup *back_to;
9110 int i;
9111 char **argv;
9112
d1a41061 9113 argv = gdb_buildargv (args);
6e366df1 9114 back_to = make_cleanup_freeargv (argv);
2d717e4f
DJ
9115 for (i = 0; argv[i] != NULL; i++)
9116 {
9117 if (strlen (argv[i]) * 2 + 1 + len >= get_remote_packet_size ())
9118 error (_("Argument list too long for run packet"));
9119 rs->buf[len++] = ';';
9f1b45b0
TT
9120 len += 2 * bin2hex ((gdb_byte *) argv[i], rs->buf + len,
9121 strlen (argv[i]));
2d717e4f
DJ
9122 }
9123 do_cleanups (back_to);
9124 }
9125
9126 rs->buf[len++] = '\0';
9127
9128 putpkt (rs->buf);
9129 getpkt (&rs->buf, &rs->buf_size, 0);
9130
4082afcc 9131 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_vRun]))
2d717e4f 9132 {
4082afcc 9133 case PACKET_OK:
3405876a 9134 /* We have a wait response. All is well. */
2d717e4f 9135 return 0;
4082afcc
PA
9136 case PACKET_UNKNOWN:
9137 return -1;
9138 case PACKET_ERROR:
2d717e4f
DJ
9139 if (remote_exec_file[0] == '\0')
9140 error (_("Running the default executable on the remote target failed; "
9141 "try \"set remote exec-file\"?"));
9142 else
9143 error (_("Running \"%s\" on the remote target failed"),
9144 remote_exec_file);
4082afcc
PA
9145 default:
9146 gdb_assert_not_reached (_("bad switch"));
2d717e4f 9147 }
c906108c
SS
9148}
9149
2d717e4f
DJ
9150/* In the extended protocol we want to be able to do things like
9151 "run" and have them basically work as expected. So we need
9152 a special create_inferior function. We support changing the
9153 executable file and the command line arguments, but not the
9154 environment. */
9155
43ff13b4 9156static void
77a19445
TT
9157extended_remote_create_inferior (struct target_ops *ops,
9158 char *exec_file, char *args,
9159 char **env, int from_tty)
43ff13b4 9160{
3405876a
PA
9161 int run_worked;
9162 char *stop_reply;
9163 struct remote_state *rs = get_remote_state ();
94585166 9164 const char *remote_exec_file = get_remote_exec_file ();
3405876a 9165
43ff13b4 9166 /* If running asynchronously, register the target file descriptor
23860348 9167 with the event loop. */
75c99385 9168 if (target_can_async_p ())
6a3753b3 9169 target_async (1);
43ff13b4 9170
03583c20 9171 /* Disable address space randomization if requested (and supported). */
2bfc0540 9172 if (extended_remote_supports_disable_randomization (ops))
03583c20
UW
9173 extended_remote_disable_randomization (disable_randomization);
9174
43ff13b4 9175 /* Now restart the remote server. */
3405876a
PA
9176 run_worked = extended_remote_run (args) != -1;
9177 if (!run_worked)
2d717e4f
DJ
9178 {
9179 /* vRun was not supported. Fail if we need it to do what the
9180 user requested. */
9181 if (remote_exec_file[0])
9182 error (_("Remote target does not support \"set remote exec-file\""));
9183 if (args[0])
9184 error (_("Remote target does not support \"set args\" or run <ARGS>"));
43ff13b4 9185
2d717e4f
DJ
9186 /* Fall back to "R". */
9187 extended_remote_restart ();
9188 }
424163ea 9189
6c95b8df
PA
9190 if (!have_inferiors ())
9191 {
9192 /* Clean up from the last time we ran, before we mark the target
9193 running again. This will mark breakpoints uninserted, and
9194 get_offsets may insert breakpoints. */
9195 init_thread_list ();
9196 init_wait_for_inferior ();
9197 }
45280a52 9198
3405876a
PA
9199 /* vRun's success return is a stop reply. */
9200 stop_reply = run_worked ? rs->buf : NULL;
9201 add_current_inferior_and_thread (stop_reply);
c0a2216e 9202
2d717e4f
DJ
9203 /* Get updated offsets, if the stub uses qOffsets. */
9204 get_offsets ();
2d717e4f 9205}
c906108c 9206\f
c5aa993b 9207
b775012e
LM
9208/* Given a location's target info BP_TGT and the packet buffer BUF, output
9209 the list of conditions (in agent expression bytecode format), if any, the
9210 target needs to evaluate. The output is placed into the packet buffer
bba74b36 9211 started from BUF and ended at BUF_END. */
b775012e
LM
9212
9213static int
9214remote_add_target_side_condition (struct gdbarch *gdbarch,
bba74b36
YQ
9215 struct bp_target_info *bp_tgt, char *buf,
9216 char *buf_end)
b775012e
LM
9217{
9218 struct agent_expr *aexpr = NULL;
9219 int i, ix;
b775012e
LM
9220
9221 if (VEC_empty (agent_expr_p, bp_tgt->conditions))
9222 return 0;
9223
9224 buf += strlen (buf);
bba74b36 9225 xsnprintf (buf, buf_end - buf, "%s", ";");
b775012e
LM
9226 buf++;
9227
9228 /* Send conditions to the target and free the vector. */
9229 for (ix = 0;
9230 VEC_iterate (agent_expr_p, bp_tgt->conditions, ix, aexpr);
9231 ix++)
9232 {
bba74b36 9233 xsnprintf (buf, buf_end - buf, "X%x,", aexpr->len);
b775012e
LM
9234 buf += strlen (buf);
9235 for (i = 0; i < aexpr->len; ++i)
9236 buf = pack_hex_byte (buf, aexpr->buf[i]);
9237 *buf = '\0';
9238 }
b775012e
LM
9239 return 0;
9240}
9241
d3ce09f5
SS
9242static void
9243remote_add_target_side_commands (struct gdbarch *gdbarch,
9244 struct bp_target_info *bp_tgt, char *buf)
9245{
9246 struct agent_expr *aexpr = NULL;
9247 int i, ix;
9248
9249 if (VEC_empty (agent_expr_p, bp_tgt->tcommands))
9250 return;
9251
9252 buf += strlen (buf);
9253
9254 sprintf (buf, ";cmds:%x,", bp_tgt->persist);
9255 buf += strlen (buf);
9256
9257 /* Concatenate all the agent expressions that are commands into the
9258 cmds parameter. */
9259 for (ix = 0;
9260 VEC_iterate (agent_expr_p, bp_tgt->tcommands, ix, aexpr);
9261 ix++)
9262 {
9263 sprintf (buf, "X%x,", aexpr->len);
9264 buf += strlen (buf);
9265 for (i = 0; i < aexpr->len; ++i)
9266 buf = pack_hex_byte (buf, aexpr->buf[i]);
9267 *buf = '\0';
9268 }
d3ce09f5
SS
9269}
9270
8181d85f
DJ
9271/* Insert a breakpoint. On targets that have software breakpoint
9272 support, we ask the remote target to do the work; on targets
9273 which don't, we insert a traditional memory breakpoint. */
c906108c
SS
9274
9275static int
3db08215
MM
9276remote_insert_breakpoint (struct target_ops *ops,
9277 struct gdbarch *gdbarch,
a6d9a66e 9278 struct bp_target_info *bp_tgt)
c906108c 9279{
d471ea57
AC
9280 /* Try the "Z" s/w breakpoint packet if it is not already disabled.
9281 If it succeeds, then set the support to PACKET_ENABLE. If it
9282 fails, and the user has explicitly requested the Z support then
23860348 9283 report an error, otherwise, mark it disabled and go on. */
802188a7 9284
4082afcc 9285 if (packet_support (PACKET_Z0) != PACKET_DISABLE)
96baa820 9286 {
0d5ed153 9287 CORE_ADDR addr = bp_tgt->reqstd_address;
4fff2411 9288 struct remote_state *rs;
bba74b36 9289 char *p, *endbuf;
7c0f6dcc 9290 int bpsize;
4fff2411 9291
28439a30
PA
9292 /* Make sure the remote is pointing at the right process, if
9293 necessary. */
9294 if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
9295 set_general_process ();
9296
a1dcb23a 9297 gdbarch_remote_breakpoint_from_pc (gdbarch, &addr, &bpsize);
4fff2411
JZ
9298
9299 rs = get_remote_state ();
9300 p = rs->buf;
bba74b36 9301 endbuf = rs->buf + get_remote_packet_size ();
802188a7 9302
96baa820
JM
9303 *(p++) = 'Z';
9304 *(p++) = '0';
9305 *(p++) = ',';
7c0f6dcc 9306 addr = (ULONGEST) remote_address_masked (addr);
8181d85f 9307 p += hexnumstr (p, addr);
bba74b36 9308 xsnprintf (p, endbuf - p, ",%d", bpsize);
802188a7 9309
efcc2da7 9310 if (remote_supports_cond_breakpoints (ops))
bba74b36 9311 remote_add_target_side_condition (gdbarch, bp_tgt, p, endbuf);
b775012e 9312
78eff0ec 9313 if (remote_can_run_breakpoint_commands (ops))
d3ce09f5
SS
9314 remote_add_target_side_commands (gdbarch, bp_tgt, p);
9315
6d820c5c
DJ
9316 putpkt (rs->buf);
9317 getpkt (&rs->buf, &rs->buf_size, 0);
96baa820 9318
6d820c5c 9319 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0]))
96baa820 9320 {
d471ea57
AC
9321 case PACKET_ERROR:
9322 return -1;
9323 case PACKET_OK:
7c0f6dcc
JL
9324 bp_tgt->placed_address = addr;
9325 bp_tgt->placed_size = bpsize;
d471ea57
AC
9326 return 0;
9327 case PACKET_UNKNOWN:
9328 break;
96baa820
JM
9329 }
9330 }
c906108c 9331
0000e5cc
PA
9332 /* If this breakpoint has target-side commands but this stub doesn't
9333 support Z0 packets, throw error. */
9334 if (!VEC_empty (agent_expr_p, bp_tgt->tcommands))
9335 throw_error (NOT_SUPPORTED_ERROR, _("\
9336Target doesn't support breakpoints that have target side commands."));
9337
3db08215 9338 return memory_insert_breakpoint (ops, gdbarch, bp_tgt);
c906108c
SS
9339}
9340
9341static int
3db08215
MM
9342remote_remove_breakpoint (struct target_ops *ops,
9343 struct gdbarch *gdbarch,
73971819
PA
9344 struct bp_target_info *bp_tgt,
9345 enum remove_bp_reason reason)
c906108c 9346{
8181d85f 9347 CORE_ADDR addr = bp_tgt->placed_address;
d01949b6 9348 struct remote_state *rs = get_remote_state ();
96baa820 9349
4082afcc 9350 if (packet_support (PACKET_Z0) != PACKET_DISABLE)
96baa820 9351 {
6d820c5c 9352 char *p = rs->buf;
bba74b36 9353 char *endbuf = rs->buf + get_remote_packet_size ();
802188a7 9354
28439a30
PA
9355 /* Make sure the remote is pointing at the right process, if
9356 necessary. */
9357 if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
9358 set_general_process ();
9359
96baa820
JM
9360 *(p++) = 'z';
9361 *(p++) = '0';
9362 *(p++) = ',';
9363
8181d85f
DJ
9364 addr = (ULONGEST) remote_address_masked (bp_tgt->placed_address);
9365 p += hexnumstr (p, addr);
bba74b36 9366 xsnprintf (p, endbuf - p, ",%d", bp_tgt->placed_size);
802188a7 9367
6d820c5c
DJ
9368 putpkt (rs->buf);
9369 getpkt (&rs->buf, &rs->buf_size, 0);
96baa820 9370
6d820c5c 9371 return (rs->buf[0] == 'E');
96baa820
JM
9372 }
9373
73971819 9374 return memory_remove_breakpoint (ops, gdbarch, bp_tgt, reason);
c906108c
SS
9375}
9376
f486487f 9377static enum Z_packet_type
d471ea57
AC
9378watchpoint_to_Z_packet (int type)
9379{
9380 switch (type)
9381 {
9382 case hw_write:
bb858e6a 9383 return Z_PACKET_WRITE_WP;
d471ea57
AC
9384 break;
9385 case hw_read:
bb858e6a 9386 return Z_PACKET_READ_WP;
d471ea57
AC
9387 break;
9388 case hw_access:
bb858e6a 9389 return Z_PACKET_ACCESS_WP;
d471ea57
AC
9390 break;
9391 default:
8e65ff28 9392 internal_error (__FILE__, __LINE__,
e2e0b3e5 9393 _("hw_bp_to_z: bad watchpoint type %d"), type);
d471ea57
AC
9394 }
9395}
9396
3c3bea1c 9397static int
f486487f
SM
9398remote_insert_watchpoint (struct target_ops *self, CORE_ADDR addr, int len,
9399 enum target_hw_bp_type type, struct expression *cond)
96baa820 9400{
d01949b6 9401 struct remote_state *rs = get_remote_state ();
bba74b36 9402 char *endbuf = rs->buf + get_remote_packet_size ();
e514a9d6 9403 char *p;
d471ea57 9404 enum Z_packet_type packet = watchpoint_to_Z_packet (type);
96baa820 9405
4082afcc 9406 if (packet_support (PACKET_Z0 + packet) == PACKET_DISABLE)
85d721b8 9407 return 1;
802188a7 9408
28439a30
PA
9409 /* Make sure the remote is pointing at the right process, if
9410 necessary. */
9411 if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
9412 set_general_process ();
9413
bba74b36 9414 xsnprintf (rs->buf, endbuf - rs->buf, "Z%x,", packet);
6d820c5c 9415 p = strchr (rs->buf, '\0');
96baa820
JM
9416 addr = remote_address_masked (addr);
9417 p += hexnumstr (p, (ULONGEST) addr);
bba74b36 9418 xsnprintf (p, endbuf - p, ",%x", len);
802188a7 9419
6d820c5c
DJ
9420 putpkt (rs->buf);
9421 getpkt (&rs->buf, &rs->buf_size, 0);
96baa820 9422
6d820c5c 9423 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0 + packet]))
d471ea57
AC
9424 {
9425 case PACKET_ERROR:
d471ea57 9426 return -1;
85d721b8
PA
9427 case PACKET_UNKNOWN:
9428 return 1;
d471ea57
AC
9429 case PACKET_OK:
9430 return 0;
9431 }
8e65ff28 9432 internal_error (__FILE__, __LINE__,
e2e0b3e5 9433 _("remote_insert_watchpoint: reached end of function"));
96baa820
JM
9434}
9435
283002cf
MR
9436static int
9437remote_watchpoint_addr_within_range (struct target_ops *target, CORE_ADDR addr,
9438 CORE_ADDR start, int length)
9439{
9440 CORE_ADDR diff = remote_address_masked (addr - start);
9441
9442 return diff < length;
9443}
9444
d471ea57 9445
3c3bea1c 9446static int
f486487f
SM
9447remote_remove_watchpoint (struct target_ops *self, CORE_ADDR addr, int len,
9448 enum target_hw_bp_type type, struct expression *cond)
96baa820 9449{
d01949b6 9450 struct remote_state *rs = get_remote_state ();
bba74b36 9451 char *endbuf = rs->buf + get_remote_packet_size ();
e514a9d6 9452 char *p;
d471ea57
AC
9453 enum Z_packet_type packet = watchpoint_to_Z_packet (type);
9454
4082afcc 9455 if (packet_support (PACKET_Z0 + packet) == PACKET_DISABLE)
5cffb350 9456 return -1;
802188a7 9457
28439a30
PA
9458 /* Make sure the remote is pointing at the right process, if
9459 necessary. */
9460 if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
9461 set_general_process ();
9462
bba74b36 9463 xsnprintf (rs->buf, endbuf - rs->buf, "z%x,", packet);
6d820c5c 9464 p = strchr (rs->buf, '\0');
96baa820
JM
9465 addr = remote_address_masked (addr);
9466 p += hexnumstr (p, (ULONGEST) addr);
bba74b36 9467 xsnprintf (p, endbuf - p, ",%x", len);
6d820c5c
DJ
9468 putpkt (rs->buf);
9469 getpkt (&rs->buf, &rs->buf_size, 0);
96baa820 9470
6d820c5c 9471 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0 + packet]))
d471ea57
AC
9472 {
9473 case PACKET_ERROR:
9474 case PACKET_UNKNOWN:
9475 return -1;
9476 case PACKET_OK:
9477 return 0;
9478 }
8e65ff28 9479 internal_error (__FILE__, __LINE__,
e2e0b3e5 9480 _("remote_remove_watchpoint: reached end of function"));
96baa820
JM
9481}
9482
3c3bea1c 9483
501eef12 9484int remote_hw_watchpoint_limit = -1;
480a3f21 9485int remote_hw_watchpoint_length_limit = -1;
501eef12 9486int remote_hw_breakpoint_limit = -1;
d471ea57 9487
480a3f21 9488static int
31568a15
TT
9489remote_region_ok_for_hw_watchpoint (struct target_ops *self,
9490 CORE_ADDR addr, int len)
480a3f21
PW
9491{
9492 if (remote_hw_watchpoint_length_limit == 0)
9493 return 0;
9494 else if (remote_hw_watchpoint_length_limit < 0)
9495 return 1;
9496 else if (len <= remote_hw_watchpoint_length_limit)
9497 return 1;
9498 else
9499 return 0;
9500}
9501
b9362cc7 9502static int
5461485a 9503remote_check_watch_resources (struct target_ops *self,
f486487f 9504 enum bptype type, int cnt, int ot)
96baa820 9505{
3c3bea1c
GS
9506 if (type == bp_hardware_breakpoint)
9507 {
9508 if (remote_hw_breakpoint_limit == 0)
9509 return 0;
501eef12
AC
9510 else if (remote_hw_breakpoint_limit < 0)
9511 return 1;
3c3bea1c
GS
9512 else if (cnt <= remote_hw_breakpoint_limit)
9513 return 1;
9514 }
9515 else
9516 {
9517 if (remote_hw_watchpoint_limit == 0)
9518 return 0;
501eef12
AC
9519 else if (remote_hw_watchpoint_limit < 0)
9520 return 1;
3c3bea1c
GS
9521 else if (ot)
9522 return -1;
9523 else if (cnt <= remote_hw_watchpoint_limit)
9524 return 1;
9525 }
9526 return -1;
9527}
9528
f7e6eed5
PA
9529/* The to_stopped_by_sw_breakpoint method of target remote. */
9530
9531static int
9532remote_stopped_by_sw_breakpoint (struct target_ops *ops)
9533{
799a2abe 9534 struct thread_info *thread = inferior_thread ();
f7e6eed5 9535
799a2abe
PA
9536 return (thread->priv != NULL
9537 && thread->priv->stop_reason == TARGET_STOPPED_BY_SW_BREAKPOINT);
f7e6eed5
PA
9538}
9539
9540/* The to_supports_stopped_by_sw_breakpoint method of target
9541 remote. */
9542
9543static int
9544remote_supports_stopped_by_sw_breakpoint (struct target_ops *ops)
9545{
f7e6eed5
PA
9546 return (packet_support (PACKET_swbreak_feature) == PACKET_ENABLE);
9547}
9548
9549/* The to_stopped_by_hw_breakpoint method of target remote. */
9550
9551static int
9552remote_stopped_by_hw_breakpoint (struct target_ops *ops)
9553{
799a2abe 9554 struct thread_info *thread = inferior_thread ();
f7e6eed5 9555
799a2abe
PA
9556 return (thread->priv != NULL
9557 && thread->priv->stop_reason == TARGET_STOPPED_BY_HW_BREAKPOINT);
f7e6eed5
PA
9558}
9559
9560/* The to_supports_stopped_by_hw_breakpoint method of target
9561 remote. */
9562
9563static int
9564remote_supports_stopped_by_hw_breakpoint (struct target_ops *ops)
9565{
f7e6eed5
PA
9566 return (packet_support (PACKET_hwbreak_feature) == PACKET_ENABLE);
9567}
9568
b9362cc7 9569static int
6a109b6b 9570remote_stopped_by_watchpoint (struct target_ops *ops)
3c3bea1c 9571{
799a2abe 9572 struct thread_info *thread = inferior_thread ();
ee154bee 9573
799a2abe
PA
9574 return (thread->priv != NULL
9575 && thread->priv->stop_reason == TARGET_STOPPED_BY_WATCHPOINT);
3c3bea1c
GS
9576}
9577
4aa7a7f5
JJ
9578static int
9579remote_stopped_data_address (struct target_ops *target, CORE_ADDR *addr_p)
3c3bea1c 9580{
799a2abe 9581 struct thread_info *thread = inferior_thread ();
a744cf53 9582
799a2abe
PA
9583 if (thread->priv != NULL
9584 && thread->priv->stop_reason == TARGET_STOPPED_BY_WATCHPOINT)
4aa7a7f5 9585 {
799a2abe
PA
9586 *addr_p = thread->priv->watch_data_address;
9587 return 1;
4aa7a7f5
JJ
9588 }
9589
799a2abe 9590 return 0;
3c3bea1c
GS
9591}
9592
9593
9594static int
23a26771 9595remote_insert_hw_breakpoint (struct target_ops *self, struct gdbarch *gdbarch,
a6d9a66e 9596 struct bp_target_info *bp_tgt)
3c3bea1c 9597{
0d5ed153 9598 CORE_ADDR addr = bp_tgt->reqstd_address;
4fff2411 9599 struct remote_state *rs;
bba74b36 9600 char *p, *endbuf;
dd61ec5c 9601 char *message;
0d5ed153 9602 int bpsize;
802188a7 9603
c8189ed1 9604 /* The length field should be set to the size of a breakpoint
8181d85f 9605 instruction, even though we aren't inserting one ourselves. */
c8189ed1 9606
0d5ed153 9607 gdbarch_remote_breakpoint_from_pc (gdbarch, &addr, &bpsize);
3c3bea1c 9608
4082afcc 9609 if (packet_support (PACKET_Z1) == PACKET_DISABLE)
5cffb350 9610 return -1;
2bc416ba 9611
28439a30
PA
9612 /* Make sure the remote is pointing at the right process, if
9613 necessary. */
9614 if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
9615 set_general_process ();
9616
4fff2411
JZ
9617 rs = get_remote_state ();
9618 p = rs->buf;
bba74b36 9619 endbuf = rs->buf + get_remote_packet_size ();
4fff2411 9620
96baa820
JM
9621 *(p++) = 'Z';
9622 *(p++) = '1';
9623 *(p++) = ',';
802188a7 9624
0d5ed153 9625 addr = remote_address_masked (addr);
96baa820 9626 p += hexnumstr (p, (ULONGEST) addr);
0d5ed153 9627 xsnprintf (p, endbuf - p, ",%x", bpsize);
96baa820 9628
efcc2da7 9629 if (remote_supports_cond_breakpoints (self))
bba74b36 9630 remote_add_target_side_condition (gdbarch, bp_tgt, p, endbuf);
b775012e 9631
78eff0ec 9632 if (remote_can_run_breakpoint_commands (self))
d3ce09f5
SS
9633 remote_add_target_side_commands (gdbarch, bp_tgt, p);
9634
6d820c5c
DJ
9635 putpkt (rs->buf);
9636 getpkt (&rs->buf, &rs->buf_size, 0);
96baa820 9637
6d820c5c 9638 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z1]))
d471ea57
AC
9639 {
9640 case PACKET_ERROR:
dd61ec5c
MW
9641 if (rs->buf[1] == '.')
9642 {
9643 message = strchr (rs->buf + 2, '.');
9644 if (message)
0316657e 9645 error (_("Remote failure reply: %s"), message + 1);
dd61ec5c
MW
9646 }
9647 return -1;
d471ea57
AC
9648 case PACKET_UNKNOWN:
9649 return -1;
9650 case PACKET_OK:
0d5ed153
MR
9651 bp_tgt->placed_address = addr;
9652 bp_tgt->placed_size = bpsize;
d471ea57
AC
9653 return 0;
9654 }
8e65ff28 9655 internal_error (__FILE__, __LINE__,
e2e0b3e5 9656 _("remote_insert_hw_breakpoint: reached end of function"));
96baa820
JM
9657}
9658
d471ea57 9659
802188a7 9660static int
a64dc96c 9661remote_remove_hw_breakpoint (struct target_ops *self, struct gdbarch *gdbarch,
a6d9a66e 9662 struct bp_target_info *bp_tgt)
96baa820 9663{
8181d85f 9664 CORE_ADDR addr;
d01949b6 9665 struct remote_state *rs = get_remote_state ();
6d820c5c 9666 char *p = rs->buf;
bba74b36 9667 char *endbuf = rs->buf + get_remote_packet_size ();
c8189ed1 9668
4082afcc 9669 if (packet_support (PACKET_Z1) == PACKET_DISABLE)
5cffb350 9670 return -1;
802188a7 9671
28439a30
PA
9672 /* Make sure the remote is pointing at the right process, if
9673 necessary. */
9674 if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
9675 set_general_process ();
9676
96baa820
JM
9677 *(p++) = 'z';
9678 *(p++) = '1';
9679 *(p++) = ',';
802188a7 9680
8181d85f 9681 addr = remote_address_masked (bp_tgt->placed_address);
96baa820 9682 p += hexnumstr (p, (ULONGEST) addr);
bba74b36 9683 xsnprintf (p, endbuf - p, ",%x", bp_tgt->placed_size);
96baa820 9684
6d820c5c
DJ
9685 putpkt (rs->buf);
9686 getpkt (&rs->buf, &rs->buf_size, 0);
802188a7 9687
6d820c5c 9688 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z1]))
d471ea57
AC
9689 {
9690 case PACKET_ERROR:
9691 case PACKET_UNKNOWN:
9692 return -1;
9693 case PACKET_OK:
9694 return 0;
9695 }
8e65ff28 9696 internal_error (__FILE__, __LINE__,
e2e0b3e5 9697 _("remote_remove_hw_breakpoint: reached end of function"));
96baa820 9698}
96baa820 9699
4a5e7a5b
PA
9700/* Verify memory using the "qCRC:" request. */
9701
9702static int
9703remote_verify_memory (struct target_ops *ops,
9704 const gdb_byte *data, CORE_ADDR lma, ULONGEST size)
9705{
9706 struct remote_state *rs = get_remote_state ();
9707 unsigned long host_crc, target_crc;
9708 char *tmp;
9709
936d2992
PA
9710 /* It doesn't make sense to use qCRC if the remote target is
9711 connected but not running. */
9712 if (target_has_execution && packet_support (PACKET_qCRC) != PACKET_DISABLE)
9713 {
9714 enum packet_result result;
28439a30 9715
936d2992
PA
9716 /* Make sure the remote is pointing at the right process. */
9717 set_general_process ();
4a5e7a5b 9718
936d2992
PA
9719 /* FIXME: assumes lma can fit into long. */
9720 xsnprintf (rs->buf, get_remote_packet_size (), "qCRC:%lx,%lx",
9721 (long) lma, (long) size);
9722 putpkt (rs->buf);
4a5e7a5b 9723
936d2992
PA
9724 /* Be clever; compute the host_crc before waiting for target
9725 reply. */
9726 host_crc = xcrc32 (data, size, 0xffffffff);
9727
9728 getpkt (&rs->buf, &rs->buf_size, 0);
4a5e7a5b 9729
936d2992
PA
9730 result = packet_ok (rs->buf,
9731 &remote_protocol_packets[PACKET_qCRC]);
9732 if (result == PACKET_ERROR)
9733 return -1;
9734 else if (result == PACKET_OK)
9735 {
9736 for (target_crc = 0, tmp = &rs->buf[1]; *tmp; tmp++)
9737 target_crc = target_crc * 16 + fromhex (*tmp);
4a5e7a5b 9738
936d2992
PA
9739 return (host_crc == target_crc);
9740 }
9741 }
4a5e7a5b 9742
936d2992 9743 return simple_verify_memory (ops, data, lma, size);
4a5e7a5b
PA
9744}
9745
c906108c
SS
9746/* compare-sections command
9747
9748 With no arguments, compares each loadable section in the exec bfd
9749 with the same memory range on the target, and reports mismatches.
4a5e7a5b 9750 Useful for verifying the image on the target against the exec file. */
e514a9d6 9751
c906108c 9752static void
fba45db2 9753compare_sections_command (char *args, int from_tty)
c906108c
SS
9754{
9755 asection *s;
c906108c 9756 struct cleanup *old_chain;
948f8e3d 9757 gdb_byte *sectdata;
ce359b09 9758 const char *sectname;
c906108c
SS
9759 bfd_size_type size;
9760 bfd_vma lma;
9761 int matched = 0;
9762 int mismatched = 0;
4a5e7a5b 9763 int res;
95cf3b38 9764 int read_only = 0;
c906108c
SS
9765
9766 if (!exec_bfd)
8a3fe4f8 9767 error (_("command cannot be used without an exec file"));
c906108c 9768
28439a30
PA
9769 /* Make sure the remote is pointing at the right process. */
9770 set_general_process ();
9771
95cf3b38
DT
9772 if (args != NULL && strcmp (args, "-r") == 0)
9773 {
9774 read_only = 1;
9775 args = NULL;
9776 }
9777
c5aa993b 9778 for (s = exec_bfd->sections; s; s = s->next)
c906108c
SS
9779 {
9780 if (!(s->flags & SEC_LOAD))
0df8b418 9781 continue; /* Skip non-loadable section. */
c906108c 9782
95cf3b38
DT
9783 if (read_only && (s->flags & SEC_READONLY) == 0)
9784 continue; /* Skip writeable sections */
9785
2c500098 9786 size = bfd_get_section_size (s);
c906108c 9787 if (size == 0)
0df8b418 9788 continue; /* Skip zero-length section. */
c906108c 9789
ce359b09 9790 sectname = bfd_get_section_name (exec_bfd, s);
c906108c 9791 if (args && strcmp (args, sectname) != 0)
0df8b418 9792 continue; /* Not the section selected by user. */
c906108c 9793
0df8b418 9794 matched = 1; /* Do this section. */
c906108c 9795 lma = s->lma;
c906108c 9796
224c3ddb 9797 sectdata = (gdb_byte *) xmalloc (size);
b8c9b27d 9798 old_chain = make_cleanup (xfree, sectdata);
c906108c 9799 bfd_get_section_contents (exec_bfd, s, sectdata, 0, size);
c906108c 9800
4a5e7a5b
PA
9801 res = target_verify_memory (sectdata, lma, size);
9802
9803 if (res == -1)
5af949e3 9804 error (_("target memory fault, section %s, range %s -- %s"), sectname,
f5656ead
TT
9805 paddress (target_gdbarch (), lma),
9806 paddress (target_gdbarch (), lma + size));
c906108c 9807
5af949e3 9808 printf_filtered ("Section %s, range %s -- %s: ", sectname,
f5656ead
TT
9809 paddress (target_gdbarch (), lma),
9810 paddress (target_gdbarch (), lma + size));
4a5e7a5b 9811 if (res)
c906108c
SS
9812 printf_filtered ("matched.\n");
9813 else
c5aa993b
JM
9814 {
9815 printf_filtered ("MIS-MATCHED!\n");
9816 mismatched++;
9817 }
c906108c
SS
9818
9819 do_cleanups (old_chain);
9820 }
9821 if (mismatched > 0)
936d2992 9822 warning (_("One or more sections of the target image does not match\n\
8a3fe4f8 9823the loaded file\n"));
c906108c 9824 if (args && !matched)
a3f17187 9825 printf_filtered (_("No loaded section named '%s'.\n"), args);
c906108c
SS
9826}
9827
0e7f50da
UW
9828/* Write LEN bytes from WRITEBUF into OBJECT_NAME/ANNEX at OFFSET
9829 into remote target. The number of bytes written to the remote
9830 target is returned, or -1 for error. */
9831
9b409511 9832static enum target_xfer_status
0e7f50da
UW
9833remote_write_qxfer (struct target_ops *ops, const char *object_name,
9834 const char *annex, const gdb_byte *writebuf,
9b409511 9835 ULONGEST offset, LONGEST len, ULONGEST *xfered_len,
0e7f50da
UW
9836 struct packet_config *packet)
9837{
9838 int i, buf_len;
9839 ULONGEST n;
0e7f50da
UW
9840 struct remote_state *rs = get_remote_state ();
9841 int max_size = get_memory_write_packet_size ();
9842
9843 if (packet->support == PACKET_DISABLE)
2ed4b548 9844 return TARGET_XFER_E_IO;
0e7f50da
UW
9845
9846 /* Insert header. */
9847 i = snprintf (rs->buf, max_size,
9848 "qXfer:%s:write:%s:%s:",
9849 object_name, annex ? annex : "",
9850 phex_nz (offset, sizeof offset));
9851 max_size -= (i + 1);
9852
9853 /* Escape as much data as fits into rs->buf. */
9854 buf_len = remote_escape_output
124e13d9 9855 (writebuf, len, 1, (gdb_byte *) rs->buf + i, &max_size, max_size);
0e7f50da
UW
9856
9857 if (putpkt_binary (rs->buf, i + buf_len) < 0
9858 || getpkt_sane (&rs->buf, &rs->buf_size, 0) < 0
9859 || packet_ok (rs->buf, packet) != PACKET_OK)
2ed4b548 9860 return TARGET_XFER_E_IO;
0e7f50da
UW
9861
9862 unpack_varlen_hex (rs->buf, &n);
9b409511
YQ
9863
9864 *xfered_len = n;
9865 return TARGET_XFER_OK;
0e7f50da
UW
9866}
9867
0876f84a
DJ
9868/* Read OBJECT_NAME/ANNEX from the remote target using a qXfer packet.
9869 Data at OFFSET, of up to LEN bytes, is read into READBUF; the
9870 number of bytes read is returned, or 0 for EOF, or -1 for error.
9871 The number of bytes read may be less than LEN without indicating an
9872 EOF. PACKET is checked and updated to indicate whether the remote
9873 target supports this object. */
9874
9b409511 9875static enum target_xfer_status
0876f84a
DJ
9876remote_read_qxfer (struct target_ops *ops, const char *object_name,
9877 const char *annex,
9878 gdb_byte *readbuf, ULONGEST offset, LONGEST len,
9b409511 9879 ULONGEST *xfered_len,
0876f84a
DJ
9880 struct packet_config *packet)
9881{
0876f84a 9882 struct remote_state *rs = get_remote_state ();
0876f84a
DJ
9883 LONGEST i, n, packet_len;
9884
9885 if (packet->support == PACKET_DISABLE)
2ed4b548 9886 return TARGET_XFER_E_IO;
0876f84a
DJ
9887
9888 /* Check whether we've cached an end-of-object packet that matches
9889 this request. */
8e88304f 9890 if (rs->finished_object)
0876f84a 9891 {
8e88304f
TT
9892 if (strcmp (object_name, rs->finished_object) == 0
9893 && strcmp (annex ? annex : "", rs->finished_annex) == 0
9894 && offset == rs->finished_offset)
9b409511
YQ
9895 return TARGET_XFER_EOF;
9896
0876f84a
DJ
9897
9898 /* Otherwise, we're now reading something different. Discard
9899 the cache. */
8e88304f
TT
9900 xfree (rs->finished_object);
9901 xfree (rs->finished_annex);
9902 rs->finished_object = NULL;
9903 rs->finished_annex = NULL;
0876f84a
DJ
9904 }
9905
9906 /* Request only enough to fit in a single packet. The actual data
9907 may not, since we don't know how much of it will need to be escaped;
9908 the target is free to respond with slightly less data. We subtract
9909 five to account for the response type and the protocol frame. */
768adc05 9910 n = std::min<LONGEST> (get_remote_packet_size () - 5, len);
0876f84a
DJ
9911 snprintf (rs->buf, get_remote_packet_size () - 4, "qXfer:%s:read:%s:%s,%s",
9912 object_name, annex ? annex : "",
9913 phex_nz (offset, sizeof offset),
9914 phex_nz (n, sizeof n));
9915 i = putpkt (rs->buf);
9916 if (i < 0)
2ed4b548 9917 return TARGET_XFER_E_IO;
0876f84a
DJ
9918
9919 rs->buf[0] = '\0';
9920 packet_len = getpkt_sane (&rs->buf, &rs->buf_size, 0);
9921 if (packet_len < 0 || packet_ok (rs->buf, packet) != PACKET_OK)
2ed4b548 9922 return TARGET_XFER_E_IO;
0876f84a
DJ
9923
9924 if (rs->buf[0] != 'l' && rs->buf[0] != 'm')
9925 error (_("Unknown remote qXfer reply: %s"), rs->buf);
9926
9927 /* 'm' means there is (or at least might be) more data after this
9928 batch. That does not make sense unless there's at least one byte
9929 of data in this reply. */
9930 if (rs->buf[0] == 'm' && packet_len == 1)
9931 error (_("Remote qXfer reply contained no data."));
9932
9933 /* Got some data. */
bc20a4af
PA
9934 i = remote_unescape_input ((gdb_byte *) rs->buf + 1,
9935 packet_len - 1, readbuf, n);
0876f84a
DJ
9936
9937 /* 'l' is an EOF marker, possibly including a final block of data,
0e7f50da
UW
9938 or possibly empty. If we have the final block of a non-empty
9939 object, record this fact to bypass a subsequent partial read. */
9940 if (rs->buf[0] == 'l' && offset + i > 0)
0876f84a 9941 {
8e88304f
TT
9942 rs->finished_object = xstrdup (object_name);
9943 rs->finished_annex = xstrdup (annex ? annex : "");
9944 rs->finished_offset = offset + i;
0876f84a
DJ
9945 }
9946
9b409511
YQ
9947 if (i == 0)
9948 return TARGET_XFER_EOF;
9949 else
9950 {
9951 *xfered_len = i;
9952 return TARGET_XFER_OK;
9953 }
0876f84a
DJ
9954}
9955
9b409511 9956static enum target_xfer_status
4b8a223f 9957remote_xfer_partial (struct target_ops *ops, enum target_object object,
961cb7b5 9958 const char *annex, gdb_byte *readbuf,
9b409511
YQ
9959 const gdb_byte *writebuf, ULONGEST offset, ULONGEST len,
9960 ULONGEST *xfered_len)
c906108c 9961{
82f73884 9962 struct remote_state *rs;
c906108c 9963 int i;
6d820c5c 9964 char *p2;
1e3ff5ad 9965 char query_type;
124e13d9 9966 int unit_size = gdbarch_addressable_memory_unit_size (target_gdbarch ());
c906108c 9967
e6e4e701 9968 set_remote_traceframe ();
82f73884
PA
9969 set_general_thread (inferior_ptid);
9970
9971 rs = get_remote_state ();
9972
b2182ed2 9973 /* Handle memory using the standard memory routines. */
21e3b9b9
DJ
9974 if (object == TARGET_OBJECT_MEMORY)
9975 {
2d717e4f
DJ
9976 /* If the remote target is connected but not running, we should
9977 pass this request down to a lower stratum (e.g. the executable
9978 file). */
9979 if (!target_has_execution)
9b409511 9980 return TARGET_XFER_EOF;
2d717e4f 9981
21e3b9b9 9982 if (writebuf != NULL)
124e13d9
SM
9983 return remote_write_bytes (offset, writebuf, len, unit_size,
9984 xfered_len);
21e3b9b9 9985 else
124e13d9
SM
9986 return remote_read_bytes (ops, offset, readbuf, len, unit_size,
9987 xfered_len);
21e3b9b9
DJ
9988 }
9989
0df8b418 9990 /* Handle SPU memory using qxfer packets. */
0e7f50da
UW
9991 if (object == TARGET_OBJECT_SPU)
9992 {
9993 if (readbuf)
9994 return remote_read_qxfer (ops, "spu", annex, readbuf, offset, len,
9b409511
YQ
9995 xfered_len, &remote_protocol_packets
9996 [PACKET_qXfer_spu_read]);
0e7f50da
UW
9997 else
9998 return remote_write_qxfer (ops, "spu", annex, writebuf, offset, len,
9b409511
YQ
9999 xfered_len, &remote_protocol_packets
10000 [PACKET_qXfer_spu_write]);
0e7f50da
UW
10001 }
10002
4aa995e1
PA
10003 /* Handle extra signal info using qxfer packets. */
10004 if (object == TARGET_OBJECT_SIGNAL_INFO)
10005 {
10006 if (readbuf)
10007 return remote_read_qxfer (ops, "siginfo", annex, readbuf, offset, len,
9b409511 10008 xfered_len, &remote_protocol_packets
4aa995e1
PA
10009 [PACKET_qXfer_siginfo_read]);
10010 else
3e43a32a 10011 return remote_write_qxfer (ops, "siginfo", annex,
9b409511 10012 writebuf, offset, len, xfered_len,
4aa995e1
PA
10013 &remote_protocol_packets
10014 [PACKET_qXfer_siginfo_write]);
10015 }
10016
0fb4aa4b
PA
10017 if (object == TARGET_OBJECT_STATIC_TRACE_DATA)
10018 {
10019 if (readbuf)
3e43a32a 10020 return remote_read_qxfer (ops, "statictrace", annex,
9b409511 10021 readbuf, offset, len, xfered_len,
0fb4aa4b
PA
10022 &remote_protocol_packets
10023 [PACKET_qXfer_statictrace_read]);
10024 else
2ed4b548 10025 return TARGET_XFER_E_IO;
0fb4aa4b
PA
10026 }
10027
a76d924d
DJ
10028 /* Only handle flash writes. */
10029 if (writebuf != NULL)
10030 {
a76d924d
DJ
10031 switch (object)
10032 {
10033 case TARGET_OBJECT_FLASH:
9b409511
YQ
10034 return remote_flash_write (ops, offset, len, xfered_len,
10035 writebuf);
a76d924d
DJ
10036
10037 default:
2ed4b548 10038 return TARGET_XFER_E_IO;
a76d924d
DJ
10039 }
10040 }
4b8a223f 10041
1e3ff5ad
AC
10042 /* Map pre-existing objects onto letters. DO NOT do this for new
10043 objects!!! Instead specify new query packets. */
10044 switch (object)
c906108c 10045 {
1e3ff5ad
AC
10046 case TARGET_OBJECT_AVR:
10047 query_type = 'R';
10048 break;
802188a7
RM
10049
10050 case TARGET_OBJECT_AUXV:
0876f84a
DJ
10051 gdb_assert (annex == NULL);
10052 return remote_read_qxfer (ops, "auxv", annex, readbuf, offset, len,
9b409511 10053 xfered_len,
0876f84a 10054 &remote_protocol_packets[PACKET_qXfer_auxv]);
802188a7 10055
23181151
DJ
10056 case TARGET_OBJECT_AVAILABLE_FEATURES:
10057 return remote_read_qxfer
9b409511 10058 (ops, "features", annex, readbuf, offset, len, xfered_len,
23181151
DJ
10059 &remote_protocol_packets[PACKET_qXfer_features]);
10060
cfa9d6d9
DJ
10061 case TARGET_OBJECT_LIBRARIES:
10062 return remote_read_qxfer
9b409511 10063 (ops, "libraries", annex, readbuf, offset, len, xfered_len,
cfa9d6d9
DJ
10064 &remote_protocol_packets[PACKET_qXfer_libraries]);
10065
2268b414
JK
10066 case TARGET_OBJECT_LIBRARIES_SVR4:
10067 return remote_read_qxfer
9b409511 10068 (ops, "libraries-svr4", annex, readbuf, offset, len, xfered_len,
2268b414
JK
10069 &remote_protocol_packets[PACKET_qXfer_libraries_svr4]);
10070
fd79ecee
DJ
10071 case TARGET_OBJECT_MEMORY_MAP:
10072 gdb_assert (annex == NULL);
10073 return remote_read_qxfer (ops, "memory-map", annex, readbuf, offset, len,
9b409511 10074 xfered_len,
fd79ecee
DJ
10075 &remote_protocol_packets[PACKET_qXfer_memory_map]);
10076
07e059b5
VP
10077 case TARGET_OBJECT_OSDATA:
10078 /* Should only get here if we're connected. */
5d93a237 10079 gdb_assert (rs->remote_desc);
07e059b5 10080 return remote_read_qxfer
9b409511 10081 (ops, "osdata", annex, readbuf, offset, len, xfered_len,
07e059b5
VP
10082 &remote_protocol_packets[PACKET_qXfer_osdata]);
10083
dc146f7c
VP
10084 case TARGET_OBJECT_THREADS:
10085 gdb_assert (annex == NULL);
10086 return remote_read_qxfer (ops, "threads", annex, readbuf, offset, len,
9b409511 10087 xfered_len,
dc146f7c
VP
10088 &remote_protocol_packets[PACKET_qXfer_threads]);
10089
b3b9301e
PA
10090 case TARGET_OBJECT_TRACEFRAME_INFO:
10091 gdb_assert (annex == NULL);
10092 return remote_read_qxfer
9b409511 10093 (ops, "traceframe-info", annex, readbuf, offset, len, xfered_len,
b3b9301e 10094 &remote_protocol_packets[PACKET_qXfer_traceframe_info]);
78d85199
YQ
10095
10096 case TARGET_OBJECT_FDPIC:
10097 return remote_read_qxfer (ops, "fdpic", annex, readbuf, offset, len,
9b409511 10098 xfered_len,
78d85199 10099 &remote_protocol_packets[PACKET_qXfer_fdpic]);
169081d0
TG
10100
10101 case TARGET_OBJECT_OPENVMS_UIB:
10102 return remote_read_qxfer (ops, "uib", annex, readbuf, offset, len,
9b409511 10103 xfered_len,
169081d0
TG
10104 &remote_protocol_packets[PACKET_qXfer_uib]);
10105
9accd112
MM
10106 case TARGET_OBJECT_BTRACE:
10107 return remote_read_qxfer (ops, "btrace", annex, readbuf, offset, len,
9b409511 10108 xfered_len,
9accd112
MM
10109 &remote_protocol_packets[PACKET_qXfer_btrace]);
10110
f4abbc16
MM
10111 case TARGET_OBJECT_BTRACE_CONF:
10112 return remote_read_qxfer (ops, "btrace-conf", annex, readbuf, offset,
10113 len, xfered_len,
10114 &remote_protocol_packets[PACKET_qXfer_btrace_conf]);
10115
c78fa86a
GB
10116 case TARGET_OBJECT_EXEC_FILE:
10117 return remote_read_qxfer (ops, "exec-file", annex, readbuf, offset,
10118 len, xfered_len,
10119 &remote_protocol_packets[PACKET_qXfer_exec_file]);
10120
1e3ff5ad 10121 default:
2ed4b548 10122 return TARGET_XFER_E_IO;
c906108c
SS
10123 }
10124
0df8b418 10125 /* Minimum outbuf size is get_remote_packet_size (). If LEN is not
24b06219 10126 large enough let the caller deal with it. */
ea9c271d 10127 if (len < get_remote_packet_size ())
2ed4b548 10128 return TARGET_XFER_E_IO;
ea9c271d 10129 len = get_remote_packet_size ();
1e3ff5ad 10130
23860348 10131 /* Except for querying the minimum buffer size, target must be open. */
5d93a237 10132 if (!rs->remote_desc)
8a3fe4f8 10133 error (_("remote query is only available after target open"));
c906108c 10134
1e3ff5ad 10135 gdb_assert (annex != NULL);
4b8a223f 10136 gdb_assert (readbuf != NULL);
c906108c 10137
6d820c5c 10138 p2 = rs->buf;
c906108c
SS
10139 *p2++ = 'q';
10140 *p2++ = query_type;
10141
23860348
MS
10142 /* We used one buffer char for the remote protocol q command and
10143 another for the query type. As the remote protocol encapsulation
10144 uses 4 chars plus one extra in case we are debugging
10145 (remote_debug), we have PBUFZIZ - 7 left to pack the query
10146 string. */
c906108c 10147 i = 0;
ea9c271d 10148 while (annex[i] && (i < (get_remote_packet_size () - 8)))
c906108c 10149 {
1e3ff5ad
AC
10150 /* Bad caller may have sent forbidden characters. */
10151 gdb_assert (isprint (annex[i]) && annex[i] != '$' && annex[i] != '#');
10152 *p2++ = annex[i];
c906108c
SS
10153 i++;
10154 }
1e3ff5ad
AC
10155 *p2 = '\0';
10156 gdb_assert (annex[i] == '\0');
c906108c 10157
6d820c5c 10158 i = putpkt (rs->buf);
c5aa993b 10159 if (i < 0)
2ed4b548 10160 return TARGET_XFER_E_IO;
c906108c 10161
6d820c5c
DJ
10162 getpkt (&rs->buf, &rs->buf_size, 0);
10163 strcpy ((char *) readbuf, rs->buf);
c906108c 10164
9b409511
YQ
10165 *xfered_len = strlen ((char *) readbuf);
10166 return TARGET_XFER_OK;
c906108c
SS
10167}
10168
09c98b44
DB
10169/* Implementation of to_get_memory_xfer_limit. */
10170
10171static ULONGEST
10172remote_get_memory_xfer_limit (struct target_ops *ops)
10173{
10174 return get_memory_write_packet_size ();
10175}
10176
08388c79
DE
10177static int
10178remote_search_memory (struct target_ops* ops,
10179 CORE_ADDR start_addr, ULONGEST search_space_len,
10180 const gdb_byte *pattern, ULONGEST pattern_len,
10181 CORE_ADDR *found_addrp)
10182{
f5656ead 10183 int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
08388c79
DE
10184 struct remote_state *rs = get_remote_state ();
10185 int max_size = get_memory_write_packet_size ();
10186 struct packet_config *packet =
10187 &remote_protocol_packets[PACKET_qSearch_memory];
0df8b418
MS
10188 /* Number of packet bytes used to encode the pattern;
10189 this could be more than PATTERN_LEN due to escape characters. */
08388c79 10190 int escaped_pattern_len;
0df8b418 10191 /* Amount of pattern that was encodable in the packet. */
08388c79
DE
10192 int used_pattern_len;
10193 int i;
10194 int found;
10195 ULONGEST found_addr;
10196
10197 /* Don't go to the target if we don't have to.
10198 This is done before checking packet->support to avoid the possibility that
10199 a success for this edge case means the facility works in general. */
10200 if (pattern_len > search_space_len)
10201 return 0;
10202 if (pattern_len == 0)
10203 {
10204 *found_addrp = start_addr;
10205 return 1;
10206 }
10207
10208 /* If we already know the packet isn't supported, fall back to the simple
10209 way of searching memory. */
10210
4082afcc 10211 if (packet_config_support (packet) == PACKET_DISABLE)
08388c79
DE
10212 {
10213 /* Target doesn't provided special support, fall back and use the
10214 standard support (copy memory and do the search here). */
10215 return simple_search_memory (ops, start_addr, search_space_len,
10216 pattern, pattern_len, found_addrp);
10217 }
10218
28439a30
PA
10219 /* Make sure the remote is pointing at the right process. */
10220 set_general_process ();
10221
08388c79
DE
10222 /* Insert header. */
10223 i = snprintf (rs->buf, max_size,
10224 "qSearch:memory:%s;%s;",
5af949e3 10225 phex_nz (start_addr, addr_size),
08388c79
DE
10226 phex_nz (search_space_len, sizeof (search_space_len)));
10227 max_size -= (i + 1);
10228
10229 /* Escape as much data as fits into rs->buf. */
10230 escaped_pattern_len =
124e13d9 10231 remote_escape_output (pattern, pattern_len, 1, (gdb_byte *) rs->buf + i,
08388c79
DE
10232 &used_pattern_len, max_size);
10233
10234 /* Bail if the pattern is too large. */
10235 if (used_pattern_len != pattern_len)
9b20d036 10236 error (_("Pattern is too large to transmit to remote target."));
08388c79
DE
10237
10238 if (putpkt_binary (rs->buf, i + escaped_pattern_len) < 0
10239 || getpkt_sane (&rs->buf, &rs->buf_size, 0) < 0
10240 || packet_ok (rs->buf, packet) != PACKET_OK)
10241 {
10242 /* The request may not have worked because the command is not
10243 supported. If so, fall back to the simple way. */
10244 if (packet->support == PACKET_DISABLE)
10245 {
10246 return simple_search_memory (ops, start_addr, search_space_len,
10247 pattern, pattern_len, found_addrp);
10248 }
10249 return -1;
10250 }
10251
10252 if (rs->buf[0] == '0')
10253 found = 0;
10254 else if (rs->buf[0] == '1')
10255 {
10256 found = 1;
10257 if (rs->buf[1] != ',')
10e0fa18 10258 error (_("Unknown qSearch:memory reply: %s"), rs->buf);
08388c79
DE
10259 unpack_varlen_hex (rs->buf + 2, &found_addr);
10260 *found_addrp = found_addr;
10261 }
10262 else
10e0fa18 10263 error (_("Unknown qSearch:memory reply: %s"), rs->buf);
08388c79
DE
10264
10265 return found;
10266}
10267
96baa820 10268static void
a30bf1f1 10269remote_rcmd (struct target_ops *self, const char *command,
d9fcf2fb 10270 struct ui_file *outbuf)
96baa820 10271{
d01949b6 10272 struct remote_state *rs = get_remote_state ();
2e9f7625 10273 char *p = rs->buf;
96baa820 10274
5d93a237 10275 if (!rs->remote_desc)
8a3fe4f8 10276 error (_("remote rcmd is only available after target open"));
96baa820 10277
23860348 10278 /* Send a NULL command across as an empty command. */
7be570e7
JM
10279 if (command == NULL)
10280 command = "";
10281
23860348 10282 /* The query prefix. */
2e9f7625
DJ
10283 strcpy (rs->buf, "qRcmd,");
10284 p = strchr (rs->buf, '\0');
96baa820 10285
3e43a32a
MS
10286 if ((strlen (rs->buf) + strlen (command) * 2 + 8/*misc*/)
10287 > get_remote_packet_size ())
8a3fe4f8 10288 error (_("\"monitor\" command ``%s'' is too long."), command);
96baa820 10289
23860348 10290 /* Encode the actual command. */
a30bf1f1 10291 bin2hex ((const gdb_byte *) command, p, strlen (command));
96baa820 10292
6d820c5c 10293 if (putpkt (rs->buf) < 0)
8a3fe4f8 10294 error (_("Communication problem with target."));
96baa820
JM
10295
10296 /* get/display the response */
10297 while (1)
10298 {
2e9f7625
DJ
10299 char *buf;
10300
00bf0b85 10301 /* XXX - see also remote_get_noisy_reply(). */
5b37825d 10302 QUIT; /* Allow user to bail out with ^C. */
2e9f7625 10303 rs->buf[0] = '\0';
5b37825d
PW
10304 if (getpkt_sane (&rs->buf, &rs->buf_size, 0) == -1)
10305 {
10306 /* Timeout. Continue to (try to) read responses.
10307 This is better than stopping with an error, assuming the stub
10308 is still executing the (long) monitor command.
10309 If needed, the user can interrupt gdb using C-c, obtaining
10310 an effect similar to stop on timeout. */
10311 continue;
10312 }
2e9f7625 10313 buf = rs->buf;
96baa820 10314 if (buf[0] == '\0')
8a3fe4f8 10315 error (_("Target does not support this command."));
96baa820
JM
10316 if (buf[0] == 'O' && buf[1] != 'K')
10317 {
23860348 10318 remote_console_output (buf + 1); /* 'O' message from stub. */
96baa820
JM
10319 continue;
10320 }
10321 if (strcmp (buf, "OK") == 0)
10322 break;
7be570e7
JM
10323 if (strlen (buf) == 3 && buf[0] == 'E'
10324 && isdigit (buf[1]) && isdigit (buf[2]))
10325 {
8a3fe4f8 10326 error (_("Protocol error with Rcmd"));
7be570e7 10327 }
96baa820
JM
10328 for (p = buf; p[0] != '\0' && p[1] != '\0'; p += 2)
10329 {
10330 char c = (fromhex (p[0]) << 4) + fromhex (p[1]);
a744cf53 10331
96baa820
JM
10332 fputc_unfiltered (c, outbuf);
10333 }
10334 break;
10335 }
10336}
10337
fd79ecee
DJ
10338static VEC(mem_region_s) *
10339remote_memory_map (struct target_ops *ops)
10340{
10341 VEC(mem_region_s) *result = NULL;
10342 char *text = target_read_stralloc (&current_target,
10343 TARGET_OBJECT_MEMORY_MAP, NULL);
10344
10345 if (text)
10346 {
10347 struct cleanup *back_to = make_cleanup (xfree, text);
a744cf53 10348
fd79ecee
DJ
10349 result = parse_memory_map (text);
10350 do_cleanups (back_to);
10351 }
10352
10353 return result;
10354}
10355
c906108c 10356static void
fba45db2 10357packet_command (char *args, int from_tty)
c906108c 10358{
d01949b6 10359 struct remote_state *rs = get_remote_state ();
c906108c 10360
5d93a237 10361 if (!rs->remote_desc)
8a3fe4f8 10362 error (_("command can only be used with remote target"));
c906108c 10363
c5aa993b 10364 if (!args)
8a3fe4f8 10365 error (_("remote-packet command requires packet text as argument"));
c906108c
SS
10366
10367 puts_filtered ("sending: ");
10368 print_packet (args);
10369 puts_filtered ("\n");
10370 putpkt (args);
10371
6d820c5c 10372 getpkt (&rs->buf, &rs->buf_size, 0);
c906108c 10373 puts_filtered ("received: ");
6d820c5c 10374 print_packet (rs->buf);
c906108c
SS
10375 puts_filtered ("\n");
10376}
10377
10378#if 0
23860348 10379/* --------- UNIT_TEST for THREAD oriented PACKETS ------------------- */
c906108c 10380
a14ed312 10381static void display_thread_info (struct gdb_ext_thread_info *info);
c906108c 10382
a14ed312 10383static void threadset_test_cmd (char *cmd, int tty);
c906108c 10384
a14ed312 10385static void threadalive_test (char *cmd, int tty);
c906108c 10386
a14ed312 10387static void threadlist_test_cmd (char *cmd, int tty);
c906108c 10388
23860348 10389int get_and_display_threadinfo (threadref *ref);
c906108c 10390
a14ed312 10391static void threadinfo_test_cmd (char *cmd, int tty);
c906108c 10392
23860348 10393static int thread_display_step (threadref *ref, void *context);
c906108c 10394
a14ed312 10395static void threadlist_update_test_cmd (char *cmd, int tty);
c906108c 10396
a14ed312 10397static void init_remote_threadtests (void);
c906108c 10398
23860348 10399#define SAMPLE_THREAD 0x05060708 /* Truncated 64 bit threadid. */
c906108c
SS
10400
10401static void
fba45db2 10402threadset_test_cmd (char *cmd, int tty)
c906108c
SS
10403{
10404 int sample_thread = SAMPLE_THREAD;
10405
a3f17187 10406 printf_filtered (_("Remote threadset test\n"));
79d7f229 10407 set_general_thread (sample_thread);
c906108c
SS
10408}
10409
10410
10411static void
fba45db2 10412threadalive_test (char *cmd, int tty)
c906108c
SS
10413{
10414 int sample_thread = SAMPLE_THREAD;
79d7f229 10415 int pid = ptid_get_pid (inferior_ptid);
ba348170 10416 ptid_t ptid = ptid_build (pid, sample_thread, 0);
c906108c 10417
79d7f229 10418 if (remote_thread_alive (ptid))
c906108c
SS
10419 printf_filtered ("PASS: Thread alive test\n");
10420 else
10421 printf_filtered ("FAIL: Thread alive test\n");
10422}
10423
23860348 10424void output_threadid (char *title, threadref *ref);
c906108c
SS
10425
10426void
fba45db2 10427output_threadid (char *title, threadref *ref)
c906108c
SS
10428{
10429 char hexid[20];
10430
23860348 10431 pack_threadid (&hexid[0], ref); /* Convert threead id into hex. */
c906108c
SS
10432 hexid[16] = 0;
10433 printf_filtered ("%s %s\n", title, (&hexid[0]));
10434}
10435
10436static void
fba45db2 10437threadlist_test_cmd (char *cmd, int tty)
c906108c
SS
10438{
10439 int startflag = 1;
10440 threadref nextthread;
10441 int done, result_count;
10442 threadref threadlist[3];
10443
10444 printf_filtered ("Remote Threadlist test\n");
10445 if (!remote_get_threadlist (startflag, &nextthread, 3, &done,
10446 &result_count, &threadlist[0]))
10447 printf_filtered ("FAIL: threadlist test\n");
10448 else
10449 {
10450 threadref *scan = threadlist;
10451 threadref *limit = scan + result_count;
10452
10453 while (scan < limit)
10454 output_threadid (" thread ", scan++);
10455 }
10456}
10457
10458void
fba45db2 10459display_thread_info (struct gdb_ext_thread_info *info)
c906108c
SS
10460{
10461 output_threadid ("Threadid: ", &info->threadid);
10462 printf_filtered ("Name: %s\n ", info->shortname);
10463 printf_filtered ("State: %s\n", info->display);
10464 printf_filtered ("other: %s\n\n", info->more_display);
10465}
10466
10467int
fba45db2 10468get_and_display_threadinfo (threadref *ref)
c906108c
SS
10469{
10470 int result;
10471 int set;
10472 struct gdb_ext_thread_info threadinfo;
10473
10474 set = TAG_THREADID | TAG_EXISTS | TAG_THREADNAME
10475 | TAG_MOREDISPLAY | TAG_DISPLAY;
10476 if (0 != (result = remote_get_threadinfo (ref, set, &threadinfo)))
10477 display_thread_info (&threadinfo);
10478 return result;
10479}
10480
10481static void
fba45db2 10482threadinfo_test_cmd (char *cmd, int tty)
c906108c
SS
10483{
10484 int athread = SAMPLE_THREAD;
10485 threadref thread;
10486 int set;
10487
10488 int_to_threadref (&thread, athread);
10489 printf_filtered ("Remote Threadinfo test\n");
10490 if (!get_and_display_threadinfo (&thread))
10491 printf_filtered ("FAIL cannot get thread info\n");
10492}
10493
10494static int
fba45db2 10495thread_display_step (threadref *ref, void *context)
c906108c
SS
10496{
10497 /* output_threadid(" threadstep ",ref); *//* simple test */
10498 return get_and_display_threadinfo (ref);
10499}
10500
10501static void
fba45db2 10502threadlist_update_test_cmd (char *cmd, int tty)
c906108c
SS
10503{
10504 printf_filtered ("Remote Threadlist update test\n");
10505 remote_threadlist_iterator (thread_display_step, 0, CRAZY_MAX_THREADS);
10506}
10507
10508static void
10509init_remote_threadtests (void)
10510{
3e43a32a
MS
10511 add_com ("tlist", class_obscure, threadlist_test_cmd,
10512 _("Fetch and print the remote list of "
10513 "thread identifiers, one pkt only"));
c906108c 10514 add_com ("tinfo", class_obscure, threadinfo_test_cmd,
1bedd215 10515 _("Fetch and display info about one thread"));
c906108c 10516 add_com ("tset", class_obscure, threadset_test_cmd,
1bedd215 10517 _("Test setting to a different thread"));
c906108c 10518 add_com ("tupd", class_obscure, threadlist_update_test_cmd,
1bedd215 10519 _("Iterate through updating all remote thread info"));
c906108c 10520 add_com ("talive", class_obscure, threadalive_test,
1bedd215 10521 _(" Remote thread alive test "));
c906108c
SS
10522}
10523
10524#endif /* 0 */
10525
f3fb8c85
MS
10526/* Convert a thread ID to a string. Returns the string in a static
10527 buffer. */
10528
10529static char *
117de6a9 10530remote_pid_to_str (struct target_ops *ops, ptid_t ptid)
f3fb8c85 10531{
79d7f229 10532 static char buf[64];
82f73884 10533 struct remote_state *rs = get_remote_state ();
f3fb8c85 10534
7cee1e54
PA
10535 if (ptid_equal (ptid, null_ptid))
10536 return normal_pid_to_str (ptid);
10537 else if (ptid_is_pid (ptid))
ecd0ada5
PA
10538 {
10539 /* Printing an inferior target id. */
10540
10541 /* When multi-process extensions are off, there's no way in the
10542 remote protocol to know the remote process id, if there's any
10543 at all. There's one exception --- when we're connected with
10544 target extended-remote, and we manually attached to a process
10545 with "attach PID". We don't record anywhere a flag that
10546 allows us to distinguish that case from the case of
10547 connecting with extended-remote and the stub already being
10548 attached to a process, and reporting yes to qAttached, hence
10549 no smart special casing here. */
10550 if (!remote_multi_process_p (rs))
10551 {
10552 xsnprintf (buf, sizeof buf, "Remote target");
10553 return buf;
10554 }
10555
10556 return normal_pid_to_str (ptid);
82f73884 10557 }
ecd0ada5 10558 else
79d7f229 10559 {
ecd0ada5
PA
10560 if (ptid_equal (magic_null_ptid, ptid))
10561 xsnprintf (buf, sizeof buf, "Thread <main>");
8020350c 10562 else if (remote_multi_process_p (rs))
de0d863e
DB
10563 if (ptid_get_lwp (ptid) == 0)
10564 return normal_pid_to_str (ptid);
10565 else
10566 xsnprintf (buf, sizeof buf, "Thread %d.%ld",
10567 ptid_get_pid (ptid), ptid_get_lwp (ptid));
ecd0ada5
PA
10568 else
10569 xsnprintf (buf, sizeof buf, "Thread %ld",
ba348170 10570 ptid_get_lwp (ptid));
79d7f229
PA
10571 return buf;
10572 }
f3fb8c85
MS
10573}
10574
38691318
KB
10575/* Get the address of the thread local variable in OBJFILE which is
10576 stored at OFFSET within the thread local storage for thread PTID. */
10577
10578static CORE_ADDR
117de6a9
PA
10579remote_get_thread_local_address (struct target_ops *ops,
10580 ptid_t ptid, CORE_ADDR lm, CORE_ADDR offset)
38691318 10581{
4082afcc 10582 if (packet_support (PACKET_qGetTLSAddr) != PACKET_DISABLE)
38691318
KB
10583 {
10584 struct remote_state *rs = get_remote_state ();
6d820c5c 10585 char *p = rs->buf;
82f73884 10586 char *endp = rs->buf + get_remote_packet_size ();
571dd617 10587 enum packet_result result;
38691318
KB
10588
10589 strcpy (p, "qGetTLSAddr:");
10590 p += strlen (p);
82f73884 10591 p = write_ptid (p, endp, ptid);
38691318
KB
10592 *p++ = ',';
10593 p += hexnumstr (p, offset);
10594 *p++ = ',';
10595 p += hexnumstr (p, lm);
10596 *p++ = '\0';
10597
6d820c5c
DJ
10598 putpkt (rs->buf);
10599 getpkt (&rs->buf, &rs->buf_size, 0);
3e43a32a
MS
10600 result = packet_ok (rs->buf,
10601 &remote_protocol_packets[PACKET_qGetTLSAddr]);
571dd617 10602 if (result == PACKET_OK)
38691318
KB
10603 {
10604 ULONGEST result;
10605
6d820c5c 10606 unpack_varlen_hex (rs->buf, &result);
38691318
KB
10607 return result;
10608 }
571dd617 10609 else if (result == PACKET_UNKNOWN)
109c3e39
AC
10610 throw_error (TLS_GENERIC_ERROR,
10611 _("Remote target doesn't support qGetTLSAddr packet"));
38691318 10612 else
109c3e39
AC
10613 throw_error (TLS_GENERIC_ERROR,
10614 _("Remote target failed to process qGetTLSAddr request"));
38691318
KB
10615 }
10616 else
109c3e39
AC
10617 throw_error (TLS_GENERIC_ERROR,
10618 _("TLS not supported or disabled on this target"));
38691318
KB
10619 /* Not reached. */
10620 return 0;
10621}
10622
711e434b
PM
10623/* Provide thread local base, i.e. Thread Information Block address.
10624 Returns 1 if ptid is found and thread_local_base is non zero. */
10625
70221824 10626static int
bd7ae0f5 10627remote_get_tib_address (struct target_ops *self, ptid_t ptid, CORE_ADDR *addr)
711e434b 10628{
4082afcc 10629 if (packet_support (PACKET_qGetTIBAddr) != PACKET_DISABLE)
711e434b
PM
10630 {
10631 struct remote_state *rs = get_remote_state ();
10632 char *p = rs->buf;
10633 char *endp = rs->buf + get_remote_packet_size ();
10634 enum packet_result result;
10635
10636 strcpy (p, "qGetTIBAddr:");
10637 p += strlen (p);
10638 p = write_ptid (p, endp, ptid);
10639 *p++ = '\0';
10640
10641 putpkt (rs->buf);
10642 getpkt (&rs->buf, &rs->buf_size, 0);
10643 result = packet_ok (rs->buf,
10644 &remote_protocol_packets[PACKET_qGetTIBAddr]);
10645 if (result == PACKET_OK)
10646 {
10647 ULONGEST result;
10648
10649 unpack_varlen_hex (rs->buf, &result);
10650 if (addr)
10651 *addr = (CORE_ADDR) result;
10652 return 1;
10653 }
10654 else if (result == PACKET_UNKNOWN)
10655 error (_("Remote target doesn't support qGetTIBAddr packet"));
10656 else
10657 error (_("Remote target failed to process qGetTIBAddr request"));
10658 }
10659 else
10660 error (_("qGetTIBAddr not supported or disabled on this target"));
10661 /* Not reached. */
10662 return 0;
10663}
10664
29709017
DJ
10665/* Support for inferring a target description based on the current
10666 architecture and the size of a 'g' packet. While the 'g' packet
10667 can have any size (since optional registers can be left off the
10668 end), some sizes are easily recognizable given knowledge of the
10669 approximate architecture. */
10670
10671struct remote_g_packet_guess
10672{
10673 int bytes;
10674 const struct target_desc *tdesc;
10675};
10676typedef struct remote_g_packet_guess remote_g_packet_guess_s;
10677DEF_VEC_O(remote_g_packet_guess_s);
10678
10679struct remote_g_packet_data
10680{
10681 VEC(remote_g_packet_guess_s) *guesses;
10682};
10683
10684static struct gdbarch_data *remote_g_packet_data_handle;
10685
10686static void *
10687remote_g_packet_data_init (struct obstack *obstack)
10688{
10689 return OBSTACK_ZALLOC (obstack, struct remote_g_packet_data);
10690}
10691
10692void
10693register_remote_g_packet_guess (struct gdbarch *gdbarch, int bytes,
10694 const struct target_desc *tdesc)
10695{
10696 struct remote_g_packet_data *data
19ba03f4
SM
10697 = ((struct remote_g_packet_data *)
10698 gdbarch_data (gdbarch, remote_g_packet_data_handle));
29709017
DJ
10699 struct remote_g_packet_guess new_guess, *guess;
10700 int ix;
10701
10702 gdb_assert (tdesc != NULL);
10703
10704 for (ix = 0;
10705 VEC_iterate (remote_g_packet_guess_s, data->guesses, ix, guess);
10706 ix++)
10707 if (guess->bytes == bytes)
10708 internal_error (__FILE__, __LINE__,
9b20d036 10709 _("Duplicate g packet description added for size %d"),
29709017
DJ
10710 bytes);
10711
10712 new_guess.bytes = bytes;
10713 new_guess.tdesc = tdesc;
10714 VEC_safe_push (remote_g_packet_guess_s, data->guesses, &new_guess);
10715}
10716
d962ef82
DJ
10717/* Return 1 if remote_read_description would do anything on this target
10718 and architecture, 0 otherwise. */
10719
10720static int
10721remote_read_description_p (struct target_ops *target)
10722{
10723 struct remote_g_packet_data *data
19ba03f4
SM
10724 = ((struct remote_g_packet_data *)
10725 gdbarch_data (target_gdbarch (), remote_g_packet_data_handle));
d962ef82
DJ
10726
10727 if (!VEC_empty (remote_g_packet_guess_s, data->guesses))
10728 return 1;
10729
10730 return 0;
10731}
10732
29709017
DJ
10733static const struct target_desc *
10734remote_read_description (struct target_ops *target)
10735{
10736 struct remote_g_packet_data *data
19ba03f4
SM
10737 = ((struct remote_g_packet_data *)
10738 gdbarch_data (target_gdbarch (), remote_g_packet_data_handle));
29709017 10739
d962ef82
DJ
10740 /* Do not try this during initial connection, when we do not know
10741 whether there is a running but stopped thread. */
10742 if (!target_has_execution || ptid_equal (inferior_ptid, null_ptid))
2117c711 10743 return target->beneath->to_read_description (target->beneath);
d962ef82 10744
29709017
DJ
10745 if (!VEC_empty (remote_g_packet_guess_s, data->guesses))
10746 {
10747 struct remote_g_packet_guess *guess;
10748 int ix;
10749 int bytes = send_g_packet ();
10750
10751 for (ix = 0;
10752 VEC_iterate (remote_g_packet_guess_s, data->guesses, ix, guess);
10753 ix++)
10754 if (guess->bytes == bytes)
10755 return guess->tdesc;
10756
10757 /* We discard the g packet. A minor optimization would be to
10758 hold on to it, and fill the register cache once we have selected
10759 an architecture, but it's too tricky to do safely. */
10760 }
10761
2117c711 10762 return target->beneath->to_read_description (target->beneath);
29709017
DJ
10763}
10764
a6b151f1
DJ
10765/* Remote file transfer support. This is host-initiated I/O, not
10766 target-initiated; for target-initiated, see remote-fileio.c. */
10767
10768/* If *LEFT is at least the length of STRING, copy STRING to
10769 *BUFFER, update *BUFFER to point to the new end of the buffer, and
10770 decrease *LEFT. Otherwise raise an error. */
10771
10772static void
10773remote_buffer_add_string (char **buffer, int *left, char *string)
10774{
10775 int len = strlen (string);
10776
10777 if (len > *left)
10778 error (_("Packet too long for target."));
10779
10780 memcpy (*buffer, string, len);
10781 *buffer += len;
10782 *left -= len;
10783
10784 /* NUL-terminate the buffer as a convenience, if there is
10785 room. */
10786 if (*left)
10787 **buffer = '\0';
10788}
10789
10790/* If *LEFT is large enough, hex encode LEN bytes from BYTES into
10791 *BUFFER, update *BUFFER to point to the new end of the buffer, and
10792 decrease *LEFT. Otherwise raise an error. */
10793
10794static void
10795remote_buffer_add_bytes (char **buffer, int *left, const gdb_byte *bytes,
10796 int len)
10797{
10798 if (2 * len > *left)
10799 error (_("Packet too long for target."));
10800
10801 bin2hex (bytes, *buffer, len);
10802 *buffer += 2 * len;
10803 *left -= 2 * len;
10804
10805 /* NUL-terminate the buffer as a convenience, if there is
10806 room. */
10807 if (*left)
10808 **buffer = '\0';
10809}
10810
10811/* If *LEFT is large enough, convert VALUE to hex and add it to
10812 *BUFFER, update *BUFFER to point to the new end of the buffer, and
10813 decrease *LEFT. Otherwise raise an error. */
10814
10815static void
10816remote_buffer_add_int (char **buffer, int *left, ULONGEST value)
10817{
10818 int len = hexnumlen (value);
10819
10820 if (len > *left)
10821 error (_("Packet too long for target."));
10822
10823 hexnumstr (*buffer, value);
10824 *buffer += len;
10825 *left -= len;
10826
10827 /* NUL-terminate the buffer as a convenience, if there is
10828 room. */
10829 if (*left)
10830 **buffer = '\0';
10831}
10832
10833/* Parse an I/O result packet from BUFFER. Set RETCODE to the return
10834 value, *REMOTE_ERRNO to the remote error number or zero if none
10835 was included, and *ATTACHMENT to point to the start of the annex
10836 if any. The length of the packet isn't needed here; there may
10837 be NUL bytes in BUFFER, but they will be after *ATTACHMENT.
10838
10839 Return 0 if the packet could be parsed, -1 if it could not. If
10840 -1 is returned, the other variables may not be initialized. */
10841
10842static int
10843remote_hostio_parse_result (char *buffer, int *retcode,
10844 int *remote_errno, char **attachment)
10845{
10846 char *p, *p2;
10847
10848 *remote_errno = 0;
10849 *attachment = NULL;
10850
10851 if (buffer[0] != 'F')
10852 return -1;
10853
10854 errno = 0;
10855 *retcode = strtol (&buffer[1], &p, 16);
10856 if (errno != 0 || p == &buffer[1])
10857 return -1;
10858
10859 /* Check for ",errno". */
10860 if (*p == ',')
10861 {
10862 errno = 0;
10863 *remote_errno = strtol (p + 1, &p2, 16);
10864 if (errno != 0 || p + 1 == p2)
10865 return -1;
10866 p = p2;
10867 }
10868
10869 /* Check for ";attachment". If there is no attachment, the
10870 packet should end here. */
10871 if (*p == ';')
10872 {
10873 *attachment = p + 1;
10874 return 0;
10875 }
10876 else if (*p == '\0')
10877 return 0;
10878 else
10879 return -1;
10880}
10881
10882/* Send a prepared I/O packet to the target and read its response.
10883 The prepared packet is in the global RS->BUF before this function
10884 is called, and the answer is there when we return.
10885
10886 COMMAND_BYTES is the length of the request to send, which may include
10887 binary data. WHICH_PACKET is the packet configuration to check
10888 before attempting a packet. If an error occurs, *REMOTE_ERRNO
10889 is set to the error number and -1 is returned. Otherwise the value
10890 returned by the function is returned.
10891
10892 ATTACHMENT and ATTACHMENT_LEN should be non-NULL if and only if an
10893 attachment is expected; an error will be reported if there's a
10894 mismatch. If one is found, *ATTACHMENT will be set to point into
10895 the packet buffer and *ATTACHMENT_LEN will be set to the
10896 attachment's length. */
10897
10898static int
10899remote_hostio_send_command (int command_bytes, int which_packet,
10900 int *remote_errno, char **attachment,
10901 int *attachment_len)
10902{
10903 struct remote_state *rs = get_remote_state ();
10904 int ret, bytes_read;
10905 char *attachment_tmp;
10906
5d93a237 10907 if (!rs->remote_desc
4082afcc 10908 || packet_support (which_packet) == PACKET_DISABLE)
a6b151f1
DJ
10909 {
10910 *remote_errno = FILEIO_ENOSYS;
10911 return -1;
10912 }
10913
10914 putpkt_binary (rs->buf, command_bytes);
10915 bytes_read = getpkt_sane (&rs->buf, &rs->buf_size, 0);
10916
10917 /* If it timed out, something is wrong. Don't try to parse the
10918 buffer. */
10919 if (bytes_read < 0)
10920 {
10921 *remote_errno = FILEIO_EINVAL;
10922 return -1;
10923 }
10924
10925 switch (packet_ok (rs->buf, &remote_protocol_packets[which_packet]))
10926 {
10927 case PACKET_ERROR:
10928 *remote_errno = FILEIO_EINVAL;
10929 return -1;
10930 case PACKET_UNKNOWN:
10931 *remote_errno = FILEIO_ENOSYS;
10932 return -1;
10933 case PACKET_OK:
10934 break;
10935 }
10936
10937 if (remote_hostio_parse_result (rs->buf, &ret, remote_errno,
10938 &attachment_tmp))
10939 {
10940 *remote_errno = FILEIO_EINVAL;
10941 return -1;
10942 }
10943
10944 /* Make sure we saw an attachment if and only if we expected one. */
10945 if ((attachment_tmp == NULL && attachment != NULL)
10946 || (attachment_tmp != NULL && attachment == NULL))
10947 {
10948 *remote_errno = FILEIO_EINVAL;
10949 return -1;
10950 }
10951
10952 /* If an attachment was found, it must point into the packet buffer;
10953 work out how many bytes there were. */
10954 if (attachment_tmp != NULL)
10955 {
10956 *attachment = attachment_tmp;
10957 *attachment_len = bytes_read - (*attachment - rs->buf);
10958 }
10959
10960 return ret;
10961}
10962
80152258
PA
10963/* Invalidate the readahead cache. */
10964
10965static void
10966readahead_cache_invalidate (void)
10967{
10968 struct remote_state *rs = get_remote_state ();
10969
10970 rs->readahead_cache.fd = -1;
10971}
10972
10973/* Invalidate the readahead cache if it is holding data for FD. */
10974
10975static void
10976readahead_cache_invalidate_fd (int fd)
10977{
10978 struct remote_state *rs = get_remote_state ();
10979
10980 if (rs->readahead_cache.fd == fd)
10981 rs->readahead_cache.fd = -1;
10982}
10983
15a201c8
GB
10984/* Set the filesystem remote_hostio functions that take FILENAME
10985 arguments will use. Return 0 on success, or -1 if an error
10986 occurs (and set *REMOTE_ERRNO). */
10987
10988static int
10989remote_hostio_set_filesystem (struct inferior *inf, int *remote_errno)
10990{
10991 struct remote_state *rs = get_remote_state ();
10992 int required_pid = (inf == NULL || inf->fake_pid_p) ? 0 : inf->pid;
10993 char *p = rs->buf;
10994 int left = get_remote_packet_size () - 1;
10995 char arg[9];
10996 int ret;
10997
10998 if (packet_support (PACKET_vFile_setfs) == PACKET_DISABLE)
10999 return 0;
11000
11001 if (rs->fs_pid != -1 && required_pid == rs->fs_pid)
11002 return 0;
11003
11004 remote_buffer_add_string (&p, &left, "vFile:setfs:");
11005
11006 xsnprintf (arg, sizeof (arg), "%x", required_pid);
11007 remote_buffer_add_string (&p, &left, arg);
11008
11009 ret = remote_hostio_send_command (p - rs->buf, PACKET_vFile_setfs,
11010 remote_errno, NULL, NULL);
11011
11012 if (packet_support (PACKET_vFile_setfs) == PACKET_DISABLE)
11013 return 0;
11014
11015 if (ret == 0)
11016 rs->fs_pid = required_pid;
11017
11018 return ret;
11019}
11020
12e2a5fd 11021/* Implementation of to_fileio_open. */
a6b151f1
DJ
11022
11023static int
cd897586 11024remote_hostio_open (struct target_ops *self,
07c138c8 11025 struct inferior *inf, const char *filename,
4313b8c0
GB
11026 int flags, int mode, int warn_if_slow,
11027 int *remote_errno)
a6b151f1
DJ
11028{
11029 struct remote_state *rs = get_remote_state ();
11030 char *p = rs->buf;
11031 int left = get_remote_packet_size () - 1;
11032
4313b8c0
GB
11033 if (warn_if_slow)
11034 {
11035 static int warning_issued = 0;
11036
11037 printf_unfiltered (_("Reading %s from remote target...\n"),
11038 filename);
11039
11040 if (!warning_issued)
11041 {
11042 warning (_("File transfers from remote targets can be slow."
11043 " Use \"set sysroot\" to access files locally"
11044 " instead."));
11045 warning_issued = 1;
11046 }
11047 }
11048
15a201c8
GB
11049 if (remote_hostio_set_filesystem (inf, remote_errno) != 0)
11050 return -1;
11051
a6b151f1
DJ
11052 remote_buffer_add_string (&p, &left, "vFile:open:");
11053
11054 remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
11055 strlen (filename));
11056 remote_buffer_add_string (&p, &left, ",");
11057
11058 remote_buffer_add_int (&p, &left, flags);
11059 remote_buffer_add_string (&p, &left, ",");
11060
11061 remote_buffer_add_int (&p, &left, mode);
11062
11063 return remote_hostio_send_command (p - rs->buf, PACKET_vFile_open,
11064 remote_errno, NULL, NULL);
11065}
11066
12e2a5fd 11067/* Implementation of to_fileio_pwrite. */
a6b151f1
DJ
11068
11069static int
0d866f62
TT
11070remote_hostio_pwrite (struct target_ops *self,
11071 int fd, const gdb_byte *write_buf, int len,
a6b151f1
DJ
11072 ULONGEST offset, int *remote_errno)
11073{
11074 struct remote_state *rs = get_remote_state ();
11075 char *p = rs->buf;
11076 int left = get_remote_packet_size ();
11077 int out_len;
11078
80152258
PA
11079 readahead_cache_invalidate_fd (fd);
11080
a6b151f1
DJ
11081 remote_buffer_add_string (&p, &left, "vFile:pwrite:");
11082
11083 remote_buffer_add_int (&p, &left, fd);
11084 remote_buffer_add_string (&p, &left, ",");
11085
11086 remote_buffer_add_int (&p, &left, offset);
11087 remote_buffer_add_string (&p, &left, ",");
11088
124e13d9 11089 p += remote_escape_output (write_buf, len, 1, (gdb_byte *) p, &out_len,
a6b151f1
DJ
11090 get_remote_packet_size () - (p - rs->buf));
11091
11092 return remote_hostio_send_command (p - rs->buf, PACKET_vFile_pwrite,
11093 remote_errno, NULL, NULL);
11094}
11095
80152258
PA
11096/* Helper for the implementation of to_fileio_pread. Read the file
11097 from the remote side with vFile:pread. */
a6b151f1
DJ
11098
11099static int
80152258
PA
11100remote_hostio_pread_vFile (struct target_ops *self,
11101 int fd, gdb_byte *read_buf, int len,
11102 ULONGEST offset, int *remote_errno)
a6b151f1
DJ
11103{
11104 struct remote_state *rs = get_remote_state ();
11105 char *p = rs->buf;
11106 char *attachment;
11107 int left = get_remote_packet_size ();
11108 int ret, attachment_len;
11109 int read_len;
11110
11111 remote_buffer_add_string (&p, &left, "vFile:pread:");
11112
11113 remote_buffer_add_int (&p, &left, fd);
11114 remote_buffer_add_string (&p, &left, ",");
11115
11116 remote_buffer_add_int (&p, &left, len);
11117 remote_buffer_add_string (&p, &left, ",");
11118
11119 remote_buffer_add_int (&p, &left, offset);
11120
11121 ret = remote_hostio_send_command (p - rs->buf, PACKET_vFile_pread,
11122 remote_errno, &attachment,
11123 &attachment_len);
11124
11125 if (ret < 0)
11126 return ret;
11127
bc20a4af 11128 read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len,
a6b151f1
DJ
11129 read_buf, len);
11130 if (read_len != ret)
11131 error (_("Read returned %d, but %d bytes."), ret, (int) read_len);
11132
11133 return ret;
11134}
11135
80152258
PA
11136/* Serve pread from the readahead cache. Returns number of bytes
11137 read, or 0 if the request can't be served from the cache. */
11138
11139static int
11140remote_hostio_pread_from_cache (struct remote_state *rs,
11141 int fd, gdb_byte *read_buf, size_t len,
11142 ULONGEST offset)
11143{
11144 struct readahead_cache *cache = &rs->readahead_cache;
11145
11146 if (cache->fd == fd
11147 && cache->offset <= offset
11148 && offset < cache->offset + cache->bufsize)
11149 {
11150 ULONGEST max = cache->offset + cache->bufsize;
11151
11152 if (offset + len > max)
11153 len = max - offset;
11154
11155 memcpy (read_buf, cache->buf + offset - cache->offset, len);
11156 return len;
11157 }
11158
11159 return 0;
11160}
11161
11162/* Implementation of to_fileio_pread. */
11163
11164static int
11165remote_hostio_pread (struct target_ops *self,
11166 int fd, gdb_byte *read_buf, int len,
11167 ULONGEST offset, int *remote_errno)
11168{
11169 int ret;
11170 struct remote_state *rs = get_remote_state ();
11171 struct readahead_cache *cache = &rs->readahead_cache;
11172
11173 ret = remote_hostio_pread_from_cache (rs, fd, read_buf, len, offset);
11174 if (ret > 0)
11175 {
11176 cache->hit_count++;
11177
11178 if (remote_debug)
11179 fprintf_unfiltered (gdb_stdlog, "readahead cache hit %s\n",
11180 pulongest (cache->hit_count));
11181 return ret;
11182 }
11183
11184 cache->miss_count++;
11185 if (remote_debug)
11186 fprintf_unfiltered (gdb_stdlog, "readahead cache miss %s\n",
11187 pulongest (cache->miss_count));
11188
11189 cache->fd = fd;
11190 cache->offset = offset;
11191 cache->bufsize = get_remote_packet_size ();
224c3ddb 11192 cache->buf = (gdb_byte *) xrealloc (cache->buf, cache->bufsize);
80152258
PA
11193
11194 ret = remote_hostio_pread_vFile (self, cache->fd, cache->buf, cache->bufsize,
11195 cache->offset, remote_errno);
11196 if (ret <= 0)
11197 {
11198 readahead_cache_invalidate_fd (fd);
11199 return ret;
11200 }
11201
11202 cache->bufsize = ret;
11203 return remote_hostio_pread_from_cache (rs, fd, read_buf, len, offset);
11204}
11205
12e2a5fd 11206/* Implementation of to_fileio_close. */
a6b151f1
DJ
11207
11208static int
df39ea25 11209remote_hostio_close (struct target_ops *self, int fd, int *remote_errno)
a6b151f1
DJ
11210{
11211 struct remote_state *rs = get_remote_state ();
11212 char *p = rs->buf;
11213 int left = get_remote_packet_size () - 1;
11214
80152258
PA
11215 readahead_cache_invalidate_fd (fd);
11216
a6b151f1
DJ
11217 remote_buffer_add_string (&p, &left, "vFile:close:");
11218
11219 remote_buffer_add_int (&p, &left, fd);
11220
11221 return remote_hostio_send_command (p - rs->buf, PACKET_vFile_close,
11222 remote_errno, NULL, NULL);
11223}
11224
12e2a5fd 11225/* Implementation of to_fileio_unlink. */
a6b151f1
DJ
11226
11227static int
dbbca37d 11228remote_hostio_unlink (struct target_ops *self,
07c138c8
GB
11229 struct inferior *inf, const char *filename,
11230 int *remote_errno)
a6b151f1
DJ
11231{
11232 struct remote_state *rs = get_remote_state ();
11233 char *p = rs->buf;
11234 int left = get_remote_packet_size () - 1;
11235
15a201c8
GB
11236 if (remote_hostio_set_filesystem (inf, remote_errno) != 0)
11237 return -1;
11238
a6b151f1
DJ
11239 remote_buffer_add_string (&p, &left, "vFile:unlink:");
11240
11241 remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
11242 strlen (filename));
11243
11244 return remote_hostio_send_command (p - rs->buf, PACKET_vFile_unlink,
11245 remote_errno, NULL, NULL);
11246}
11247
12e2a5fd 11248/* Implementation of to_fileio_readlink. */
b9e7b9c3
UW
11249
11250static char *
fab5aa7c 11251remote_hostio_readlink (struct target_ops *self,
07c138c8
GB
11252 struct inferior *inf, const char *filename,
11253 int *remote_errno)
b9e7b9c3
UW
11254{
11255 struct remote_state *rs = get_remote_state ();
11256 char *p = rs->buf;
11257 char *attachment;
11258 int left = get_remote_packet_size ();
11259 int len, attachment_len;
11260 int read_len;
11261 char *ret;
11262
15a201c8
GB
11263 if (remote_hostio_set_filesystem (inf, remote_errno) != 0)
11264 return NULL;
11265
b9e7b9c3
UW
11266 remote_buffer_add_string (&p, &left, "vFile:readlink:");
11267
11268 remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
11269 strlen (filename));
11270
11271 len = remote_hostio_send_command (p - rs->buf, PACKET_vFile_readlink,
11272 remote_errno, &attachment,
11273 &attachment_len);
11274
11275 if (len < 0)
11276 return NULL;
11277
224c3ddb 11278 ret = (char *) xmalloc (len + 1);
b9e7b9c3 11279
bc20a4af
PA
11280 read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len,
11281 (gdb_byte *) ret, len);
b9e7b9c3
UW
11282 if (read_len != len)
11283 error (_("Readlink returned %d, but %d bytes."), len, read_len);
11284
11285 ret[len] = '\0';
11286 return ret;
11287}
11288
12e2a5fd 11289/* Implementation of to_fileio_fstat. */
0a93529c
GB
11290
11291static int
11292remote_hostio_fstat (struct target_ops *self,
11293 int fd, struct stat *st,
11294 int *remote_errno)
11295{
11296 struct remote_state *rs = get_remote_state ();
11297 char *p = rs->buf;
11298 int left = get_remote_packet_size ();
11299 int attachment_len, ret;
11300 char *attachment;
11301 struct fio_stat fst;
11302 int read_len;
11303
464b0089
GB
11304 remote_buffer_add_string (&p, &left, "vFile:fstat:");
11305
11306 remote_buffer_add_int (&p, &left, fd);
11307
11308 ret = remote_hostio_send_command (p - rs->buf, PACKET_vFile_fstat,
11309 remote_errno, &attachment,
11310 &attachment_len);
11311 if (ret < 0)
0a93529c 11312 {
464b0089
GB
11313 if (*remote_errno != FILEIO_ENOSYS)
11314 return ret;
11315
0a93529c
GB
11316 /* Strictly we should return -1, ENOSYS here, but when
11317 "set sysroot remote:" was implemented in August 2008
11318 BFD's need for a stat function was sidestepped with
11319 this hack. This was not remedied until March 2015
11320 so we retain the previous behavior to avoid breaking
11321 compatibility.
11322
11323 Note that the memset is a March 2015 addition; older
11324 GDBs set st_size *and nothing else* so the structure
11325 would have garbage in all other fields. This might
11326 break something but retaining the previous behavior
11327 here would be just too wrong. */
11328
11329 memset (st, 0, sizeof (struct stat));
11330 st->st_size = INT_MAX;
11331 return 0;
11332 }
11333
0a93529c
GB
11334 read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len,
11335 (gdb_byte *) &fst, sizeof (fst));
11336
11337 if (read_len != ret)
11338 error (_("vFile:fstat returned %d, but %d bytes."), ret, read_len);
11339
11340 if (read_len != sizeof (fst))
11341 error (_("vFile:fstat returned %d bytes, but expecting %d."),
11342 read_len, (int) sizeof (fst));
11343
11344 remote_fileio_to_host_stat (&fst, st);
11345
11346 return 0;
11347}
11348
12e2a5fd 11349/* Implementation of to_filesystem_is_local. */
e3dd7556
GB
11350
11351static int
11352remote_filesystem_is_local (struct target_ops *self)
11353{
11354 /* Valgrind GDB presents itself as a remote target but works
11355 on the local filesystem: it does not implement remote get
11356 and users are not expected to set a sysroot. To handle
11357 this case we treat the remote filesystem as local if the
11358 sysroot is exactly TARGET_SYSROOT_PREFIX and if the stub
11359 does not support vFile:open. */
a3be80c3 11360 if (strcmp (gdb_sysroot, TARGET_SYSROOT_PREFIX) == 0)
e3dd7556
GB
11361 {
11362 enum packet_support ps = packet_support (PACKET_vFile_open);
11363
11364 if (ps == PACKET_SUPPORT_UNKNOWN)
11365 {
11366 int fd, remote_errno;
11367
11368 /* Try opening a file to probe support. The supplied
11369 filename is irrelevant, we only care about whether
11370 the stub recognizes the packet or not. */
07c138c8 11371 fd = remote_hostio_open (self, NULL, "just probing",
4313b8c0 11372 FILEIO_O_RDONLY, 0700, 0,
e3dd7556
GB
11373 &remote_errno);
11374
11375 if (fd >= 0)
11376 remote_hostio_close (self, fd, &remote_errno);
11377
11378 ps = packet_support (PACKET_vFile_open);
11379 }
11380
11381 if (ps == PACKET_DISABLE)
11382 {
11383 static int warning_issued = 0;
11384
11385 if (!warning_issued)
11386 {
11387 warning (_("remote target does not support file"
11388 " transfer, attempting to access files"
11389 " from local filesystem."));
11390 warning_issued = 1;
11391 }
11392
11393 return 1;
11394 }
11395 }
11396
11397 return 0;
11398}
11399
a6b151f1
DJ
11400static int
11401remote_fileio_errno_to_host (int errnum)
11402{
11403 switch (errnum)
11404 {
11405 case FILEIO_EPERM:
11406 return EPERM;
11407 case FILEIO_ENOENT:
11408 return ENOENT;
11409 case FILEIO_EINTR:
11410 return EINTR;
11411 case FILEIO_EIO:
11412 return EIO;
11413 case FILEIO_EBADF:
11414 return EBADF;
11415 case FILEIO_EACCES:
11416 return EACCES;
11417 case FILEIO_EFAULT:
11418 return EFAULT;
11419 case FILEIO_EBUSY:
11420 return EBUSY;
11421 case FILEIO_EEXIST:
11422 return EEXIST;
11423 case FILEIO_ENODEV:
11424 return ENODEV;
11425 case FILEIO_ENOTDIR:
11426 return ENOTDIR;
11427 case FILEIO_EISDIR:
11428 return EISDIR;
11429 case FILEIO_EINVAL:
11430 return EINVAL;
11431 case FILEIO_ENFILE:
11432 return ENFILE;
11433 case FILEIO_EMFILE:
11434 return EMFILE;
11435 case FILEIO_EFBIG:
11436 return EFBIG;
11437 case FILEIO_ENOSPC:
11438 return ENOSPC;
11439 case FILEIO_ESPIPE:
11440 return ESPIPE;
11441 case FILEIO_EROFS:
11442 return EROFS;
11443 case FILEIO_ENOSYS:
11444 return ENOSYS;
11445 case FILEIO_ENAMETOOLONG:
11446 return ENAMETOOLONG;
11447 }
11448 return -1;
11449}
11450
11451static char *
11452remote_hostio_error (int errnum)
11453{
11454 int host_error = remote_fileio_errno_to_host (errnum);
11455
11456 if (host_error == -1)
11457 error (_("Unknown remote I/O error %d"), errnum);
11458 else
11459 error (_("Remote I/O error: %s"), safe_strerror (host_error));
11460}
11461
a6b151f1
DJ
11462static void
11463remote_hostio_close_cleanup (void *opaque)
11464{
11465 int fd = *(int *) opaque;
11466 int remote_errno;
11467
df39ea25 11468 remote_hostio_close (find_target_at (process_stratum), fd, &remote_errno);
a6b151f1
DJ
11469}
11470
11471void
11472remote_file_put (const char *local_file, const char *remote_file, int from_tty)
11473{
11474 struct cleanup *back_to, *close_cleanup;
11475 int retcode, fd, remote_errno, bytes, io_size;
11476 FILE *file;
11477 gdb_byte *buffer;
11478 int bytes_in_buffer;
11479 int saw_eof;
11480 ULONGEST offset;
5d93a237 11481 struct remote_state *rs = get_remote_state ();
a6b151f1 11482
5d93a237 11483 if (!rs->remote_desc)
a6b151f1
DJ
11484 error (_("command can only be used with remote target"));
11485
614c279d 11486 file = gdb_fopen_cloexec (local_file, "rb");
a6b151f1
DJ
11487 if (file == NULL)
11488 perror_with_name (local_file);
7c8a8b04 11489 back_to = make_cleanup_fclose (file);
a6b151f1 11490
07c138c8 11491 fd = remote_hostio_open (find_target_at (process_stratum), NULL,
cd897586 11492 remote_file, (FILEIO_O_WRONLY | FILEIO_O_CREAT
a6b151f1 11493 | FILEIO_O_TRUNC),
4313b8c0 11494 0700, 0, &remote_errno);
a6b151f1
DJ
11495 if (fd == -1)
11496 remote_hostio_error (remote_errno);
11497
11498 /* Send up to this many bytes at once. They won't all fit in the
11499 remote packet limit, so we'll transfer slightly fewer. */
11500 io_size = get_remote_packet_size ();
224c3ddb 11501 buffer = (gdb_byte *) xmalloc (io_size);
a6b151f1
DJ
11502 make_cleanup (xfree, buffer);
11503
11504 close_cleanup = make_cleanup (remote_hostio_close_cleanup, &fd);
11505
11506 bytes_in_buffer = 0;
11507 saw_eof = 0;
11508 offset = 0;
11509 while (bytes_in_buffer || !saw_eof)
11510 {
11511 if (!saw_eof)
11512 {
3e43a32a
MS
11513 bytes = fread (buffer + bytes_in_buffer, 1,
11514 io_size - bytes_in_buffer,
a6b151f1
DJ
11515 file);
11516 if (bytes == 0)
11517 {
11518 if (ferror (file))
11519 error (_("Error reading %s."), local_file);
11520 else
11521 {
11522 /* EOF. Unless there is something still in the
11523 buffer from the last iteration, we are done. */
11524 saw_eof = 1;
11525 if (bytes_in_buffer == 0)
11526 break;
11527 }
11528 }
11529 }
11530 else
11531 bytes = 0;
11532
11533 bytes += bytes_in_buffer;
11534 bytes_in_buffer = 0;
11535
0d866f62
TT
11536 retcode = remote_hostio_pwrite (find_target_at (process_stratum),
11537 fd, buffer, bytes,
3e43a32a 11538 offset, &remote_errno);
a6b151f1
DJ
11539
11540 if (retcode < 0)
11541 remote_hostio_error (remote_errno);
11542 else if (retcode == 0)
11543 error (_("Remote write of %d bytes returned 0!"), bytes);
11544 else if (retcode < bytes)
11545 {
11546 /* Short write. Save the rest of the read data for the next
11547 write. */
11548 bytes_in_buffer = bytes - retcode;
11549 memmove (buffer, buffer + retcode, bytes_in_buffer);
11550 }
11551
11552 offset += retcode;
11553 }
11554
11555 discard_cleanups (close_cleanup);
df39ea25 11556 if (remote_hostio_close (find_target_at (process_stratum), fd, &remote_errno))
a6b151f1
DJ
11557 remote_hostio_error (remote_errno);
11558
11559 if (from_tty)
11560 printf_filtered (_("Successfully sent file \"%s\".\n"), local_file);
11561 do_cleanups (back_to);
11562}
11563
11564void
11565remote_file_get (const char *remote_file, const char *local_file, int from_tty)
11566{
11567 struct cleanup *back_to, *close_cleanup;
cea39f65 11568 int fd, remote_errno, bytes, io_size;
a6b151f1
DJ
11569 FILE *file;
11570 gdb_byte *buffer;
11571 ULONGEST offset;
5d93a237 11572 struct remote_state *rs = get_remote_state ();
a6b151f1 11573
5d93a237 11574 if (!rs->remote_desc)
a6b151f1
DJ
11575 error (_("command can only be used with remote target"));
11576
07c138c8 11577 fd = remote_hostio_open (find_target_at (process_stratum), NULL,
4313b8c0
GB
11578 remote_file, FILEIO_O_RDONLY, 0, 0,
11579 &remote_errno);
a6b151f1
DJ
11580 if (fd == -1)
11581 remote_hostio_error (remote_errno);
11582
614c279d 11583 file = gdb_fopen_cloexec (local_file, "wb");
a6b151f1
DJ
11584 if (file == NULL)
11585 perror_with_name (local_file);
7c8a8b04 11586 back_to = make_cleanup_fclose (file);
a6b151f1
DJ
11587
11588 /* Send up to this many bytes at once. They won't all fit in the
11589 remote packet limit, so we'll transfer slightly fewer. */
11590 io_size = get_remote_packet_size ();
224c3ddb 11591 buffer = (gdb_byte *) xmalloc (io_size);
a6b151f1
DJ
11592 make_cleanup (xfree, buffer);
11593
11594 close_cleanup = make_cleanup (remote_hostio_close_cleanup, &fd);
11595
11596 offset = 0;
11597 while (1)
11598 {
a3be983c
TT
11599 bytes = remote_hostio_pread (find_target_at (process_stratum),
11600 fd, buffer, io_size, offset, &remote_errno);
a6b151f1
DJ
11601 if (bytes == 0)
11602 /* Success, but no bytes, means end-of-file. */
11603 break;
11604 if (bytes == -1)
11605 remote_hostio_error (remote_errno);
11606
11607 offset += bytes;
11608
11609 bytes = fwrite (buffer, 1, bytes, file);
11610 if (bytes == 0)
11611 perror_with_name (local_file);
11612 }
11613
11614 discard_cleanups (close_cleanup);
df39ea25 11615 if (remote_hostio_close (find_target_at (process_stratum), fd, &remote_errno))
a6b151f1
DJ
11616 remote_hostio_error (remote_errno);
11617
11618 if (from_tty)
11619 printf_filtered (_("Successfully fetched file \"%s\".\n"), remote_file);
11620 do_cleanups (back_to);
11621}
11622
11623void
11624remote_file_delete (const char *remote_file, int from_tty)
11625{
11626 int retcode, remote_errno;
5d93a237 11627 struct remote_state *rs = get_remote_state ();
a6b151f1 11628
5d93a237 11629 if (!rs->remote_desc)
a6b151f1
DJ
11630 error (_("command can only be used with remote target"));
11631
dbbca37d 11632 retcode = remote_hostio_unlink (find_target_at (process_stratum),
07c138c8 11633 NULL, remote_file, &remote_errno);
a6b151f1
DJ
11634 if (retcode == -1)
11635 remote_hostio_error (remote_errno);
11636
11637 if (from_tty)
11638 printf_filtered (_("Successfully deleted file \"%s\".\n"), remote_file);
11639}
11640
11641static void
11642remote_put_command (char *args, int from_tty)
11643{
11644 struct cleanup *back_to;
11645 char **argv;
11646
d1a41061
PP
11647 if (args == NULL)
11648 error_no_arg (_("file to put"));
11649
11650 argv = gdb_buildargv (args);
a6b151f1
DJ
11651 back_to = make_cleanup_freeargv (argv);
11652 if (argv[0] == NULL || argv[1] == NULL || argv[2] != NULL)
11653 error (_("Invalid parameters to remote put"));
11654
11655 remote_file_put (argv[0], argv[1], from_tty);
11656
11657 do_cleanups (back_to);
11658}
11659
11660static void
11661remote_get_command (char *args, int from_tty)
11662{
11663 struct cleanup *back_to;
11664 char **argv;
11665
d1a41061
PP
11666 if (args == NULL)
11667 error_no_arg (_("file to get"));
11668
11669 argv = gdb_buildargv (args);
a6b151f1
DJ
11670 back_to = make_cleanup_freeargv (argv);
11671 if (argv[0] == NULL || argv[1] == NULL || argv[2] != NULL)
11672 error (_("Invalid parameters to remote get"));
11673
11674 remote_file_get (argv[0], argv[1], from_tty);
11675
11676 do_cleanups (back_to);
11677}
11678
11679static void
11680remote_delete_command (char *args, int from_tty)
11681{
11682 struct cleanup *back_to;
11683 char **argv;
11684
d1a41061
PP
11685 if (args == NULL)
11686 error_no_arg (_("file to delete"));
11687
11688 argv = gdb_buildargv (args);
a6b151f1
DJ
11689 back_to = make_cleanup_freeargv (argv);
11690 if (argv[0] == NULL || argv[1] != NULL)
11691 error (_("Invalid parameters to remote delete"));
11692
11693 remote_file_delete (argv[0], from_tty);
11694
11695 do_cleanups (back_to);
11696}
11697
11698static void
11699remote_command (char *args, int from_tty)
11700{
635c7e8a 11701 help_list (remote_cmdlist, "remote ", all_commands, gdb_stdout);
a6b151f1
DJ
11702}
11703
b2175913 11704static int
19db3e69 11705remote_can_execute_reverse (struct target_ops *self)
b2175913 11706{
4082afcc
PA
11707 if (packet_support (PACKET_bs) == PACKET_ENABLE
11708 || packet_support (PACKET_bc) == PACKET_ENABLE)
40ab02ce
MS
11709 return 1;
11710 else
11711 return 0;
b2175913
MS
11712}
11713
74531fed 11714static int
2a9a2795 11715remote_supports_non_stop (struct target_ops *self)
74531fed
PA
11716{
11717 return 1;
11718}
11719
03583c20 11720static int
2bfc0540 11721remote_supports_disable_randomization (struct target_ops *self)
03583c20
UW
11722{
11723 /* Only supported in extended mode. */
11724 return 0;
11725}
11726
8a305172 11727static int
86ce2668 11728remote_supports_multi_process (struct target_ops *self)
8a305172
PA
11729{
11730 struct remote_state *rs = get_remote_state ();
a744cf53 11731
8020350c 11732 return remote_multi_process_p (rs);
8a305172
PA
11733}
11734
70221824 11735static int
782b2b07
SS
11736remote_supports_cond_tracepoints (void)
11737{
4082afcc 11738 return packet_support (PACKET_ConditionalTracepoints) == PACKET_ENABLE;
782b2b07
SS
11739}
11740
3788aec7 11741static int
efcc2da7 11742remote_supports_cond_breakpoints (struct target_ops *self)
3788aec7 11743{
4082afcc 11744 return packet_support (PACKET_ConditionalBreakpoints) == PACKET_ENABLE;
3788aec7
LM
11745}
11746
70221824 11747static int
7a697b8d
SS
11748remote_supports_fast_tracepoints (void)
11749{
4082afcc 11750 return packet_support (PACKET_FastTracepoints) == PACKET_ENABLE;
7a697b8d
SS
11751}
11752
0fb4aa4b
PA
11753static int
11754remote_supports_static_tracepoints (void)
11755{
4082afcc 11756 return packet_support (PACKET_StaticTracepoints) == PACKET_ENABLE;
0fb4aa4b
PA
11757}
11758
1e4d1764
YQ
11759static int
11760remote_supports_install_in_trace (void)
11761{
4082afcc 11762 return packet_support (PACKET_InstallInTrace) == PACKET_ENABLE;
1e4d1764
YQ
11763}
11764
d248b706 11765static int
7d178d6a 11766remote_supports_enable_disable_tracepoint (struct target_ops *self)
d248b706 11767{
4082afcc
PA
11768 return (packet_support (PACKET_EnableDisableTracepoints_feature)
11769 == PACKET_ENABLE);
d248b706
KY
11770}
11771
3065dfb6 11772static int
6de37a3a 11773remote_supports_string_tracing (struct target_ops *self)
3065dfb6 11774{
4082afcc 11775 return packet_support (PACKET_tracenz_feature) == PACKET_ENABLE;
3065dfb6
SS
11776}
11777
d3ce09f5 11778static int
78eff0ec 11779remote_can_run_breakpoint_commands (struct target_ops *self)
d3ce09f5 11780{
4082afcc 11781 return packet_support (PACKET_BreakpointCommands) == PACKET_ENABLE;
d3ce09f5
SS
11782}
11783
35b1e5cc 11784static void
ecae04e1 11785remote_trace_init (struct target_ops *self)
35b1e5cc
SS
11786{
11787 putpkt ("QTinit");
11788 remote_get_noisy_reply (&target_buf, &target_buf_size);
ad91cd99 11789 if (strcmp (target_buf, "OK") != 0)
35b1e5cc
SS
11790 error (_("Target does not support this command."));
11791}
11792
11793static void free_actions_list (char **actions_list);
11794static void free_actions_list_cleanup_wrapper (void *);
11795static void
11796free_actions_list_cleanup_wrapper (void *al)
11797{
19ba03f4 11798 free_actions_list ((char **) al);
35b1e5cc
SS
11799}
11800
11801static void
11802free_actions_list (char **actions_list)
11803{
11804 int ndx;
11805
11806 if (actions_list == 0)
11807 return;
11808
11809 for (ndx = 0; actions_list[ndx]; ndx++)
11810 xfree (actions_list[ndx]);
11811
11812 xfree (actions_list);
11813}
11814
409873ef
SS
11815/* Recursive routine to walk through command list including loops, and
11816 download packets for each command. */
11817
11818static void
11819remote_download_command_source (int num, ULONGEST addr,
11820 struct command_line *cmds)
11821{
11822 struct remote_state *rs = get_remote_state ();
11823 struct command_line *cmd;
11824
11825 for (cmd = cmds; cmd; cmd = cmd->next)
11826 {
0df8b418 11827 QUIT; /* Allow user to bail out with ^C. */
409873ef
SS
11828 strcpy (rs->buf, "QTDPsrc:");
11829 encode_source_string (num, addr, "cmd", cmd->line,
11830 rs->buf + strlen (rs->buf),
11831 rs->buf_size - strlen (rs->buf));
11832 putpkt (rs->buf);
11833 remote_get_noisy_reply (&target_buf, &target_buf_size);
11834 if (strcmp (target_buf, "OK"))
11835 warning (_("Target does not support source download."));
11836
11837 if (cmd->control_type == while_control
11838 || cmd->control_type == while_stepping_control)
11839 {
11840 remote_download_command_source (num, addr, *cmd->body_list);
11841
0df8b418 11842 QUIT; /* Allow user to bail out with ^C. */
409873ef
SS
11843 strcpy (rs->buf, "QTDPsrc:");
11844 encode_source_string (num, addr, "cmd", "end",
11845 rs->buf + strlen (rs->buf),
11846 rs->buf_size - strlen (rs->buf));
11847 putpkt (rs->buf);
11848 remote_get_noisy_reply (&target_buf, &target_buf_size);
11849 if (strcmp (target_buf, "OK"))
11850 warning (_("Target does not support source download."));
11851 }
11852 }
11853}
11854
35b1e5cc 11855static void
548f7808 11856remote_download_tracepoint (struct target_ops *self, struct bp_location *loc)
35b1e5cc 11857{
bba74b36 11858#define BUF_SIZE 2048
e8ba3115 11859
35b1e5cc 11860 CORE_ADDR tpaddr;
409873ef 11861 char addrbuf[40];
bba74b36 11862 char buf[BUF_SIZE];
35b1e5cc
SS
11863 char **tdp_actions;
11864 char **stepping_actions;
11865 int ndx;
11866 struct cleanup *old_chain = NULL;
11867 struct agent_expr *aexpr;
11868 struct cleanup *aexpr_chain = NULL;
11869 char *pkt;
e8ba3115 11870 struct breakpoint *b = loc->owner;
d9b3f62e 11871 struct tracepoint *t = (struct tracepoint *) b;
35b1e5cc 11872
dc673c81 11873 encode_actions_rsp (loc, &tdp_actions, &stepping_actions);
e8ba3115
YQ
11874 old_chain = make_cleanup (free_actions_list_cleanup_wrapper,
11875 tdp_actions);
11876 (void) make_cleanup (free_actions_list_cleanup_wrapper,
11877 stepping_actions);
11878
11879 tpaddr = loc->address;
11880 sprintf_vma (addrbuf, tpaddr);
bba74b36
YQ
11881 xsnprintf (buf, BUF_SIZE, "QTDP:%x:%s:%c:%lx:%x", b->number,
11882 addrbuf, /* address */
11883 (b->enable_state == bp_enabled ? 'E' : 'D'),
11884 t->step_count, t->pass_count);
e8ba3115
YQ
11885 /* Fast tracepoints are mostly handled by the target, but we can
11886 tell the target how big of an instruction block should be moved
11887 around. */
11888 if (b->type == bp_fast_tracepoint)
11889 {
11890 /* Only test for support at download time; we may not know
11891 target capabilities at definition time. */
11892 if (remote_supports_fast_tracepoints ())
35b1e5cc 11893 {
6b940e6a
PL
11894 if (gdbarch_fast_tracepoint_valid_at (loc->gdbarch, tpaddr,
11895 NULL))
bba74b36 11896 xsnprintf (buf + strlen (buf), BUF_SIZE - strlen (buf), ":F%x",
6b940e6a 11897 gdb_insn_length (loc->gdbarch, tpaddr));
35b1e5cc 11898 else
e8ba3115
YQ
11899 /* If it passed validation at definition but fails now,
11900 something is very wrong. */
11901 internal_error (__FILE__, __LINE__,
11902 _("Fast tracepoint not "
11903 "valid during download"));
35b1e5cc 11904 }
e8ba3115
YQ
11905 else
11906 /* Fast tracepoints are functionally identical to regular
11907 tracepoints, so don't take lack of support as a reason to
11908 give up on the trace run. */
11909 warning (_("Target does not support fast tracepoints, "
11910 "downloading %d as regular tracepoint"), b->number);
11911 }
11912 else if (b->type == bp_static_tracepoint)
11913 {
11914 /* Only test for support at download time; we may not know
11915 target capabilities at definition time. */
11916 if (remote_supports_static_tracepoints ())
0fb4aa4b 11917 {
e8ba3115 11918 struct static_tracepoint_marker marker;
0fb4aa4b 11919
e8ba3115
YQ
11920 if (target_static_tracepoint_marker_at (tpaddr, &marker))
11921 strcat (buf, ":S");
0fb4aa4b 11922 else
e8ba3115 11923 error (_("Static tracepoint not valid during download"));
0fb4aa4b 11924 }
e8ba3115
YQ
11925 else
11926 /* Fast tracepoints are functionally identical to regular
11927 tracepoints, so don't take lack of support as a reason
11928 to give up on the trace run. */
11929 error (_("Target does not support static tracepoints"));
11930 }
11931 /* If the tracepoint has a conditional, make it into an agent
11932 expression and append to the definition. */
11933 if (loc->cond)
11934 {
11935 /* Only test support at download time, we may not know target
11936 capabilities at definition time. */
11937 if (remote_supports_cond_tracepoints ())
35b1e5cc 11938 {
e8ba3115
YQ
11939 aexpr = gen_eval_for_expr (tpaddr, loc->cond);
11940 aexpr_chain = make_cleanup_free_agent_expr (aexpr);
bba74b36
YQ
11941 xsnprintf (buf + strlen (buf), BUF_SIZE - strlen (buf), ":X%x,",
11942 aexpr->len);
e8ba3115
YQ
11943 pkt = buf + strlen (buf);
11944 for (ndx = 0; ndx < aexpr->len; ++ndx)
11945 pkt = pack_hex_byte (pkt, aexpr->buf[ndx]);
11946 *pkt = '\0';
11947 do_cleanups (aexpr_chain);
35b1e5cc 11948 }
e8ba3115
YQ
11949 else
11950 warning (_("Target does not support conditional tracepoints, "
11951 "ignoring tp %d cond"), b->number);
11952 }
35b1e5cc 11953
d9b3f62e 11954 if (b->commands || *default_collect)
e8ba3115
YQ
11955 strcat (buf, "-");
11956 putpkt (buf);
11957 remote_get_noisy_reply (&target_buf, &target_buf_size);
11958 if (strcmp (target_buf, "OK"))
11959 error (_("Target does not support tracepoints."));
35b1e5cc 11960
e8ba3115
YQ
11961 /* do_single_steps (t); */
11962 if (tdp_actions)
11963 {
11964 for (ndx = 0; tdp_actions[ndx]; ndx++)
35b1e5cc 11965 {
e8ba3115 11966 QUIT; /* Allow user to bail out with ^C. */
bba74b36
YQ
11967 xsnprintf (buf, BUF_SIZE, "QTDP:-%x:%s:%s%c",
11968 b->number, addrbuf, /* address */
11969 tdp_actions[ndx],
11970 ((tdp_actions[ndx + 1] || stepping_actions)
11971 ? '-' : 0));
e8ba3115
YQ
11972 putpkt (buf);
11973 remote_get_noisy_reply (&target_buf,
11974 &target_buf_size);
11975 if (strcmp (target_buf, "OK"))
11976 error (_("Error on target while setting tracepoints."));
35b1e5cc 11977 }
e8ba3115
YQ
11978 }
11979 if (stepping_actions)
11980 {
11981 for (ndx = 0; stepping_actions[ndx]; ndx++)
35b1e5cc 11982 {
e8ba3115 11983 QUIT; /* Allow user to bail out with ^C. */
bba74b36
YQ
11984 xsnprintf (buf, BUF_SIZE, "QTDP:-%x:%s:%s%s%s",
11985 b->number, addrbuf, /* address */
11986 ((ndx == 0) ? "S" : ""),
11987 stepping_actions[ndx],
11988 (stepping_actions[ndx + 1] ? "-" : ""));
e8ba3115
YQ
11989 putpkt (buf);
11990 remote_get_noisy_reply (&target_buf,
11991 &target_buf_size);
11992 if (strcmp (target_buf, "OK"))
11993 error (_("Error on target while setting tracepoints."));
35b1e5cc 11994 }
e8ba3115 11995 }
409873ef 11996
4082afcc 11997 if (packet_support (PACKET_TracepointSource) == PACKET_ENABLE)
e8ba3115 11998 {
f00aae0f 11999 if (b->location != NULL)
409873ef 12000 {
e8ba3115 12001 strcpy (buf, "QTDPsrc:");
f00aae0f
KS
12002 encode_source_string (b->number, loc->address, "at",
12003 event_location_to_string (b->location),
12004 buf + strlen (buf), 2048 - strlen (buf));
e8ba3115
YQ
12005 putpkt (buf);
12006 remote_get_noisy_reply (&target_buf, &target_buf_size);
12007 if (strcmp (target_buf, "OK"))
12008 warning (_("Target does not support source download."));
409873ef 12009 }
e8ba3115
YQ
12010 if (b->cond_string)
12011 {
12012 strcpy (buf, "QTDPsrc:");
12013 encode_source_string (b->number, loc->address,
12014 "cond", b->cond_string, buf + strlen (buf),
12015 2048 - strlen (buf));
12016 putpkt (buf);
12017 remote_get_noisy_reply (&target_buf, &target_buf_size);
12018 if (strcmp (target_buf, "OK"))
12019 warning (_("Target does not support source download."));
12020 }
12021 remote_download_command_source (b->number, loc->address,
12022 breakpoint_commands (b));
35b1e5cc 12023 }
e8ba3115
YQ
12024
12025 do_cleanups (old_chain);
35b1e5cc
SS
12026}
12027
1e4d1764 12028static int
a52a8357 12029remote_can_download_tracepoint (struct target_ops *self)
1e4d1764 12030{
1e51243a
PA
12031 struct remote_state *rs = get_remote_state ();
12032 struct trace_status *ts;
12033 int status;
12034
12035 /* Don't try to install tracepoints until we've relocated our
12036 symbols, and fetched and merged the target's tracepoint list with
12037 ours. */
12038 if (rs->starting_up)
12039 return 0;
12040
12041 ts = current_trace_status ();
8bd200f1 12042 status = remote_get_trace_status (self, ts);
1e4d1764
YQ
12043
12044 if (status == -1 || !ts->running_known || !ts->running)
12045 return 0;
12046
12047 /* If we are in a tracing experiment, but remote stub doesn't support
12048 installing tracepoint in trace, we have to return. */
12049 if (!remote_supports_install_in_trace ())
12050 return 0;
12051
12052 return 1;
12053}
12054
12055
35b1e5cc 12056static void
559d2b81
TT
12057remote_download_trace_state_variable (struct target_ops *self,
12058 struct trace_state_variable *tsv)
35b1e5cc
SS
12059{
12060 struct remote_state *rs = get_remote_state ();
00bf0b85 12061 char *p;
35b1e5cc 12062
bba74b36
YQ
12063 xsnprintf (rs->buf, get_remote_packet_size (), "QTDV:%x:%s:%x:",
12064 tsv->number, phex ((ULONGEST) tsv->initial_value, 8),
12065 tsv->builtin);
00bf0b85
SS
12066 p = rs->buf + strlen (rs->buf);
12067 if ((p - rs->buf) + strlen (tsv->name) * 2 >= get_remote_packet_size ())
12068 error (_("Trace state variable name too long for tsv definition packet"));
9f1b45b0 12069 p += 2 * bin2hex ((gdb_byte *) (tsv->name), p, strlen (tsv->name));
00bf0b85 12070 *p++ = '\0';
35b1e5cc
SS
12071 putpkt (rs->buf);
12072 remote_get_noisy_reply (&target_buf, &target_buf_size);
ad91cd99
PA
12073 if (*target_buf == '\0')
12074 error (_("Target does not support this command."));
12075 if (strcmp (target_buf, "OK") != 0)
12076 error (_("Error on target while downloading trace state variable."));
35b1e5cc
SS
12077}
12078
d248b706 12079static void
46670d57
TT
12080remote_enable_tracepoint (struct target_ops *self,
12081 struct bp_location *location)
d248b706
KY
12082{
12083 struct remote_state *rs = get_remote_state ();
12084 char addr_buf[40];
12085
12086 sprintf_vma (addr_buf, location->address);
bba74b36
YQ
12087 xsnprintf (rs->buf, get_remote_packet_size (), "QTEnable:%x:%s",
12088 location->owner->number, addr_buf);
d248b706
KY
12089 putpkt (rs->buf);
12090 remote_get_noisy_reply (&rs->buf, &rs->buf_size);
12091 if (*rs->buf == '\0')
12092 error (_("Target does not support enabling tracepoints while a trace run is ongoing."));
12093 if (strcmp (rs->buf, "OK") != 0)
12094 error (_("Error on target while enabling tracepoint."));
12095}
12096
12097static void
780b049c
TT
12098remote_disable_tracepoint (struct target_ops *self,
12099 struct bp_location *location)
d248b706
KY
12100{
12101 struct remote_state *rs = get_remote_state ();
12102 char addr_buf[40];
12103
12104 sprintf_vma (addr_buf, location->address);
bba74b36
YQ
12105 xsnprintf (rs->buf, get_remote_packet_size (), "QTDisable:%x:%s",
12106 location->owner->number, addr_buf);
d248b706
KY
12107 putpkt (rs->buf);
12108 remote_get_noisy_reply (&rs->buf, &rs->buf_size);
12109 if (*rs->buf == '\0')
12110 error (_("Target does not support disabling tracepoints while a trace run is ongoing."));
12111 if (strcmp (rs->buf, "OK") != 0)
12112 error (_("Error on target while disabling tracepoint."));
12113}
12114
35b1e5cc 12115static void
583f9a86 12116remote_trace_set_readonly_regions (struct target_ops *self)
35b1e5cc
SS
12117{
12118 asection *s;
81b9b86e 12119 bfd *abfd = NULL;
35b1e5cc 12120 bfd_size_type size;
608bcef2 12121 bfd_vma vma;
35b1e5cc 12122 int anysecs = 0;
c2fa21f1 12123 int offset = 0;
35b1e5cc
SS
12124
12125 if (!exec_bfd)
12126 return; /* No information to give. */
12127
12128 strcpy (target_buf, "QTro");
9779ab84 12129 offset = strlen (target_buf);
35b1e5cc
SS
12130 for (s = exec_bfd->sections; s; s = s->next)
12131 {
12132 char tmp1[40], tmp2[40];
c2fa21f1 12133 int sec_length;
35b1e5cc
SS
12134
12135 if ((s->flags & SEC_LOAD) == 0 ||
0df8b418 12136 /* (s->flags & SEC_CODE) == 0 || */
35b1e5cc
SS
12137 (s->flags & SEC_READONLY) == 0)
12138 continue;
12139
12140 anysecs = 1;
81b9b86e 12141 vma = bfd_get_section_vma (abfd, s);
35b1e5cc 12142 size = bfd_get_section_size (s);
608bcef2
HZ
12143 sprintf_vma (tmp1, vma);
12144 sprintf_vma (tmp2, vma + size);
c2fa21f1
HZ
12145 sec_length = 1 + strlen (tmp1) + 1 + strlen (tmp2);
12146 if (offset + sec_length + 1 > target_buf_size)
12147 {
4082afcc 12148 if (packet_support (PACKET_qXfer_traceframe_info) != PACKET_ENABLE)
864ac8a7 12149 warning (_("\
c2fa21f1
HZ
12150Too many sections for read-only sections definition packet."));
12151 break;
12152 }
bba74b36
YQ
12153 xsnprintf (target_buf + offset, target_buf_size - offset, ":%s,%s",
12154 tmp1, tmp2);
c2fa21f1 12155 offset += sec_length;
35b1e5cc
SS
12156 }
12157 if (anysecs)
12158 {
12159 putpkt (target_buf);
12160 getpkt (&target_buf, &target_buf_size, 0);
12161 }
12162}
12163
12164static void
e2d1aae3 12165remote_trace_start (struct target_ops *self)
35b1e5cc
SS
12166{
12167 putpkt ("QTStart");
12168 remote_get_noisy_reply (&target_buf, &target_buf_size);
ad91cd99
PA
12169 if (*target_buf == '\0')
12170 error (_("Target does not support this command."));
12171 if (strcmp (target_buf, "OK") != 0)
35b1e5cc
SS
12172 error (_("Bogus reply from target: %s"), target_buf);
12173}
12174
12175static int
8bd200f1 12176remote_get_trace_status (struct target_ops *self, struct trace_status *ts)
35b1e5cc 12177{
953b98d1 12178 /* Initialize it just to avoid a GCC false warning. */
f652de6f 12179 char *p = NULL;
0df8b418 12180 /* FIXME we need to get register block size some other way. */
00bf0b85 12181 extern int trace_regblock_size;
bd3eecc3
PA
12182 enum packet_result result;
12183
4082afcc 12184 if (packet_support (PACKET_qTStatus) == PACKET_DISABLE)
bd3eecc3 12185 return -1;
a744cf53 12186
00bf0b85
SS
12187 trace_regblock_size = get_remote_arch_state ()->sizeof_g_packet;
12188
049dc89b
JK
12189 putpkt ("qTStatus");
12190
492d29ea 12191 TRY
67f41397
JK
12192 {
12193 p = remote_get_noisy_reply (&target_buf, &target_buf_size);
12194 }
492d29ea 12195 CATCH (ex, RETURN_MASK_ERROR)
67f41397 12196 {
598d3636
JK
12197 if (ex.error != TARGET_CLOSE_ERROR)
12198 {
12199 exception_fprintf (gdb_stderr, ex, "qTStatus: ");
12200 return -1;
12201 }
12202 throw_exception (ex);
67f41397 12203 }
492d29ea 12204 END_CATCH
00bf0b85 12205
bd3eecc3
PA
12206 result = packet_ok (p, &remote_protocol_packets[PACKET_qTStatus]);
12207
00bf0b85 12208 /* If the remote target doesn't do tracing, flag it. */
bd3eecc3 12209 if (result == PACKET_UNKNOWN)
00bf0b85 12210 return -1;
35b1e5cc 12211
00bf0b85 12212 /* We're working with a live target. */
f5911ea1 12213 ts->filename = NULL;
00bf0b85 12214
00bf0b85 12215 if (*p++ != 'T')
35b1e5cc
SS
12216 error (_("Bogus trace status reply from target: %s"), target_buf);
12217
84cebc4a
YQ
12218 /* Function 'parse_trace_status' sets default value of each field of
12219 'ts' at first, so we don't have to do it here. */
00bf0b85
SS
12220 parse_trace_status (p, ts);
12221
12222 return ts->running;
35b1e5cc
SS
12223}
12224
70221824 12225static void
db90e85c 12226remote_get_tracepoint_status (struct target_ops *self, struct breakpoint *bp,
f196051f
SS
12227 struct uploaded_tp *utp)
12228{
12229 struct remote_state *rs = get_remote_state ();
f196051f
SS
12230 char *reply;
12231 struct bp_location *loc;
12232 struct tracepoint *tp = (struct tracepoint *) bp;
bba74b36 12233 size_t size = get_remote_packet_size ();
f196051f
SS
12234
12235 if (tp)
12236 {
12237 tp->base.hit_count = 0;
12238 tp->traceframe_usage = 0;
12239 for (loc = tp->base.loc; loc; loc = loc->next)
12240 {
12241 /* If the tracepoint was never downloaded, don't go asking for
12242 any status. */
12243 if (tp->number_on_target == 0)
12244 continue;
bba74b36
YQ
12245 xsnprintf (rs->buf, size, "qTP:%x:%s", tp->number_on_target,
12246 phex_nz (loc->address, 0));
f196051f
SS
12247 putpkt (rs->buf);
12248 reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
12249 if (reply && *reply)
12250 {
12251 if (*reply == 'V')
12252 parse_tracepoint_status (reply + 1, bp, utp);
12253 }
12254 }
12255 }
12256 else if (utp)
12257 {
12258 utp->hit_count = 0;
12259 utp->traceframe_usage = 0;
bba74b36
YQ
12260 xsnprintf (rs->buf, size, "qTP:%x:%s", utp->number,
12261 phex_nz (utp->addr, 0));
f196051f
SS
12262 putpkt (rs->buf);
12263 reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
12264 if (reply && *reply)
12265 {
12266 if (*reply == 'V')
12267 parse_tracepoint_status (reply + 1, bp, utp);
12268 }
12269 }
12270}
12271
35b1e5cc 12272static void
74499f1b 12273remote_trace_stop (struct target_ops *self)
35b1e5cc
SS
12274{
12275 putpkt ("QTStop");
12276 remote_get_noisy_reply (&target_buf, &target_buf_size);
ad91cd99
PA
12277 if (*target_buf == '\0')
12278 error (_("Target does not support this command."));
12279 if (strcmp (target_buf, "OK") != 0)
35b1e5cc
SS
12280 error (_("Bogus reply from target: %s"), target_buf);
12281}
12282
12283static int
bd4c6793
TT
12284remote_trace_find (struct target_ops *self,
12285 enum trace_find_type type, int num,
cc5925ad 12286 CORE_ADDR addr1, CORE_ADDR addr2,
35b1e5cc
SS
12287 int *tpp)
12288{
12289 struct remote_state *rs = get_remote_state ();
bba74b36 12290 char *endbuf = rs->buf + get_remote_packet_size ();
35b1e5cc
SS
12291 char *p, *reply;
12292 int target_frameno = -1, target_tracept = -1;
12293
e6e4e701
PA
12294 /* Lookups other than by absolute frame number depend on the current
12295 trace selected, so make sure it is correct on the remote end
12296 first. */
12297 if (type != tfind_number)
12298 set_remote_traceframe ();
12299
35b1e5cc
SS
12300 p = rs->buf;
12301 strcpy (p, "QTFrame:");
12302 p = strchr (p, '\0');
12303 switch (type)
12304 {
12305 case tfind_number:
bba74b36 12306 xsnprintf (p, endbuf - p, "%x", num);
35b1e5cc
SS
12307 break;
12308 case tfind_pc:
bba74b36 12309 xsnprintf (p, endbuf - p, "pc:%s", phex_nz (addr1, 0));
35b1e5cc
SS
12310 break;
12311 case tfind_tp:
bba74b36 12312 xsnprintf (p, endbuf - p, "tdp:%x", num);
35b1e5cc
SS
12313 break;
12314 case tfind_range:
bba74b36
YQ
12315 xsnprintf (p, endbuf - p, "range:%s:%s", phex_nz (addr1, 0),
12316 phex_nz (addr2, 0));
35b1e5cc
SS
12317 break;
12318 case tfind_outside:
bba74b36
YQ
12319 xsnprintf (p, endbuf - p, "outside:%s:%s", phex_nz (addr1, 0),
12320 phex_nz (addr2, 0));
35b1e5cc
SS
12321 break;
12322 default:
9b20d036 12323 error (_("Unknown trace find type %d"), type);
35b1e5cc
SS
12324 }
12325
12326 putpkt (rs->buf);
2f65bcb7 12327 reply = remote_get_noisy_reply (&(rs->buf), &rs->buf_size);
ad91cd99
PA
12328 if (*reply == '\0')
12329 error (_("Target does not support this command."));
35b1e5cc
SS
12330
12331 while (reply && *reply)
12332 switch (*reply)
12333 {
12334 case 'F':
f197e0f1
VP
12335 p = ++reply;
12336 target_frameno = (int) strtol (p, &reply, 16);
12337 if (reply == p)
12338 error (_("Unable to parse trace frame number"));
e6e4e701
PA
12339 /* Don't update our remote traceframe number cache on failure
12340 to select a remote traceframe. */
f197e0f1
VP
12341 if (target_frameno == -1)
12342 return -1;
35b1e5cc
SS
12343 break;
12344 case 'T':
f197e0f1
VP
12345 p = ++reply;
12346 target_tracept = (int) strtol (p, &reply, 16);
12347 if (reply == p)
12348 error (_("Unable to parse tracepoint number"));
35b1e5cc
SS
12349 break;
12350 case 'O': /* "OK"? */
12351 if (reply[1] == 'K' && reply[2] == '\0')
12352 reply += 2;
12353 else
12354 error (_("Bogus reply from target: %s"), reply);
12355 break;
12356 default:
12357 error (_("Bogus reply from target: %s"), reply);
12358 }
12359 if (tpp)
12360 *tpp = target_tracept;
e6e4e701 12361
262e1174 12362 rs->remote_traceframe_number = target_frameno;
35b1e5cc
SS
12363 return target_frameno;
12364}
12365
12366static int
4011015b
TT
12367remote_get_trace_state_variable_value (struct target_ops *self,
12368 int tsvnum, LONGEST *val)
35b1e5cc
SS
12369{
12370 struct remote_state *rs = get_remote_state ();
12371 char *reply;
12372 ULONGEST uval;
12373
e6e4e701
PA
12374 set_remote_traceframe ();
12375
bba74b36 12376 xsnprintf (rs->buf, get_remote_packet_size (), "qTV:%x", tsvnum);
35b1e5cc
SS
12377 putpkt (rs->buf);
12378 reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
12379 if (reply && *reply)
12380 {
12381 if (*reply == 'V')
12382 {
12383 unpack_varlen_hex (reply + 1, &uval);
12384 *val = (LONGEST) uval;
12385 return 1;
12386 }
12387 }
12388 return 0;
12389}
12390
00bf0b85 12391static int
dc3decaf 12392remote_save_trace_data (struct target_ops *self, const char *filename)
00bf0b85
SS
12393{
12394 struct remote_state *rs = get_remote_state ();
12395 char *p, *reply;
12396
12397 p = rs->buf;
12398 strcpy (p, "QTSave:");
12399 p += strlen (p);
12400 if ((p - rs->buf) + strlen (filename) * 2 >= get_remote_packet_size ())
12401 error (_("Remote file name too long for trace save packet"));
9f1b45b0 12402 p += 2 * bin2hex ((gdb_byte *) filename, p, strlen (filename));
00bf0b85
SS
12403 *p++ = '\0';
12404 putpkt (rs->buf);
ad91cd99 12405 reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
d6c5869f 12406 if (*reply == '\0')
ad91cd99
PA
12407 error (_("Target does not support this command."));
12408 if (strcmp (reply, "OK") != 0)
12409 error (_("Bogus reply from target: %s"), reply);
00bf0b85
SS
12410 return 0;
12411}
12412
12413/* This is basically a memory transfer, but needs to be its own packet
12414 because we don't know how the target actually organizes its trace
12415 memory, plus we want to be able to ask for as much as possible, but
12416 not be unhappy if we don't get as much as we ask for. */
12417
12418static LONGEST
88ee6f45
TT
12419remote_get_raw_trace_data (struct target_ops *self,
12420 gdb_byte *buf, ULONGEST offset, LONGEST len)
00bf0b85
SS
12421{
12422 struct remote_state *rs = get_remote_state ();
12423 char *reply;
12424 char *p;
12425 int rslt;
12426
12427 p = rs->buf;
12428 strcpy (p, "qTBuffer:");
12429 p += strlen (p);
12430 p += hexnumstr (p, offset);
12431 *p++ = ',';
12432 p += hexnumstr (p, len);
12433 *p++ = '\0';
12434
12435 putpkt (rs->buf);
12436 reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
12437 if (reply && *reply)
12438 {
12439 /* 'l' by itself means we're at the end of the buffer and
12440 there is nothing more to get. */
12441 if (*reply == 'l')
12442 return 0;
12443
12444 /* Convert the reply into binary. Limit the number of bytes to
12445 convert according to our passed-in buffer size, rather than
12446 what was returned in the packet; if the target is
12447 unexpectedly generous and gives us a bigger reply than we
12448 asked for, we don't want to crash. */
12449 rslt = hex2bin (target_buf, buf, len);
12450 return rslt;
12451 }
12452
12453 /* Something went wrong, flag as an error. */
12454 return -1;
12455}
12456
35b1e5cc 12457static void
37b25738 12458remote_set_disconnected_tracing (struct target_ops *self, int val)
35b1e5cc
SS
12459{
12460 struct remote_state *rs = get_remote_state ();
12461
4082afcc 12462 if (packet_support (PACKET_DisconnectedTracing_feature) == PACKET_ENABLE)
33da3f1c 12463 {
ad91cd99
PA
12464 char *reply;
12465
bba74b36 12466 xsnprintf (rs->buf, get_remote_packet_size (), "QTDisconnected:%x", val);
33da3f1c 12467 putpkt (rs->buf);
ad91cd99
PA
12468 reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
12469 if (*reply == '\0')
33da3f1c 12470 error (_("Target does not support this command."));
ad91cd99
PA
12471 if (strcmp (reply, "OK") != 0)
12472 error (_("Bogus reply from target: %s"), reply);
33da3f1c
SS
12473 }
12474 else if (val)
12475 warning (_("Target does not support disconnected tracing."));
35b1e5cc
SS
12476}
12477
dc146f7c
VP
12478static int
12479remote_core_of_thread (struct target_ops *ops, ptid_t ptid)
12480{
12481 struct thread_info *info = find_thread_ptid (ptid);
a744cf53 12482
fe978cb0
PA
12483 if (info && info->priv)
12484 return info->priv->core;
dc146f7c
VP
12485 return -1;
12486}
12487
4daf5ac0 12488static void
736d5b1f 12489remote_set_circular_trace_buffer (struct target_ops *self, int val)
4daf5ac0
SS
12490{
12491 struct remote_state *rs = get_remote_state ();
ad91cd99 12492 char *reply;
4daf5ac0 12493
bba74b36 12494 xsnprintf (rs->buf, get_remote_packet_size (), "QTBuffer:circular:%x", val);
4daf5ac0 12495 putpkt (rs->buf);
ad91cd99
PA
12496 reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
12497 if (*reply == '\0')
4daf5ac0 12498 error (_("Target does not support this command."));
ad91cd99
PA
12499 if (strcmp (reply, "OK") != 0)
12500 error (_("Bogus reply from target: %s"), reply);
4daf5ac0
SS
12501}
12502
b3b9301e 12503static struct traceframe_info *
a893e81f 12504remote_traceframe_info (struct target_ops *self)
b3b9301e
PA
12505{
12506 char *text;
12507
12508 text = target_read_stralloc (&current_target,
12509 TARGET_OBJECT_TRACEFRAME_INFO, NULL);
12510 if (text != NULL)
12511 {
12512 struct traceframe_info *info;
12513 struct cleanup *back_to = make_cleanup (xfree, text);
12514
12515 info = parse_traceframe_info (text);
12516 do_cleanups (back_to);
12517 return info;
12518 }
12519
12520 return NULL;
12521}
12522
405f8e94
SS
12523/* Handle the qTMinFTPILen packet. Returns the minimum length of
12524 instruction on which a fast tracepoint may be placed. Returns -1
12525 if the packet is not supported, and 0 if the minimum instruction
12526 length is unknown. */
12527
12528static int
0e67620a 12529remote_get_min_fast_tracepoint_insn_len (struct target_ops *self)
405f8e94
SS
12530{
12531 struct remote_state *rs = get_remote_state ();
12532 char *reply;
12533
e886a173
PA
12534 /* If we're not debugging a process yet, the IPA can't be
12535 loaded. */
12536 if (!target_has_execution)
12537 return 0;
12538
12539 /* Make sure the remote is pointing at the right process. */
12540 set_general_process ();
12541
bba74b36 12542 xsnprintf (rs->buf, get_remote_packet_size (), "qTMinFTPILen");
405f8e94
SS
12543 putpkt (rs->buf);
12544 reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
12545 if (*reply == '\0')
12546 return -1;
12547 else
12548 {
12549 ULONGEST min_insn_len;
12550
12551 unpack_varlen_hex (reply, &min_insn_len);
12552
12553 return (int) min_insn_len;
12554 }
12555}
12556
f6f899bf 12557static void
4da384be 12558remote_set_trace_buffer_size (struct target_ops *self, LONGEST val)
f6f899bf 12559{
4082afcc 12560 if (packet_support (PACKET_QTBuffer_size) != PACKET_DISABLE)
f6f899bf
HAQ
12561 {
12562 struct remote_state *rs = get_remote_state ();
12563 char *buf = rs->buf;
12564 char *endbuf = rs->buf + get_remote_packet_size ();
12565 enum packet_result result;
12566
12567 gdb_assert (val >= 0 || val == -1);
12568 buf += xsnprintf (buf, endbuf - buf, "QTBuffer:size:");
12569 /* Send -1 as literal "-1" to avoid host size dependency. */
12570 if (val < 0)
12571 {
12572 *buf++ = '-';
12573 buf += hexnumstr (buf, (ULONGEST) -val);
12574 }
12575 else
12576 buf += hexnumstr (buf, (ULONGEST) val);
12577
12578 putpkt (rs->buf);
12579 remote_get_noisy_reply (&rs->buf, &rs->buf_size);
12580 result = packet_ok (rs->buf,
12581 &remote_protocol_packets[PACKET_QTBuffer_size]);
12582
12583 if (result != PACKET_OK)
12584 warning (_("Bogus reply from target: %s"), rs->buf);
12585 }
12586}
12587
f196051f 12588static int
d9e68a2c
TT
12589remote_set_trace_notes (struct target_ops *self,
12590 const char *user, const char *notes,
ca623f82 12591 const char *stop_notes)
f196051f
SS
12592{
12593 struct remote_state *rs = get_remote_state ();
12594 char *reply;
12595 char *buf = rs->buf;
12596 char *endbuf = rs->buf + get_remote_packet_size ();
12597 int nbytes;
12598
12599 buf += xsnprintf (buf, endbuf - buf, "QTNotes:");
12600 if (user)
12601 {
12602 buf += xsnprintf (buf, endbuf - buf, "user:");
9f1b45b0 12603 nbytes = bin2hex ((gdb_byte *) user, buf, strlen (user));
f196051f
SS
12604 buf += 2 * nbytes;
12605 *buf++ = ';';
12606 }
12607 if (notes)
12608 {
12609 buf += xsnprintf (buf, endbuf - buf, "notes:");
9f1b45b0 12610 nbytes = bin2hex ((gdb_byte *) notes, buf, strlen (notes));
f196051f
SS
12611 buf += 2 * nbytes;
12612 *buf++ = ';';
12613 }
12614 if (stop_notes)
12615 {
12616 buf += xsnprintf (buf, endbuf - buf, "tstop:");
9f1b45b0 12617 nbytes = bin2hex ((gdb_byte *) stop_notes, buf, strlen (stop_notes));
f196051f
SS
12618 buf += 2 * nbytes;
12619 *buf++ = ';';
12620 }
12621 /* Ensure the buffer is terminated. */
12622 *buf = '\0';
12623
12624 putpkt (rs->buf);
12625 reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
12626 if (*reply == '\0')
12627 return 0;
12628
12629 if (strcmp (reply, "OK") != 0)
12630 error (_("Bogus reply from target: %s"), reply);
12631
12632 return 1;
12633}
12634
d1feda86 12635static int
2c152180 12636remote_use_agent (struct target_ops *self, int use)
d1feda86 12637{
4082afcc 12638 if (packet_support (PACKET_QAgent) != PACKET_DISABLE)
d1feda86
YQ
12639 {
12640 struct remote_state *rs = get_remote_state ();
12641
12642 /* If the stub supports QAgent. */
bba74b36 12643 xsnprintf (rs->buf, get_remote_packet_size (), "QAgent:%d", use);
d1feda86
YQ
12644 putpkt (rs->buf);
12645 getpkt (&rs->buf, &rs->buf_size, 0);
12646
12647 if (strcmp (rs->buf, "OK") == 0)
12648 {
12649 use_agent = use;
12650 return 1;
12651 }
12652 }
12653
12654 return 0;
12655}
12656
12657static int
fe38f897 12658remote_can_use_agent (struct target_ops *self)
d1feda86 12659{
4082afcc 12660 return (packet_support (PACKET_QAgent) != PACKET_DISABLE);
d1feda86
YQ
12661}
12662
9accd112
MM
12663struct btrace_target_info
12664{
12665 /* The ptid of the traced thread. */
12666 ptid_t ptid;
f4abbc16
MM
12667
12668 /* The obtained branch trace configuration. */
12669 struct btrace_config conf;
9accd112
MM
12670};
12671
f4abbc16
MM
12672/* Reset our idea of our target's btrace configuration. */
12673
12674static void
12675remote_btrace_reset (void)
12676{
12677 struct remote_state *rs = get_remote_state ();
12678
12679 memset (&rs->btrace_config, 0, sizeof (rs->btrace_config));
12680}
12681
9accd112
MM
12682/* Check whether the target supports branch tracing. */
12683
12684static int
043c3577 12685remote_supports_btrace (struct target_ops *self, enum btrace_format format)
9accd112 12686{
4082afcc 12687 if (packet_support (PACKET_Qbtrace_off) != PACKET_ENABLE)
9accd112 12688 return 0;
4082afcc 12689 if (packet_support (PACKET_qXfer_btrace) != PACKET_ENABLE)
9accd112
MM
12690 return 0;
12691
043c3577
MM
12692 switch (format)
12693 {
12694 case BTRACE_FORMAT_NONE:
12695 return 0;
12696
12697 case BTRACE_FORMAT_BTS:
12698 return (packet_support (PACKET_Qbtrace_bts) == PACKET_ENABLE);
b20a6524
MM
12699
12700 case BTRACE_FORMAT_PT:
12701 /* The trace is decoded on the host. Even if our target supports it,
12702 we still need to have libipt to decode the trace. */
12703#if defined (HAVE_LIBIPT)
12704 return (packet_support (PACKET_Qbtrace_pt) == PACKET_ENABLE);
12705#else /* !defined (HAVE_LIBIPT) */
12706 return 0;
12707#endif /* !defined (HAVE_LIBIPT) */
043c3577
MM
12708 }
12709
12710 internal_error (__FILE__, __LINE__, _("Unknown branch trace format"));
9accd112
MM
12711}
12712
f4abbc16
MM
12713/* Synchronize the configuration with the target. */
12714
12715static void
12716btrace_sync_conf (const struct btrace_config *conf)
12717{
d33501a5
MM
12718 struct packet_config *packet;
12719 struct remote_state *rs;
12720 char *buf, *pos, *endbuf;
12721
12722 rs = get_remote_state ();
12723 buf = rs->buf;
12724 endbuf = buf + get_remote_packet_size ();
12725
12726 packet = &remote_protocol_packets[PACKET_Qbtrace_conf_bts_size];
12727 if (packet_config_support (packet) == PACKET_ENABLE
12728 && conf->bts.size != rs->btrace_config.bts.size)
12729 {
12730 pos = buf;
12731 pos += xsnprintf (pos, endbuf - pos, "%s=0x%x", packet->name,
12732 conf->bts.size);
12733
12734 putpkt (buf);
12735 getpkt (&buf, &rs->buf_size, 0);
12736
12737 if (packet_ok (buf, packet) == PACKET_ERROR)
12738 {
12739 if (buf[0] == 'E' && buf[1] == '.')
12740 error (_("Failed to configure the BTS buffer size: %s"), buf + 2);
12741 else
12742 error (_("Failed to configure the BTS buffer size."));
12743 }
12744
12745 rs->btrace_config.bts.size = conf->bts.size;
12746 }
b20a6524
MM
12747
12748 packet = &remote_protocol_packets[PACKET_Qbtrace_conf_pt_size];
12749 if (packet_config_support (packet) == PACKET_ENABLE
12750 && conf->pt.size != rs->btrace_config.pt.size)
12751 {
12752 pos = buf;
12753 pos += xsnprintf (pos, endbuf - pos, "%s=0x%x", packet->name,
12754 conf->pt.size);
12755
12756 putpkt (buf);
12757 getpkt (&buf, &rs->buf_size, 0);
12758
12759 if (packet_ok (buf, packet) == PACKET_ERROR)
12760 {
12761 if (buf[0] == 'E' && buf[1] == '.')
12762 error (_("Failed to configure the trace buffer size: %s"), buf + 2);
12763 else
12764 error (_("Failed to configure the trace buffer size."));
12765 }
12766
12767 rs->btrace_config.pt.size = conf->pt.size;
12768 }
f4abbc16
MM
12769}
12770
12771/* Read the current thread's btrace configuration from the target and
12772 store it into CONF. */
12773
12774static void
12775btrace_read_config (struct btrace_config *conf)
12776{
12777 char *xml;
12778
12779 xml = target_read_stralloc (&current_target,
b20a6524 12780 TARGET_OBJECT_BTRACE_CONF, "");
f4abbc16
MM
12781 if (xml != NULL)
12782 {
12783 struct cleanup *cleanup;
12784
12785 cleanup = make_cleanup (xfree, xml);
12786 parse_xml_btrace_conf (conf, xml);
12787 do_cleanups (cleanup);
12788 }
12789}
12790
c0272db5
TW
12791/* Maybe reopen target btrace. */
12792
12793static void
12794remote_btrace_maybe_reopen (void)
12795{
12796 struct remote_state *rs = get_remote_state ();
12797 struct cleanup *cleanup;
12798 struct thread_info *tp;
12799 int btrace_target_pushed = 0;
12800 int warned = 0;
12801
12802 cleanup = make_cleanup_restore_current_thread ();
12803 ALL_NON_EXITED_THREADS (tp)
12804 {
12805 set_general_thread (tp->ptid);
12806
12807 memset (&rs->btrace_config, 0x00, sizeof (struct btrace_config));
12808 btrace_read_config (&rs->btrace_config);
12809
12810 if (rs->btrace_config.format == BTRACE_FORMAT_NONE)
12811 continue;
12812
12813#if !defined (HAVE_LIBIPT)
12814 if (rs->btrace_config.format == BTRACE_FORMAT_PT)
12815 {
12816 if (!warned)
12817 {
12818 warned = 1;
12819 warning (_("GDB does not support Intel Processor Trace. "
12820 "\"record\" will not work in this session."));
12821 }
12822
12823 continue;
12824 }
12825#endif /* !defined (HAVE_LIBIPT) */
12826
12827 /* Push target, once, but before anything else happens. This way our
12828 changes to the threads will be cleaned up by unpushing the target
12829 in case btrace_read_config () throws. */
12830 if (!btrace_target_pushed)
12831 {
12832 btrace_target_pushed = 1;
12833 record_btrace_push_target ();
12834 printf_filtered (_("Target is recording using %s.\n"),
12835 btrace_format_string (rs->btrace_config.format));
12836 }
12837
12838 tp->btrace.target = XCNEW (struct btrace_target_info);
12839 tp->btrace.target->ptid = tp->ptid;
12840 tp->btrace.target->conf = rs->btrace_config;
12841 }
12842 do_cleanups (cleanup);
12843}
12844
9accd112
MM
12845/* Enable branch tracing. */
12846
12847static struct btrace_target_info *
f4abbc16
MM
12848remote_enable_btrace (struct target_ops *self, ptid_t ptid,
12849 const struct btrace_config *conf)
9accd112
MM
12850{
12851 struct btrace_target_info *tinfo = NULL;
b20a6524 12852 struct packet_config *packet = NULL;
9accd112
MM
12853 struct remote_state *rs = get_remote_state ();
12854 char *buf = rs->buf;
12855 char *endbuf = rs->buf + get_remote_packet_size ();
12856
b20a6524
MM
12857 switch (conf->format)
12858 {
12859 case BTRACE_FORMAT_BTS:
12860 packet = &remote_protocol_packets[PACKET_Qbtrace_bts];
12861 break;
12862
12863 case BTRACE_FORMAT_PT:
12864 packet = &remote_protocol_packets[PACKET_Qbtrace_pt];
12865 break;
12866 }
12867
12868 if (packet == NULL || packet_config_support (packet) != PACKET_ENABLE)
9accd112
MM
12869 error (_("Target does not support branch tracing."));
12870
f4abbc16
MM
12871 btrace_sync_conf (conf);
12872
9accd112
MM
12873 set_general_thread (ptid);
12874
12875 buf += xsnprintf (buf, endbuf - buf, "%s", packet->name);
12876 putpkt (rs->buf);
12877 getpkt (&rs->buf, &rs->buf_size, 0);
12878
12879 if (packet_ok (rs->buf, packet) == PACKET_ERROR)
12880 {
12881 if (rs->buf[0] == 'E' && rs->buf[1] == '.')
12882 error (_("Could not enable branch tracing for %s: %s"),
12883 target_pid_to_str (ptid), rs->buf + 2);
12884 else
12885 error (_("Could not enable branch tracing for %s."),
12886 target_pid_to_str (ptid));
12887 }
12888
8d749320 12889 tinfo = XCNEW (struct btrace_target_info);
9accd112
MM
12890 tinfo->ptid = ptid;
12891
f4abbc16
MM
12892 /* If we fail to read the configuration, we lose some information, but the
12893 tracing itself is not impacted. */
492d29ea
PA
12894 TRY
12895 {
12896 btrace_read_config (&tinfo->conf);
12897 }
12898 CATCH (err, RETURN_MASK_ERROR)
12899 {
12900 if (err.message != NULL)
12901 warning ("%s", err.message);
12902 }
12903 END_CATCH
f4abbc16 12904
9accd112
MM
12905 return tinfo;
12906}
12907
12908/* Disable branch tracing. */
12909
12910static void
25e95349
TT
12911remote_disable_btrace (struct target_ops *self,
12912 struct btrace_target_info *tinfo)
9accd112
MM
12913{
12914 struct packet_config *packet = &remote_protocol_packets[PACKET_Qbtrace_off];
12915 struct remote_state *rs = get_remote_state ();
12916 char *buf = rs->buf;
12917 char *endbuf = rs->buf + get_remote_packet_size ();
12918
4082afcc 12919 if (packet_config_support (packet) != PACKET_ENABLE)
9accd112
MM
12920 error (_("Target does not support branch tracing."));
12921
12922 set_general_thread (tinfo->ptid);
12923
12924 buf += xsnprintf (buf, endbuf - buf, "%s", packet->name);
12925 putpkt (rs->buf);
12926 getpkt (&rs->buf, &rs->buf_size, 0);
12927
12928 if (packet_ok (rs->buf, packet) == PACKET_ERROR)
12929 {
12930 if (rs->buf[0] == 'E' && rs->buf[1] == '.')
12931 error (_("Could not disable branch tracing for %s: %s"),
12932 target_pid_to_str (tinfo->ptid), rs->buf + 2);
12933 else
12934 error (_("Could not disable branch tracing for %s."),
12935 target_pid_to_str (tinfo->ptid));
12936 }
12937
12938 xfree (tinfo);
12939}
12940
12941/* Teardown branch tracing. */
12942
12943static void
1777056d
TT
12944remote_teardown_btrace (struct target_ops *self,
12945 struct btrace_target_info *tinfo)
9accd112
MM
12946{
12947 /* We must not talk to the target during teardown. */
12948 xfree (tinfo);
12949}
12950
12951/* Read the branch trace. */
12952
969c39fb 12953static enum btrace_error
39c49f83 12954remote_read_btrace (struct target_ops *self,
734b0e4b 12955 struct btrace_data *btrace,
969c39fb 12956 struct btrace_target_info *tinfo,
9accd112
MM
12957 enum btrace_read_type type)
12958{
12959 struct packet_config *packet = &remote_protocol_packets[PACKET_qXfer_btrace];
969c39fb 12960 struct cleanup *cleanup;
9accd112
MM
12961 const char *annex;
12962 char *xml;
12963
4082afcc 12964 if (packet_config_support (packet) != PACKET_ENABLE)
9accd112
MM
12965 error (_("Target does not support branch tracing."));
12966
12967#if !defined(HAVE_LIBEXPAT)
12968 error (_("Cannot process branch tracing result. XML parsing not supported."));
12969#endif
12970
12971 switch (type)
12972 {
864089d2 12973 case BTRACE_READ_ALL:
9accd112
MM
12974 annex = "all";
12975 break;
864089d2 12976 case BTRACE_READ_NEW:
9accd112
MM
12977 annex = "new";
12978 break;
969c39fb
MM
12979 case BTRACE_READ_DELTA:
12980 annex = "delta";
12981 break;
9accd112
MM
12982 default:
12983 internal_error (__FILE__, __LINE__,
12984 _("Bad branch tracing read type: %u."),
12985 (unsigned int) type);
12986 }
12987
12988 xml = target_read_stralloc (&current_target,
b20a6524 12989 TARGET_OBJECT_BTRACE, annex);
969c39fb
MM
12990 if (xml == NULL)
12991 return BTRACE_ERR_UNKNOWN;
9accd112 12992
969c39fb 12993 cleanup = make_cleanup (xfree, xml);
734b0e4b 12994 parse_xml_btrace (btrace, xml);
969c39fb 12995 do_cleanups (cleanup);
9accd112 12996
969c39fb 12997 return BTRACE_ERR_NONE;
9accd112
MM
12998}
12999
f4abbc16
MM
13000static const struct btrace_config *
13001remote_btrace_conf (struct target_ops *self,
13002 const struct btrace_target_info *tinfo)
13003{
13004 return &tinfo->conf;
13005}
13006
ced63ec0 13007static int
5436ff03 13008remote_augmented_libraries_svr4_read (struct target_ops *self)
ced63ec0 13009{
4082afcc
PA
13010 return (packet_support (PACKET_augmented_libraries_svr4_read_feature)
13011 == PACKET_ENABLE);
ced63ec0
GB
13012}
13013
9dd130a0
TT
13014/* Implementation of to_load. */
13015
13016static void
9cbe5fff 13017remote_load (struct target_ops *self, const char *name, int from_tty)
9dd130a0
TT
13018{
13019 generic_load (name, from_tty);
13020}
13021
c78fa86a
GB
13022/* Accepts an integer PID; returns a string representing a file that
13023 can be opened on the remote side to get the symbols for the child
13024 process. Returns NULL if the operation is not supported. */
13025
13026static char *
13027remote_pid_to_exec_file (struct target_ops *self, int pid)
13028{
13029 static char *filename = NULL;
835205d0
GB
13030 struct inferior *inf;
13031 char *annex = NULL;
c78fa86a
GB
13032
13033 if (packet_support (PACKET_qXfer_exec_file) != PACKET_ENABLE)
13034 return NULL;
13035
13036 if (filename != NULL)
13037 xfree (filename);
13038
835205d0
GB
13039 inf = find_inferior_pid (pid);
13040 if (inf == NULL)
13041 internal_error (__FILE__, __LINE__,
13042 _("not currently attached to process %d"), pid);
13043
13044 if (!inf->fake_pid_p)
13045 {
13046 const int annex_size = 9;
13047
224c3ddb 13048 annex = (char *) alloca (annex_size);
835205d0
GB
13049 xsnprintf (annex, annex_size, "%x", pid);
13050 }
13051
c78fa86a
GB
13052 filename = target_read_stralloc (&current_target,
13053 TARGET_OBJECT_EXEC_FILE, annex);
13054
13055 return filename;
13056}
13057
750ce8d1
YQ
13058/* Implement the to_can_do_single_step target_ops method. */
13059
13060static int
13061remote_can_do_single_step (struct target_ops *ops)
13062{
13063 /* We can only tell whether target supports single step or not by
13064 supported s and S vCont actions if the stub supports vContSupported
13065 feature. If the stub doesn't support vContSupported feature,
13066 we have conservatively to think target doesn't supports single
13067 step. */
13068 if (packet_support (PACKET_vContSupported) == PACKET_ENABLE)
13069 {
13070 struct remote_state *rs = get_remote_state ();
13071
13072 if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
13073 remote_vcont_probe (rs);
13074
13075 return rs->supports_vCont.s && rs->supports_vCont.S;
13076 }
13077 else
13078 return 0;
13079}
13080
3a00c802
PA
13081/* Implementation of the to_execution_direction method for the remote
13082 target. */
13083
13084static enum exec_direction_kind
13085remote_execution_direction (struct target_ops *self)
13086{
13087 struct remote_state *rs = get_remote_state ();
13088
13089 return rs->last_resume_exec_dir;
13090}
13091
c906108c 13092static void
fba45db2 13093init_remote_ops (void)
c906108c 13094{
c5aa993b 13095 remote_ops.to_shortname = "remote";
c906108c 13096 remote_ops.to_longname = "Remote serial target in gdb-specific protocol";
c5aa993b 13097 remote_ops.to_doc =
c906108c 13098 "Use a remote computer via a serial line, using a gdb-specific protocol.\n\
0d06e24b
JM
13099Specify the serial device it is connected to\n\
13100(e.g. /dev/ttyS0, /dev/ttya, COM1, etc.).";
c5aa993b
JM
13101 remote_ops.to_open = remote_open;
13102 remote_ops.to_close = remote_close;
c906108c 13103 remote_ops.to_detach = remote_detach;
6ad8ae5c 13104 remote_ops.to_disconnect = remote_disconnect;
c5aa993b 13105 remote_ops.to_resume = remote_resume;
c906108c
SS
13106 remote_ops.to_wait = remote_wait;
13107 remote_ops.to_fetch_registers = remote_fetch_registers;
13108 remote_ops.to_store_registers = remote_store_registers;
13109 remote_ops.to_prepare_to_store = remote_prepare_to_store;
c5aa993b 13110 remote_ops.to_files_info = remote_files_info;
c906108c
SS
13111 remote_ops.to_insert_breakpoint = remote_insert_breakpoint;
13112 remote_ops.to_remove_breakpoint = remote_remove_breakpoint;
f7e6eed5
PA
13113 remote_ops.to_stopped_by_sw_breakpoint = remote_stopped_by_sw_breakpoint;
13114 remote_ops.to_supports_stopped_by_sw_breakpoint = remote_supports_stopped_by_sw_breakpoint;
13115 remote_ops.to_stopped_by_hw_breakpoint = remote_stopped_by_hw_breakpoint;
13116 remote_ops.to_supports_stopped_by_hw_breakpoint = remote_supports_stopped_by_hw_breakpoint;
3c3bea1c
GS
13117 remote_ops.to_stopped_by_watchpoint = remote_stopped_by_watchpoint;
13118 remote_ops.to_stopped_data_address = remote_stopped_data_address;
283002cf
MR
13119 remote_ops.to_watchpoint_addr_within_range =
13120 remote_watchpoint_addr_within_range;
3c3bea1c
GS
13121 remote_ops.to_can_use_hw_breakpoint = remote_check_watch_resources;
13122 remote_ops.to_insert_hw_breakpoint = remote_insert_hw_breakpoint;
13123 remote_ops.to_remove_hw_breakpoint = remote_remove_hw_breakpoint;
480a3f21
PW
13124 remote_ops.to_region_ok_for_hw_watchpoint
13125 = remote_region_ok_for_hw_watchpoint;
3c3bea1c
GS
13126 remote_ops.to_insert_watchpoint = remote_insert_watchpoint;
13127 remote_ops.to_remove_watchpoint = remote_remove_watchpoint;
c5aa993b 13128 remote_ops.to_kill = remote_kill;
9dd130a0 13129 remote_ops.to_load = remote_load;
c906108c 13130 remote_ops.to_mourn_inferior = remote_mourn;
2455069d 13131 remote_ops.to_pass_signals = remote_pass_signals;
82075af2 13132 remote_ops.to_set_syscall_catchpoint = remote_set_syscall_catchpoint;
9b224c5e 13133 remote_ops.to_program_signals = remote_program_signals;
c906108c 13134 remote_ops.to_thread_alive = remote_thread_alive;
79efa585 13135 remote_ops.to_thread_name = remote_thread_name;
e8032dde 13136 remote_ops.to_update_thread_list = remote_update_thread_list;
0caabb7e 13137 remote_ops.to_pid_to_str = remote_pid_to_str;
cf759d3b 13138 remote_ops.to_extra_thread_info = remote_threads_extra_info;
10760264 13139 remote_ops.to_get_ada_task_ptid = remote_get_ada_task_ptid;
c906108c 13140 remote_ops.to_stop = remote_stop;
bfedc46a 13141 remote_ops.to_interrupt = remote_interrupt;
93692b58 13142 remote_ops.to_pass_ctrlc = remote_pass_ctrlc;
4b8a223f 13143 remote_ops.to_xfer_partial = remote_xfer_partial;
09c98b44 13144 remote_ops.to_get_memory_xfer_limit = remote_get_memory_xfer_limit;
96baa820 13145 remote_ops.to_rcmd = remote_rcmd;
c78fa86a 13146 remote_ops.to_pid_to_exec_file = remote_pid_to_exec_file;
49d03eab 13147 remote_ops.to_log_command = serial_log_command;
38691318 13148 remote_ops.to_get_thread_local_address = remote_get_thread_local_address;
c906108c 13149 remote_ops.to_stratum = process_stratum;
c35b1492
PA
13150 remote_ops.to_has_all_memory = default_child_has_all_memory;
13151 remote_ops.to_has_memory = default_child_has_memory;
13152 remote_ops.to_has_stack = default_child_has_stack;
13153 remote_ops.to_has_registers = default_child_has_registers;
13154 remote_ops.to_has_execution = default_child_has_execution;
3e43a32a 13155 remote_ops.to_has_thread_control = tc_schedlock; /* can lock scheduler */
b2175913 13156 remote_ops.to_can_execute_reverse = remote_can_execute_reverse;
c5aa993b 13157 remote_ops.to_magic = OPS_MAGIC;
fd79ecee 13158 remote_ops.to_memory_map = remote_memory_map;
a76d924d
DJ
13159 remote_ops.to_flash_erase = remote_flash_erase;
13160 remote_ops.to_flash_done = remote_flash_done;
29709017 13161 remote_ops.to_read_description = remote_read_description;
08388c79 13162 remote_ops.to_search_memory = remote_search_memory;
75c99385
PA
13163 remote_ops.to_can_async_p = remote_can_async_p;
13164 remote_ops.to_is_async_p = remote_is_async_p;
13165 remote_ops.to_async = remote_async;
65706a29 13166 remote_ops.to_thread_events = remote_thread_events;
750ce8d1 13167 remote_ops.to_can_do_single_step = remote_can_do_single_step;
75c99385
PA
13168 remote_ops.to_terminal_inferior = remote_terminal_inferior;
13169 remote_ops.to_terminal_ours = remote_terminal_ours;
74531fed 13170 remote_ops.to_supports_non_stop = remote_supports_non_stop;
8a305172 13171 remote_ops.to_supports_multi_process = remote_supports_multi_process;
03583c20
UW
13172 remote_ops.to_supports_disable_randomization
13173 = remote_supports_disable_randomization;
4bd7dc42 13174 remote_ops.to_filesystem_is_local = remote_filesystem_is_local;
7313baad
UW
13175 remote_ops.to_fileio_open = remote_hostio_open;
13176 remote_ops.to_fileio_pwrite = remote_hostio_pwrite;
13177 remote_ops.to_fileio_pread = remote_hostio_pread;
9b15c1f0 13178 remote_ops.to_fileio_fstat = remote_hostio_fstat;
7313baad
UW
13179 remote_ops.to_fileio_close = remote_hostio_close;
13180 remote_ops.to_fileio_unlink = remote_hostio_unlink;
b9e7b9c3 13181 remote_ops.to_fileio_readlink = remote_hostio_readlink;
d248b706 13182 remote_ops.to_supports_enable_disable_tracepoint = remote_supports_enable_disable_tracepoint;
3065dfb6 13183 remote_ops.to_supports_string_tracing = remote_supports_string_tracing;
b775012e 13184 remote_ops.to_supports_evaluation_of_breakpoint_conditions = remote_supports_cond_breakpoints;
d3ce09f5 13185 remote_ops.to_can_run_breakpoint_commands = remote_can_run_breakpoint_commands;
35b1e5cc
SS
13186 remote_ops.to_trace_init = remote_trace_init;
13187 remote_ops.to_download_tracepoint = remote_download_tracepoint;
1e4d1764 13188 remote_ops.to_can_download_tracepoint = remote_can_download_tracepoint;
3e43a32a
MS
13189 remote_ops.to_download_trace_state_variable
13190 = remote_download_trace_state_variable;
d248b706
KY
13191 remote_ops.to_enable_tracepoint = remote_enable_tracepoint;
13192 remote_ops.to_disable_tracepoint = remote_disable_tracepoint;
35b1e5cc
SS
13193 remote_ops.to_trace_set_readonly_regions = remote_trace_set_readonly_regions;
13194 remote_ops.to_trace_start = remote_trace_start;
13195 remote_ops.to_get_trace_status = remote_get_trace_status;
f196051f 13196 remote_ops.to_get_tracepoint_status = remote_get_tracepoint_status;
35b1e5cc
SS
13197 remote_ops.to_trace_stop = remote_trace_stop;
13198 remote_ops.to_trace_find = remote_trace_find;
3e43a32a
MS
13199 remote_ops.to_get_trace_state_variable_value
13200 = remote_get_trace_state_variable_value;
00bf0b85
SS
13201 remote_ops.to_save_trace_data = remote_save_trace_data;
13202 remote_ops.to_upload_tracepoints = remote_upload_tracepoints;
3e43a32a
MS
13203 remote_ops.to_upload_trace_state_variables
13204 = remote_upload_trace_state_variables;
00bf0b85 13205 remote_ops.to_get_raw_trace_data = remote_get_raw_trace_data;
405f8e94 13206 remote_ops.to_get_min_fast_tracepoint_insn_len = remote_get_min_fast_tracepoint_insn_len;
35b1e5cc 13207 remote_ops.to_set_disconnected_tracing = remote_set_disconnected_tracing;
4daf5ac0 13208 remote_ops.to_set_circular_trace_buffer = remote_set_circular_trace_buffer;
f6f899bf 13209 remote_ops.to_set_trace_buffer_size = remote_set_trace_buffer_size;
f196051f 13210 remote_ops.to_set_trace_notes = remote_set_trace_notes;
dc146f7c 13211 remote_ops.to_core_of_thread = remote_core_of_thread;
4a5e7a5b 13212 remote_ops.to_verify_memory = remote_verify_memory;
711e434b 13213 remote_ops.to_get_tib_address = remote_get_tib_address;
d914c394 13214 remote_ops.to_set_permissions = remote_set_permissions;
0fb4aa4b
PA
13215 remote_ops.to_static_tracepoint_marker_at
13216 = remote_static_tracepoint_marker_at;
13217 remote_ops.to_static_tracepoint_markers_by_strid
13218 = remote_static_tracepoint_markers_by_strid;
b3b9301e 13219 remote_ops.to_traceframe_info = remote_traceframe_info;
d1feda86
YQ
13220 remote_ops.to_use_agent = remote_use_agent;
13221 remote_ops.to_can_use_agent = remote_can_use_agent;
9accd112
MM
13222 remote_ops.to_supports_btrace = remote_supports_btrace;
13223 remote_ops.to_enable_btrace = remote_enable_btrace;
13224 remote_ops.to_disable_btrace = remote_disable_btrace;
13225 remote_ops.to_teardown_btrace = remote_teardown_btrace;
13226 remote_ops.to_read_btrace = remote_read_btrace;
f4abbc16 13227 remote_ops.to_btrace_conf = remote_btrace_conf;
ced63ec0
GB
13228 remote_ops.to_augmented_libraries_svr4_read =
13229 remote_augmented_libraries_svr4_read;
8020350c
DB
13230 remote_ops.to_follow_fork = remote_follow_fork;
13231 remote_ops.to_follow_exec = remote_follow_exec;
13232 remote_ops.to_insert_fork_catchpoint = remote_insert_fork_catchpoint;
13233 remote_ops.to_remove_fork_catchpoint = remote_remove_fork_catchpoint;
13234 remote_ops.to_insert_vfork_catchpoint = remote_insert_vfork_catchpoint;
13235 remote_ops.to_remove_vfork_catchpoint = remote_remove_vfork_catchpoint;
13236 remote_ops.to_insert_exec_catchpoint = remote_insert_exec_catchpoint;
13237 remote_ops.to_remove_exec_catchpoint = remote_remove_exec_catchpoint;
3a00c802 13238 remote_ops.to_execution_direction = remote_execution_direction;
c906108c
SS
13239}
13240
13241/* Set up the extended remote vector by making a copy of the standard
13242 remote vector and adding to it. */
13243
13244static void
fba45db2 13245init_extended_remote_ops (void)
c906108c
SS
13246{
13247 extended_remote_ops = remote_ops;
13248
0f71a2f6 13249 extended_remote_ops.to_shortname = "extended-remote";
c5aa993b 13250 extended_remote_ops.to_longname =
c906108c 13251 "Extended remote serial target in gdb-specific protocol";
c5aa993b 13252 extended_remote_ops.to_doc =
c906108c 13253 "Use a remote computer via a serial line, using a gdb-specific protocol.\n\
39237dd1
PA
13254Specify the serial device it is connected to (e.g. /dev/ttya).";
13255 extended_remote_ops.to_open = extended_remote_open;
c906108c 13256 extended_remote_ops.to_create_inferior = extended_remote_create_inferior;
2d717e4f
DJ
13257 extended_remote_ops.to_detach = extended_remote_detach;
13258 extended_remote_ops.to_attach = extended_remote_attach;
b9c1d481 13259 extended_remote_ops.to_post_attach = extended_remote_post_attach;
03583c20
UW
13260 extended_remote_ops.to_supports_disable_randomization
13261 = extended_remote_supports_disable_randomization;
0f71a2f6
JM
13262}
13263
6426a772 13264static int
6a109b6b 13265remote_can_async_p (struct target_ops *ops)
6426a772 13266{
5d93a237
TT
13267 struct remote_state *rs = get_remote_state ();
13268
c6ebd6cf 13269 if (!target_async_permitted)
75c99385
PA
13270 /* We only enable async when the user specifically asks for it. */
13271 return 0;
13272
23860348 13273 /* We're async whenever the serial device is. */
5d93a237 13274 return serial_can_async_p (rs->remote_desc);
6426a772
JM
13275}
13276
13277static int
6a109b6b 13278remote_is_async_p (struct target_ops *ops)
6426a772 13279{
5d93a237
TT
13280 struct remote_state *rs = get_remote_state ();
13281
c6ebd6cf 13282 if (!target_async_permitted)
75c99385
PA
13283 /* We only enable async when the user specifically asks for it. */
13284 return 0;
13285
23860348 13286 /* We're async whenever the serial device is. */
5d93a237 13287 return serial_is_async_p (rs->remote_desc);
6426a772
JM
13288}
13289
2acceee2
JM
13290/* Pass the SERIAL event on and up to the client. One day this code
13291 will be able to delay notifying the client of an event until the
23860348 13292 point where an entire packet has been received. */
2acceee2 13293
2acceee2
JM
13294static serial_event_ftype remote_async_serial_handler;
13295
6426a772 13296static void
819cc324 13297remote_async_serial_handler (struct serial *scb, void *context)
6426a772 13298{
2acceee2
JM
13299 /* Don't propogate error information up to the client. Instead let
13300 the client find out about the error by querying the target. */
6a3753b3 13301 inferior_event_handler (INF_REG_EVENT, NULL);
2acceee2
JM
13302}
13303
74531fed
PA
13304static void
13305remote_async_inferior_event_handler (gdb_client_data data)
13306{
13307 inferior_event_handler (INF_REG_EVENT, NULL);
13308}
13309
2acceee2 13310static void
6a3753b3 13311remote_async (struct target_ops *ops, int enable)
2acceee2 13312{
5d93a237
TT
13313 struct remote_state *rs = get_remote_state ();
13314
6a3753b3 13315 if (enable)
2acceee2 13316 {
88b496c3 13317 serial_async (rs->remote_desc, remote_async_serial_handler, rs);
b7d2e916
PA
13318
13319 /* If there are pending events in the stop reply queue tell the
13320 event loop to process them. */
13321 if (!QUEUE_is_empty (stop_reply_p, stop_reply_queue))
13322 mark_async_event_handler (remote_async_inferior_event_token);
6efcd9a8
PA
13323 /* For simplicity, below we clear the pending events token
13324 without remembering whether it is marked, so here we always
13325 mark it. If there's actually no pending notification to
13326 process, this ends up being a no-op (other than a spurious
13327 event-loop wakeup). */
13328 if (target_is_non_stop_p ())
13329 mark_async_event_handler (rs->notif_state->get_pending_events_token);
2acceee2
JM
13330 }
13331 else
b7d2e916
PA
13332 {
13333 serial_async (rs->remote_desc, NULL, NULL);
6efcd9a8
PA
13334 /* If the core is disabling async, it doesn't want to be
13335 disturbed with target events. Clear all async event sources
13336 too. */
b7d2e916 13337 clear_async_event_handler (remote_async_inferior_event_token);
6efcd9a8
PA
13338 if (target_is_non_stop_p ())
13339 clear_async_event_handler (rs->notif_state->get_pending_events_token);
b7d2e916 13340 }
6426a772
JM
13341}
13342
65706a29
PA
13343/* Implementation of the to_thread_events method. */
13344
13345static void
13346remote_thread_events (struct target_ops *ops, int enable)
13347{
13348 struct remote_state *rs = get_remote_state ();
13349 size_t size = get_remote_packet_size ();
65706a29
PA
13350
13351 if (packet_support (PACKET_QThreadEvents) == PACKET_DISABLE)
13352 return;
13353
13354 xsnprintf (rs->buf, size, "QThreadEvents:%x", enable ? 1 : 0);
13355 putpkt (rs->buf);
13356 getpkt (&rs->buf, &rs->buf_size, 0);
13357
13358 switch (packet_ok (rs->buf,
13359 &remote_protocol_packets[PACKET_QThreadEvents]))
13360 {
13361 case PACKET_OK:
13362 if (strcmp (rs->buf, "OK") != 0)
13363 error (_("Remote refused setting thread events: %s"), rs->buf);
13364 break;
13365 case PACKET_ERROR:
13366 warning (_("Remote failure reply: %s"), rs->buf);
13367 break;
13368 case PACKET_UNKNOWN:
13369 break;
13370 }
13371}
13372
5a2468f5 13373static void
c2d11a7d 13374set_remote_cmd (char *args, int from_tty)
5a2468f5 13375{
635c7e8a 13376 help_list (remote_set_cmdlist, "set remote ", all_commands, gdb_stdout);
5a2468f5
JM
13377}
13378
d471ea57
AC
13379static void
13380show_remote_cmd (char *args, int from_tty)
13381{
37a105a1 13382 /* We can't just use cmd_show_list here, because we want to skip
427c3a89 13383 the redundant "show remote Z-packet" and the legacy aliases. */
37a105a1
DJ
13384 struct cleanup *showlist_chain;
13385 struct cmd_list_element *list = remote_show_cmdlist;
79a45e25 13386 struct ui_out *uiout = current_uiout;
37a105a1
DJ
13387
13388 showlist_chain = make_cleanup_ui_out_tuple_begin_end (uiout, "showlist");
13389 for (; list != NULL; list = list->next)
13390 if (strcmp (list->name, "Z-packet") == 0)
13391 continue;
427c3a89
DJ
13392 else if (list->type == not_set_cmd)
13393 /* Alias commands are exactly like the original, except they
13394 don't have the normal type. */
13395 continue;
13396 else
37a105a1
DJ
13397 {
13398 struct cleanup *option_chain
13399 = make_cleanup_ui_out_tuple_begin_end (uiout, "option");
a744cf53 13400
37a105a1
DJ
13401 ui_out_field_string (uiout, "name", list->name);
13402 ui_out_text (uiout, ": ");
427c3a89 13403 if (list->type == show_cmd)
f5c4fcd9 13404 do_show_command (NULL, from_tty, list);
427c3a89
DJ
13405 else
13406 cmd_func (list, NULL, from_tty);
37a105a1
DJ
13407 /* Close the tuple. */
13408 do_cleanups (option_chain);
13409 }
427c3a89
DJ
13410
13411 /* Close the tuple. */
13412 do_cleanups (showlist_chain);
d471ea57 13413}
5a2468f5 13414
0f71a2f6 13415
23860348 13416/* Function to be called whenever a new objfile (shlib) is detected. */
dc8acb97
MS
13417static void
13418remote_new_objfile (struct objfile *objfile)
13419{
5d93a237
TT
13420 struct remote_state *rs = get_remote_state ();
13421
13422 if (rs->remote_desc != 0) /* Have a remote connection. */
36d25514 13423 remote_check_symbols ();
dc8acb97
MS
13424}
13425
00bf0b85
SS
13426/* Pull all the tracepoints defined on the target and create local
13427 data structures representing them. We don't want to create real
13428 tracepoints yet, we don't want to mess up the user's existing
13429 collection. */
13430
13431static int
ab6617cc 13432remote_upload_tracepoints (struct target_ops *self, struct uploaded_tp **utpp)
d5551862 13433{
00bf0b85
SS
13434 struct remote_state *rs = get_remote_state ();
13435 char *p;
d5551862 13436
00bf0b85
SS
13437 /* Ask for a first packet of tracepoint definition. */
13438 putpkt ("qTfP");
13439 getpkt (&rs->buf, &rs->buf_size, 0);
13440 p = rs->buf;
13441 while (*p && *p != 'l')
d5551862 13442 {
00bf0b85
SS
13443 parse_tracepoint_definition (p, utpp);
13444 /* Ask for another packet of tracepoint definition. */
13445 putpkt ("qTsP");
13446 getpkt (&rs->buf, &rs->buf_size, 0);
13447 p = rs->buf;
d5551862 13448 }
00bf0b85 13449 return 0;
d5551862
SS
13450}
13451
00bf0b85 13452static int
181e3713
TT
13453remote_upload_trace_state_variables (struct target_ops *self,
13454 struct uploaded_tsv **utsvp)
d5551862 13455{
00bf0b85 13456 struct remote_state *rs = get_remote_state ();
d5551862 13457 char *p;
d5551862 13458
00bf0b85
SS
13459 /* Ask for a first packet of variable definition. */
13460 putpkt ("qTfV");
d5551862
SS
13461 getpkt (&rs->buf, &rs->buf_size, 0);
13462 p = rs->buf;
00bf0b85 13463 while (*p && *p != 'l')
d5551862 13464 {
00bf0b85
SS
13465 parse_tsv_definition (p, utsvp);
13466 /* Ask for another packet of variable definition. */
13467 putpkt ("qTsV");
d5551862
SS
13468 getpkt (&rs->buf, &rs->buf_size, 0);
13469 p = rs->buf;
13470 }
00bf0b85 13471 return 0;
d5551862
SS
13472}
13473
c1e36e3e
PA
13474/* The "set/show range-stepping" show hook. */
13475
13476static void
13477show_range_stepping (struct ui_file *file, int from_tty,
13478 struct cmd_list_element *c,
13479 const char *value)
13480{
13481 fprintf_filtered (file,
13482 _("Debugger's willingness to use range stepping "
13483 "is %s.\n"), value);
13484}
13485
13486/* The "set/show range-stepping" set hook. */
13487
13488static void
13489set_range_stepping (char *ignore_args, int from_tty,
13490 struct cmd_list_element *c)
13491{
5d93a237
TT
13492 struct remote_state *rs = get_remote_state ();
13493
c1e36e3e
PA
13494 /* Whene enabling, check whether range stepping is actually
13495 supported by the target, and warn if not. */
13496 if (use_range_stepping)
13497 {
5d93a237 13498 if (rs->remote_desc != NULL)
c1e36e3e 13499 {
4082afcc 13500 if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
c1e36e3e
PA
13501 remote_vcont_probe (rs);
13502
4082afcc 13503 if (packet_support (PACKET_vCont) == PACKET_ENABLE
c1e36e3e
PA
13504 && rs->supports_vCont.r)
13505 return;
13506 }
13507
13508 warning (_("Range stepping is not supported by the current target"));
13509 }
13510}
13511
c906108c 13512void
fba45db2 13513_initialize_remote (void)
c906108c 13514{
9a7071a8 13515 struct cmd_list_element *cmd;
6f937416 13516 const char *cmd_name;
ea9c271d 13517
0f71a2f6 13518 /* architecture specific data */
2bc416ba 13519 remote_gdbarch_data_handle =
23860348 13520 gdbarch_data_register_post_init (init_remote_state);
29709017
DJ
13521 remote_g_packet_data_handle =
13522 gdbarch_data_register_pre_init (remote_g_packet_data_init);
d01949b6 13523
94585166
DB
13524 remote_pspace_data
13525 = register_program_space_data_with_cleanup (NULL,
13526 remote_pspace_data_cleanup);
13527
ea9c271d
DJ
13528 /* Initialize the per-target state. At the moment there is only one
13529 of these, not one per target. Only one target is active at a
cf792862
TT
13530 time. */
13531 remote_state = new_remote_state ();
ea9c271d 13532
c906108c
SS
13533 init_remote_ops ();
13534 add_target (&remote_ops);
13535
13536 init_extended_remote_ops ();
13537 add_target (&extended_remote_ops);
cce74817 13538
dc8acb97 13539 /* Hook into new objfile notification. */
06d3b283 13540 observer_attach_new_objfile (remote_new_objfile);
5f4cf0bb
YQ
13541 /* We're no longer interested in notification events of an inferior
13542 when it exits. */
13543 observer_attach_inferior_exit (discard_pending_stop_replies);
dc8acb97 13544
c906108c
SS
13545#if 0
13546 init_remote_threadtests ();
13547#endif
13548
722247f1 13549 stop_reply_queue = QUEUE_alloc (stop_reply_p, stop_reply_xfree);
23860348 13550 /* set/show remote ... */
d471ea57 13551
1bedd215 13552 add_prefix_cmd ("remote", class_maintenance, set_remote_cmd, _("\
5a2468f5
JM
13553Remote protocol specific variables\n\
13554Configure various remote-protocol specific variables such as\n\
1bedd215 13555the packets being used"),
cff3e48b 13556 &remote_set_cmdlist, "set remote ",
23860348 13557 0 /* allow-unknown */, &setlist);
1bedd215 13558 add_prefix_cmd ("remote", class_maintenance, show_remote_cmd, _("\
5a2468f5
JM
13559Remote protocol specific variables\n\
13560Configure various remote-protocol specific variables such as\n\
1bedd215 13561the packets being used"),
cff3e48b 13562 &remote_show_cmdlist, "show remote ",
23860348 13563 0 /* allow-unknown */, &showlist);
5a2468f5 13564
1a966eab
AC
13565 add_cmd ("compare-sections", class_obscure, compare_sections_command, _("\
13566Compare section data on target to the exec file.\n\
95cf3b38
DT
13567Argument is a single section name (default: all loaded sections).\n\
13568To compare only read-only loaded sections, specify the -r option."),
c906108c
SS
13569 &cmdlist);
13570
1a966eab
AC
13571 add_cmd ("packet", class_maintenance, packet_command, _("\
13572Send an arbitrary packet to a remote target.\n\
c906108c
SS
13573 maintenance packet TEXT\n\
13574If GDB is talking to an inferior via the GDB serial protocol, then\n\
13575this command sends the string TEXT to the inferior, and displays the\n\
13576response packet. GDB supplies the initial `$' character, and the\n\
1a966eab 13577terminating `#' character and checksum."),
c906108c
SS
13578 &maintenancelist);
13579
7915a72c
AC
13580 add_setshow_boolean_cmd ("remotebreak", no_class, &remote_break, _("\
13581Set whether to send break if interrupted."), _("\
13582Show whether to send break if interrupted."), _("\
13583If set, a break, instead of a cntrl-c, is sent to the remote target."),
9a7071a8 13584 set_remotebreak, show_remotebreak,
e707bbc2 13585 &setlist, &showlist);
9a7071a8
JB
13586 cmd_name = "remotebreak";
13587 cmd = lookup_cmd (&cmd_name, setlist, "", -1, 1);
13588 deprecate_cmd (cmd, "set remote interrupt-sequence");
13589 cmd_name = "remotebreak"; /* needed because lookup_cmd updates the pointer */
13590 cmd = lookup_cmd (&cmd_name, showlist, "", -1, 1);
13591 deprecate_cmd (cmd, "show remote interrupt-sequence");
13592
13593 add_setshow_enum_cmd ("interrupt-sequence", class_support,
3e43a32a
MS
13594 interrupt_sequence_modes, &interrupt_sequence_mode,
13595 _("\
9a7071a8
JB
13596Set interrupt sequence to remote target."), _("\
13597Show interrupt sequence to remote target."), _("\
13598Valid value is \"Ctrl-C\", \"BREAK\" or \"BREAK-g\". The default is \"Ctrl-C\"."),
13599 NULL, show_interrupt_sequence,
13600 &remote_set_cmdlist,
13601 &remote_show_cmdlist);
13602
13603 add_setshow_boolean_cmd ("interrupt-on-connect", class_support,
13604 &interrupt_on_connect, _("\
13605Set whether interrupt-sequence is sent to remote target when gdb connects to."), _(" \
13606Show whether interrupt-sequence is sent to remote target when gdb connects to."), _(" \
13607If set, interrupt sequence is sent to remote target."),
13608 NULL, NULL,
13609 &remote_set_cmdlist, &remote_show_cmdlist);
c906108c 13610
23860348 13611 /* Install commands for configuring memory read/write packets. */
11cf8741 13612
1a966eab
AC
13613 add_cmd ("remotewritesize", no_class, set_memory_write_packet_size, _("\
13614Set the maximum number of bytes per memory write packet (deprecated)."),
11cf8741 13615 &setlist);
1a966eab
AC
13616 add_cmd ("remotewritesize", no_class, show_memory_write_packet_size, _("\
13617Show the maximum number of bytes per memory write packet (deprecated)."),
11cf8741
JM
13618 &showlist);
13619 add_cmd ("memory-write-packet-size", no_class,
1a966eab
AC
13620 set_memory_write_packet_size, _("\
13621Set the maximum number of bytes per memory-write packet.\n\
13622Specify the number of bytes in a packet or 0 (zero) for the\n\
13623default packet size. The actual limit is further reduced\n\
13624dependent on the target. Specify ``fixed'' to disable the\n\
13625further restriction and ``limit'' to enable that restriction."),
11cf8741
JM
13626 &remote_set_cmdlist);
13627 add_cmd ("memory-read-packet-size", no_class,
1a966eab
AC
13628 set_memory_read_packet_size, _("\
13629Set the maximum number of bytes per memory-read packet.\n\
13630Specify the number of bytes in a packet or 0 (zero) for the\n\
13631default packet size. The actual limit is further reduced\n\
13632dependent on the target. Specify ``fixed'' to disable the\n\
13633further restriction and ``limit'' to enable that restriction."),
11cf8741
JM
13634 &remote_set_cmdlist);
13635 add_cmd ("memory-write-packet-size", no_class,
13636 show_memory_write_packet_size,
1a966eab 13637 _("Show the maximum number of bytes per memory-write packet."),
11cf8741
JM
13638 &remote_show_cmdlist);
13639 add_cmd ("memory-read-packet-size", no_class,
13640 show_memory_read_packet_size,
1a966eab 13641 _("Show the maximum number of bytes per memory-read packet."),
11cf8741 13642 &remote_show_cmdlist);
c906108c 13643
b3f42336 13644 add_setshow_zinteger_cmd ("hardware-watchpoint-limit", no_class,
7915a72c
AC
13645 &remote_hw_watchpoint_limit, _("\
13646Set the maximum number of target hardware watchpoints."), _("\
13647Show the maximum number of target hardware watchpoints."), _("\
13648Specify a negative limit for unlimited."),
3e43a32a
MS
13649 NULL, NULL, /* FIXME: i18n: The maximum
13650 number of target hardware
13651 watchpoints is %s. */
b3f42336 13652 &remote_set_cmdlist, &remote_show_cmdlist);
480a3f21
PW
13653 add_setshow_zinteger_cmd ("hardware-watchpoint-length-limit", no_class,
13654 &remote_hw_watchpoint_length_limit, _("\
13655Set the maximum length (in bytes) of a target hardware watchpoint."), _("\
13656Show the maximum length (in bytes) of a target hardware watchpoint."), _("\
13657Specify a negative limit for unlimited."),
13658 NULL, NULL, /* FIXME: i18n: The maximum
13659 length (in bytes) of a target
13660 hardware watchpoint is %s. */
13661 &remote_set_cmdlist, &remote_show_cmdlist);
b3f42336 13662 add_setshow_zinteger_cmd ("hardware-breakpoint-limit", no_class,
7915a72c
AC
13663 &remote_hw_breakpoint_limit, _("\
13664Set the maximum number of target hardware breakpoints."), _("\
13665Show the maximum number of target hardware breakpoints."), _("\
13666Specify a negative limit for unlimited."),
3e43a32a
MS
13667 NULL, NULL, /* FIXME: i18n: The maximum
13668 number of target hardware
13669 breakpoints is %s. */
b3f42336 13670 &remote_set_cmdlist, &remote_show_cmdlist);
501eef12 13671
1b493192
PA
13672 add_setshow_zuinteger_cmd ("remoteaddresssize", class_obscure,
13673 &remote_address_size, _("\
4d28ad1e
AC
13674Set the maximum size of the address (in bits) in a memory packet."), _("\
13675Show the maximum size of the address (in bits) in a memory packet."), NULL,
1b493192
PA
13676 NULL,
13677 NULL, /* FIXME: i18n: */
13678 &setlist, &showlist);
c906108c 13679
ca4f7f8b
PA
13680 init_all_packet_configs ();
13681
444abaca 13682 add_packet_config_cmd (&remote_protocol_packets[PACKET_X],
bb572ddd 13683 "X", "binary-download", 1);
0f71a2f6 13684
444abaca 13685 add_packet_config_cmd (&remote_protocol_packets[PACKET_vCont],
bb572ddd 13686 "vCont", "verbose-resume", 0);
506fb367 13687
89be2091
DJ
13688 add_packet_config_cmd (&remote_protocol_packets[PACKET_QPassSignals],
13689 "QPassSignals", "pass-signals", 0);
13690
82075af2
JS
13691 add_packet_config_cmd (&remote_protocol_packets[PACKET_QCatchSyscalls],
13692 "QCatchSyscalls", "catch-syscalls", 0);
13693
9b224c5e
PA
13694 add_packet_config_cmd (&remote_protocol_packets[PACKET_QProgramSignals],
13695 "QProgramSignals", "program-signals", 0);
13696
444abaca 13697 add_packet_config_cmd (&remote_protocol_packets[PACKET_qSymbol],
bb572ddd 13698 "qSymbol", "symbol-lookup", 0);
dc8acb97 13699
444abaca 13700 add_packet_config_cmd (&remote_protocol_packets[PACKET_P],
bb572ddd 13701 "P", "set-register", 1);
d471ea57 13702
444abaca 13703 add_packet_config_cmd (&remote_protocol_packets[PACKET_p],
bb572ddd 13704 "p", "fetch-register", 1);
b96ec7ac 13705
444abaca 13706 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z0],
bb572ddd 13707 "Z0", "software-breakpoint", 0);
d471ea57 13708
444abaca 13709 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z1],
bb572ddd 13710 "Z1", "hardware-breakpoint", 0);
d471ea57 13711
444abaca 13712 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z2],
bb572ddd 13713 "Z2", "write-watchpoint", 0);
d471ea57 13714
444abaca 13715 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z3],
bb572ddd 13716 "Z3", "read-watchpoint", 0);
d471ea57 13717
444abaca 13718 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z4],
bb572ddd 13719 "Z4", "access-watchpoint", 0);
d471ea57 13720
0876f84a
DJ
13721 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_auxv],
13722 "qXfer:auxv:read", "read-aux-vector", 0);
802188a7 13723
c78fa86a
GB
13724 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_exec_file],
13725 "qXfer:exec-file:read", "pid-to-exec-file", 0);
13726
23181151
DJ
13727 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_features],
13728 "qXfer:features:read", "target-features", 0);
13729
cfa9d6d9
DJ
13730 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_libraries],
13731 "qXfer:libraries:read", "library-info", 0);
13732
2268b414
JK
13733 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_libraries_svr4],
13734 "qXfer:libraries-svr4:read", "library-info-svr4", 0);
13735
fd79ecee
DJ
13736 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_memory_map],
13737 "qXfer:memory-map:read", "memory-map", 0);
13738
0e7f50da
UW
13739 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_spu_read],
13740 "qXfer:spu:read", "read-spu-object", 0);
13741
13742 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_spu_write],
13743 "qXfer:spu:write", "write-spu-object", 0);
13744
07e059b5
VP
13745 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_osdata],
13746 "qXfer:osdata:read", "osdata", 0);
13747
dc146f7c
VP
13748 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_threads],
13749 "qXfer:threads:read", "threads", 0);
13750
4aa995e1
PA
13751 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_siginfo_read],
13752 "qXfer:siginfo:read", "read-siginfo-object", 0);
13753
13754 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_siginfo_write],
13755 "qXfer:siginfo:write", "write-siginfo-object", 0);
13756
b3b9301e
PA
13757 add_packet_config_cmd
13758 (&remote_protocol_packets[PACKET_qXfer_traceframe_info],
eb9fe518 13759 "qXfer:traceframe-info:read", "traceframe-info", 0);
b3b9301e 13760
169081d0
TG
13761 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_uib],
13762 "qXfer:uib:read", "unwind-info-block", 0);
13763
444abaca 13764 add_packet_config_cmd (&remote_protocol_packets[PACKET_qGetTLSAddr],
38691318 13765 "qGetTLSAddr", "get-thread-local-storage-address",
38691318
KB
13766 0);
13767
711e434b
PM
13768 add_packet_config_cmd (&remote_protocol_packets[PACKET_qGetTIBAddr],
13769 "qGetTIBAddr", "get-thread-information-block-address",
13770 0);
13771
40ab02ce
MS
13772 add_packet_config_cmd (&remote_protocol_packets[PACKET_bc],
13773 "bc", "reverse-continue", 0);
13774
13775 add_packet_config_cmd (&remote_protocol_packets[PACKET_bs],
13776 "bs", "reverse-step", 0);
13777
be2a5f71
DJ
13778 add_packet_config_cmd (&remote_protocol_packets[PACKET_qSupported],
13779 "qSupported", "supported-packets", 0);
13780
08388c79
DE
13781 add_packet_config_cmd (&remote_protocol_packets[PACKET_qSearch_memory],
13782 "qSearch:memory", "search-memory", 0);
13783
bd3eecc3
PA
13784 add_packet_config_cmd (&remote_protocol_packets[PACKET_qTStatus],
13785 "qTStatus", "trace-status", 0);
13786
15a201c8
GB
13787 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_setfs],
13788 "vFile:setfs", "hostio-setfs", 0);
13789
a6b151f1
DJ
13790 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_open],
13791 "vFile:open", "hostio-open", 0);
13792
13793 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_pread],
13794 "vFile:pread", "hostio-pread", 0);
13795
13796 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_pwrite],
13797 "vFile:pwrite", "hostio-pwrite", 0);
13798
13799 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_close],
13800 "vFile:close", "hostio-close", 0);
13801
13802 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_unlink],
13803 "vFile:unlink", "hostio-unlink", 0);
13804
b9e7b9c3
UW
13805 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_readlink],
13806 "vFile:readlink", "hostio-readlink", 0);
13807
0a93529c
GB
13808 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_fstat],
13809 "vFile:fstat", "hostio-fstat", 0);
13810
2d717e4f
DJ
13811 add_packet_config_cmd (&remote_protocol_packets[PACKET_vAttach],
13812 "vAttach", "attach", 0);
13813
13814 add_packet_config_cmd (&remote_protocol_packets[PACKET_vRun],
13815 "vRun", "run", 0);
13816
a6f3e723
SL
13817 add_packet_config_cmd (&remote_protocol_packets[PACKET_QStartNoAckMode],
13818 "QStartNoAckMode", "noack", 0);
13819
82f73884
PA
13820 add_packet_config_cmd (&remote_protocol_packets[PACKET_vKill],
13821 "vKill", "kill", 0);
13822
0b16c5cf
PA
13823 add_packet_config_cmd (&remote_protocol_packets[PACKET_qAttached],
13824 "qAttached", "query-attached", 0);
13825
782b2b07 13826 add_packet_config_cmd (&remote_protocol_packets[PACKET_ConditionalTracepoints],
3e43a32a
MS
13827 "ConditionalTracepoints",
13828 "conditional-tracepoints", 0);
3788aec7
LM
13829
13830 add_packet_config_cmd (&remote_protocol_packets[PACKET_ConditionalBreakpoints],
13831 "ConditionalBreakpoints",
13832 "conditional-breakpoints", 0);
13833
d3ce09f5
SS
13834 add_packet_config_cmd (&remote_protocol_packets[PACKET_BreakpointCommands],
13835 "BreakpointCommands",
13836 "breakpoint-commands", 0);
13837
7a697b8d
SS
13838 add_packet_config_cmd (&remote_protocol_packets[PACKET_FastTracepoints],
13839 "FastTracepoints", "fast-tracepoints", 0);
782b2b07 13840
409873ef
SS
13841 add_packet_config_cmd (&remote_protocol_packets[PACKET_TracepointSource],
13842 "TracepointSource", "TracepointSource", 0);
13843
d914c394
SS
13844 add_packet_config_cmd (&remote_protocol_packets[PACKET_QAllow],
13845 "QAllow", "allow", 0);
13846
0fb4aa4b
PA
13847 add_packet_config_cmd (&remote_protocol_packets[PACKET_StaticTracepoints],
13848 "StaticTracepoints", "static-tracepoints", 0);
13849
1e4d1764
YQ
13850 add_packet_config_cmd (&remote_protocol_packets[PACKET_InstallInTrace],
13851 "InstallInTrace", "install-in-trace", 0);
13852
0fb4aa4b
PA
13853 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_statictrace_read],
13854 "qXfer:statictrace:read", "read-sdata-object", 0);
13855
78d85199
YQ
13856 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_fdpic],
13857 "qXfer:fdpic:read", "read-fdpic-loadmap", 0);
13858
03583c20
UW
13859 add_packet_config_cmd (&remote_protocol_packets[PACKET_QDisableRandomization],
13860 "QDisableRandomization", "disable-randomization", 0);
13861
d1feda86
YQ
13862 add_packet_config_cmd (&remote_protocol_packets[PACKET_QAgent],
13863 "QAgent", "agent", 0);
13864
f6f899bf
HAQ
13865 add_packet_config_cmd (&remote_protocol_packets[PACKET_QTBuffer_size],
13866 "QTBuffer:size", "trace-buffer-size", 0);
13867
9accd112
MM
13868 add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_off],
13869 "Qbtrace:off", "disable-btrace", 0);
13870
13871 add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_bts],
b20a6524
MM
13872 "Qbtrace:bts", "enable-btrace-bts", 0);
13873
13874 add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_pt],
13875 "Qbtrace:pt", "enable-btrace-pt", 0);
9accd112
MM
13876
13877 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_btrace],
13878 "qXfer:btrace", "read-btrace", 0);
13879
f4abbc16
MM
13880 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_btrace_conf],
13881 "qXfer:btrace-conf", "read-btrace-conf", 0);
13882
d33501a5
MM
13883 add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_conf_bts_size],
13884 "Qbtrace-conf:bts:size", "btrace-conf-bts-size", 0);
13885
73b8c1fd
PA
13886 add_packet_config_cmd (&remote_protocol_packets[PACKET_multiprocess_feature],
13887 "multiprocess-feature", "multiprocess-feature", 0);
13888
f7e6eed5
PA
13889 add_packet_config_cmd (&remote_protocol_packets[PACKET_swbreak_feature],
13890 "swbreak-feature", "swbreak-feature", 0);
13891
13892 add_packet_config_cmd (&remote_protocol_packets[PACKET_hwbreak_feature],
13893 "hwbreak-feature", "hwbreak-feature", 0);
13894
89245bc0
DB
13895 add_packet_config_cmd (&remote_protocol_packets[PACKET_fork_event_feature],
13896 "fork-event-feature", "fork-event-feature", 0);
13897
13898 add_packet_config_cmd (&remote_protocol_packets[PACKET_vfork_event_feature],
13899 "vfork-event-feature", "vfork-event-feature", 0);
13900
b20a6524
MM
13901 add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_conf_pt_size],
13902 "Qbtrace-conf:pt:size", "btrace-conf-pt-size", 0);
13903
750ce8d1
YQ
13904 add_packet_config_cmd (&remote_protocol_packets[PACKET_vContSupported],
13905 "vContSupported", "verbose-resume-supported", 0);
13906
94585166
DB
13907 add_packet_config_cmd (&remote_protocol_packets[PACKET_exec_event_feature],
13908 "exec-event-feature", "exec-event-feature", 0);
13909
de979965
PA
13910 add_packet_config_cmd (&remote_protocol_packets[PACKET_vCtrlC],
13911 "vCtrlC", "ctrl-c", 0);
13912
65706a29
PA
13913 add_packet_config_cmd (&remote_protocol_packets[PACKET_QThreadEvents],
13914 "QThreadEvents", "thread-events", 0);
13915
f2faf941
PA
13916 add_packet_config_cmd (&remote_protocol_packets[PACKET_no_resumed],
13917 "N stop reply", "no-resumed-stop-reply", 0);
13918
0b736949
DB
13919 /* Assert that we've registered "set remote foo-packet" commands
13920 for all packet configs. */
ca4f7f8b
PA
13921 {
13922 int i;
13923
13924 for (i = 0; i < PACKET_MAX; i++)
13925 {
13926 /* Ideally all configs would have a command associated. Some
13927 still don't though. */
13928 int excepted;
13929
13930 switch (i)
13931 {
13932 case PACKET_QNonStop:
ca4f7f8b
PA
13933 case PACKET_EnableDisableTracepoints_feature:
13934 case PACKET_tracenz_feature:
13935 case PACKET_DisconnectedTracing_feature:
13936 case PACKET_augmented_libraries_svr4_read_feature:
936d2992
PA
13937 case PACKET_qCRC:
13938 /* Additions to this list need to be well justified:
13939 pre-existing packets are OK; new packets are not. */
ca4f7f8b
PA
13940 excepted = 1;
13941 break;
13942 default:
13943 excepted = 0;
13944 break;
13945 }
13946
13947 /* This catches both forgetting to add a config command, and
13948 forgetting to remove a packet from the exception list. */
13949 gdb_assert (excepted == (remote_protocol_packets[i].name == NULL));
13950 }
13951 }
13952
37a105a1
DJ
13953 /* Keep the old ``set remote Z-packet ...'' working. Each individual
13954 Z sub-packet has its own set and show commands, but users may
13955 have sets to this variable in their .gdbinit files (or in their
13956 documentation). */
e9e68a56 13957 add_setshow_auto_boolean_cmd ("Z-packet", class_obscure,
7915a72c
AC
13958 &remote_Z_packet_detect, _("\
13959Set use of remote protocol `Z' packets"), _("\
13960Show use of remote protocol `Z' packets "), _("\
3b64bf98 13961When set, GDB will attempt to use the remote breakpoint and watchpoint\n\
7915a72c 13962packets."),
e9e68a56 13963 set_remote_protocol_Z_packet_cmd,
3e43a32a
MS
13964 show_remote_protocol_Z_packet_cmd,
13965 /* FIXME: i18n: Use of remote protocol
13966 `Z' packets is %s. */
e9e68a56 13967 &remote_set_cmdlist, &remote_show_cmdlist);
449092f6 13968
a6b151f1
DJ
13969 add_prefix_cmd ("remote", class_files, remote_command, _("\
13970Manipulate files on the remote system\n\
13971Transfer files to and from the remote target system."),
13972 &remote_cmdlist, "remote ",
13973 0 /* allow-unknown */, &cmdlist);
13974
13975 add_cmd ("put", class_files, remote_put_command,
13976 _("Copy a local file to the remote system."),
13977 &remote_cmdlist);
13978
13979 add_cmd ("get", class_files, remote_get_command,
13980 _("Copy a remote file to the local system."),
13981 &remote_cmdlist);
13982
13983 add_cmd ("delete", class_files, remote_delete_command,
13984 _("Delete a remote file."),
13985 &remote_cmdlist);
13986
2d717e4f 13987 add_setshow_string_noescape_cmd ("exec-file", class_files,
94585166 13988 &remote_exec_file_var, _("\
2d717e4f 13989Set the remote pathname for \"run\""), _("\
94585166
DB
13990Show the remote pathname for \"run\""), NULL,
13991 set_remote_exec_file,
13992 show_remote_exec_file,
13993 &remote_set_cmdlist,
13994 &remote_show_cmdlist);
2d717e4f 13995
c1e36e3e
PA
13996 add_setshow_boolean_cmd ("range-stepping", class_run,
13997 &use_range_stepping, _("\
13998Enable or disable range stepping."), _("\
13999Show whether target-assisted range stepping is enabled."), _("\
14000If on, and the target supports it, when stepping a source line, GDB\n\
14001tells the target to step the corresponding range of addresses itself instead\n\
14002of issuing multiple single-steps. This speeds up source level\n\
14003stepping. If off, GDB always issues single-steps, even if range\n\
14004stepping is supported by the target. The default is on."),
14005 set_range_stepping,
14006 show_range_stepping,
14007 &setlist,
14008 &showlist);
14009
449092f6
CV
14010 /* Eventually initialize fileio. See fileio.c */
14011 initialize_remote_fileio (remote_set_cmdlist, remote_show_cmdlist);
79d7f229 14012
ba348170 14013 /* Take advantage of the fact that the TID field is not used, to tag
79d7f229 14014 special ptids with it set to != 0. */
ba348170
PA
14015 magic_null_ptid = ptid_build (42000, -1, 1);
14016 not_sent_ptid = ptid_build (42000, -2, 1);
14017 any_thread_ptid = ptid_build (42000, 0, 1);
35b1e5cc
SS
14018
14019 target_buf_size = 2048;
224c3ddb 14020 target_buf = (char *) xmalloc (target_buf_size);
c906108c 14021}
10760264 14022