Avoid potencially-stale errno usage.
[deliverable/binutils-gdb.git] / gdb / remote.c
CommitLineData
c906108c 1/* Remote target communications for serial-line targets in custom GDB protocol
8926118c 2
28e7fd62 3 Copyright (C) 1988-2013 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
SS
22#include "defs.h"
23#include "gdb_string.h"
24#include <ctype.h>
25#include <fcntl.h>
c906108c
SS
26#include "inferior.h"
27#include "bfd.h"
28#include "symfile.h"
60250e8b 29#include "exceptions.h"
c906108c 30#include "target.h"
c5aa993b 31/*#include "terminal.h" */
c906108c
SS
32#include "gdbcmd.h"
33#include "objfiles.h"
34#include "gdb-stabs.h"
35#include "gdbthread.h"
c2c6d25f 36#include "remote.h"
722247f1 37#include "remote-notif.h"
4e052eda 38#include "regcache.h"
fd0407d6 39#include "value.h"
1ff9c3d6 40#include "gdb_assert.h"
6867ae3e 41#include "observer.h"
a77053c2 42#include "solib.h"
37a105a1
DJ
43#include "cli/cli-decode.h"
44#include "cli/cli-setshow.h"
424163ea 45#include "target-descriptions.h"
a4453b7e 46#include "gdb_bfd.h"
c906108c 47
7a292a7a 48#include <ctype.h>
9846de1b 49#include <sys/time.h>
c906108c 50
43ff13b4 51#include "event-loop.h"
c2c6d25f 52#include "event-top.h"
2acceee2 53#include "inf-loop.h"
43ff13b4 54
c906108c
SS
55#include <signal.h>
56#include "serial.h"
57
6240bebf
MS
58#include "gdbcore.h" /* for exec_bfd */
59
449092f6 60#include "remote-fileio.h"
a6b151f1 61#include "gdb/fileio.h"
3e88cf8d 62#include "gdb_stat.h"
dc146f7c 63#include "xml-support.h"
449092f6 64
fd79ecee
DJ
65#include "memory-map.h"
66
35b1e5cc
SS
67#include "tracepoint.h"
68#include "ax.h"
69#include "ax-gdb.h"
d1feda86 70#include "agent.h"
9accd112 71#include "btrace.h"
35b1e5cc 72
0df8b418 73/* Temp hacks for tracepoint encoding migration. */
35b1e5cc
SS
74static char *target_buf;
75static long target_buf_size;
35b1e5cc 76
6765f3e5
DJ
77/* The size to align memory write packets, when practical. The protocol
78 does not guarantee any alignment, and gdb will generate short
79 writes and unaligned writes, but even as a best-effort attempt this
80 can improve bulk transfers. For instance, if a write is misaligned
81 relative to the target's data bus, the stub may need to make an extra
82 round trip fetching data from the target. This doesn't make a
83 huge difference, but it's easy to do, so we try to be helpful.
84
85 The alignment chosen is arbitrary; usually data bus width is
86 important here, not the possibly larger cache line size. */
87enum { REMOTE_ALIGN_WRITES = 16 };
88
23860348 89/* Prototypes for local functions. */
6426a772
JM
90static void cleanup_sigint_signal_handler (void *dummy);
91static void initialize_sigint_signal_handler (void);
6d820c5c 92static int getpkt_sane (char **buf, long *sizeof_buf, int forever);
74531fed 93static int getpkt_or_notif_sane (char **buf, long *sizeof_buf,
fee9eda9 94 int forever, int *is_notif);
6426a772 95
a14ed312
KB
96static void handle_remote_sigint (int);
97static void handle_remote_sigint_twice (int);
98static void async_remote_interrupt (gdb_client_data);
99void async_remote_interrupt_twice (gdb_client_data);
43ff13b4 100
a14ed312 101static void remote_files_info (struct target_ops *ignore);
c906108c 102
316f2060 103static void remote_prepare_to_store (struct regcache *regcache);
c906108c 104
a14ed312 105static void remote_open (char *name, int from_tty);
c906108c 106
a14ed312 107static void extended_remote_open (char *name, int from_tty);
c906108c 108
75c99385 109static void remote_open_1 (char *, int, struct target_ops *, int extended_p);
c906108c 110
460014f5 111static void remote_close (void);
c906108c 112
136d6dae 113static void remote_mourn (struct target_ops *ops);
c906108c 114
a14ed312 115static void extended_remote_restart (void);
c906108c 116
136d6dae 117static void extended_remote_mourn (struct target_ops *);
c906108c 118
a14ed312 119static void remote_mourn_1 (struct target_ops *);
c906108c 120
6d820c5c 121static void remote_send (char **buf, long *sizeof_buf_p);
c906108c 122
a14ed312 123static int readchar (int timeout);
c906108c 124
c33e31fd
PA
125static void remote_serial_write (const char *str, int len);
126
7d85a9c0 127static void remote_kill (struct target_ops *ops);
c906108c 128
a14ed312 129static int tohex (int nib);
c906108c 130
75c99385
PA
131static int remote_can_async_p (void);
132
133static int remote_is_async_p (void);
134
135static void remote_async (void (*callback) (enum inferior_event_type event_type,
136 void *context), void *context);
137
136d6dae 138static void remote_detach (struct target_ops *ops, char *args, int from_tty);
c906108c 139
a14ed312 140static void remote_interrupt (int signo);
c906108c 141
a14ed312 142static void remote_interrupt_twice (int signo);
7a292a7a 143
a14ed312 144static void interrupt_query (void);
c906108c 145
79d7f229
PA
146static void set_general_thread (struct ptid ptid);
147static void set_continue_thread (struct ptid ptid);
c906108c 148
a14ed312 149static void get_offsets (void);
c906108c 150
6d820c5c
DJ
151static void skip_frame (void);
152
153static long read_frame (char **buf_p, long *sizeof_buf);
c906108c 154
a14ed312 155static int hexnumlen (ULONGEST num);
c906108c 156
a14ed312 157static void init_remote_ops (void);
c906108c 158
a14ed312 159static void init_extended_remote_ops (void);
c906108c 160
94cc34af 161static void remote_stop (ptid_t);
c906108c 162
a14ed312 163static int ishex (int ch, int *val);
c906108c 164
a14ed312 165static int stubhex (int ch);
c906108c 166
a14ed312 167static int hexnumstr (char *, ULONGEST);
c906108c 168
a14ed312 169static int hexnumnstr (char *, ULONGEST, int);
2df3850c 170
a14ed312 171static CORE_ADDR remote_address_masked (CORE_ADDR);
c906108c 172
a14ed312 173static void print_packet (char *);
c906108c 174
a14ed312 175static void compare_sections_command (char *, int);
c906108c 176
a14ed312 177static void packet_command (char *, int);
c906108c 178
a14ed312 179static int stub_unpack_int (char *buff, int fieldlength);
c906108c 180
39f77062 181static ptid_t remote_current_thread (ptid_t oldptid);
c906108c 182
a14ed312 183static void remote_find_new_threads (void);
c906108c 184
79d7f229 185static void record_currthread (ptid_t currthread);
c906108c 186
30559e10 187static int fromhex (int a);
c906108c 188
a14ed312 189static int putpkt_binary (char *buf, int cnt);
c906108c 190
a14ed312 191static void check_binary_download (CORE_ADDR addr);
c906108c 192
5a2468f5 193struct packet_config;
5a2468f5 194
a14ed312 195static void show_packet_config_cmd (struct packet_config *config);
5a2468f5 196
d471ea57 197static void update_packet_config (struct packet_config *config);
5a2468f5 198
bb572ddd
DJ
199static void set_remote_protocol_packet_cmd (char *args, int from_tty,
200 struct cmd_list_element *c);
201
202static void show_remote_protocol_packet_cmd (struct ui_file *file,
203 int from_tty,
204 struct cmd_list_element *c,
205 const char *value);
206
82f73884
PA
207static char *write_ptid (char *buf, const char *endbuf, ptid_t ptid);
208static ptid_t read_ptid (char *buf, char **obuf);
209
d914c394
SS
210static void remote_set_permissions (void);
211
d5551862 212struct remote_state;
00bf0b85 213static int remote_get_trace_status (struct trace_status *ts);
d5551862 214
00bf0b85
SS
215static int remote_upload_tracepoints (struct uploaded_tp **utpp);
216
217static int remote_upload_trace_state_variables (struct uploaded_tsv **utsvp);
218
c8d104ad
PA
219static void remote_query_supported (void);
220
221static void remote_check_symbols (struct objfile *objfile);
222
a14ed312 223void _initialize_remote (void);
c906108c 224
74531fed 225struct stop_reply;
74531fed 226static void stop_reply_xfree (struct stop_reply *);
722247f1 227static void remote_parse_stop_reply (char *, struct stop_reply *);
74531fed 228static void push_stop_reply (struct stop_reply *);
5f4cf0bb 229static void discard_pending_stop_replies (struct inferior *);
74531fed
PA
230static int peek_stop_reply (ptid_t ptid);
231
232static void remote_async_inferior_event_handler (gdb_client_data);
74531fed 233
d3fd5342
PA
234static void remote_terminal_ours (void);
235
d962ef82
DJ
236static int remote_read_description_p (struct target_ops *target);
237
176a6961 238static void remote_console_output (char *msg);
dde08ee1 239
b775012e
LM
240static int remote_supports_cond_breakpoints (void);
241
d3ce09f5
SS
242static int remote_can_run_breakpoint_commands (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
ea9c271d
DJ
253/* Description of the remote protocol state for the currently
254 connected target. This is per-target state, and independent of the
255 selected architecture. */
256
257struct remote_state
258{
259 /* A buffer to use for incoming packets, and its current size. The
260 buffer is grown dynamically for larger incoming packets.
261 Outgoing packets may also be constructed in this buffer.
262 BUF_SIZE is always at least REMOTE_PACKET_SIZE;
263 REMOTE_PACKET_SIZE should be used to limit the length of outgoing
264 packets. */
265 char *buf;
266 long buf_size;
be2a5f71 267
1e51243a
PA
268 /* True if we're going through initial connection setup (finding out
269 about the remote side's threads, relocating symbols, etc.). */
270 int starting_up;
271
be2a5f71
DJ
272 /* If we negotiated packet size explicitly (and thus can bypass
273 heuristics for the largest packet size that will not overflow
274 a buffer in the stub), this will be set to that packet size.
275 Otherwise zero, meaning to use the guessed size. */
276 long explicit_packet_size;
2d717e4f
DJ
277
278 /* remote_wait is normally called when the target is running and
279 waits for a stop reply packet. But sometimes we need to call it
280 when the target is already stopped. We can send a "?" packet
281 and have remote_wait read the response. Or, if we already have
282 the response, we can stash it in BUF and tell remote_wait to
283 skip calling getpkt. This flag is set when BUF contains a
284 stop reply packet and the target is not waiting. */
285 int cached_wait_status;
a6f3e723
SL
286
287 /* True, if in no ack mode. That is, neither GDB nor the stub will
288 expect acks from each other. The connection is assumed to be
289 reliable. */
290 int noack_mode;
82f73884
PA
291
292 /* True if we're connected in extended remote mode. */
293 int extended;
294
295 /* True if the stub reported support for multi-process
296 extensions. */
297 int multi_process_aware;
e24a49d8
PA
298
299 /* True if we resumed the target and we're waiting for the target to
300 stop. In the mean time, we can't start another command/query.
301 The remote server wouldn't be ready to process it, so we'd
302 timeout waiting for a reply that would never come and eventually
303 we'd close the connection. This can happen in asynchronous mode
304 because we allow GDB commands while the target is running. */
305 int waiting_for_stop_reply;
74531fed
PA
306
307 /* True if the stub reports support for non-stop mode. */
308 int non_stop_aware;
309
310 /* True if the stub reports support for vCont;t. */
311 int support_vCont_t;
782b2b07
SS
312
313 /* True if the stub reports support for conditional tracepoints. */
314 int cond_tracepoints;
3a29589a 315
3788aec7
LM
316 /* True if the stub reports support for target-side breakpoint
317 conditions. */
318 int cond_breakpoints;
319
d3ce09f5
SS
320 /* True if the stub reports support for target-side breakpoint
321 commands. */
322 int breakpoint_commands;
323
7a697b8d
SS
324 /* True if the stub reports support for fast tracepoints. */
325 int fast_tracepoints;
326
0fb4aa4b
PA
327 /* True if the stub reports support for static tracepoints. */
328 int static_tracepoints;
329
1e4d1764
YQ
330 /* True if the stub reports support for installing tracepoint while
331 tracing. */
332 int install_in_trace;
333
d5551862
SS
334 /* True if the stub can continue running a trace while GDB is
335 disconnected. */
336 int disconnected_tracing;
337
d248b706
KY
338 /* True if the stub reports support for enabling and disabling
339 tracepoints while a trace experiment is running. */
340 int enable_disable_tracepoints;
341
3065dfb6
SS
342 /* True if the stub can collect strings using tracenz bytecode. */
343 int string_tracing;
344
3a29589a
DJ
345 /* Nonzero if the user has pressed Ctrl-C, but the target hasn't
346 responded to that. */
347 int ctrlc_pending_p;
ea9c271d
DJ
348};
349
dc146f7c
VP
350/* Private data that we'll store in (struct thread_info)->private. */
351struct private_thread_info
352{
353 char *extra;
354 int core;
355};
356
357static void
358free_private_thread_info (struct private_thread_info *info)
359{
360 xfree (info->extra);
361 xfree (info);
362}
363
82f73884
PA
364/* Returns true if the multi-process extensions are in effect. */
365static int
366remote_multi_process_p (struct remote_state *rs)
367{
901f9912 368 return rs->multi_process_aware;
82f73884
PA
369}
370
ea9c271d
DJ
371/* This data could be associated with a target, but we do not always
372 have access to the current target when we need it, so for now it is
373 static. This will be fine for as long as only one target is in use
374 at a time. */
375static struct remote_state remote_state;
376
377static struct remote_state *
0b83947e 378get_remote_state_raw (void)
ea9c271d
DJ
379{
380 return &remote_state;
381}
382
383/* Description of the remote protocol for a given architecture. */
d01949b6 384
ad10f812
AC
385struct packet_reg
386{
387 long offset; /* Offset into G packet. */
388 long regnum; /* GDB's internal register number. */
389 LONGEST pnum; /* Remote protocol register number. */
b323314b 390 int in_g_packet; /* Always part of G packet. */
f5656ead 391 /* long size in bytes; == register_size (target_gdbarch (), regnum);
23860348 392 at present. */
f5656ead 393 /* char *name; == gdbarch_register_name (target_gdbarch (), regnum);
c9f4d572 394 at present. */
ad10f812
AC
395};
396
ea9c271d 397struct remote_arch_state
d01949b6 398{
ad10f812
AC
399 /* Description of the remote protocol registers. */
400 long sizeof_g_packet;
b323314b
AC
401
402 /* Description of the remote protocol registers indexed by REGNUM
f57d151a 403 (making an array gdbarch_num_regs in size). */
b323314b 404 struct packet_reg *regs;
ad10f812 405
d01949b6
AC
406 /* This is the size (in chars) of the first response to the ``g''
407 packet. It is used as a heuristic when determining the maximum
408 size of memory-read and memory-write packets. A target will
409 typically only reserve a buffer large enough to hold the ``g''
410 packet. The size does not include packet overhead (headers and
23860348 411 trailers). */
d01949b6
AC
412 long actual_register_packet_size;
413
414 /* This is the maximum size (in chars) of a non read/write packet.
23860348 415 It is also used as a cap on the size of read/write packets. */
d01949b6
AC
416 long remote_packet_size;
417};
418
35b1e5cc
SS
419long sizeof_pkt = 2000;
420
421/* Utility: generate error from an incoming stub packet. */
422static void
423trace_error (char *buf)
424{
425 if (*buf++ != 'E')
426 return; /* not an error msg */
427 switch (*buf)
428 {
429 case '1': /* malformed packet error */
430 if (*++buf == '0') /* general case: */
431 error (_("remote.c: error in outgoing packet."));
432 else
433 error (_("remote.c: error in outgoing packet at field #%ld."),
434 strtol (buf, NULL, 16));
35b1e5cc
SS
435 default:
436 error (_("Target returns error code '%s'."), buf);
437 }
438}
439
440/* Utility: wait for reply from stub, while accepting "O" packets. */
441static char *
442remote_get_noisy_reply (char **buf_p,
443 long *sizeof_buf)
444{
445 do /* Loop on reply from remote stub. */
446 {
447 char *buf;
a744cf53 448
0df8b418 449 QUIT; /* Allow user to bail out with ^C. */
35b1e5cc
SS
450 getpkt (buf_p, sizeof_buf, 0);
451 buf = *buf_p;
ad91cd99 452 if (buf[0] == 'E')
35b1e5cc 453 trace_error (buf);
dde08ee1
PA
454 else if (strncmp (buf, "qRelocInsn:", strlen ("qRelocInsn:")) == 0)
455 {
456 ULONGEST ul;
457 CORE_ADDR from, to, org_to;
458 char *p, *pp;
459 int adjusted_size = 0;
460 volatile struct gdb_exception ex;
461
462 p = buf + strlen ("qRelocInsn:");
463 pp = unpack_varlen_hex (p, &ul);
464 if (*pp != ';')
cb91c06a 465 error (_("invalid qRelocInsn packet: %s"), buf);
dde08ee1
PA
466 from = ul;
467
468 p = pp + 1;
a9cbf802 469 unpack_varlen_hex (p, &ul);
dde08ee1
PA
470 to = ul;
471
472 org_to = to;
473
474 TRY_CATCH (ex, RETURN_MASK_ALL)
475 {
f5656ead 476 gdbarch_relocate_instruction (target_gdbarch (), &to, from);
dde08ee1
PA
477 }
478 if (ex.reason >= 0)
479 {
480 adjusted_size = to - org_to;
481
bba74b36 482 xsnprintf (buf, *sizeof_buf, "qRelocInsn:%x", adjusted_size);
dde08ee1
PA
483 putpkt (buf);
484 }
485 else if (ex.reason < 0 && ex.error == MEMORY_ERROR)
486 {
487 /* Propagate memory errors silently back to the target.
488 The stub may have limited the range of addresses we
489 can write to, for example. */
490 putpkt ("E01");
491 }
492 else
493 {
494 /* Something unexpectedly bad happened. Be verbose so
495 we can tell what, and propagate the error back to the
496 stub, so it doesn't get stuck waiting for a
497 response. */
498 exception_fprintf (gdb_stderr, ex,
499 _("warning: relocating instruction: "));
500 putpkt ("E01");
501 }
502 }
ad91cd99 503 else if (buf[0] == 'O' && buf[1] != 'K')
35b1e5cc
SS
504 remote_console_output (buf + 1); /* 'O' message from stub */
505 else
0df8b418 506 return buf; /* Here's the actual reply. */
35b1e5cc
SS
507 }
508 while (1);
509}
3c3bea1c 510
d01949b6
AC
511/* Handle for retreving the remote protocol data from gdbarch. */
512static struct gdbarch_data *remote_gdbarch_data_handle;
513
ea9c271d
DJ
514static struct remote_arch_state *
515get_remote_arch_state (void)
d01949b6 516{
f5656ead 517 return gdbarch_data (target_gdbarch (), remote_gdbarch_data_handle);
d01949b6
AC
518}
519
0b83947e
DJ
520/* Fetch the global remote target state. */
521
522static struct remote_state *
523get_remote_state (void)
524{
525 /* Make sure that the remote architecture state has been
526 initialized, because doing so might reallocate rs->buf. Any
527 function which calls getpkt also needs to be mindful of changes
528 to rs->buf, but this call limits the number of places which run
529 into trouble. */
530 get_remote_arch_state ();
531
532 return get_remote_state_raw ();
533}
534
74ca34ce
DJ
535static int
536compare_pnums (const void *lhs_, const void *rhs_)
537{
538 const struct packet_reg * const *lhs = lhs_;
539 const struct packet_reg * const *rhs = rhs_;
540
541 if ((*lhs)->pnum < (*rhs)->pnum)
542 return -1;
543 else if ((*lhs)->pnum == (*rhs)->pnum)
544 return 0;
545 else
546 return 1;
547}
548
c21236dc
PA
549static int
550map_regcache_remote_table (struct gdbarch *gdbarch, struct packet_reg *regs)
d01949b6 551{
74ca34ce 552 int regnum, num_remote_regs, offset;
74ca34ce 553 struct packet_reg **remote_regs;
ea9c271d 554
4a22f64d 555 for (regnum = 0; regnum < gdbarch_num_regs (gdbarch); regnum++)
ad10f812 556 {
c21236dc 557 struct packet_reg *r = &regs[regnum];
baef701f 558
4a22f64d 559 if (register_size (gdbarch, regnum) == 0)
baef701f
DJ
560 /* Do not try to fetch zero-sized (placeholder) registers. */
561 r->pnum = -1;
562 else
563 r->pnum = gdbarch_remote_register_number (gdbarch, regnum);
564
b323314b 565 r->regnum = regnum;
74ca34ce
DJ
566 }
567
568 /* Define the g/G packet format as the contents of each register
569 with a remote protocol number, in order of ascending protocol
570 number. */
571
4a22f64d 572 remote_regs = alloca (gdbarch_num_regs (gdbarch)
c21236dc 573 * sizeof (struct packet_reg *));
f57d151a 574 for (num_remote_regs = 0, regnum = 0;
4a22f64d 575 regnum < gdbarch_num_regs (gdbarch);
f57d151a 576 regnum++)
c21236dc
PA
577 if (regs[regnum].pnum != -1)
578 remote_regs[num_remote_regs++] = &regs[regnum];
7d58c67d 579
74ca34ce
DJ
580 qsort (remote_regs, num_remote_regs, sizeof (struct packet_reg *),
581 compare_pnums);
582
583 for (regnum = 0, offset = 0; regnum < num_remote_regs; regnum++)
584 {
585 remote_regs[regnum]->in_g_packet = 1;
586 remote_regs[regnum]->offset = offset;
4a22f64d 587 offset += register_size (gdbarch, remote_regs[regnum]->regnum);
ad10f812
AC
588 }
589
c21236dc
PA
590 return offset;
591}
592
593/* Given the architecture described by GDBARCH, return the remote
594 protocol register's number and the register's offset in the g/G
595 packets of GDB register REGNUM, in PNUM and POFFSET respectively.
596 If the target does not have a mapping for REGNUM, return false,
597 otherwise, return true. */
598
599int
600remote_register_number_and_offset (struct gdbarch *gdbarch, int regnum,
601 int *pnum, int *poffset)
602{
603 int sizeof_g_packet;
604 struct packet_reg *regs;
605 struct cleanup *old_chain;
606
607 gdb_assert (regnum < gdbarch_num_regs (gdbarch));
608
609 regs = xcalloc (gdbarch_num_regs (gdbarch), sizeof (struct packet_reg));
610 old_chain = make_cleanup (xfree, regs);
611
612 sizeof_g_packet = map_regcache_remote_table (gdbarch, regs);
613
614 *pnum = regs[regnum].pnum;
615 *poffset = regs[regnum].offset;
616
617 do_cleanups (old_chain);
618
619 return *pnum != -1;
620}
621
622static void *
623init_remote_state (struct gdbarch *gdbarch)
624{
625 struct remote_state *rs = get_remote_state_raw ();
626 struct remote_arch_state *rsa;
627
628 rsa = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct remote_arch_state);
629
630 /* Use the architecture to build a regnum<->pnum table, which will be
631 1:1 unless a feature set specifies otherwise. */
632 rsa->regs = GDBARCH_OBSTACK_CALLOC (gdbarch,
633 gdbarch_num_regs (gdbarch),
634 struct packet_reg);
635
74ca34ce
DJ
636 /* Record the maximum possible size of the g packet - it may turn out
637 to be smaller. */
c21236dc 638 rsa->sizeof_g_packet = map_regcache_remote_table (gdbarch, rsa->regs);
74ca34ce 639
0df8b418 640 /* Default maximum number of characters in a packet body. Many
d01949b6
AC
641 remote stubs have a hardwired buffer size of 400 bytes
642 (c.f. BUFMAX in m68k-stub.c and i386-stub.c). BUFMAX-1 is used
643 as the maximum packet-size to ensure that the packet and an extra
644 NUL character can always fit in the buffer. This stops GDB
645 trashing stubs that try to squeeze an extra NUL into what is
ea9c271d
DJ
646 already a full buffer (As of 1999-12-04 that was most stubs). */
647 rsa->remote_packet_size = 400 - 1;
d01949b6 648
ea9c271d
DJ
649 /* This one is filled in when a ``g'' packet is received. */
650 rsa->actual_register_packet_size = 0;
651
652 /* Should rsa->sizeof_g_packet needs more space than the
0df8b418
MS
653 default, adjust the size accordingly. Remember that each byte is
654 encoded as two characters. 32 is the overhead for the packet
655 header / footer. NOTE: cagney/1999-10-26: I suspect that 8
d01949b6 656 (``$NN:G...#NN'') is a better guess, the below has been padded a
23860348 657 little. */
ea9c271d
DJ
658 if (rsa->sizeof_g_packet > ((rsa->remote_packet_size - 32) / 2))
659 rsa->remote_packet_size = (rsa->sizeof_g_packet * 2 + 32);
802188a7 660
ea9c271d
DJ
661 /* Make sure that the packet buffer is plenty big enough for
662 this architecture. */
663 if (rs->buf_size < rsa->remote_packet_size)
664 {
665 rs->buf_size = 2 * rsa->remote_packet_size;
7fca722e 666 rs->buf = xrealloc (rs->buf, rs->buf_size);
ea9c271d 667 }
6d820c5c 668
ea9c271d
DJ
669 return rsa;
670}
671
672/* Return the current allowed size of a remote packet. This is
673 inferred from the current architecture, and should be used to
674 limit the length of outgoing packets. */
675static long
676get_remote_packet_size (void)
677{
be2a5f71 678 struct remote_state *rs = get_remote_state ();
ea9c271d
DJ
679 struct remote_arch_state *rsa = get_remote_arch_state ();
680
be2a5f71
DJ
681 if (rs->explicit_packet_size)
682 return rs->explicit_packet_size;
683
ea9c271d 684 return rsa->remote_packet_size;
d01949b6
AC
685}
686
ad10f812 687static struct packet_reg *
ea9c271d 688packet_reg_from_regnum (struct remote_arch_state *rsa, long regnum)
ad10f812 689{
f5656ead 690 if (regnum < 0 && regnum >= gdbarch_num_regs (target_gdbarch ()))
b323314b
AC
691 return NULL;
692 else
ad10f812 693 {
ea9c271d 694 struct packet_reg *r = &rsa->regs[regnum];
a744cf53 695
b323314b
AC
696 gdb_assert (r->regnum == regnum);
697 return r;
ad10f812 698 }
ad10f812
AC
699}
700
701static struct packet_reg *
ea9c271d 702packet_reg_from_pnum (struct remote_arch_state *rsa, LONGEST pnum)
ad10f812 703{
b323314b 704 int i;
a744cf53 705
f5656ead 706 for (i = 0; i < gdbarch_num_regs (target_gdbarch ()); i++)
ad10f812 707 {
ea9c271d 708 struct packet_reg *r = &rsa->regs[i];
a744cf53 709
b323314b
AC
710 if (r->pnum == pnum)
711 return r;
ad10f812
AC
712 }
713 return NULL;
d01949b6
AC
714}
715
3c3bea1c
GS
716/* FIXME: graces/2002-08-08: These variables should eventually be
717 bound to an instance of the target object (as in gdbarch-tdep()),
718 when such a thing exists. */
719
720/* This is set to the data address of the access causing the target
721 to stop for a watchpoint. */
722static CORE_ADDR remote_watch_data_address;
723
94e08568 724/* This is non-zero if target stopped for a watchpoint. */
3c3bea1c
GS
725static int remote_stopped_by_watchpoint_p;
726
c906108c
SS
727static struct target_ops remote_ops;
728
729static struct target_ops extended_remote_ops;
730
6426a772
JM
731/* FIXME: cagney/1999-09-23: Even though getpkt was called with
732 ``forever'' still use the normal timeout mechanism. This is
733 currently used by the ASYNC code to guarentee that target reads
734 during the initial connect always time-out. Once getpkt has been
735 modified to return a timeout indication and, in turn
736 remote_wait()/wait_for_inferior() have gained a timeout parameter
23860348 737 this can go away. */
6426a772
JM
738static int wait_forever_enabled_p = 1;
739
9a7071a8
JB
740/* Allow the user to specify what sequence to send to the remote
741 when he requests a program interruption: Although ^C is usually
742 what remote systems expect (this is the default, here), it is
743 sometimes preferable to send a break. On other systems such
744 as the Linux kernel, a break followed by g, which is Magic SysRq g
745 is required in order to interrupt the execution. */
746const char interrupt_sequence_control_c[] = "Ctrl-C";
747const char interrupt_sequence_break[] = "BREAK";
748const char interrupt_sequence_break_g[] = "BREAK-g";
40478521 749static const char *const interrupt_sequence_modes[] =
9a7071a8
JB
750 {
751 interrupt_sequence_control_c,
752 interrupt_sequence_break,
753 interrupt_sequence_break_g,
754 NULL
755 };
756static const char *interrupt_sequence_mode = interrupt_sequence_control_c;
757
758static void
759show_interrupt_sequence (struct ui_file *file, int from_tty,
760 struct cmd_list_element *c,
761 const char *value)
762{
763 if (interrupt_sequence_mode == interrupt_sequence_control_c)
764 fprintf_filtered (file,
765 _("Send the ASCII ETX character (Ctrl-c) "
766 "to the remote target to interrupt the "
767 "execution of the program.\n"));
768 else if (interrupt_sequence_mode == interrupt_sequence_break)
769 fprintf_filtered (file,
770 _("send a break signal to the remote target "
771 "to interrupt the execution of the program.\n"));
772 else if (interrupt_sequence_mode == interrupt_sequence_break_g)
773 fprintf_filtered (file,
774 _("Send a break signal and 'g' a.k.a. Magic SysRq g to "
775 "the remote target to interrupt the execution "
776 "of Linux kernel.\n"));
777 else
778 internal_error (__FILE__, __LINE__,
779 _("Invalid value for interrupt_sequence_mode: %s."),
780 interrupt_sequence_mode);
781}
6426a772 782
9a7071a8
JB
783/* This boolean variable specifies whether interrupt_sequence is sent
784 to the remote target when gdb connects to it.
785 This is mostly needed when you debug the Linux kernel: The Linux kernel
786 expects BREAK g which is Magic SysRq g for connecting gdb. */
787static int interrupt_on_connect = 0;
c906108c 788
9a7071a8
JB
789/* This variable is used to implement the "set/show remotebreak" commands.
790 Since these commands are now deprecated in favor of "set/show remote
791 interrupt-sequence", it no longer has any effect on the code. */
c906108c
SS
792static int remote_break;
793
9a7071a8
JB
794static void
795set_remotebreak (char *args, int from_tty, struct cmd_list_element *c)
796{
797 if (remote_break)
798 interrupt_sequence_mode = interrupt_sequence_break;
799 else
800 interrupt_sequence_mode = interrupt_sequence_control_c;
801}
802
803static void
804show_remotebreak (struct ui_file *file, int from_tty,
805 struct cmd_list_element *c,
806 const char *value)
807{
808}
809
c906108c
SS
810/* Descriptor for I/O to remote machine. Initialize it to NULL so that
811 remote_open knows that we don't have a file open when the program
812 starts. */
819cc324 813static struct serial *remote_desc = NULL;
c906108c 814
c906108c
SS
815/* This variable sets the number of bits in an address that are to be
816 sent in a memory ("M" or "m") packet. Normally, after stripping
0df8b418 817 leading zeros, the entire address would be sent. This variable
c906108c
SS
818 restricts the address to REMOTE_ADDRESS_SIZE bits. HISTORY: The
819 initial implementation of remote.c restricted the address sent in
820 memory packets to ``host::sizeof long'' bytes - (typically 32
821 bits). Consequently, for 64 bit targets, the upper 32 bits of an
822 address was never sent. Since fixing this bug may cause a break in
823 some remote targets this variable is principly provided to
23860348 824 facilitate backward compatibility. */
c906108c 825
883b9c6c 826static unsigned int remote_address_size;
c906108c 827
75c99385
PA
828/* Temporary to track who currently owns the terminal. See
829 remote_terminal_* for more details. */
6426a772
JM
830
831static int remote_async_terminal_ours_p;
832
2d717e4f
DJ
833/* The executable file to use for "run" on the remote side. */
834
835static char *remote_exec_file = "";
836
11cf8741 837\f
11cf8741 838/* User configurable variables for the number of characters in a
ea9c271d
DJ
839 memory read/write packet. MIN (rsa->remote_packet_size,
840 rsa->sizeof_g_packet) is the default. Some targets need smaller
24b06219 841 values (fifo overruns, et.al.) and some users need larger values
ad10f812
AC
842 (speed up transfers). The variables ``preferred_*'' (the user
843 request), ``current_*'' (what was actually set) and ``forced_*''
23860348 844 (Positive - a soft limit, negative - a hard limit). */
11cf8741
JM
845
846struct memory_packet_config
847{
848 char *name;
849 long size;
850 int fixed_p;
851};
852
853/* Compute the current size of a read/write packet. Since this makes
854 use of ``actual_register_packet_size'' the computation is dynamic. */
855
856static long
857get_memory_packet_size (struct memory_packet_config *config)
858{
d01949b6 859 struct remote_state *rs = get_remote_state ();
ea9c271d
DJ
860 struct remote_arch_state *rsa = get_remote_arch_state ();
861
11cf8741
JM
862 /* NOTE: The somewhat arbitrary 16k comes from the knowledge (folk
863 law?) that some hosts don't cope very well with large alloca()
864 calls. Eventually the alloca() code will be replaced by calls to
865 xmalloc() and make_cleanups() allowing this restriction to either
23860348 866 be lifted or removed. */
11cf8741
JM
867#ifndef MAX_REMOTE_PACKET_SIZE
868#define MAX_REMOTE_PACKET_SIZE 16384
869#endif
3de11b2e 870 /* NOTE: 20 ensures we can write at least one byte. */
11cf8741 871#ifndef MIN_REMOTE_PACKET_SIZE
3de11b2e 872#define MIN_REMOTE_PACKET_SIZE 20
11cf8741
JM
873#endif
874 long what_they_get;
875 if (config->fixed_p)
876 {
877 if (config->size <= 0)
878 what_they_get = MAX_REMOTE_PACKET_SIZE;
879 else
880 what_they_get = config->size;
881 }
882 else
883 {
ea9c271d 884 what_they_get = get_remote_packet_size ();
23860348 885 /* Limit the packet to the size specified by the user. */
11cf8741
JM
886 if (config->size > 0
887 && what_they_get > config->size)
888 what_they_get = config->size;
be2a5f71
DJ
889
890 /* Limit it to the size of the targets ``g'' response unless we have
891 permission from the stub to use a larger packet size. */
892 if (rs->explicit_packet_size == 0
893 && rsa->actual_register_packet_size > 0
894 && what_they_get > rsa->actual_register_packet_size)
895 what_they_get = rsa->actual_register_packet_size;
11cf8741
JM
896 }
897 if (what_they_get > MAX_REMOTE_PACKET_SIZE)
898 what_they_get = MAX_REMOTE_PACKET_SIZE;
899 if (what_they_get < MIN_REMOTE_PACKET_SIZE)
900 what_they_get = MIN_REMOTE_PACKET_SIZE;
6d820c5c
DJ
901
902 /* Make sure there is room in the global buffer for this packet
903 (including its trailing NUL byte). */
904 if (rs->buf_size < what_they_get + 1)
905 {
906 rs->buf_size = 2 * what_they_get;
907 rs->buf = xrealloc (rs->buf, 2 * what_they_get);
908 }
909
11cf8741
JM
910 return what_they_get;
911}
912
0df8b418 913/* Update the size of a read/write packet. If they user wants
23860348 914 something really big then do a sanity check. */
11cf8741
JM
915
916static void
917set_memory_packet_size (char *args, struct memory_packet_config *config)
918{
919 int fixed_p = config->fixed_p;
920 long size = config->size;
a744cf53 921
11cf8741 922 if (args == NULL)
8a3fe4f8 923 error (_("Argument required (integer, `fixed' or `limited')."));
11cf8741
JM
924 else if (strcmp (args, "hard") == 0
925 || strcmp (args, "fixed") == 0)
926 fixed_p = 1;
927 else if (strcmp (args, "soft") == 0
928 || strcmp (args, "limit") == 0)
929 fixed_p = 0;
930 else
931 {
932 char *end;
a744cf53 933
11cf8741
JM
934 size = strtoul (args, &end, 0);
935 if (args == end)
8a3fe4f8 936 error (_("Invalid %s (bad syntax)."), config->name);
11cf8741
JM
937#if 0
938 /* Instead of explicitly capping the size of a packet to
939 MAX_REMOTE_PACKET_SIZE or dissallowing it, the user is
940 instead allowed to set the size to something arbitrarily
23860348 941 large. */
11cf8741 942 if (size > MAX_REMOTE_PACKET_SIZE)
8a3fe4f8 943 error (_("Invalid %s (too large)."), config->name);
11cf8741
JM
944#endif
945 }
23860348 946 /* Extra checks? */
11cf8741
JM
947 if (fixed_p && !config->fixed_p)
948 {
e2e0b3e5
AC
949 if (! query (_("The target may not be able to correctly handle a %s\n"
950 "of %ld bytes. Change the packet size? "),
11cf8741 951 config->name, size))
8a3fe4f8 952 error (_("Packet size not changed."));
11cf8741 953 }
23860348 954 /* Update the config. */
11cf8741
JM
955 config->fixed_p = fixed_p;
956 config->size = size;
957}
958
959static void
960show_memory_packet_size (struct memory_packet_config *config)
961{
a3f17187 962 printf_filtered (_("The %s is %ld. "), config->name, config->size);
11cf8741 963 if (config->fixed_p)
a3f17187 964 printf_filtered (_("Packets are fixed at %ld bytes.\n"),
11cf8741
JM
965 get_memory_packet_size (config));
966 else
a3f17187 967 printf_filtered (_("Packets are limited to %ld bytes.\n"),
11cf8741
JM
968 get_memory_packet_size (config));
969}
970
971static struct memory_packet_config memory_write_packet_config =
972{
973 "memory-write-packet-size",
974};
975
976static void
977set_memory_write_packet_size (char *args, int from_tty)
978{
979 set_memory_packet_size (args, &memory_write_packet_config);
980}
981
982static void
983show_memory_write_packet_size (char *args, int from_tty)
984{
985 show_memory_packet_size (&memory_write_packet_config);
986}
987
988static long
989get_memory_write_packet_size (void)
990{
991 return get_memory_packet_size (&memory_write_packet_config);
992}
993
994static struct memory_packet_config memory_read_packet_config =
995{
996 "memory-read-packet-size",
997};
998
999static void
1000set_memory_read_packet_size (char *args, int from_tty)
1001{
1002 set_memory_packet_size (args, &memory_read_packet_config);
1003}
1004
1005static void
1006show_memory_read_packet_size (char *args, int from_tty)
1007{
1008 show_memory_packet_size (&memory_read_packet_config);
1009}
1010
1011static long
1012get_memory_read_packet_size (void)
1013{
1014 long size = get_memory_packet_size (&memory_read_packet_config);
a744cf53 1015
11cf8741
JM
1016 /* FIXME: cagney/1999-11-07: Functions like getpkt() need to get an
1017 extra buffer size argument before the memory read size can be
ea9c271d
DJ
1018 increased beyond this. */
1019 if (size > get_remote_packet_size ())
1020 size = get_remote_packet_size ();
11cf8741
JM
1021 return size;
1022}
1023
11cf8741 1024\f
5a2468f5 1025/* Generic configuration support for packets the stub optionally
0df8b418 1026 supports. Allows the user to specify the use of the packet as well
23860348 1027 as allowing GDB to auto-detect support in the remote stub. */
5a2468f5
JM
1028
1029enum packet_support
1030 {
1031 PACKET_SUPPORT_UNKNOWN = 0,
1032 PACKET_ENABLE,
1033 PACKET_DISABLE
1034 };
1035
5a2468f5
JM
1036struct packet_config
1037 {
bb572ddd
DJ
1038 const char *name;
1039 const char *title;
7f19b9a2 1040 enum auto_boolean detect;
5a2468f5
JM
1041 enum packet_support support;
1042 };
1043
d471ea57 1044/* Analyze a packet's return value and update the packet config
23860348 1045 accordingly. */
d471ea57
AC
1046
1047enum packet_result
1048{
1049 PACKET_ERROR,
1050 PACKET_OK,
1051 PACKET_UNKNOWN
1052};
1053
5a2468f5 1054static void
d471ea57 1055update_packet_config (struct packet_config *config)
5a2468f5 1056{
d471ea57
AC
1057 switch (config->detect)
1058 {
7f19b9a2 1059 case AUTO_BOOLEAN_TRUE:
d471ea57
AC
1060 config->support = PACKET_ENABLE;
1061 break;
7f19b9a2 1062 case AUTO_BOOLEAN_FALSE:
d471ea57
AC
1063 config->support = PACKET_DISABLE;
1064 break;
7f19b9a2 1065 case AUTO_BOOLEAN_AUTO:
d471ea57
AC
1066 config->support = PACKET_SUPPORT_UNKNOWN;
1067 break;
1068 }
5a2468f5
JM
1069}
1070
1071static void
fba45db2 1072show_packet_config_cmd (struct packet_config *config)
5a2468f5
JM
1073{
1074 char *support = "internal-error";
a744cf53 1075
5a2468f5
JM
1076 switch (config->support)
1077 {
1078 case PACKET_ENABLE:
1079 support = "enabled";
1080 break;
1081 case PACKET_DISABLE:
1082 support = "disabled";
1083 break;
1084 case PACKET_SUPPORT_UNKNOWN:
1085 support = "unknown";
1086 break;
1087 }
1088 switch (config->detect)
1089 {
7f19b9a2 1090 case AUTO_BOOLEAN_AUTO:
3e43a32a
MS
1091 printf_filtered (_("Support for the `%s' packet "
1092 "is auto-detected, currently %s.\n"),
37a105a1 1093 config->name, support);
5a2468f5 1094 break;
7f19b9a2
AC
1095 case AUTO_BOOLEAN_TRUE:
1096 case AUTO_BOOLEAN_FALSE:
37a105a1
DJ
1097 printf_filtered (_("Support for the `%s' packet is currently %s.\n"),
1098 config->name, support);
8e248173 1099 break;
5a2468f5
JM
1100 }
1101}
1102
1103static void
bb572ddd
DJ
1104add_packet_config_cmd (struct packet_config *config, const char *name,
1105 const char *title, int legacy)
d471ea57 1106{
5a2468f5
JM
1107 char *set_doc;
1108 char *show_doc;
d471ea57 1109 char *cmd_name;
3ed07be4 1110
5a2468f5
JM
1111 config->name = name;
1112 config->title = title;
7f19b9a2 1113 config->detect = AUTO_BOOLEAN_AUTO;
8e248173 1114 config->support = PACKET_SUPPORT_UNKNOWN;
b435e160
AC
1115 set_doc = xstrprintf ("Set use of remote protocol `%s' (%s) packet",
1116 name, title);
3e43a32a
MS
1117 show_doc = xstrprintf ("Show current use of remote "
1118 "protocol `%s' (%s) packet",
b435e160 1119 name, title);
d471ea57 1120 /* set/show TITLE-packet {auto,on,off} */
b435e160 1121 cmd_name = xstrprintf ("%s-packet", title);
e9e68a56 1122 add_setshow_auto_boolean_cmd (cmd_name, class_obscure,
3e43a32a
MS
1123 &config->detect, set_doc,
1124 show_doc, NULL, /* help_doc */
bb572ddd
DJ
1125 set_remote_protocol_packet_cmd,
1126 show_remote_protocol_packet_cmd,
1127 &remote_set_cmdlist, &remote_show_cmdlist);
1eefb858
TT
1128 /* The command code copies the documentation strings. */
1129 xfree (set_doc);
1130 xfree (show_doc);
23860348 1131 /* set/show remote NAME-packet {auto,on,off} -- legacy. */
d471ea57
AC
1132 if (legacy)
1133 {
1134 char *legacy_name;
a744cf53 1135
b435e160 1136 legacy_name = xstrprintf ("%s-packet", name);
d471ea57 1137 add_alias_cmd (legacy_name, cmd_name, class_obscure, 0,
bb572ddd 1138 &remote_set_cmdlist);
d471ea57 1139 add_alias_cmd (legacy_name, cmd_name, class_obscure, 0,
bb572ddd 1140 &remote_show_cmdlist);
d471ea57 1141 }
5a2468f5
JM
1142}
1143
d471ea57 1144static enum packet_result
a76d924d 1145packet_check_result (const char *buf)
5a2468f5 1146{
d471ea57 1147 if (buf[0] != '\0')
5a2468f5 1148 {
d471ea57 1149 /* The stub recognized the packet request. Check that the
23860348 1150 operation succeeded. */
a76d924d
DJ
1151 if (buf[0] == 'E'
1152 && isxdigit (buf[1]) && isxdigit (buf[2])
1153 && buf[3] == '\0')
1154 /* "Enn" - definitly an error. */
1155 return PACKET_ERROR;
1156
1157 /* Always treat "E." as an error. This will be used for
1158 more verbose error messages, such as E.memtypes. */
1159 if (buf[0] == 'E' && buf[1] == '.')
1160 return PACKET_ERROR;
1161
1162 /* The packet may or may not be OK. Just assume it is. */
1163 return PACKET_OK;
1164 }
1165 else
1166 /* The stub does not support the packet. */
1167 return PACKET_UNKNOWN;
1168}
1169
1170static enum packet_result
1171packet_ok (const char *buf, struct packet_config *config)
1172{
1173 enum packet_result result;
1174
1175 result = packet_check_result (buf);
1176 switch (result)
1177 {
1178 case PACKET_OK:
1179 case PACKET_ERROR:
1180 /* The stub recognized the packet request. */
d471ea57
AC
1181 switch (config->support)
1182 {
1183 case PACKET_SUPPORT_UNKNOWN:
1184 if (remote_debug)
1185 fprintf_unfiltered (gdb_stdlog,
1186 "Packet %s (%s) is supported\n",
1187 config->name, config->title);
1188 config->support = PACKET_ENABLE;
1189 break;
1190 case PACKET_DISABLE:
8e65ff28 1191 internal_error (__FILE__, __LINE__,
e2e0b3e5 1192 _("packet_ok: attempt to use a disabled packet"));
d471ea57
AC
1193 break;
1194 case PACKET_ENABLE:
1195 break;
1196 }
a76d924d
DJ
1197 break;
1198 case PACKET_UNKNOWN:
23860348 1199 /* The stub does not support the packet. */
d471ea57
AC
1200 switch (config->support)
1201 {
1202 case PACKET_ENABLE:
7f19b9a2 1203 if (config->detect == AUTO_BOOLEAN_AUTO)
d471ea57 1204 /* If the stub previously indicated that the packet was
23860348 1205 supported then there is a protocol error.. */
8a3fe4f8 1206 error (_("Protocol error: %s (%s) conflicting enabled responses."),
d471ea57
AC
1207 config->name, config->title);
1208 else
23860348 1209 /* The user set it wrong. */
8a3fe4f8 1210 error (_("Enabled packet %s (%s) not recognized by stub"),
d471ea57
AC
1211 config->name, config->title);
1212 break;
1213 case PACKET_SUPPORT_UNKNOWN:
1214 if (remote_debug)
1215 fprintf_unfiltered (gdb_stdlog,
1216 "Packet %s (%s) is NOT supported\n",
1217 config->name, config->title);
1218 config->support = PACKET_DISABLE;
1219 break;
1220 case PACKET_DISABLE:
1221 break;
1222 }
a76d924d 1223 break;
5a2468f5 1224 }
a76d924d
DJ
1225
1226 return result;
5a2468f5
JM
1227}
1228
444abaca
DJ
1229enum {
1230 PACKET_vCont = 0,
1231 PACKET_X,
1232 PACKET_qSymbol,
1233 PACKET_P,
1234 PACKET_p,
1235 PACKET_Z0,
1236 PACKET_Z1,
1237 PACKET_Z2,
1238 PACKET_Z3,
1239 PACKET_Z4,
a6b151f1
DJ
1240 PACKET_vFile_open,
1241 PACKET_vFile_pread,
1242 PACKET_vFile_pwrite,
1243 PACKET_vFile_close,
1244 PACKET_vFile_unlink,
b9e7b9c3 1245 PACKET_vFile_readlink,
0876f84a 1246 PACKET_qXfer_auxv,
23181151 1247 PACKET_qXfer_features,
cfa9d6d9 1248 PACKET_qXfer_libraries,
2268b414 1249 PACKET_qXfer_libraries_svr4,
fd79ecee 1250 PACKET_qXfer_memory_map,
0e7f50da
UW
1251 PACKET_qXfer_spu_read,
1252 PACKET_qXfer_spu_write,
07e059b5 1253 PACKET_qXfer_osdata,
dc146f7c 1254 PACKET_qXfer_threads,
0fb4aa4b 1255 PACKET_qXfer_statictrace_read,
b3b9301e 1256 PACKET_qXfer_traceframe_info,
169081d0 1257 PACKET_qXfer_uib,
711e434b 1258 PACKET_qGetTIBAddr,
444abaca 1259 PACKET_qGetTLSAddr,
be2a5f71 1260 PACKET_qSupported,
bd3eecc3 1261 PACKET_qTStatus,
89be2091 1262 PACKET_QPassSignals,
9b224c5e 1263 PACKET_QProgramSignals,
08388c79 1264 PACKET_qSearch_memory,
2d717e4f
DJ
1265 PACKET_vAttach,
1266 PACKET_vRun,
a6f3e723 1267 PACKET_QStartNoAckMode,
82f73884 1268 PACKET_vKill,
4aa995e1
PA
1269 PACKET_qXfer_siginfo_read,
1270 PACKET_qXfer_siginfo_write,
0b16c5cf 1271 PACKET_qAttached,
782b2b07 1272 PACKET_ConditionalTracepoints,
3788aec7 1273 PACKET_ConditionalBreakpoints,
d3ce09f5 1274 PACKET_BreakpointCommands,
7a697b8d 1275 PACKET_FastTracepoints,
0fb4aa4b 1276 PACKET_StaticTracepoints,
1e4d1764 1277 PACKET_InstallInTrace,
40ab02ce
MS
1278 PACKET_bc,
1279 PACKET_bs,
409873ef 1280 PACKET_TracepointSource,
d914c394 1281 PACKET_QAllow,
78d85199 1282 PACKET_qXfer_fdpic,
03583c20 1283 PACKET_QDisableRandomization,
d1feda86 1284 PACKET_QAgent,
f6f899bf 1285 PACKET_QTBuffer_size,
9accd112
MM
1286 PACKET_Qbtrace_off,
1287 PACKET_Qbtrace_bts,
1288 PACKET_qXfer_btrace,
444abaca
DJ
1289 PACKET_MAX
1290};
506fb367 1291
444abaca 1292static struct packet_config remote_protocol_packets[PACKET_MAX];
dc8acb97
MS
1293
1294static void
444abaca
DJ
1295set_remote_protocol_packet_cmd (char *args, int from_tty,
1296 struct cmd_list_element *c)
dc8acb97 1297{
444abaca 1298 struct packet_config *packet;
dc8acb97 1299
444abaca
DJ
1300 for (packet = remote_protocol_packets;
1301 packet < &remote_protocol_packets[PACKET_MAX];
1302 packet++)
1303 {
1304 if (&packet->detect == c->var)
1305 {
1306 update_packet_config (packet);
1307 return;
1308 }
1309 }
9b20d036 1310 internal_error (__FILE__, __LINE__, _("Could not find config for %s"),
444abaca 1311 c->name);
dc8acb97
MS
1312}
1313
5a2468f5 1314static void
444abaca
DJ
1315show_remote_protocol_packet_cmd (struct ui_file *file, int from_tty,
1316 struct cmd_list_element *c,
1317 const char *value)
5a2468f5 1318{
444abaca 1319 struct packet_config *packet;
5a2468f5 1320
444abaca
DJ
1321 for (packet = remote_protocol_packets;
1322 packet < &remote_protocol_packets[PACKET_MAX];
1323 packet++)
1324 {
1325 if (&packet->detect == c->var)
1326 {
1327 show_packet_config_cmd (packet);
1328 return;
1329 }
1330 }
9b20d036 1331 internal_error (__FILE__, __LINE__, _("Could not find config for %s"),
444abaca 1332 c->name);
5a2468f5
JM
1333}
1334
d471ea57
AC
1335/* Should we try one of the 'Z' requests? */
1336
1337enum Z_packet_type
1338{
1339 Z_PACKET_SOFTWARE_BP,
1340 Z_PACKET_HARDWARE_BP,
1341 Z_PACKET_WRITE_WP,
1342 Z_PACKET_READ_WP,
1343 Z_PACKET_ACCESS_WP,
1344 NR_Z_PACKET_TYPES
1345};
96baa820 1346
d471ea57 1347/* For compatibility with older distributions. Provide a ``set remote
23860348 1348 Z-packet ...'' command that updates all the Z packet types. */
d471ea57 1349
7f19b9a2 1350static enum auto_boolean remote_Z_packet_detect;
96baa820
JM
1351
1352static void
fba45db2
KB
1353set_remote_protocol_Z_packet_cmd (char *args, int from_tty,
1354 struct cmd_list_element *c)
96baa820 1355{
d471ea57 1356 int i;
a744cf53 1357
d471ea57
AC
1358 for (i = 0; i < NR_Z_PACKET_TYPES; i++)
1359 {
444abaca
DJ
1360 remote_protocol_packets[PACKET_Z0 + i].detect = remote_Z_packet_detect;
1361 update_packet_config (&remote_protocol_packets[PACKET_Z0 + i]);
d471ea57 1362 }
96baa820
JM
1363}
1364
1365static void
08546159
AC
1366show_remote_protocol_Z_packet_cmd (struct ui_file *file, int from_tty,
1367 struct cmd_list_element *c,
1368 const char *value)
96baa820 1369{
d471ea57 1370 int i;
a744cf53 1371
d471ea57
AC
1372 for (i = 0; i < NR_Z_PACKET_TYPES; i++)
1373 {
444abaca 1374 show_packet_config_cmd (&remote_protocol_packets[PACKET_Z0 + i]);
d471ea57 1375 }
96baa820
JM
1376}
1377
9d1f7ab2
MS
1378/* Should we try the 'ThreadInfo' query packet?
1379
1380 This variable (NOT available to the user: auto-detect only!)
1381 determines whether GDB will use the new, simpler "ThreadInfo"
1382 query or the older, more complex syntax for thread queries.
802188a7 1383 This is an auto-detect variable (set to true at each connect,
9d1f7ab2
MS
1384 and set to false when the target fails to recognize it). */
1385
1386static int use_threadinfo_query;
1387static int use_threadextra_query;
1388
23860348 1389/* Tokens for use by the asynchronous signal handlers for SIGINT. */
d5d6fca5
DJ
1390static struct async_signal_handler *sigint_remote_twice_token;
1391static struct async_signal_handler *sigint_remote_token;
43ff13b4 1392
74531fed
PA
1393\f
1394/* Asynchronous signal handle registered as event loop source for
1395 when we have pending events ready to be passed to the core. */
1396
1397static struct async_event_handler *remote_async_inferior_event_token;
1398
c906108c
SS
1399\f
1400
79d7f229
PA
1401static ptid_t magic_null_ptid;
1402static ptid_t not_sent_ptid;
1403static ptid_t any_thread_ptid;
1404
1405/* These are the threads which we last sent to the remote system. The
1406 TID member will be -1 for all or -2 for not sent yet. */
1407
1408static ptid_t general_thread;
1409static ptid_t continue_thread;
c5aa993b 1410
a7c3d162 1411/* This is the traceframe which we last selected on the remote system.
e6e4e701
PA
1412 It will be -1 if no traceframe is selected. */
1413static int remote_traceframe_number = -1;
1414
0b16c5cf
PA
1415/* Find out if the stub attached to PID (and hence GDB should offer to
1416 detach instead of killing it when bailing out). */
1417
1418static int
1419remote_query_attached (int pid)
1420{
1421 struct remote_state *rs = get_remote_state ();
bba74b36 1422 size_t size = get_remote_packet_size ();
0b16c5cf
PA
1423
1424 if (remote_protocol_packets[PACKET_qAttached].support == PACKET_DISABLE)
1425 return 0;
1426
1427 if (remote_multi_process_p (rs))
bba74b36 1428 xsnprintf (rs->buf, size, "qAttached:%x", pid);
0b16c5cf 1429 else
bba74b36 1430 xsnprintf (rs->buf, size, "qAttached");
0b16c5cf
PA
1431
1432 putpkt (rs->buf);
1433 getpkt (&rs->buf, &rs->buf_size, 0);
1434
1435 switch (packet_ok (rs->buf,
1554e9be 1436 &remote_protocol_packets[PACKET_qAttached]))
0b16c5cf
PA
1437 {
1438 case PACKET_OK:
1439 if (strcmp (rs->buf, "1") == 0)
1440 return 1;
1441 break;
1442 case PACKET_ERROR:
1443 warning (_("Remote failure reply: %s"), rs->buf);
1444 break;
1445 case PACKET_UNKNOWN:
1446 break;
1447 }
1448
1449 return 0;
1450}
1451
49c62f2e
PA
1452/* Add PID to GDB's inferior table. If FAKE_PID_P is true, then PID
1453 has been invented by GDB, instead of reported by the target. Since
1454 we can be connected to a remote system before before knowing about
1455 any inferior, mark the target with execution when we find the first
1456 inferior. If ATTACHED is 1, then we had just attached to this
1457 inferior. If it is 0, then we just created this inferior. If it
1458 is -1, then try querying the remote stub to find out if it had
1459 attached to the inferior or not. */
1941c569
PA
1460
1461static struct inferior *
49c62f2e 1462remote_add_inferior (int fake_pid_p, int pid, int attached)
1941c569 1463{
1941c569
PA
1464 struct inferior *inf;
1465
0b16c5cf
PA
1466 /* Check whether this process we're learning about is to be
1467 considered attached, or if is to be considered to have been
1468 spawned by the stub. */
1469 if (attached == -1)
1470 attached = remote_query_attached (pid);
1471
f5656ead 1472 if (gdbarch_has_global_solist (target_gdbarch ()))
6c95b8df
PA
1473 {
1474 /* If the target shares code across all inferiors, then every
1475 attach adds a new inferior. */
1476 inf = add_inferior (pid);
1477
1478 /* ... and every inferior is bound to the same program space.
1479 However, each inferior may still have its own address
1480 space. */
1481 inf->aspace = maybe_new_address_space ();
1482 inf->pspace = current_program_space;
1483 }
1484 else
1485 {
1486 /* In the traditional debugging scenario, there's a 1-1 match
1487 between program/address spaces. We simply bind the inferior
1488 to the program space's address space. */
1489 inf = current_inferior ();
1490 inferior_appeared (inf, pid);
1491 }
1941c569 1492
0b16c5cf 1493 inf->attach_flag = attached;
49c62f2e 1494 inf->fake_pid_p = fake_pid_p;
0b16c5cf 1495
1941c569
PA
1496 return inf;
1497}
1498
1499/* Add thread PTID to GDB's thread list. Tag it as executing/running
1500 according to RUNNING. */
1501
c906108c 1502static void
1941c569 1503remote_add_thread (ptid_t ptid, int running)
c906108c 1504{
1941c569
PA
1505 add_thread (ptid);
1506
1507 set_executing (ptid, running);
1508 set_running (ptid, running);
1509}
1510
1511/* Come here when we learn about a thread id from the remote target.
1512 It may be the first time we hear about such thread, so take the
1513 opportunity to add it to GDB's thread list. In case this is the
1514 first time we're noticing its corresponding inferior, add it to
1515 GDB's inferior list as well. */
1516
1517static void
1518remote_notice_new_inferior (ptid_t currthread, int running)
1519{
c906108c
SS
1520 /* If this is a new thread, add it to GDB's thread list.
1521 If we leave it up to WFI to do this, bad things will happen. */
82f73884
PA
1522
1523 if (in_thread_list (currthread) && is_exited (currthread))
1524 {
1525 /* We're seeing an event on a thread id we knew had exited.
1526 This has to be a new thread reusing the old id. Add it. */
1941c569 1527 remote_add_thread (currthread, running);
82f73884
PA
1528 return;
1529 }
1530
79d7f229 1531 if (!in_thread_list (currthread))
c0a2216e 1532 {
1941c569 1533 struct inferior *inf = NULL;
bad34192 1534 int pid = ptid_get_pid (currthread);
1941c569 1535
bad34192
PA
1536 if (ptid_is_pid (inferior_ptid)
1537 && pid == ptid_get_pid (inferior_ptid))
c0a2216e
PA
1538 {
1539 /* inferior_ptid has no thread member yet. This can happen
1540 with the vAttach -> remote_wait,"TAAthread:" path if the
1541 stub doesn't support qC. This is the first stop reported
1542 after an attach, so this is the main thread. Update the
1543 ptid in the thread list. */
bad34192
PA
1544 if (in_thread_list (pid_to_ptid (pid)))
1545 thread_change_ptid (inferior_ptid, currthread);
1546 else
1547 {
1548 remote_add_thread (currthread, running);
1549 inferior_ptid = currthread;
1550 }
dc146f7c 1551 return;
c0a2216e 1552 }
82f73884
PA
1553
1554 if (ptid_equal (magic_null_ptid, inferior_ptid))
c0a2216e
PA
1555 {
1556 /* inferior_ptid is not set yet. This can happen with the
1557 vRun -> remote_wait,"TAAthread:" path if the stub
1558 doesn't support qC. This is the first stop reported
1559 after an attach, so this is the main thread. Update the
1560 ptid in the thread list. */
dc146f7c 1561 thread_change_ptid (inferior_ptid, currthread);
82f73884 1562 return;
c0a2216e 1563 }
82f73884 1564
29c87f7f
PA
1565 /* When connecting to a target remote, or to a target
1566 extended-remote which already was debugging an inferior, we
1567 may not know about it yet. Add it before adding its child
1568 thread, so notifications are emitted in a sensible order. */
1569 if (!in_inferior_list (ptid_get_pid (currthread)))
49c62f2e
PA
1570 {
1571 struct remote_state *rs = get_remote_state ();
1572 int fake_pid_p = !remote_multi_process_p (rs);
1573
1574 inf = remote_add_inferior (fake_pid_p,
1575 ptid_get_pid (currthread), -1);
1576 }
29c87f7f 1577
82f73884 1578 /* This is really a new thread. Add it. */
1941c569
PA
1579 remote_add_thread (currthread, running);
1580
1581 /* If we found a new inferior, let the common code do whatever
1582 it needs to with it (e.g., read shared libraries, insert
1583 breakpoints). */
1584 if (inf != NULL)
1585 notice_new_inferior (currthread, running, 0);
c0a2216e 1586 }
c906108c
SS
1587}
1588
dc146f7c
VP
1589/* Return the private thread data, creating it if necessary. */
1590
70221824 1591static struct private_thread_info *
dc146f7c
VP
1592demand_private_info (ptid_t ptid)
1593{
1594 struct thread_info *info = find_thread_ptid (ptid);
1595
1596 gdb_assert (info);
1597
1598 if (!info->private)
1599 {
1600 info->private = xmalloc (sizeof (*(info->private)));
1601 info->private_dtor = free_private_thread_info;
1602 info->private->core = -1;
1603 info->private->extra = 0;
1604 }
1605
1606 return info->private;
1607}
1608
74531fed
PA
1609/* Call this function as a result of
1610 1) A halt indication (T packet) containing a thread id
1611 2) A direct query of currthread
0df8b418 1612 3) Successful execution of set thread */
74531fed
PA
1613
1614static void
1615record_currthread (ptid_t currthread)
1616{
1617 general_thread = currthread;
74531fed
PA
1618}
1619
89be2091
DJ
1620static char *last_pass_packet;
1621
1622/* If 'QPassSignals' is supported, tell the remote stub what signals
1623 it can simply pass through to the inferior without reporting. */
1624
1625static void
2455069d 1626remote_pass_signals (int numsigs, unsigned char *pass_signals)
89be2091
DJ
1627{
1628 if (remote_protocol_packets[PACKET_QPassSignals].support != PACKET_DISABLE)
1629 {
1630 char *pass_packet, *p;
89be2091
DJ
1631 int count = 0, i;
1632
1633 gdb_assert (numsigs < 256);
1634 for (i = 0; i < numsigs; i++)
1635 {
2455069d 1636 if (pass_signals[i])
89be2091
DJ
1637 count++;
1638 }
1639 pass_packet = xmalloc (count * 3 + strlen ("QPassSignals:") + 1);
1640 strcpy (pass_packet, "QPassSignals:");
1641 p = pass_packet + strlen (pass_packet);
1642 for (i = 0; i < numsigs; i++)
1643 {
2455069d 1644 if (pass_signals[i])
89be2091
DJ
1645 {
1646 if (i >= 16)
1647 *p++ = tohex (i >> 4);
1648 *p++ = tohex (i & 15);
1649 if (count)
1650 *p++ = ';';
1651 else
1652 break;
1653 count--;
1654 }
1655 }
1656 *p = 0;
1657 if (!last_pass_packet || strcmp (last_pass_packet, pass_packet))
1658 {
1659 struct remote_state *rs = get_remote_state ();
1660 char *buf = rs->buf;
1661
1662 putpkt (pass_packet);
1663 getpkt (&rs->buf, &rs->buf_size, 0);
1664 packet_ok (buf, &remote_protocol_packets[PACKET_QPassSignals]);
1665 if (last_pass_packet)
1666 xfree (last_pass_packet);
1667 last_pass_packet = pass_packet;
1668 }
1669 else
1670 xfree (pass_packet);
1671 }
1672}
1673
9b224c5e
PA
1674/* The last QProgramSignals packet sent to the target. We bypass
1675 sending a new program signals list down to the target if the new
1676 packet is exactly the same as the last we sent. IOW, we only let
1677 the target know about program signals list changes. */
1678
1679static char *last_program_signals_packet;
1680
1681/* If 'QProgramSignals' is supported, tell the remote stub what
1682 signals it should pass through to the inferior when detaching. */
1683
1684static void
1685remote_program_signals (int numsigs, unsigned char *signals)
1686{
1687 if (remote_protocol_packets[PACKET_QProgramSignals].support != PACKET_DISABLE)
1688 {
1689 char *packet, *p;
1690 int count = 0, i;
1691
1692 gdb_assert (numsigs < 256);
1693 for (i = 0; i < numsigs; i++)
1694 {
1695 if (signals[i])
1696 count++;
1697 }
1698 packet = xmalloc (count * 3 + strlen ("QProgramSignals:") + 1);
1699 strcpy (packet, "QProgramSignals:");
1700 p = packet + strlen (packet);
1701 for (i = 0; i < numsigs; i++)
1702 {
1703 if (signal_pass_state (i))
1704 {
1705 if (i >= 16)
1706 *p++ = tohex (i >> 4);
1707 *p++ = tohex (i & 15);
1708 if (count)
1709 *p++ = ';';
1710 else
1711 break;
1712 count--;
1713 }
1714 }
1715 *p = 0;
1716 if (!last_program_signals_packet
1717 || strcmp (last_program_signals_packet, packet) != 0)
1718 {
1719 struct remote_state *rs = get_remote_state ();
1720 char *buf = rs->buf;
1721
1722 putpkt (packet);
1723 getpkt (&rs->buf, &rs->buf_size, 0);
1724 packet_ok (buf, &remote_protocol_packets[PACKET_QProgramSignals]);
1725 xfree (last_program_signals_packet);
1726 last_program_signals_packet = packet;
1727 }
1728 else
1729 xfree (packet);
1730 }
1731}
1732
79d7f229
PA
1733/* If PTID is MAGIC_NULL_PTID, don't set any thread. If PTID is
1734 MINUS_ONE_PTID, set the thread to -1, so the stub returns the
1735 thread. If GEN is set, set the general thread, if not, then set
1736 the step/continue thread. */
c906108c 1737static void
79d7f229 1738set_thread (struct ptid ptid, int gen)
c906108c 1739{
d01949b6 1740 struct remote_state *rs = get_remote_state ();
79d7f229 1741 ptid_t state = gen ? general_thread : continue_thread;
6d820c5c 1742 char *buf = rs->buf;
79d7f229 1743 char *endbuf = rs->buf + get_remote_packet_size ();
c906108c 1744
79d7f229 1745 if (ptid_equal (state, ptid))
c906108c
SS
1746 return;
1747
79d7f229
PA
1748 *buf++ = 'H';
1749 *buf++ = gen ? 'g' : 'c';
1750 if (ptid_equal (ptid, magic_null_ptid))
1751 xsnprintf (buf, endbuf - buf, "0");
1752 else if (ptid_equal (ptid, any_thread_ptid))
1753 xsnprintf (buf, endbuf - buf, "0");
1754 else if (ptid_equal (ptid, minus_one_ptid))
1755 xsnprintf (buf, endbuf - buf, "-1");
1756 else
82f73884 1757 write_ptid (buf, endbuf, ptid);
79d7f229 1758 putpkt (rs->buf);
6d820c5c 1759 getpkt (&rs->buf, &rs->buf_size, 0);
c906108c 1760 if (gen)
79d7f229 1761 general_thread = ptid;
c906108c 1762 else
79d7f229 1763 continue_thread = ptid;
c906108c 1764}
79d7f229
PA
1765
1766static void
1767set_general_thread (struct ptid ptid)
1768{
1769 set_thread (ptid, 1);
1770}
1771
1772static void
1773set_continue_thread (struct ptid ptid)
1774{
1775 set_thread (ptid, 0);
1776}
1777
3c9c4b83
PA
1778/* Change the remote current process. Which thread within the process
1779 ends up selected isn't important, as long as it is the same process
1780 as what INFERIOR_PTID points to.
1781
1782 This comes from that fact that there is no explicit notion of
1783 "selected process" in the protocol. The selected process for
1784 general operations is the process the selected general thread
1785 belongs to. */
1786
1787static void
1788set_general_process (void)
1789{
1790 struct remote_state *rs = get_remote_state ();
1791
1792 /* If the remote can't handle multiple processes, don't bother. */
901f9912 1793 if (!rs->extended || !remote_multi_process_p (rs))
3c9c4b83
PA
1794 return;
1795
1796 /* We only need to change the remote current thread if it's pointing
1797 at some other process. */
1798 if (ptid_get_pid (general_thread) != ptid_get_pid (inferior_ptid))
1799 set_general_thread (inferior_ptid);
1800}
1801
c906108c 1802\f
79d7f229
PA
1803/* Return nonzero if the thread PTID is still alive on the remote
1804 system. */
c906108c
SS
1805
1806static int
28439f5e 1807remote_thread_alive (struct target_ops *ops, ptid_t ptid)
c906108c 1808{
6d820c5c 1809 struct remote_state *rs = get_remote_state ();
82f73884 1810 char *p, *endp;
c906108c 1811
c0a2216e
PA
1812 if (ptid_equal (ptid, magic_null_ptid))
1813 /* The main thread is always alive. */
1814 return 1;
1815
1816 if (ptid_get_pid (ptid) != 0 && ptid_get_tid (ptid) == 0)
1817 /* The main thread is always alive. This can happen after a
1818 vAttach, if the remote side doesn't support
1819 multi-threading. */
1820 return 1;
1821
82f73884
PA
1822 p = rs->buf;
1823 endp = rs->buf + get_remote_packet_size ();
1824
1825 *p++ = 'T';
1826 write_ptid (p, endp, ptid);
1827
2e9f7625 1828 putpkt (rs->buf);
6d820c5c 1829 getpkt (&rs->buf, &rs->buf_size, 0);
2e9f7625 1830 return (rs->buf[0] == 'O' && rs->buf[1] == 'K');
c906108c
SS
1831}
1832
1833/* About these extended threadlist and threadinfo packets. They are
1834 variable length packets but, the fields within them are often fixed
1835 length. They are redundent enough to send over UDP as is the
1836 remote protocol in general. There is a matching unit test module
1837 in libstub. */
1838
cce74817
JM
1839#define OPAQUETHREADBYTES 8
1840
1841/* a 64 bit opaque identifier */
1842typedef unsigned char threadref[OPAQUETHREADBYTES];
1843
23860348 1844/* WARNING: This threadref data structure comes from the remote O.S.,
0df8b418 1845 libstub protocol encoding, and remote.c. It is not particularly
23860348 1846 changable. */
cce74817
JM
1847
1848/* Right now, the internal structure is int. We want it to be bigger.
0df8b418 1849 Plan to fix this. */
cce74817 1850
23860348 1851typedef int gdb_threadref; /* Internal GDB thread reference. */
cce74817 1852
9d1f7ab2 1853/* gdb_ext_thread_info is an internal GDB data structure which is
cfde0993 1854 equivalent to the reply of the remote threadinfo packet. */
cce74817
JM
1855
1856struct gdb_ext_thread_info
c5aa993b 1857 {
23860348 1858 threadref threadid; /* External form of thread reference. */
2bc416ba 1859 int active; /* Has state interesting to GDB?
23860348 1860 regs, stack. */
2bc416ba 1861 char display[256]; /* Brief state display, name,
cedea757 1862 blocked/suspended. */
23860348 1863 char shortname[32]; /* To be used to name threads. */
2bc416ba 1864 char more_display[256]; /* Long info, statistics, queue depth,
23860348 1865 whatever. */
c5aa993b 1866 };
cce74817
JM
1867
1868/* The volume of remote transfers can be limited by submitting
1869 a mask containing bits specifying the desired information.
1870 Use a union of these values as the 'selection' parameter to
0df8b418 1871 get_thread_info. FIXME: Make these TAG names more thread specific. */
cce74817
JM
1872
1873#define TAG_THREADID 1
1874#define TAG_EXISTS 2
1875#define TAG_DISPLAY 4
1876#define TAG_THREADNAME 8
c5aa993b 1877#define TAG_MOREDISPLAY 16
cce74817 1878
23860348 1879#define BUF_THREAD_ID_SIZE (OPAQUETHREADBYTES * 2)
c906108c 1880
b2dd6311 1881char *unpack_varlen_hex (char *buff, ULONGEST *result);
cce74817 1882
a14ed312 1883static char *unpack_nibble (char *buf, int *val);
cce74817 1884
a14ed312 1885static char *pack_nibble (char *buf, int nibble);
cce74817 1886
23860348 1887static char *pack_hex_byte (char *pkt, int /* unsigned char */ byte);
cce74817 1888
a14ed312 1889static char *unpack_byte (char *buf, int *value);
cce74817 1890
a14ed312 1891static char *pack_int (char *buf, int value);
cce74817 1892
a14ed312 1893static char *unpack_int (char *buf, int *value);
cce74817 1894
a14ed312 1895static char *unpack_string (char *src, char *dest, int length);
cce74817 1896
23860348 1897static char *pack_threadid (char *pkt, threadref *id);
cce74817 1898
23860348 1899static char *unpack_threadid (char *inbuf, threadref *id);
cce74817 1900
23860348 1901void int_to_threadref (threadref *id, int value);
cce74817 1902
23860348 1903static int threadref_to_int (threadref *ref);
cce74817 1904
23860348 1905static void copy_threadref (threadref *dest, threadref *src);
cce74817 1906
23860348 1907static int threadmatch (threadref *dest, threadref *src);
cce74817 1908
2bc416ba 1909static char *pack_threadinfo_request (char *pkt, int mode,
23860348 1910 threadref *id);
cce74817 1911
a14ed312 1912static int remote_unpack_thread_info_response (char *pkt,
23860348 1913 threadref *expectedref,
a14ed312
KB
1914 struct gdb_ext_thread_info
1915 *info);
cce74817
JM
1916
1917
2bc416ba 1918static int remote_get_threadinfo (threadref *threadid,
23860348 1919 int fieldset, /*TAG mask */
a14ed312 1920 struct gdb_ext_thread_info *info);
cce74817 1921
a14ed312
KB
1922static char *pack_threadlist_request (char *pkt, int startflag,
1923 int threadcount,
23860348 1924 threadref *nextthread);
cce74817 1925
a14ed312
KB
1926static int parse_threadlist_response (char *pkt,
1927 int result_limit,
23860348 1928 threadref *original_echo,
2bc416ba 1929 threadref *resultlist,
23860348 1930 int *doneflag);
cce74817 1931
a14ed312 1932static int remote_get_threadlist (int startflag,
23860348 1933 threadref *nextthread,
a14ed312
KB
1934 int result_limit,
1935 int *done,
2bc416ba 1936 int *result_count,
23860348 1937 threadref *threadlist);
cce74817 1938
23860348 1939typedef int (*rmt_thread_action) (threadref *ref, void *context);
cce74817 1940
a14ed312
KB
1941static int remote_threadlist_iterator (rmt_thread_action stepfunction,
1942 void *context, int looplimit);
cce74817 1943
23860348 1944static int remote_newthread_step (threadref *ref, void *context);
cce74817 1945
82f73884
PA
1946
1947/* Write a PTID to BUF. ENDBUF points to one-passed-the-end of the
1948 buffer we're allowed to write to. Returns
1949 BUF+CHARACTERS_WRITTEN. */
1950
1951static char *
1952write_ptid (char *buf, const char *endbuf, ptid_t ptid)
1953{
1954 int pid, tid;
1955 struct remote_state *rs = get_remote_state ();
1956
1957 if (remote_multi_process_p (rs))
1958 {
1959 pid = ptid_get_pid (ptid);
1960 if (pid < 0)
1961 buf += xsnprintf (buf, endbuf - buf, "p-%x.", -pid);
1962 else
1963 buf += xsnprintf (buf, endbuf - buf, "p%x.", pid);
1964 }
1965 tid = ptid_get_tid (ptid);
1966 if (tid < 0)
1967 buf += xsnprintf (buf, endbuf - buf, "-%x", -tid);
1968 else
1969 buf += xsnprintf (buf, endbuf - buf, "%x", tid);
1970
1971 return buf;
1972}
1973
1974/* Extract a PTID from BUF. If non-null, OBUF is set to the to one
1975 passed the last parsed char. Returns null_ptid on error. */
1976
1977static ptid_t
1978read_ptid (char *buf, char **obuf)
1979{
1980 char *p = buf;
1981 char *pp;
1982 ULONGEST pid = 0, tid = 0;
82f73884
PA
1983
1984 if (*p == 'p')
1985 {
1986 /* Multi-process ptid. */
1987 pp = unpack_varlen_hex (p + 1, &pid);
1988 if (*pp != '.')
b37520b6 1989 error (_("invalid remote ptid: %s"), p);
82f73884
PA
1990
1991 p = pp;
1992 pp = unpack_varlen_hex (p + 1, &tid);
1993 if (obuf)
1994 *obuf = pp;
1995 return ptid_build (pid, 0, tid);
1996 }
1997
1998 /* No multi-process. Just a tid. */
1999 pp = unpack_varlen_hex (p, &tid);
2000
2001 /* Since the stub is not sending a process id, then default to
ca19bf23
PA
2002 what's in inferior_ptid, unless it's null at this point. If so,
2003 then since there's no way to know the pid of the reported
2004 threads, use the magic number. */
2005 if (ptid_equal (inferior_ptid, null_ptid))
2006 pid = ptid_get_pid (magic_null_ptid);
2007 else
2008 pid = ptid_get_pid (inferior_ptid);
82f73884
PA
2009
2010 if (obuf)
2011 *obuf = pp;
2012 return ptid_build (pid, 0, tid);
2013}
2014
23860348 2015/* Encode 64 bits in 16 chars of hex. */
c906108c
SS
2016
2017static const char hexchars[] = "0123456789abcdef";
2018
2019static int
fba45db2 2020ishex (int ch, int *val)
c906108c
SS
2021{
2022 if ((ch >= 'a') && (ch <= 'f'))
2023 {
2024 *val = ch - 'a' + 10;
2025 return 1;
2026 }
2027 if ((ch >= 'A') && (ch <= 'F'))
2028 {
2029 *val = ch - 'A' + 10;
2030 return 1;
2031 }
2032 if ((ch >= '0') && (ch <= '9'))
2033 {
2034 *val = ch - '0';
2035 return 1;
2036 }
2037 return 0;
2038}
2039
2040static int
fba45db2 2041stubhex (int ch)
c906108c
SS
2042{
2043 if (ch >= 'a' && ch <= 'f')
2044 return ch - 'a' + 10;
2045 if (ch >= '0' && ch <= '9')
2046 return ch - '0';
2047 if (ch >= 'A' && ch <= 'F')
2048 return ch - 'A' + 10;
2049 return -1;
2050}
2051
2052static int
fba45db2 2053stub_unpack_int (char *buff, int fieldlength)
c906108c
SS
2054{
2055 int nibble;
2056 int retval = 0;
2057
2058 while (fieldlength)
2059 {
2060 nibble = stubhex (*buff++);
2061 retval |= nibble;
2062 fieldlength--;
2063 if (fieldlength)
2064 retval = retval << 4;
2065 }
2066 return retval;
2067}
2068
2069char *
fba45db2 2070unpack_varlen_hex (char *buff, /* packet to parse */
b2dd6311 2071 ULONGEST *result)
c906108c
SS
2072{
2073 int nibble;
d49c44d5 2074 ULONGEST retval = 0;
c906108c
SS
2075
2076 while (ishex (*buff, &nibble))
2077 {
2078 buff++;
2079 retval = retval << 4;
2080 retval |= nibble & 0x0f;
2081 }
2082 *result = retval;
2083 return buff;
2084}
2085
2086static char *
fba45db2 2087unpack_nibble (char *buf, int *val)
c906108c 2088{
b7589f7d 2089 *val = fromhex (*buf++);
c906108c
SS
2090 return buf;
2091}
2092
2093static char *
fba45db2 2094pack_nibble (char *buf, int nibble)
c906108c
SS
2095{
2096 *buf++ = hexchars[(nibble & 0x0f)];
2097 return buf;
2098}
2099
2100static char *
fba45db2 2101pack_hex_byte (char *pkt, int byte)
c906108c
SS
2102{
2103 *pkt++ = hexchars[(byte >> 4) & 0xf];
2104 *pkt++ = hexchars[(byte & 0xf)];
2105 return pkt;
2106}
2107
2108static char *
fba45db2 2109unpack_byte (char *buf, int *value)
c906108c
SS
2110{
2111 *value = stub_unpack_int (buf, 2);
2112 return buf + 2;
2113}
2114
2115static char *
fba45db2 2116pack_int (char *buf, int value)
c906108c
SS
2117{
2118 buf = pack_hex_byte (buf, (value >> 24) & 0xff);
2119 buf = pack_hex_byte (buf, (value >> 16) & 0xff);
2120 buf = pack_hex_byte (buf, (value >> 8) & 0x0ff);
2121 buf = pack_hex_byte (buf, (value & 0xff));
2122 return buf;
2123}
2124
2125static char *
fba45db2 2126unpack_int (char *buf, int *value)
c906108c
SS
2127{
2128 *value = stub_unpack_int (buf, 8);
2129 return buf + 8;
2130}
2131
23860348 2132#if 0 /* Currently unused, uncomment when needed. */
a14ed312 2133static char *pack_string (char *pkt, char *string);
c906108c
SS
2134
2135static char *
fba45db2 2136pack_string (char *pkt, char *string)
c906108c
SS
2137{
2138 char ch;
2139 int len;
2140
2141 len = strlen (string);
2142 if (len > 200)
23860348 2143 len = 200; /* Bigger than most GDB packets, junk??? */
c906108c
SS
2144 pkt = pack_hex_byte (pkt, len);
2145 while (len-- > 0)
2146 {
2147 ch = *string++;
2148 if ((ch == '\0') || (ch == '#'))
23860348 2149 ch = '*'; /* Protect encapsulation. */
c906108c
SS
2150 *pkt++ = ch;
2151 }
2152 return pkt;
2153}
2154#endif /* 0 (unused) */
2155
2156static char *
fba45db2 2157unpack_string (char *src, char *dest, int length)
c906108c
SS
2158{
2159 while (length--)
2160 *dest++ = *src++;
2161 *dest = '\0';
2162 return src;
2163}
2164
2165static char *
fba45db2 2166pack_threadid (char *pkt, threadref *id)
c906108c
SS
2167{
2168 char *limit;
2169 unsigned char *altid;
2170
2171 altid = (unsigned char *) id;
2172 limit = pkt + BUF_THREAD_ID_SIZE;
2173 while (pkt < limit)
2174 pkt = pack_hex_byte (pkt, *altid++);
2175 return pkt;
2176}
2177
2178
2179static char *
fba45db2 2180unpack_threadid (char *inbuf, threadref *id)
c906108c
SS
2181{
2182 char *altref;
2183 char *limit = inbuf + BUF_THREAD_ID_SIZE;
2184 int x, y;
2185
2186 altref = (char *) id;
2187
2188 while (inbuf < limit)
2189 {
2190 x = stubhex (*inbuf++);
2191 y = stubhex (*inbuf++);
2192 *altref++ = (x << 4) | y;
2193 }
2194 return inbuf;
2195}
2196
2197/* Externally, threadrefs are 64 bits but internally, they are still
0df8b418 2198 ints. This is due to a mismatch of specifications. We would like
c906108c
SS
2199 to use 64bit thread references internally. This is an adapter
2200 function. */
2201
2202void
fba45db2 2203int_to_threadref (threadref *id, int value)
c906108c
SS
2204{
2205 unsigned char *scan;
2206
2207 scan = (unsigned char *) id;
2208 {
2209 int i = 4;
2210 while (i--)
2211 *scan++ = 0;
2212 }
2213 *scan++ = (value >> 24) & 0xff;
2214 *scan++ = (value >> 16) & 0xff;
2215 *scan++ = (value >> 8) & 0xff;
2216 *scan++ = (value & 0xff);
2217}
2218
2219static int
fba45db2 2220threadref_to_int (threadref *ref)
c906108c
SS
2221{
2222 int i, value = 0;
2223 unsigned char *scan;
2224
cfd77fa1 2225 scan = *ref;
c906108c
SS
2226 scan += 4;
2227 i = 4;
2228 while (i-- > 0)
2229 value = (value << 8) | ((*scan++) & 0xff);
2230 return value;
2231}
2232
2233static void
fba45db2 2234copy_threadref (threadref *dest, threadref *src)
c906108c
SS
2235{
2236 int i;
2237 unsigned char *csrc, *cdest;
2238
2239 csrc = (unsigned char *) src;
2240 cdest = (unsigned char *) dest;
2241 i = 8;
2242 while (i--)
2243 *cdest++ = *csrc++;
2244}
2245
2246static int
fba45db2 2247threadmatch (threadref *dest, threadref *src)
c906108c 2248{
23860348 2249 /* Things are broken right now, so just assume we got a match. */
c906108c
SS
2250#if 0
2251 unsigned char *srcp, *destp;
2252 int i, result;
2253 srcp = (char *) src;
2254 destp = (char *) dest;
2255
2256 result = 1;
2257 while (i-- > 0)
2258 result &= (*srcp++ == *destp++) ? 1 : 0;
2259 return result;
2260#endif
2261 return 1;
2262}
2263
2264/*
c5aa993b
JM
2265 threadid:1, # always request threadid
2266 context_exists:2,
2267 display:4,
2268 unique_name:8,
2269 more_display:16
2270 */
c906108c
SS
2271
2272/* Encoding: 'Q':8,'P':8,mask:32,threadid:64 */
2273
2274static char *
fba45db2 2275pack_threadinfo_request (char *pkt, int mode, threadref *id)
c906108c 2276{
23860348
MS
2277 *pkt++ = 'q'; /* Info Query */
2278 *pkt++ = 'P'; /* process or thread info */
2279 pkt = pack_int (pkt, mode); /* mode */
c906108c 2280 pkt = pack_threadid (pkt, id); /* threadid */
23860348 2281 *pkt = '\0'; /* terminate */
c906108c
SS
2282 return pkt;
2283}
2284
23860348 2285/* These values tag the fields in a thread info response packet. */
c906108c 2286/* Tagging the fields allows us to request specific fields and to
23860348 2287 add more fields as time goes by. */
c906108c 2288
23860348 2289#define TAG_THREADID 1 /* Echo the thread identifier. */
c5aa993b 2290#define TAG_EXISTS 2 /* Is this process defined enough to
23860348 2291 fetch registers and its stack? */
c5aa993b 2292#define TAG_DISPLAY 4 /* A short thing maybe to put on a window */
23860348 2293#define TAG_THREADNAME 8 /* string, maps 1-to-1 with a thread is. */
802188a7 2294#define TAG_MOREDISPLAY 16 /* Whatever the kernel wants to say about
23860348 2295 the process. */
c906108c
SS
2296
2297static int
fba45db2
KB
2298remote_unpack_thread_info_response (char *pkt, threadref *expectedref,
2299 struct gdb_ext_thread_info *info)
c906108c 2300{
d01949b6 2301 struct remote_state *rs = get_remote_state ();
c906108c 2302 int mask, length;
cfd77fa1 2303 int tag;
c906108c 2304 threadref ref;
6d820c5c 2305 char *limit = pkt + rs->buf_size; /* Plausible parsing limit. */
c906108c
SS
2306 int retval = 1;
2307
23860348 2308 /* info->threadid = 0; FIXME: implement zero_threadref. */
c906108c
SS
2309 info->active = 0;
2310 info->display[0] = '\0';
2311 info->shortname[0] = '\0';
2312 info->more_display[0] = '\0';
2313
23860348
MS
2314 /* Assume the characters indicating the packet type have been
2315 stripped. */
c906108c
SS
2316 pkt = unpack_int (pkt, &mask); /* arg mask */
2317 pkt = unpack_threadid (pkt, &ref);
2318
2319 if (mask == 0)
8a3fe4f8 2320 warning (_("Incomplete response to threadinfo request."));
c906108c 2321 if (!threadmatch (&ref, expectedref))
23860348 2322 { /* This is an answer to a different request. */
8a3fe4f8 2323 warning (_("ERROR RMT Thread info mismatch."));
c906108c
SS
2324 return 0;
2325 }
2326 copy_threadref (&info->threadid, &ref);
2327
23860348 2328 /* Loop on tagged fields , try to bail if somthing goes wrong. */
c906108c 2329
23860348
MS
2330 /* Packets are terminated with nulls. */
2331 while ((pkt < limit) && mask && *pkt)
c906108c
SS
2332 {
2333 pkt = unpack_int (pkt, &tag); /* tag */
23860348
MS
2334 pkt = unpack_byte (pkt, &length); /* length */
2335 if (!(tag & mask)) /* Tags out of synch with mask. */
c906108c 2336 {
8a3fe4f8 2337 warning (_("ERROR RMT: threadinfo tag mismatch."));
c906108c
SS
2338 retval = 0;
2339 break;
2340 }
2341 if (tag == TAG_THREADID)
2342 {
2343 if (length != 16)
2344 {
8a3fe4f8 2345 warning (_("ERROR RMT: length of threadid is not 16."));
c906108c
SS
2346 retval = 0;
2347 break;
2348 }
2349 pkt = unpack_threadid (pkt, &ref);
2350 mask = mask & ~TAG_THREADID;
2351 continue;
2352 }
2353 if (tag == TAG_EXISTS)
2354 {
2355 info->active = stub_unpack_int (pkt, length);
2356 pkt += length;
2357 mask = mask & ~(TAG_EXISTS);
2358 if (length > 8)
2359 {
8a3fe4f8 2360 warning (_("ERROR RMT: 'exists' length too long."));
c906108c
SS
2361 retval = 0;
2362 break;
2363 }
2364 continue;
2365 }
2366 if (tag == TAG_THREADNAME)
2367 {
2368 pkt = unpack_string (pkt, &info->shortname[0], length);
2369 mask = mask & ~TAG_THREADNAME;
2370 continue;
2371 }
2372 if (tag == TAG_DISPLAY)
2373 {
2374 pkt = unpack_string (pkt, &info->display[0], length);
2375 mask = mask & ~TAG_DISPLAY;
2376 continue;
2377 }
2378 if (tag == TAG_MOREDISPLAY)
2379 {
2380 pkt = unpack_string (pkt, &info->more_display[0], length);
2381 mask = mask & ~TAG_MOREDISPLAY;
2382 continue;
2383 }
8a3fe4f8 2384 warning (_("ERROR RMT: unknown thread info tag."));
23860348 2385 break; /* Not a tag we know about. */
c906108c
SS
2386 }
2387 return retval;
2388}
2389
2390static int
fba45db2
KB
2391remote_get_threadinfo (threadref *threadid, int fieldset, /* TAG mask */
2392 struct gdb_ext_thread_info *info)
c906108c 2393{
d01949b6 2394 struct remote_state *rs = get_remote_state ();
c906108c 2395 int result;
c906108c 2396
2e9f7625
DJ
2397 pack_threadinfo_request (rs->buf, fieldset, threadid);
2398 putpkt (rs->buf);
6d820c5c 2399 getpkt (&rs->buf, &rs->buf_size, 0);
3084dd77
PA
2400
2401 if (rs->buf[0] == '\0')
2402 return 0;
2403
2e9f7625 2404 result = remote_unpack_thread_info_response (rs->buf + 2,
23860348 2405 threadid, info);
c906108c
SS
2406 return result;
2407}
2408
c906108c
SS
2409/* Format: i'Q':8,i"L":8,initflag:8,batchsize:16,lastthreadid:32 */
2410
2411static char *
fba45db2
KB
2412pack_threadlist_request (char *pkt, int startflag, int threadcount,
2413 threadref *nextthread)
c906108c
SS
2414{
2415 *pkt++ = 'q'; /* info query packet */
2416 *pkt++ = 'L'; /* Process LIST or threadLIST request */
23860348 2417 pkt = pack_nibble (pkt, startflag); /* initflag 1 bytes */
c906108c
SS
2418 pkt = pack_hex_byte (pkt, threadcount); /* threadcount 2 bytes */
2419 pkt = pack_threadid (pkt, nextthread); /* 64 bit thread identifier */
2420 *pkt = '\0';
2421 return pkt;
2422}
2423
2424/* Encoding: 'q':8,'M':8,count:16,done:8,argthreadid:64,(threadid:64)* */
2425
2426static int
fba45db2
KB
2427parse_threadlist_response (char *pkt, int result_limit,
2428 threadref *original_echo, threadref *resultlist,
2429 int *doneflag)
c906108c 2430{
d01949b6 2431 struct remote_state *rs = get_remote_state ();
c906108c
SS
2432 char *limit;
2433 int count, resultcount, done;
2434
2435 resultcount = 0;
2436 /* Assume the 'q' and 'M chars have been stripped. */
6d820c5c 2437 limit = pkt + (rs->buf_size - BUF_THREAD_ID_SIZE);
23860348 2438 /* done parse past here */
c906108c
SS
2439 pkt = unpack_byte (pkt, &count); /* count field */
2440 pkt = unpack_nibble (pkt, &done);
2441 /* The first threadid is the argument threadid. */
2442 pkt = unpack_threadid (pkt, original_echo); /* should match query packet */
2443 while ((count-- > 0) && (pkt < limit))
2444 {
2445 pkt = unpack_threadid (pkt, resultlist++);
2446 if (resultcount++ >= result_limit)
2447 break;
2448 }
2449 if (doneflag)
2450 *doneflag = done;
2451 return resultcount;
2452}
2453
2454static int
fba45db2
KB
2455remote_get_threadlist (int startflag, threadref *nextthread, int result_limit,
2456 int *done, int *result_count, threadref *threadlist)
c906108c 2457{
d01949b6 2458 struct remote_state *rs = get_remote_state ();
c906108c 2459 static threadref echo_nextthread;
c906108c
SS
2460 int result = 1;
2461
23860348 2462 /* Trancate result limit to be smaller than the packet size. */
3e43a32a
MS
2463 if ((((result_limit + 1) * BUF_THREAD_ID_SIZE) + 10)
2464 >= get_remote_packet_size ())
ea9c271d 2465 result_limit = (get_remote_packet_size () / BUF_THREAD_ID_SIZE) - 2;
c906108c 2466
6d820c5c
DJ
2467 pack_threadlist_request (rs->buf, startflag, result_limit, nextthread);
2468 putpkt (rs->buf);
2469 getpkt (&rs->buf, &rs->buf_size, 0);
c906108c 2470
d8f2712d 2471 if (*rs->buf == '\0')
21bce120 2472 return 0;
d8f2712d
VP
2473 else
2474 *result_count =
2475 parse_threadlist_response (rs->buf + 2, result_limit, &echo_nextthread,
2476 threadlist, done);
c906108c
SS
2477
2478 if (!threadmatch (&echo_nextthread, nextthread))
2479 {
23860348
MS
2480 /* FIXME: This is a good reason to drop the packet. */
2481 /* Possably, there is a duplicate response. */
c906108c
SS
2482 /* Possabilities :
2483 retransmit immediatly - race conditions
2484 retransmit after timeout - yes
2485 exit
2486 wait for packet, then exit
2487 */
8a3fe4f8 2488 warning (_("HMM: threadlist did not echo arg thread, dropping it."));
23860348 2489 return 0; /* I choose simply exiting. */
c906108c
SS
2490 }
2491 if (*result_count <= 0)
2492 {
2493 if (*done != 1)
2494 {
8a3fe4f8 2495 warning (_("RMT ERROR : failed to get remote thread list."));
c906108c
SS
2496 result = 0;
2497 }
2498 return result; /* break; */
2499 }
2500 if (*result_count > result_limit)
2501 {
2502 *result_count = 0;
8a3fe4f8 2503 warning (_("RMT ERROR: threadlist response longer than requested."));
c906108c
SS
2504 return 0;
2505 }
2506 return result;
2507}
2508
23860348
MS
2509/* This is the interface between remote and threads, remotes upper
2510 interface. */
c906108c
SS
2511
2512/* remote_find_new_threads retrieves the thread list and for each
2513 thread in the list, looks up the thread in GDB's internal list,
79d7f229 2514 adding the thread if it does not already exist. This involves
c906108c
SS
2515 getting partial thread lists from the remote target so, polling the
2516 quit_flag is required. */
2517
2518
23860348 2519/* About this many threadisds fit in a packet. */
c906108c
SS
2520
2521#define MAXTHREADLISTRESULTS 32
2522
2523static int
fba45db2
KB
2524remote_threadlist_iterator (rmt_thread_action stepfunction, void *context,
2525 int looplimit)
c906108c
SS
2526{
2527 int done, i, result_count;
2528 int startflag = 1;
2529 int result = 1;
2530 int loopcount = 0;
2531 static threadref nextthread;
2532 static threadref resultthreadlist[MAXTHREADLISTRESULTS];
2533
2534 done = 0;
2535 while (!done)
2536 {
2537 if (loopcount++ > looplimit)
2538 {
2539 result = 0;
8a3fe4f8 2540 warning (_("Remote fetch threadlist -infinite loop-."));
c906108c
SS
2541 break;
2542 }
2543 if (!remote_get_threadlist (startflag, &nextthread, MAXTHREADLISTRESULTS,
2544 &done, &result_count, resultthreadlist))
2545 {
2546 result = 0;
2547 break;
2548 }
23860348 2549 /* Clear for later iterations. */
c906108c
SS
2550 startflag = 0;
2551 /* Setup to resume next batch of thread references, set nextthread. */
2552 if (result_count >= 1)
2553 copy_threadref (&nextthread, &resultthreadlist[result_count - 1]);
2554 i = 0;
2555 while (result_count--)
2556 if (!(result = (*stepfunction) (&resultthreadlist[i++], context)))
2557 break;
2558 }
2559 return result;
2560}
2561
2562static int
fba45db2 2563remote_newthread_step (threadref *ref, void *context)
c906108c 2564{
79d7f229
PA
2565 int pid = ptid_get_pid (inferior_ptid);
2566 ptid_t ptid = ptid_build (pid, 0, threadref_to_int (ref));
39f77062
KB
2567
2568 if (!in_thread_list (ptid))
2569 add_thread (ptid);
c906108c
SS
2570 return 1; /* continue iterator */
2571}
2572
2573#define CRAZY_MAX_THREADS 1000
2574
39f77062
KB
2575static ptid_t
2576remote_current_thread (ptid_t oldpid)
c906108c 2577{
d01949b6 2578 struct remote_state *rs = get_remote_state ();
c906108c
SS
2579
2580 putpkt ("qC");
6d820c5c 2581 getpkt (&rs->buf, &rs->buf_size, 0);
2e9f7625 2582 if (rs->buf[0] == 'Q' && rs->buf[1] == 'C')
82f73884 2583 return read_ptid (&rs->buf[2], NULL);
c906108c
SS
2584 else
2585 return oldpid;
2586}
2587
802188a7
RM
2588/* Find new threads for info threads command.
2589 * Original version, using John Metzler's thread protocol.
9d1f7ab2 2590 */
cce74817
JM
2591
2592static void
fba45db2 2593remote_find_new_threads (void)
c906108c 2594{
c5aa993b
JM
2595 remote_threadlist_iterator (remote_newthread_step, 0,
2596 CRAZY_MAX_THREADS);
c906108c
SS
2597}
2598
dc146f7c
VP
2599#if defined(HAVE_LIBEXPAT)
2600
2601typedef struct thread_item
2602{
2603 ptid_t ptid;
2604 char *extra;
2605 int core;
2606} thread_item_t;
2607DEF_VEC_O(thread_item_t);
2608
2609struct threads_parsing_context
2610{
2611 VEC (thread_item_t) *items;
2612};
2613
2614static void
2615start_thread (struct gdb_xml_parser *parser,
2616 const struct gdb_xml_element *element,
2617 void *user_data, VEC(gdb_xml_value_s) *attributes)
2618{
2619 struct threads_parsing_context *data = user_data;
2620
2621 struct thread_item item;
2622 char *id;
3d2c1d41 2623 struct gdb_xml_value *attr;
dc146f7c 2624
3d2c1d41 2625 id = xml_find_attribute (attributes, "id")->value;
dc146f7c
VP
2626 item.ptid = read_ptid (id, NULL);
2627
3d2c1d41
PA
2628 attr = xml_find_attribute (attributes, "core");
2629 if (attr != NULL)
2630 item.core = *(ULONGEST *) attr->value;
dc146f7c
VP
2631 else
2632 item.core = -1;
2633
2634 item.extra = 0;
2635
2636 VEC_safe_push (thread_item_t, data->items, &item);
2637}
2638
2639static void
2640end_thread (struct gdb_xml_parser *parser,
2641 const struct gdb_xml_element *element,
2642 void *user_data, const char *body_text)
2643{
2644 struct threads_parsing_context *data = user_data;
2645
2646 if (body_text && *body_text)
2ae2a0b7 2647 VEC_last (thread_item_t, data->items)->extra = xstrdup (body_text);
dc146f7c
VP
2648}
2649
2650const struct gdb_xml_attribute thread_attributes[] = {
2651 { "id", GDB_XML_AF_NONE, NULL, NULL },
2652 { "core", GDB_XML_AF_OPTIONAL, gdb_xml_parse_attr_ulongest, NULL },
2653 { NULL, GDB_XML_AF_NONE, NULL, NULL }
2654};
2655
2656const struct gdb_xml_element thread_children[] = {
2657 { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
2658};
2659
2660const struct gdb_xml_element threads_children[] = {
2661 { "thread", thread_attributes, thread_children,
2662 GDB_XML_EF_REPEATABLE | GDB_XML_EF_OPTIONAL,
2663 start_thread, end_thread },
2664 { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
2665};
2666
2667const struct gdb_xml_element threads_elements[] = {
2668 { "threads", NULL, threads_children,
2669 GDB_XML_EF_NONE, NULL, NULL },
2670 { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
2671};
2672
02357a4a
PA
2673/* Discard the contents of the constructed thread info context. */
2674
2675static void
2676clear_threads_parsing_context (void *p)
2677{
2678 struct threads_parsing_context *context = p;
2679 int i;
2680 struct thread_item *item;
2681
2682 for (i = 0; VEC_iterate (thread_item_t, context->items, i, item); ++i)
2683 xfree (item->extra);
2684
2685 VEC_free (thread_item_t, context->items);
2686}
2687
dc146f7c
VP
2688#endif
2689
9d1f7ab2
MS
2690/*
2691 * Find all threads for info threads command.
2692 * Uses new thread protocol contributed by Cisco.
2693 * Falls back and attempts to use the older method (above)
2694 * if the target doesn't respond to the new method.
2695 */
2696
0f71a2f6 2697static void
28439f5e 2698remote_threads_info (struct target_ops *ops)
0f71a2f6 2699{
d01949b6 2700 struct remote_state *rs = get_remote_state ();
085dd6e6 2701 char *bufp;
79d7f229 2702 ptid_t new_thread;
0f71a2f6
JM
2703
2704 if (remote_desc == 0) /* paranoia */
8a3fe4f8 2705 error (_("Command can only be used when connected to the remote target."));
0f71a2f6 2706
dc146f7c
VP
2707#if defined(HAVE_LIBEXPAT)
2708 if (remote_protocol_packets[PACKET_qXfer_threads].support == PACKET_ENABLE)
2709 {
2710 char *xml = target_read_stralloc (&current_target,
2711 TARGET_OBJECT_THREADS, NULL);
2712
2713 struct cleanup *back_to = make_cleanup (xfree, xml);
efc0eabd 2714
dc146f7c
VP
2715 if (xml && *xml)
2716 {
dc146f7c 2717 struct threads_parsing_context context;
dc146f7c 2718
efc0eabd
PA
2719 context.items = NULL;
2720 make_cleanup (clear_threads_parsing_context, &context);
dc146f7c 2721
efc0eabd
PA
2722 if (gdb_xml_parse_quick (_("threads"), "threads.dtd",
2723 threads_elements, xml, &context) == 0)
dc146f7c
VP
2724 {
2725 int i;
2726 struct thread_item *item;
2727
3e43a32a
MS
2728 for (i = 0;
2729 VEC_iterate (thread_item_t, context.items, i, item);
2730 ++i)
dc146f7c
VP
2731 {
2732 if (!ptid_equal (item->ptid, null_ptid))
2733 {
2734 struct private_thread_info *info;
2735 /* In non-stop mode, we assume new found threads
2736 are running until proven otherwise with a
2737 stop reply. In all-stop, we can only get
2738 here if all threads are stopped. */
2739 int running = non_stop ? 1 : 0;
2740
2741 remote_notice_new_inferior (item->ptid, running);
2742
2743 info = demand_private_info (item->ptid);
2744 info->core = item->core;
2745 info->extra = item->extra;
02357a4a 2746 item->extra = NULL;
dc146f7c 2747 }
dc146f7c
VP
2748 }
2749 }
dc146f7c
VP
2750 }
2751
2752 do_cleanups (back_to);
2753 return;
2754 }
2755#endif
2756
9d1f7ab2
MS
2757 if (use_threadinfo_query)
2758 {
2759 putpkt ("qfThreadInfo");
6d820c5c 2760 getpkt (&rs->buf, &rs->buf_size, 0);
2e9f7625 2761 bufp = rs->buf;
9d1f7ab2 2762 if (bufp[0] != '\0') /* q packet recognized */
802188a7 2763 {
44d594fd
PA
2764 struct cleanup *old_chain;
2765 char *saved_reply;
2766
2767 /* remote_notice_new_inferior (in the loop below) may make
2768 new RSP calls, which clobber rs->buf. Work with a
2769 copy. */
2770 bufp = saved_reply = xstrdup (rs->buf);
2771 old_chain = make_cleanup (free_current_contents, &saved_reply);
2772
9d1f7ab2
MS
2773 while (*bufp++ == 'm') /* reply contains one or more TID */
2774 {
2775 do
2776 {
82f73884 2777 new_thread = read_ptid (bufp, &bufp);
1941c569 2778 if (!ptid_equal (new_thread, null_ptid))
82f73884 2779 {
74531fed 2780 /* In non-stop mode, we assume new found threads
1941c569 2781 are running until proven otherwise with a
74531fed
PA
2782 stop reply. In all-stop, we can only get
2783 here if all threads are stopped. */
1941c569
PA
2784 int running = non_stop ? 1 : 0;
2785
2786 remote_notice_new_inferior (new_thread, running);
82f73884 2787 }
9d1f7ab2
MS
2788 }
2789 while (*bufp++ == ','); /* comma-separated list */
44d594fd 2790 free_current_contents (&saved_reply);
9d1f7ab2 2791 putpkt ("qsThreadInfo");
6d820c5c 2792 getpkt (&rs->buf, &rs->buf_size, 0);
44d594fd 2793 bufp = saved_reply = xstrdup (rs->buf);
9d1f7ab2 2794 }
44d594fd 2795 do_cleanups (old_chain);
9d1f7ab2
MS
2796 return; /* done */
2797 }
2798 }
2799
74531fed
PA
2800 /* Only qfThreadInfo is supported in non-stop mode. */
2801 if (non_stop)
2802 return;
2803
23860348 2804 /* Else fall back to old method based on jmetzler protocol. */
9d1f7ab2
MS
2805 use_threadinfo_query = 0;
2806 remote_find_new_threads ();
2807 return;
2808}
2809
802188a7 2810/*
9d1f7ab2
MS
2811 * Collect a descriptive string about the given thread.
2812 * The target may say anything it wants to about the thread
2813 * (typically info about its blocked / runnable state, name, etc.).
2814 * This string will appear in the info threads display.
802188a7 2815 *
9d1f7ab2
MS
2816 * Optional: targets are not required to implement this function.
2817 */
2818
2819static char *
2820remote_threads_extra_info (struct thread_info *tp)
2821{
d01949b6 2822 struct remote_state *rs = get_remote_state ();
9d1f7ab2
MS
2823 int result;
2824 int set;
2825 threadref id;
2826 struct gdb_ext_thread_info threadinfo;
23860348 2827 static char display_buf[100]; /* arbitrary... */
9d1f7ab2
MS
2828 int n = 0; /* position in display_buf */
2829
2830 if (remote_desc == 0) /* paranoia */
8e65ff28 2831 internal_error (__FILE__, __LINE__,
e2e0b3e5 2832 _("remote_threads_extra_info"));
9d1f7ab2 2833
60e569b9
PA
2834 if (ptid_equal (tp->ptid, magic_null_ptid)
2835 || (ptid_get_pid (tp->ptid) != 0 && ptid_get_tid (tp->ptid) == 0))
2836 /* This is the main thread which was added by GDB. The remote
2837 server doesn't know about it. */
2838 return NULL;
2839
dc146f7c
VP
2840 if (remote_protocol_packets[PACKET_qXfer_threads].support == PACKET_ENABLE)
2841 {
2842 struct thread_info *info = find_thread_ptid (tp->ptid);
a744cf53 2843
dc146f7c
VP
2844 if (info && info->private)
2845 return info->private->extra;
2846 else
2847 return NULL;
2848 }
2849
9d1f7ab2
MS
2850 if (use_threadextra_query)
2851 {
82f73884
PA
2852 char *b = rs->buf;
2853 char *endb = rs->buf + get_remote_packet_size ();
2854
2855 xsnprintf (b, endb - b, "qThreadExtraInfo,");
2856 b += strlen (b);
2857 write_ptid (b, endb, tp->ptid);
2858
2e9f7625 2859 putpkt (rs->buf);
6d820c5c 2860 getpkt (&rs->buf, &rs->buf_size, 0);
2e9f7625 2861 if (rs->buf[0] != 0)
9d1f7ab2 2862 {
2e9f7625
DJ
2863 n = min (strlen (rs->buf) / 2, sizeof (display_buf));
2864 result = hex2bin (rs->buf, (gdb_byte *) display_buf, n);
30559e10 2865 display_buf [result] = '\0';
9d1f7ab2
MS
2866 return display_buf;
2867 }
0f71a2f6 2868 }
9d1f7ab2
MS
2869
2870 /* If the above query fails, fall back to the old method. */
2871 use_threadextra_query = 0;
2872 set = TAG_THREADID | TAG_EXISTS | TAG_THREADNAME
2873 | TAG_MOREDISPLAY | TAG_DISPLAY;
79d7f229 2874 int_to_threadref (&id, ptid_get_tid (tp->ptid));
9d1f7ab2
MS
2875 if (remote_get_threadinfo (&id, set, &threadinfo))
2876 if (threadinfo.active)
0f71a2f6 2877 {
9d1f7ab2 2878 if (*threadinfo.shortname)
2bc416ba 2879 n += xsnprintf (&display_buf[0], sizeof (display_buf) - n,
ecbc58df 2880 " Name: %s,", threadinfo.shortname);
9d1f7ab2 2881 if (*threadinfo.display)
2bc416ba 2882 n += xsnprintf (&display_buf[n], sizeof (display_buf) - n,
ecbc58df 2883 " State: %s,", threadinfo.display);
9d1f7ab2 2884 if (*threadinfo.more_display)
2bc416ba 2885 n += xsnprintf (&display_buf[n], sizeof (display_buf) - n,
ecbc58df 2886 " Priority: %s", threadinfo.more_display);
9d1f7ab2
MS
2887
2888 if (n > 0)
c5aa993b 2889 {
23860348 2890 /* For purely cosmetic reasons, clear up trailing commas. */
9d1f7ab2
MS
2891 if (',' == display_buf[n-1])
2892 display_buf[n-1] = ' ';
2893 return display_buf;
c5aa993b 2894 }
0f71a2f6 2895 }
9d1f7ab2 2896 return NULL;
0f71a2f6 2897}
c906108c 2898\f
c5aa993b 2899
0fb4aa4b
PA
2900static int
2901remote_static_tracepoint_marker_at (CORE_ADDR addr,
2902 struct static_tracepoint_marker *marker)
2903{
2904 struct remote_state *rs = get_remote_state ();
2905 char *p = rs->buf;
2906
bba74b36 2907 xsnprintf (p, get_remote_packet_size (), "qTSTMat:");
0fb4aa4b
PA
2908 p += strlen (p);
2909 p += hexnumstr (p, addr);
2910 putpkt (rs->buf);
2911 getpkt (&rs->buf, &rs->buf_size, 0);
2912 p = rs->buf;
2913
2914 if (*p == 'E')
2915 error (_("Remote failure reply: %s"), p);
2916
2917 if (*p++ == 'm')
2918 {
2919 parse_static_tracepoint_marker_definition (p, &p, marker);
2920 return 1;
2921 }
2922
2923 return 0;
2924}
2925
0fb4aa4b
PA
2926static VEC(static_tracepoint_marker_p) *
2927remote_static_tracepoint_markers_by_strid (const char *strid)
2928{
2929 struct remote_state *rs = get_remote_state ();
2930 VEC(static_tracepoint_marker_p) *markers = NULL;
2931 struct static_tracepoint_marker *marker = NULL;
2932 struct cleanup *old_chain;
2933 char *p;
2934
2935 /* Ask for a first packet of static tracepoint marker
2936 definition. */
2937 putpkt ("qTfSTM");
2938 getpkt (&rs->buf, &rs->buf_size, 0);
2939 p = rs->buf;
2940 if (*p == 'E')
2941 error (_("Remote failure reply: %s"), p);
2942
2943 old_chain = make_cleanup (free_current_marker, &marker);
2944
2945 while (*p++ == 'm')
2946 {
2947 if (marker == NULL)
2948 marker = XCNEW (struct static_tracepoint_marker);
2949
2950 do
2951 {
2952 parse_static_tracepoint_marker_definition (p, &p, marker);
2953
2954 if (strid == NULL || strcmp (strid, marker->str_id) == 0)
2955 {
2956 VEC_safe_push (static_tracepoint_marker_p,
2957 markers, marker);
2958 marker = NULL;
2959 }
2960 else
2961 {
2962 release_static_tracepoint_marker (marker);
2963 memset (marker, 0, sizeof (*marker));
2964 }
2965 }
2966 while (*p++ == ','); /* comma-separated list */
2967 /* Ask for another packet of static tracepoint definition. */
2968 putpkt ("qTsSTM");
2969 getpkt (&rs->buf, &rs->buf_size, 0);
2970 p = rs->buf;
2971 }
2972
2973 do_cleanups (old_chain);
2974 return markers;
2975}
2976
2977\f
10760264
JB
2978/* Implement the to_get_ada_task_ptid function for the remote targets. */
2979
2980static ptid_t
2981remote_get_ada_task_ptid (long lwp, long thread)
2982{
2983 return ptid_build (ptid_get_pid (inferior_ptid), 0, lwp);
2984}
2985\f
2986
24b06219 2987/* Restart the remote side; this is an extended protocol operation. */
c906108c
SS
2988
2989static void
fba45db2 2990extended_remote_restart (void)
c906108c 2991{
d01949b6 2992 struct remote_state *rs = get_remote_state ();
c906108c
SS
2993
2994 /* Send the restart command; for reasons I don't understand the
2995 remote side really expects a number after the "R". */
ea9c271d 2996 xsnprintf (rs->buf, get_remote_packet_size (), "R%x", 0);
6d820c5c 2997 putpkt (rs->buf);
c906108c 2998
ad9a8f3f 2999 remote_fileio_reset ();
c906108c
SS
3000}
3001\f
3002/* Clean up connection to a remote debugger. */
3003
c906108c 3004static void
460014f5 3005remote_close (void)
c906108c 3006{
d3fd5342
PA
3007 if (remote_desc == NULL)
3008 return; /* already closed */
3009
3010 /* Make sure we leave stdin registered in the event loop, and we
3011 don't leave the async SIGINT signal handler installed. */
3012 remote_terminal_ours ();
ce5ce7ed 3013
d3fd5342
PA
3014 serial_close (remote_desc);
3015 remote_desc = NULL;
ce5ce7ed
PA
3016
3017 /* We don't have a connection to the remote stub anymore. Get rid
f67fd822
PM
3018 of all the inferiors and their threads we were controlling.
3019 Reset inferior_ptid to null_ptid first, as otherwise has_stack_frame
3020 will be unable to find the thread corresponding to (pid, 0, 0). */
0f2caa1b 3021 inferior_ptid = null_ptid;
f67fd822 3022 discard_all_inferiors ();
ce5ce7ed 3023
5f4cf0bb
YQ
3024 /* Stop replies may from inferiors which are still unknown to GDB.
3025 We are closing the remote target, so we should discard
3026 everything, including the stop replies from GDB-unknown
3027 inferiors. */
3028 discard_pending_stop_replies (NULL);
74531fed
PA
3029
3030 if (remote_async_inferior_event_token)
3031 delete_async_event_handler (&remote_async_inferior_event_token);
722247f1
YQ
3032
3033 remote_notif_unregister_async_event_handler ();
c906108c
SS
3034}
3035
23860348 3036/* Query the remote side for the text, data and bss offsets. */
c906108c
SS
3037
3038static void
fba45db2 3039get_offsets (void)
c906108c 3040{
d01949b6 3041 struct remote_state *rs = get_remote_state ();
2e9f7625 3042 char *buf;
085dd6e6 3043 char *ptr;
31d99776
DJ
3044 int lose, num_segments = 0, do_sections, do_segments;
3045 CORE_ADDR text_addr, data_addr, bss_addr, segments[2];
c906108c 3046 struct section_offsets *offs;
31d99776
DJ
3047 struct symfile_segment_data *data;
3048
3049 if (symfile_objfile == NULL)
3050 return;
c906108c
SS
3051
3052 putpkt ("qOffsets");
6d820c5c 3053 getpkt (&rs->buf, &rs->buf_size, 0);
2e9f7625 3054 buf = rs->buf;
c906108c
SS
3055
3056 if (buf[0] == '\000')
3057 return; /* Return silently. Stub doesn't support
23860348 3058 this command. */
c906108c
SS
3059 if (buf[0] == 'E')
3060 {
8a3fe4f8 3061 warning (_("Remote failure reply: %s"), buf);
c906108c
SS
3062 return;
3063 }
3064
3065 /* Pick up each field in turn. This used to be done with scanf, but
3066 scanf will make trouble if CORE_ADDR size doesn't match
3067 conversion directives correctly. The following code will work
3068 with any size of CORE_ADDR. */
3069 text_addr = data_addr = bss_addr = 0;
3070 ptr = buf;
3071 lose = 0;
3072
3073 if (strncmp (ptr, "Text=", 5) == 0)
3074 {
3075 ptr += 5;
3076 /* Don't use strtol, could lose on big values. */
3077 while (*ptr && *ptr != ';')
3078 text_addr = (text_addr << 4) + fromhex (*ptr++);
c906108c 3079
31d99776
DJ
3080 if (strncmp (ptr, ";Data=", 6) == 0)
3081 {
3082 ptr += 6;
3083 while (*ptr && *ptr != ';')
3084 data_addr = (data_addr << 4) + fromhex (*ptr++);
3085 }
3086 else
3087 lose = 1;
3088
3089 if (!lose && strncmp (ptr, ";Bss=", 5) == 0)
3090 {
3091 ptr += 5;
3092 while (*ptr && *ptr != ';')
3093 bss_addr = (bss_addr << 4) + fromhex (*ptr++);
c906108c 3094
31d99776
DJ
3095 if (bss_addr != data_addr)
3096 warning (_("Target reported unsupported offsets: %s"), buf);
3097 }
3098 else
3099 lose = 1;
3100 }
3101 else if (strncmp (ptr, "TextSeg=", 8) == 0)
c906108c 3102 {
31d99776
DJ
3103 ptr += 8;
3104 /* Don't use strtol, could lose on big values. */
c906108c 3105 while (*ptr && *ptr != ';')
31d99776
DJ
3106 text_addr = (text_addr << 4) + fromhex (*ptr++);
3107 num_segments = 1;
3108
3109 if (strncmp (ptr, ";DataSeg=", 9) == 0)
3110 {
3111 ptr += 9;
3112 while (*ptr && *ptr != ';')
3113 data_addr = (data_addr << 4) + fromhex (*ptr++);
3114 num_segments++;
3115 }
c906108c
SS
3116 }
3117 else
3118 lose = 1;
3119
3120 if (lose)
8a3fe4f8 3121 error (_("Malformed response to offset query, %s"), buf);
31d99776
DJ
3122 else if (*ptr != '\0')
3123 warning (_("Target reported unsupported offsets: %s"), buf);
c906108c 3124
802188a7 3125 offs = ((struct section_offsets *)
a39a16c4 3126 alloca (SIZEOF_N_SECTION_OFFSETS (symfile_objfile->num_sections)));
802188a7 3127 memcpy (offs, symfile_objfile->section_offsets,
a39a16c4 3128 SIZEOF_N_SECTION_OFFSETS (symfile_objfile->num_sections));
c906108c 3129
31d99776
DJ
3130 data = get_symfile_segment_data (symfile_objfile->obfd);
3131 do_segments = (data != NULL);
3132 do_sections = num_segments == 0;
c906108c 3133
28c32713 3134 if (num_segments > 0)
31d99776 3135 {
31d99776
DJ
3136 segments[0] = text_addr;
3137 segments[1] = data_addr;
3138 }
28c32713
JB
3139 /* If we have two segments, we can still try to relocate everything
3140 by assuming that the .text and .data offsets apply to the whole
3141 text and data segments. Convert the offsets given in the packet
3142 to base addresses for symfile_map_offsets_to_segments. */
3143 else if (data && data->num_segments == 2)
3144 {
3145 segments[0] = data->segment_bases[0] + text_addr;
3146 segments[1] = data->segment_bases[1] + data_addr;
3147 num_segments = 2;
3148 }
8d385431
DJ
3149 /* If the object file has only one segment, assume that it is text
3150 rather than data; main programs with no writable data are rare,
3151 but programs with no code are useless. Of course the code might
3152 have ended up in the data segment... to detect that we would need
3153 the permissions here. */
3154 else if (data && data->num_segments == 1)
3155 {
3156 segments[0] = data->segment_bases[0] + text_addr;
3157 num_segments = 1;
3158 }
28c32713
JB
3159 /* There's no way to relocate by segment. */
3160 else
3161 do_segments = 0;
31d99776
DJ
3162
3163 if (do_segments)
3164 {
3165 int ret = symfile_map_offsets_to_segments (symfile_objfile->obfd, data,
3166 offs, num_segments, segments);
3167
3168 if (ret == 0 && !do_sections)
3e43a32a
MS
3169 error (_("Can not handle qOffsets TextSeg "
3170 "response with this symbol file"));
31d99776
DJ
3171
3172 if (ret > 0)
3173 do_sections = 0;
3174 }
c906108c 3175
9ef895d6
DJ
3176 if (data)
3177 free_symfile_segment_data (data);
31d99776
DJ
3178
3179 if (do_sections)
3180 {
3181 offs->offsets[SECT_OFF_TEXT (symfile_objfile)] = text_addr;
3182
3e43a32a
MS
3183 /* This is a temporary kludge to force data and bss to use the
3184 same offsets because that's what nlmconv does now. The real
3185 solution requires changes to the stub and remote.c that I
3186 don't have time to do right now. */
31d99776
DJ
3187
3188 offs->offsets[SECT_OFF_DATA (symfile_objfile)] = data_addr;
3189 offs->offsets[SECT_OFF_BSS (symfile_objfile)] = data_addr;
3190 }
c906108c
SS
3191
3192 objfile_relocate (symfile_objfile, offs);
3193}
3194
74531fed
PA
3195/* Callback for iterate_over_threads. Set the STOP_REQUESTED flags in
3196 threads we know are stopped already. This is used during the
3197 initial remote connection in non-stop mode --- threads that are
3198 reported as already being stopped are left stopped. */
3199
3200static int
3201set_stop_requested_callback (struct thread_info *thread, void *data)
3202{
3203 /* If we have a stop reply for this thread, it must be stopped. */
3204 if (peek_stop_reply (thread->ptid))
3205 set_stop_requested (thread->ptid, 1);
3206
3207 return 0;
3208}
3209
9a7071a8
JB
3210/* Send interrupt_sequence to remote target. */
3211static void
eeae04df 3212send_interrupt_sequence (void)
9a7071a8
JB
3213{
3214 if (interrupt_sequence_mode == interrupt_sequence_control_c)
c33e31fd 3215 remote_serial_write ("\x03", 1);
9a7071a8
JB
3216 else if (interrupt_sequence_mode == interrupt_sequence_break)
3217 serial_send_break (remote_desc);
3218 else if (interrupt_sequence_mode == interrupt_sequence_break_g)
3219 {
3220 serial_send_break (remote_desc);
c33e31fd 3221 remote_serial_write ("g", 1);
9a7071a8
JB
3222 }
3223 else
3224 internal_error (__FILE__, __LINE__,
3225 _("Invalid value for interrupt_sequence_mode: %s."),
3226 interrupt_sequence_mode);
3227}
3228
3405876a
PA
3229
3230/* If STOP_REPLY is a T stop reply, look for the "thread" register,
3231 and extract the PTID. Returns NULL_PTID if not found. */
3232
3233static ptid_t
3234stop_reply_extract_thread (char *stop_reply)
3235{
3236 if (stop_reply[0] == 'T' && strlen (stop_reply) > 3)
3237 {
3238 char *p;
3239
3240 /* Txx r:val ; r:val (...) */
3241 p = &stop_reply[3];
3242
3243 /* Look for "register" named "thread". */
3244 while (*p != '\0')
3245 {
3246 char *p1;
3247
3248 p1 = strchr (p, ':');
3249 if (p1 == NULL)
3250 return null_ptid;
3251
3252 if (strncmp (p, "thread", p1 - p) == 0)
3253 return read_ptid (++p1, &p);
3254
3255 p1 = strchr (p, ';');
3256 if (p1 == NULL)
3257 return null_ptid;
3258 p1++;
3259
3260 p = p1;
3261 }
3262 }
3263
3264 return null_ptid;
3265}
3266
49c62f2e
PA
3267/* Query the remote target for which is the current thread/process,
3268 add it to our tables, and update INFERIOR_PTID. The caller is
3269 responsible for setting the state such that the remote end is ready
3405876a
PA
3270 to return the current thread.
3271
3272 This function is called after handling the '?' or 'vRun' packets,
3273 whose response is a stop reply from which we can also try
3274 extracting the thread. If the target doesn't support the explicit
3275 qC query, we infer the current thread from that stop reply, passed
3276 in in WAIT_STATUS, which may be NULL. */
49c62f2e
PA
3277
3278static void
3405876a 3279add_current_inferior_and_thread (char *wait_status)
49c62f2e
PA
3280{
3281 struct remote_state *rs = get_remote_state ();
3282 int fake_pid_p = 0;
3405876a 3283 ptid_t ptid = null_ptid;
49c62f2e
PA
3284
3285 inferior_ptid = null_ptid;
3286
3405876a
PA
3287 /* Now, if we have thread information, update inferior_ptid. First
3288 if we have a stop reply handy, maybe it's a T stop reply with a
3289 "thread" register we can extract the current thread from. If
3290 not, ask the remote which is the current thread, with qC. The
3291 former method avoids a roundtrip. Note we don't use
3292 remote_parse_stop_reply as that makes use of the target
3293 architecture, which we haven't yet fully determined at this
3294 point. */
3295 if (wait_status != NULL)
3296 ptid = stop_reply_extract_thread (wait_status);
3297 if (ptid_equal (ptid, null_ptid))
3298 ptid = remote_current_thread (inferior_ptid);
3299
49c62f2e
PA
3300 if (!ptid_equal (ptid, null_ptid))
3301 {
3302 if (!remote_multi_process_p (rs))
3303 fake_pid_p = 1;
3304
3305 inferior_ptid = ptid;
3306 }
3307 else
3308 {
3309 /* Without this, some commands which require an active target
3310 (such as kill) won't work. This variable serves (at least)
3311 double duty as both the pid of the target process (if it has
3312 such), and as a flag indicating that a target is active. */
3313 inferior_ptid = magic_null_ptid;
3314 fake_pid_p = 1;
3315 }
3316
3317 remote_add_inferior (fake_pid_p, ptid_get_pid (inferior_ptid), -1);
3318
3319 /* Add the main thread. */
3320 add_thread_silent (inferior_ptid);
3321}
3322
9cbc821d 3323static void
04bd08de 3324remote_start_remote (int from_tty, struct target_ops *target, int extended_p)
c906108c 3325{
c8d104ad
PA
3326 struct remote_state *rs = get_remote_state ();
3327 struct packet_config *noack_config;
2d717e4f 3328 char *wait_status = NULL;
8621d6a9 3329
23860348 3330 immediate_quit++; /* Allow user to interrupt it. */
522002f9 3331 QUIT;
c906108c 3332
9a7071a8
JB
3333 if (interrupt_on_connect)
3334 send_interrupt_sequence ();
3335
57e12211
TT
3336 /* Ack any packet which the remote side has already sent. */
3337 serial_write (remote_desc, "+", 1);
3338
1e51243a
PA
3339 /* Signal other parts that we're going through the initial setup,
3340 and so things may not be stable yet. */
3341 rs->starting_up = 1;
3342
c8d104ad
PA
3343 /* The first packet we send to the target is the optional "supported
3344 packets" request. If the target can answer this, it will tell us
3345 which later probes to skip. */
3346 remote_query_supported ();
3347
d914c394
SS
3348 /* If the stub wants to get a QAllow, compose one and send it. */
3349 if (remote_protocol_packets[PACKET_QAllow].support != PACKET_DISABLE)
3350 remote_set_permissions ();
3351
c8d104ad
PA
3352 /* Next, we possibly activate noack mode.
3353
3354 If the QStartNoAckMode packet configuration is set to AUTO,
3355 enable noack mode if the stub reported a wish for it with
3356 qSupported.
3357
3358 If set to TRUE, then enable noack mode even if the stub didn't
3359 report it in qSupported. If the stub doesn't reply OK, the
3360 session ends with an error.
3361
3362 If FALSE, then don't activate noack mode, regardless of what the
3363 stub claimed should be the default with qSupported. */
3364
3365 noack_config = &remote_protocol_packets[PACKET_QStartNoAckMode];
3366
3367 if (noack_config->detect == AUTO_BOOLEAN_TRUE
3368 || (noack_config->detect == AUTO_BOOLEAN_AUTO
3369 && noack_config->support == PACKET_ENABLE))
3370 {
3371 putpkt ("QStartNoAckMode");
3372 getpkt (&rs->buf, &rs->buf_size, 0);
3373 if (packet_ok (rs->buf, noack_config) == PACKET_OK)
3374 rs->noack_mode = 1;
3375 }
3376
04bd08de 3377 if (extended_p)
5fe04517
PA
3378 {
3379 /* Tell the remote that we are using the extended protocol. */
3380 putpkt ("!");
3381 getpkt (&rs->buf, &rs->buf_size, 0);
3382 }
3383
9b224c5e
PA
3384 /* Let the target know which signals it is allowed to pass down to
3385 the program. */
3386 update_signals_program_target ();
3387
d962ef82
DJ
3388 /* Next, if the target can specify a description, read it. We do
3389 this before anything involving memory or registers. */
3390 target_find_description ();
3391
6c95b8df
PA
3392 /* Next, now that we know something about the target, update the
3393 address spaces in the program spaces. */
3394 update_address_spaces ();
3395
50c71eaf
PA
3396 /* On OSs where the list of libraries is global to all
3397 processes, we fetch them early. */
f5656ead 3398 if (gdbarch_has_global_solist (target_gdbarch ()))
04bd08de 3399 solib_add (NULL, from_tty, target, auto_solib_add);
50c71eaf 3400
74531fed
PA
3401 if (non_stop)
3402 {
3403 if (!rs->non_stop_aware)
3e43a32a
MS
3404 error (_("Non-stop mode requested, but remote "
3405 "does not support non-stop"));
74531fed
PA
3406
3407 putpkt ("QNonStop:1");
3408 getpkt (&rs->buf, &rs->buf_size, 0);
3409
3410 if (strcmp (rs->buf, "OK") != 0)
9b20d036 3411 error (_("Remote refused setting non-stop mode with: %s"), rs->buf);
74531fed
PA
3412
3413 /* Find about threads and processes the stub is already
3414 controlling. We default to adding them in the running state.
3415 The '?' query below will then tell us about which threads are
3416 stopped. */
04bd08de 3417 remote_threads_info (target);
74531fed
PA
3418 }
3419 else if (rs->non_stop_aware)
3420 {
3421 /* Don't assume that the stub can operate in all-stop mode.
e6f3fa52 3422 Request it explicitly. */
74531fed
PA
3423 putpkt ("QNonStop:0");
3424 getpkt (&rs->buf, &rs->buf_size, 0);
3425
3426 if (strcmp (rs->buf, "OK") != 0)
9b20d036 3427 error (_("Remote refused setting all-stop mode with: %s"), rs->buf);
74531fed
PA
3428 }
3429
2d717e4f
DJ
3430 /* Check whether the target is running now. */
3431 putpkt ("?");
3432 getpkt (&rs->buf, &rs->buf_size, 0);
3433
74531fed 3434 if (!non_stop)
2d717e4f 3435 {
e714e1bf
UW
3436 ptid_t ptid;
3437 int fake_pid_p = 0;
3438 struct inferior *inf;
3439
74531fed 3440 if (rs->buf[0] == 'W' || rs->buf[0] == 'X')
2d717e4f 3441 {
04bd08de 3442 if (!extended_p)
74531fed 3443 error (_("The target is not running (try extended-remote?)"));
c35b1492
PA
3444
3445 /* We're connected, but not running. Drop out before we
3446 call start_remote. */
e278ad5b 3447 rs->starting_up = 0;
c35b1492 3448 return;
2d717e4f
DJ
3449 }
3450 else
74531fed 3451 {
74531fed
PA
3452 /* Save the reply for later. */
3453 wait_status = alloca (strlen (rs->buf) + 1);
3454 strcpy (wait_status, rs->buf);
3455 }
3456
3457 /* Let the stub know that we want it to return the thread. */
3458 set_continue_thread (minus_one_ptid);
3459
3405876a 3460 add_current_inferior_and_thread (wait_status);
74531fed 3461
6e586cc5
YQ
3462 /* init_wait_for_inferior should be called before get_offsets in order
3463 to manage `inserted' flag in bp loc in a correct state.
3464 breakpoint_init_inferior, called from init_wait_for_inferior, set
3465 `inserted' flag to 0, while before breakpoint_re_set, called from
3466 start_remote, set `inserted' flag to 1. In the initialization of
3467 inferior, breakpoint_init_inferior should be called first, and then
3468 breakpoint_re_set can be called. If this order is broken, state of
3469 `inserted' flag is wrong, and cause some problems on breakpoint
3470 manipulation. */
3471 init_wait_for_inferior ();
3472
74531fed
PA
3473 get_offsets (); /* Get text, data & bss offsets. */
3474
d962ef82
DJ
3475 /* If we could not find a description using qXfer, and we know
3476 how to do it some other way, try again. This is not
3477 supported for non-stop; it could be, but it is tricky if
3478 there are no stopped threads when we connect. */
04bd08de 3479 if (remote_read_description_p (target)
f5656ead 3480 && gdbarch_target_desc (target_gdbarch ()) == NULL)
d962ef82
DJ
3481 {
3482 target_clear_description ();
3483 target_find_description ();
3484 }
3485
74531fed
PA
3486 /* Use the previously fetched status. */
3487 gdb_assert (wait_status != NULL);
3488 strcpy (rs->buf, wait_status);
3489 rs->cached_wait_status = 1;
3490
3491 immediate_quit--;
04bd08de 3492 start_remote (from_tty); /* Initialize gdb process mechanisms. */
2d717e4f
DJ
3493 }
3494 else
3495 {
68c97600
PA
3496 /* Clear WFI global state. Do this before finding about new
3497 threads and inferiors, and setting the current inferior.
3498 Otherwise we would clear the proceed status of the current
3499 inferior when we want its stop_soon state to be preserved
3500 (see notice_new_inferior). */
3501 init_wait_for_inferior ();
3502
74531fed
PA
3503 /* In non-stop, we will either get an "OK", meaning that there
3504 are no stopped threads at this time; or, a regular stop
3505 reply. In the latter case, there may be more than one thread
3506 stopped --- we pull them all out using the vStopped
3507 mechanism. */
3508 if (strcmp (rs->buf, "OK") != 0)
3509 {
722247f1 3510 struct notif_client *notif = &notif_client_stop;
2d717e4f 3511
722247f1
YQ
3512 /* remote_notif_get_pending_replies acks this one, and gets
3513 the rest out. */
3514 notif_client_stop.pending_event
3515 = remote_notif_parse (notif, rs->buf);
3516 remote_notif_get_pending_events (notif);
c906108c 3517
74531fed
PA
3518 /* Make sure that threads that were stopped remain
3519 stopped. */
3520 iterate_over_threads (set_stop_requested_callback, NULL);
3521 }
2d717e4f 3522
74531fed
PA
3523 if (target_can_async_p ())
3524 target_async (inferior_event_handler, 0);
c906108c 3525
74531fed
PA
3526 if (thread_count () == 0)
3527 {
04bd08de 3528 if (!extended_p)
74531fed 3529 error (_("The target is not running (try extended-remote?)"));
82f73884 3530
c35b1492
PA
3531 /* We're connected, but not running. Drop out before we
3532 call start_remote. */
e278ad5b 3533 rs->starting_up = 0;
c35b1492
PA
3534 return;
3535 }
74531fed
PA
3536
3537 /* Let the stub know that we want it to return the thread. */
c0a2216e 3538
74531fed
PA
3539 /* Force the stub to choose a thread. */
3540 set_general_thread (null_ptid);
c906108c 3541
74531fed
PA
3542 /* Query it. */
3543 inferior_ptid = remote_current_thread (minus_one_ptid);
3544 if (ptid_equal (inferior_ptid, minus_one_ptid))
3545 error (_("remote didn't report the current thread in non-stop mode"));
c906108c 3546
74531fed
PA
3547 get_offsets (); /* Get text, data & bss offsets. */
3548
3549 /* In non-stop mode, any cached wait status will be stored in
3550 the stop reply queue. */
3551 gdb_assert (wait_status == NULL);
f0223081 3552
2455069d
UW
3553 /* Report all signals during attach/startup. */
3554 remote_pass_signals (0, NULL);
74531fed 3555 }
c8d104ad 3556
c8d104ad
PA
3557 /* If we connected to a live target, do some additional setup. */
3558 if (target_has_execution)
3559 {
3560 if (exec_bfd) /* No use without an exec file. */
3561 remote_check_symbols (symfile_objfile);
3562 }
50c71eaf 3563
d5551862
SS
3564 /* Possibly the target has been engaged in a trace run started
3565 previously; find out where things are at. */
26afc0d7 3566 if (remote_get_trace_status (current_trace_status ()) != -1)
d5551862 3567 {
00bf0b85
SS
3568 struct uploaded_tp *uploaded_tps = NULL;
3569 struct uploaded_tsv *uploaded_tsvs = NULL;
3570
00bf0b85
SS
3571 if (current_trace_status ()->running)
3572 printf_filtered (_("Trace is already running on the target.\n"));
3573
3574 /* Get trace state variables first, they may be checked when
3575 parsing uploaded commands. */
3576
3577 remote_upload_trace_state_variables (&uploaded_tsvs);
3578
3579 merge_uploaded_trace_state_variables (&uploaded_tsvs);
3580
3581 remote_upload_tracepoints (&uploaded_tps);
3582
3583 merge_uploaded_tracepoints (&uploaded_tps);
d5551862
SS
3584 }
3585
1e51243a
PA
3586 /* The thread and inferior lists are now synchronized with the
3587 target, our symbols have been relocated, and we're merged the
3588 target's tracepoints with ours. We're done with basic start
3589 up. */
3590 rs->starting_up = 0;
3591
2567c7d9 3592 /* If breakpoints are global, insert them now. */
f5656ead 3593 if (gdbarch_has_global_breakpoints (target_gdbarch ())
50c71eaf
PA
3594 && breakpoints_always_inserted_mode ())
3595 insert_breakpoints ();
c906108c
SS
3596}
3597
3598/* Open a connection to a remote debugger.
3599 NAME is the filename used for communication. */
3600
3601static void
fba45db2 3602remote_open (char *name, int from_tty)
c906108c 3603{
75c99385 3604 remote_open_1 (name, from_tty, &remote_ops, 0);
43ff13b4
JM
3605}
3606
c906108c
SS
3607/* Open a connection to a remote debugger using the extended
3608 remote gdb protocol. NAME is the filename used for communication. */
3609
3610static void
fba45db2 3611extended_remote_open (char *name, int from_tty)
c906108c 3612{
75c99385 3613 remote_open_1 (name, from_tty, &extended_remote_ops, 1 /*extended_p */);
43ff13b4
JM
3614}
3615
c906108c
SS
3616/* Generic code for opening a connection to a remote target. */
3617
d471ea57
AC
3618static void
3619init_all_packet_configs (void)
3620{
3621 int i;
a744cf53 3622
444abaca
DJ
3623 for (i = 0; i < PACKET_MAX; i++)
3624 update_packet_config (&remote_protocol_packets[i]);
d471ea57
AC
3625}
3626
23860348 3627/* Symbol look-up. */
dc8acb97
MS
3628
3629static void
3630remote_check_symbols (struct objfile *objfile)
3631{
d01949b6 3632 struct remote_state *rs = get_remote_state ();
dc8acb97
MS
3633 char *msg, *reply, *tmp;
3634 struct minimal_symbol *sym;
3635 int end;
3636
63154eca
PA
3637 /* The remote side has no concept of inferiors that aren't running
3638 yet, it only knows about running processes. If we're connected
3639 but our current inferior is not running, we should not invite the
3640 remote target to request symbol lookups related to its
3641 (unrelated) current process. */
3642 if (!target_has_execution)
3643 return;
3644
444abaca 3645 if (remote_protocol_packets[PACKET_qSymbol].support == PACKET_DISABLE)
dc8acb97
MS
3646 return;
3647
63154eca
PA
3648 /* Make sure the remote is pointing at the right process. Note
3649 there's no way to select "no process". */
3c9c4b83
PA
3650 set_general_process ();
3651
6d820c5c
DJ
3652 /* Allocate a message buffer. We can't reuse the input buffer in RS,
3653 because we need both at the same time. */
ea9c271d 3654 msg = alloca (get_remote_packet_size ());
6d820c5c 3655
23860348 3656 /* Invite target to request symbol lookups. */
dc8acb97
MS
3657
3658 putpkt ("qSymbol::");
6d820c5c
DJ
3659 getpkt (&rs->buf, &rs->buf_size, 0);
3660 packet_ok (rs->buf, &remote_protocol_packets[PACKET_qSymbol]);
2e9f7625 3661 reply = rs->buf;
dc8acb97
MS
3662
3663 while (strncmp (reply, "qSymbol:", 8) == 0)
3664 {
3665 tmp = &reply[8];
cfd77fa1 3666 end = hex2bin (tmp, (gdb_byte *) msg, strlen (tmp) / 2);
dc8acb97
MS
3667 msg[end] = '\0';
3668 sym = lookup_minimal_symbol (msg, NULL, NULL);
3669 if (sym == NULL)
ea9c271d 3670 xsnprintf (msg, get_remote_packet_size (), "qSymbol::%s", &reply[8]);
dc8acb97 3671 else
2bbe3cc1 3672 {
f5656ead 3673 int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
2bbe3cc1
DJ
3674 CORE_ADDR sym_addr = SYMBOL_VALUE_ADDRESS (sym);
3675
3676 /* If this is a function address, return the start of code
3677 instead of any data function descriptor. */
f5656ead 3678 sym_addr = gdbarch_convert_from_func_ptr_addr (target_gdbarch (),
2bbe3cc1
DJ
3679 sym_addr,
3680 &current_target);
3681
3682 xsnprintf (msg, get_remote_packet_size (), "qSymbol:%s:%s",
5af949e3 3683 phex_nz (sym_addr, addr_size), &reply[8]);
2bbe3cc1
DJ
3684 }
3685
dc8acb97 3686 putpkt (msg);
6d820c5c 3687 getpkt (&rs->buf, &rs->buf_size, 0);
2e9f7625 3688 reply = rs->buf;
dc8acb97
MS
3689 }
3690}
3691
9db8d71f
DJ
3692static struct serial *
3693remote_serial_open (char *name)
3694{
3695 static int udp_warning = 0;
3696
3697 /* FIXME: Parsing NAME here is a hack. But we want to warn here instead
3698 of in ser-tcp.c, because it is the remote protocol assuming that the
3699 serial connection is reliable and not the serial connection promising
3700 to be. */
3701 if (!udp_warning && strncmp (name, "udp:", 4) == 0)
3702 {
3e43a32a
MS
3703 warning (_("The remote protocol may be unreliable over UDP.\n"
3704 "Some events may be lost, rendering further debugging "
3705 "impossible."));
9db8d71f
DJ
3706 udp_warning = 1;
3707 }
3708
3709 return serial_open (name);
3710}
3711
d914c394
SS
3712/* Inform the target of our permission settings. The permission flags
3713 work without this, but if the target knows the settings, it can do
3714 a couple things. First, it can add its own check, to catch cases
3715 that somehow manage to get by the permissions checks in target
3716 methods. Second, if the target is wired to disallow particular
3717 settings (for instance, a system in the field that is not set up to
3718 be able to stop at a breakpoint), it can object to any unavailable
3719 permissions. */
3720
3721void
3722remote_set_permissions (void)
3723{
3724 struct remote_state *rs = get_remote_state ();
3725
bba74b36
YQ
3726 xsnprintf (rs->buf, get_remote_packet_size (), "QAllow:"
3727 "WriteReg:%x;WriteMem:%x;"
3728 "InsertBreak:%x;InsertTrace:%x;"
3729 "InsertFastTrace:%x;Stop:%x",
3730 may_write_registers, may_write_memory,
3731 may_insert_breakpoints, may_insert_tracepoints,
3732 may_insert_fast_tracepoints, may_stop);
d914c394
SS
3733 putpkt (rs->buf);
3734 getpkt (&rs->buf, &rs->buf_size, 0);
3735
3736 /* If the target didn't like the packet, warn the user. Do not try
3737 to undo the user's settings, that would just be maddening. */
3738 if (strcmp (rs->buf, "OK") != 0)
7ea6d463 3739 warning (_("Remote refused setting permissions with: %s"), rs->buf);
d914c394
SS
3740}
3741
be2a5f71
DJ
3742/* This type describes each known response to the qSupported
3743 packet. */
3744struct protocol_feature
3745{
3746 /* The name of this protocol feature. */
3747 const char *name;
3748
3749 /* The default for this protocol feature. */
3750 enum packet_support default_support;
3751
3752 /* The function to call when this feature is reported, or after
3753 qSupported processing if the feature is not supported.
3754 The first argument points to this structure. The second
3755 argument indicates whether the packet requested support be
3756 enabled, disabled, or probed (or the default, if this function
3757 is being called at the end of processing and this feature was
3758 not reported). The third argument may be NULL; if not NULL, it
3759 is a NUL-terminated string taken from the packet following
3760 this feature's name and an equals sign. */
3761 void (*func) (const struct protocol_feature *, enum packet_support,
3762 const char *);
3763
3764 /* The corresponding packet for this feature. Only used if
3765 FUNC is remote_supported_packet. */
3766 int packet;
3767};
3768
be2a5f71
DJ
3769static void
3770remote_supported_packet (const struct protocol_feature *feature,
3771 enum packet_support support,
3772 const char *argument)
3773{
3774 if (argument)
3775 {
3776 warning (_("Remote qSupported response supplied an unexpected value for"
3777 " \"%s\"."), feature->name);
3778 return;
3779 }
3780
3781 if (remote_protocol_packets[feature->packet].support
3782 == PACKET_SUPPORT_UNKNOWN)
3783 remote_protocol_packets[feature->packet].support = support;
3784}
be2a5f71
DJ
3785
3786static void
3787remote_packet_size (const struct protocol_feature *feature,
3788 enum packet_support support, const char *value)
3789{
3790 struct remote_state *rs = get_remote_state ();
3791
3792 int packet_size;
3793 char *value_end;
3794
3795 if (support != PACKET_ENABLE)
3796 return;
3797
3798 if (value == NULL || *value == '\0')
3799 {
3800 warning (_("Remote target reported \"%s\" without a size."),
3801 feature->name);
3802 return;
3803 }
3804
3805 errno = 0;
3806 packet_size = strtol (value, &value_end, 16);
3807 if (errno != 0 || *value_end != '\0' || packet_size < 0)
3808 {
3809 warning (_("Remote target reported \"%s\" with a bad size: \"%s\"."),
3810 feature->name, value);
3811 return;
3812 }
3813
3814 if (packet_size > MAX_REMOTE_PACKET_SIZE)
3815 {
3816 warning (_("limiting remote suggested packet size (%d bytes) to %d"),
3817 packet_size, MAX_REMOTE_PACKET_SIZE);
3818 packet_size = MAX_REMOTE_PACKET_SIZE;
3819 }
3820
3821 /* Record the new maximum packet size. */
3822 rs->explicit_packet_size = packet_size;
3823}
3824
82f73884
PA
3825static void
3826remote_multi_process_feature (const struct protocol_feature *feature,
3827 enum packet_support support, const char *value)
3828{
3829 struct remote_state *rs = get_remote_state ();
a744cf53 3830
82f73884
PA
3831 rs->multi_process_aware = (support == PACKET_ENABLE);
3832}
3833
74531fed
PA
3834static void
3835remote_non_stop_feature (const struct protocol_feature *feature,
3836 enum packet_support support, const char *value)
3837{
3838 struct remote_state *rs = get_remote_state ();
a744cf53 3839
74531fed
PA
3840 rs->non_stop_aware = (support == PACKET_ENABLE);
3841}
3842
782b2b07
SS
3843static void
3844remote_cond_tracepoint_feature (const struct protocol_feature *feature,
3845 enum packet_support support,
3846 const char *value)
3847{
3848 struct remote_state *rs = get_remote_state ();
a744cf53 3849
782b2b07
SS
3850 rs->cond_tracepoints = (support == PACKET_ENABLE);
3851}
3852
3788aec7
LM
3853static void
3854remote_cond_breakpoint_feature (const struct protocol_feature *feature,
3855 enum packet_support support,
3856 const char *value)
3857{
3858 struct remote_state *rs = get_remote_state ();
3859
3860 rs->cond_breakpoints = (support == PACKET_ENABLE);
3861}
3862
d3ce09f5
SS
3863static void
3864remote_breakpoint_commands_feature (const struct protocol_feature *feature,
3865 enum packet_support support,
3866 const char *value)
3867{
3868 struct remote_state *rs = get_remote_state ();
3869
3870 rs->breakpoint_commands = (support == PACKET_ENABLE);
3871}
3872
7a697b8d
SS
3873static void
3874remote_fast_tracepoint_feature (const struct protocol_feature *feature,
3875 enum packet_support support,
3876 const char *value)
3877{
3878 struct remote_state *rs = get_remote_state ();
a744cf53 3879
7a697b8d
SS
3880 rs->fast_tracepoints = (support == PACKET_ENABLE);
3881}
3882
0fb4aa4b
PA
3883static void
3884remote_static_tracepoint_feature (const struct protocol_feature *feature,
3885 enum packet_support support,
3886 const char *value)
3887{
3888 struct remote_state *rs = get_remote_state ();
3889
3890 rs->static_tracepoints = (support == PACKET_ENABLE);
3891}
3892
1e4d1764
YQ
3893static void
3894remote_install_in_trace_feature (const struct protocol_feature *feature,
3895 enum packet_support support,
3896 const char *value)
3897{
3898 struct remote_state *rs = get_remote_state ();
3899
3900 rs->install_in_trace = (support == PACKET_ENABLE);
3901}
3902
d5551862
SS
3903static void
3904remote_disconnected_tracing_feature (const struct protocol_feature *feature,
3905 enum packet_support support,
3906 const char *value)
3907{
3908 struct remote_state *rs = get_remote_state ();
a744cf53 3909
d5551862
SS
3910 rs->disconnected_tracing = (support == PACKET_ENABLE);
3911}
3912
d248b706
KY
3913static void
3914remote_enable_disable_tracepoint_feature (const struct protocol_feature *feature,
3915 enum packet_support support,
3916 const char *value)
3917{
3918 struct remote_state *rs = get_remote_state ();
3919
3920 rs->enable_disable_tracepoints = (support == PACKET_ENABLE);
3921}
3922
3065dfb6
SS
3923static void
3924remote_string_tracing_feature (const struct protocol_feature *feature,
3925 enum packet_support support,
3926 const char *value)
3927{
3928 struct remote_state *rs = get_remote_state ();
3929
3930 rs->string_tracing = (support == PACKET_ENABLE);
3931}
3932
be2a5f71 3933static struct protocol_feature remote_protocol_features[] = {
0876f84a 3934 { "PacketSize", PACKET_DISABLE, remote_packet_size, -1 },
40e57cf2 3935 { "qXfer:auxv:read", PACKET_DISABLE, remote_supported_packet,
fd79ecee 3936 PACKET_qXfer_auxv },
23181151
DJ
3937 { "qXfer:features:read", PACKET_DISABLE, remote_supported_packet,
3938 PACKET_qXfer_features },
cfa9d6d9
DJ
3939 { "qXfer:libraries:read", PACKET_DISABLE, remote_supported_packet,
3940 PACKET_qXfer_libraries },
2268b414
JK
3941 { "qXfer:libraries-svr4:read", PACKET_DISABLE, remote_supported_packet,
3942 PACKET_qXfer_libraries_svr4 },
fd79ecee 3943 { "qXfer:memory-map:read", PACKET_DISABLE, remote_supported_packet,
89be2091 3944 PACKET_qXfer_memory_map },
4de6483e
UW
3945 { "qXfer:spu:read", PACKET_DISABLE, remote_supported_packet,
3946 PACKET_qXfer_spu_read },
3947 { "qXfer:spu:write", PACKET_DISABLE, remote_supported_packet,
3948 PACKET_qXfer_spu_write },
07e059b5
VP
3949 { "qXfer:osdata:read", PACKET_DISABLE, remote_supported_packet,
3950 PACKET_qXfer_osdata },
dc146f7c
VP
3951 { "qXfer:threads:read", PACKET_DISABLE, remote_supported_packet,
3952 PACKET_qXfer_threads },
b3b9301e
PA
3953 { "qXfer:traceframe-info:read", PACKET_DISABLE, remote_supported_packet,
3954 PACKET_qXfer_traceframe_info },
89be2091
DJ
3955 { "QPassSignals", PACKET_DISABLE, remote_supported_packet,
3956 PACKET_QPassSignals },
9b224c5e
PA
3957 { "QProgramSignals", PACKET_DISABLE, remote_supported_packet,
3958 PACKET_QProgramSignals },
a6f3e723
SL
3959 { "QStartNoAckMode", PACKET_DISABLE, remote_supported_packet,
3960 PACKET_QStartNoAckMode },
82f73884 3961 { "multiprocess", PACKET_DISABLE, remote_multi_process_feature, -1 },
74531fed 3962 { "QNonStop", PACKET_DISABLE, remote_non_stop_feature, -1 },
4aa995e1
PA
3963 { "qXfer:siginfo:read", PACKET_DISABLE, remote_supported_packet,
3964 PACKET_qXfer_siginfo_read },
3965 { "qXfer:siginfo:write", PACKET_DISABLE, remote_supported_packet,
3966 PACKET_qXfer_siginfo_write },
782b2b07
SS
3967 { "ConditionalTracepoints", PACKET_DISABLE, remote_cond_tracepoint_feature,
3968 PACKET_ConditionalTracepoints },
3788aec7
LM
3969 { "ConditionalBreakpoints", PACKET_DISABLE, remote_cond_breakpoint_feature,
3970 PACKET_ConditionalBreakpoints },
d3ce09f5
SS
3971 { "BreakpointCommands", PACKET_DISABLE, remote_breakpoint_commands_feature,
3972 PACKET_BreakpointCommands },
7a697b8d
SS
3973 { "FastTracepoints", PACKET_DISABLE, remote_fast_tracepoint_feature,
3974 PACKET_FastTracepoints },
0fb4aa4b
PA
3975 { "StaticTracepoints", PACKET_DISABLE, remote_static_tracepoint_feature,
3976 PACKET_StaticTracepoints },
1e4d1764
YQ
3977 {"InstallInTrace", PACKET_DISABLE, remote_install_in_trace_feature,
3978 PACKET_InstallInTrace},
d5551862
SS
3979 { "DisconnectedTracing", PACKET_DISABLE, remote_disconnected_tracing_feature,
3980 -1 },
40ab02ce
MS
3981 { "ReverseContinue", PACKET_DISABLE, remote_supported_packet,
3982 PACKET_bc },
3983 { "ReverseStep", PACKET_DISABLE, remote_supported_packet,
3984 PACKET_bs },
409873ef
SS
3985 { "TracepointSource", PACKET_DISABLE, remote_supported_packet,
3986 PACKET_TracepointSource },
d914c394
SS
3987 { "QAllow", PACKET_DISABLE, remote_supported_packet,
3988 PACKET_QAllow },
d248b706
KY
3989 { "EnableDisableTracepoints", PACKET_DISABLE,
3990 remote_enable_disable_tracepoint_feature, -1 },
78d85199
YQ
3991 { "qXfer:fdpic:read", PACKET_DISABLE, remote_supported_packet,
3992 PACKET_qXfer_fdpic },
169081d0
TG
3993 { "qXfer:uib:read", PACKET_DISABLE, remote_supported_packet,
3994 PACKET_qXfer_uib },
03583c20
UW
3995 { "QDisableRandomization", PACKET_DISABLE, remote_supported_packet,
3996 PACKET_QDisableRandomization },
d1feda86 3997 { "QAgent", PACKET_DISABLE, remote_supported_packet, PACKET_QAgent},
f6f899bf
HAQ
3998 { "QTBuffer:size", PACKET_DISABLE,
3999 remote_supported_packet, PACKET_QTBuffer_size},
3065dfb6
SS
4000 { "tracenz", PACKET_DISABLE,
4001 remote_string_tracing_feature, -1 },
9accd112
MM
4002 { "Qbtrace:off", PACKET_DISABLE, remote_supported_packet, PACKET_Qbtrace_off },
4003 { "Qbtrace:bts", PACKET_DISABLE, remote_supported_packet, PACKET_Qbtrace_bts },
4004 { "qXfer:btrace:read", PACKET_DISABLE, remote_supported_packet,
4005 PACKET_qXfer_btrace }
be2a5f71
DJ
4006};
4007
c8d5aac9
L
4008static char *remote_support_xml;
4009
4010/* Register string appended to "xmlRegisters=" in qSupported query. */
4011
4012void
6e39997a 4013register_remote_support_xml (const char *xml)
c8d5aac9
L
4014{
4015#if defined(HAVE_LIBEXPAT)
4016 if (remote_support_xml == NULL)
c4f7c687 4017 remote_support_xml = concat ("xmlRegisters=", xml, (char *) NULL);
c8d5aac9
L
4018 else
4019 {
4020 char *copy = xstrdup (remote_support_xml + 13);
4021 char *p = strtok (copy, ",");
4022
4023 do
4024 {
4025 if (strcmp (p, xml) == 0)
4026 {
4027 /* already there */
4028 xfree (copy);
4029 return;
4030 }
4031 }
4032 while ((p = strtok (NULL, ",")) != NULL);
4033 xfree (copy);
4034
94b0dee1
PA
4035 remote_support_xml = reconcat (remote_support_xml,
4036 remote_support_xml, ",", xml,
4037 (char *) NULL);
c8d5aac9
L
4038 }
4039#endif
4040}
4041
4042static char *
4043remote_query_supported_append (char *msg, const char *append)
4044{
4045 if (msg)
94b0dee1 4046 return reconcat (msg, msg, ";", append, (char *) NULL);
c8d5aac9
L
4047 else
4048 return xstrdup (append);
4049}
4050
be2a5f71
DJ
4051static void
4052remote_query_supported (void)
4053{
4054 struct remote_state *rs = get_remote_state ();
4055 char *next;
4056 int i;
4057 unsigned char seen [ARRAY_SIZE (remote_protocol_features)];
4058
4059 /* The packet support flags are handled differently for this packet
4060 than for most others. We treat an error, a disabled packet, and
4061 an empty response identically: any features which must be reported
4062 to be used will be automatically disabled. An empty buffer
4063 accomplishes this, since that is also the representation for a list
4064 containing no features. */
4065
4066 rs->buf[0] = 0;
4067 if (remote_protocol_packets[PACKET_qSupported].support != PACKET_DISABLE)
4068 {
c8d5aac9 4069 char *q = NULL;
94b0dee1 4070 struct cleanup *old_chain = make_cleanup (free_current_contents, &q);
c8d5aac9 4071
901f9912 4072 q = remote_query_supported_append (q, "multiprocess+");
c8d5aac9
L
4073
4074 if (remote_support_xml)
4075 q = remote_query_supported_append (q, remote_support_xml);
4076
dde08ee1
PA
4077 q = remote_query_supported_append (q, "qRelocInsn+");
4078
4079 q = reconcat (q, "qSupported:", q, (char *) NULL);
4080 putpkt (q);
82f73884 4081
94b0dee1
PA
4082 do_cleanups (old_chain);
4083
be2a5f71
DJ
4084 getpkt (&rs->buf, &rs->buf_size, 0);
4085
4086 /* If an error occured, warn, but do not return - just reset the
4087 buffer to empty and go on to disable features. */
4088 if (packet_ok (rs->buf, &remote_protocol_packets[PACKET_qSupported])
4089 == PACKET_ERROR)
4090 {
4091 warning (_("Remote failure reply: %s"), rs->buf);
4092 rs->buf[0] = 0;
4093 }
4094 }
4095
4096 memset (seen, 0, sizeof (seen));
4097
4098 next = rs->buf;
4099 while (*next)
4100 {
4101 enum packet_support is_supported;
4102 char *p, *end, *name_end, *value;
4103
4104 /* First separate out this item from the rest of the packet. If
4105 there's another item after this, we overwrite the separator
4106 (terminated strings are much easier to work with). */
4107 p = next;
4108 end = strchr (p, ';');
4109 if (end == NULL)
4110 {
4111 end = p + strlen (p);
4112 next = end;
4113 }
4114 else
4115 {
89be2091
DJ
4116 *end = '\0';
4117 next = end + 1;
4118
be2a5f71
DJ
4119 if (end == p)
4120 {
4121 warning (_("empty item in \"qSupported\" response"));
4122 continue;
4123 }
be2a5f71
DJ
4124 }
4125
4126 name_end = strchr (p, '=');
4127 if (name_end)
4128 {
4129 /* This is a name=value entry. */
4130 is_supported = PACKET_ENABLE;
4131 value = name_end + 1;
4132 *name_end = '\0';
4133 }
4134 else
4135 {
4136 value = NULL;
4137 switch (end[-1])
4138 {
4139 case '+':
4140 is_supported = PACKET_ENABLE;
4141 break;
4142
4143 case '-':
4144 is_supported = PACKET_DISABLE;
4145 break;
4146
4147 case '?':
4148 is_supported = PACKET_SUPPORT_UNKNOWN;
4149 break;
4150
4151 default:
3e43a32a
MS
4152 warning (_("unrecognized item \"%s\" "
4153 "in \"qSupported\" response"), p);
be2a5f71
DJ
4154 continue;
4155 }
4156 end[-1] = '\0';
4157 }
4158
4159 for (i = 0; i < ARRAY_SIZE (remote_protocol_features); i++)
4160 if (strcmp (remote_protocol_features[i].name, p) == 0)
4161 {
4162 const struct protocol_feature *feature;
4163
4164 seen[i] = 1;
4165 feature = &remote_protocol_features[i];
4166 feature->func (feature, is_supported, value);
4167 break;
4168 }
4169 }
4170
4171 /* If we increased the packet size, make sure to increase the global
4172 buffer size also. We delay this until after parsing the entire
4173 qSupported packet, because this is the same buffer we were
4174 parsing. */
4175 if (rs->buf_size < rs->explicit_packet_size)
4176 {
4177 rs->buf_size = rs->explicit_packet_size;
4178 rs->buf = xrealloc (rs->buf, rs->buf_size);
4179 }
4180
4181 /* Handle the defaults for unmentioned features. */
4182 for (i = 0; i < ARRAY_SIZE (remote_protocol_features); i++)
4183 if (!seen[i])
4184 {
4185 const struct protocol_feature *feature;
4186
4187 feature = &remote_protocol_features[i];
4188 feature->func (feature, feature->default_support, NULL);
4189 }
4190}
4191
78a095c3
JK
4192/* Remove any of the remote.c targets from target stack. Upper targets depend
4193 on it so remove them first. */
4194
4195static void
4196remote_unpush_target (void)
4197{
4198 pop_all_targets_above (process_stratum - 1);
4199}
be2a5f71 4200
c906108c 4201static void
3e43a32a
MS
4202remote_open_1 (char *name, int from_tty,
4203 struct target_ops *target, int extended_p)
c906108c 4204{
d01949b6 4205 struct remote_state *rs = get_remote_state ();
a6f3e723 4206
c906108c 4207 if (name == 0)
8a3fe4f8 4208 error (_("To open a remote debug connection, you need to specify what\n"
22e04375 4209 "serial device is attached to the remote system\n"
8a3fe4f8 4210 "(e.g. /dev/ttyS0, /dev/ttya, COM1, etc.)."));
c906108c 4211
23860348 4212 /* See FIXME above. */
c6ebd6cf 4213 if (!target_async_permitted)
92d1e331 4214 wait_forever_enabled_p = 1;
6426a772 4215
2d717e4f 4216 /* If we're connected to a running target, target_preopen will kill it.
78a095c3
JK
4217 Ask this question first, before target_preopen has a chance to kill
4218 anything. */
c35b1492 4219 if (remote_desc != NULL && !have_inferiors ())
2d717e4f 4220 {
78a095c3
JK
4221 if (from_tty
4222 && !query (_("Already connected to a remote target. Disconnect? ")))
2d717e4f
DJ
4223 error (_("Still connected."));
4224 }
4225
78a095c3 4226 /* Here the possibly existing remote target gets unpushed. */
c906108c
SS
4227 target_preopen (from_tty);
4228
89be2091
DJ
4229 /* Make sure we send the passed signals list the next time we resume. */
4230 xfree (last_pass_packet);
4231 last_pass_packet = NULL;
4232
9b224c5e
PA
4233 /* Make sure we send the program signals list the next time we
4234 resume. */
4235 xfree (last_program_signals_packet);
4236 last_program_signals_packet = NULL;
4237
ad9a8f3f 4238 remote_fileio_reset ();
1dd41f16
NS
4239 reopen_exec_file ();
4240 reread_symbols ();
4241
9db8d71f 4242 remote_desc = remote_serial_open (name);
c906108c
SS
4243 if (!remote_desc)
4244 perror_with_name (name);
4245
4246 if (baud_rate != -1)
4247 {
2cd58942 4248 if (serial_setbaudrate (remote_desc, baud_rate))
c906108c 4249 {
9b74d5d3
KB
4250 /* The requested speed could not be set. Error out to
4251 top level after closing remote_desc. Take care to
4252 set remote_desc to NULL to avoid closing remote_desc
4253 more than once. */
2cd58942 4254 serial_close (remote_desc);
9b74d5d3 4255 remote_desc = NULL;
c906108c
SS
4256 perror_with_name (name);
4257 }
4258 }
4259
2cd58942 4260 serial_raw (remote_desc);
c906108c
SS
4261
4262 /* If there is something sitting in the buffer we might take it as a
4263 response to a command, which would be bad. */
2cd58942 4264 serial_flush_input (remote_desc);
c906108c
SS
4265
4266 if (from_tty)
4267 {
4268 puts_filtered ("Remote debugging using ");
4269 puts_filtered (name);
4270 puts_filtered ("\n");
4271 }
23860348 4272 push_target (target); /* Switch to using remote target now. */
c906108c 4273
74531fed
PA
4274 /* Register extra event sources in the event loop. */
4275 remote_async_inferior_event_token
4276 = create_async_event_handler (remote_async_inferior_event_handler,
4277 NULL);
722247f1 4278 remote_notif_register_async_event_handler ();
74531fed 4279
be2a5f71
DJ
4280 /* Reset the target state; these things will be queried either by
4281 remote_query_supported or as they are needed. */
d471ea57 4282 init_all_packet_configs ();
74531fed 4283 rs->cached_wait_status = 0;
be2a5f71 4284 rs->explicit_packet_size = 0;
a6f3e723 4285 rs->noack_mode = 0;
82f73884
PA
4286 rs->multi_process_aware = 0;
4287 rs->extended = extended_p;
74531fed 4288 rs->non_stop_aware = 0;
e24a49d8 4289 rs->waiting_for_stop_reply = 0;
3a29589a 4290 rs->ctrlc_pending_p = 0;
802188a7 4291
79d7f229
PA
4292 general_thread = not_sent_ptid;
4293 continue_thread = not_sent_ptid;
e6e4e701 4294 remote_traceframe_number = -1;
c906108c 4295
9d1f7ab2
MS
4296 /* Probe for ability to use "ThreadInfo" query, as required. */
4297 use_threadinfo_query = 1;
4298 use_threadextra_query = 1;
4299
c6ebd6cf 4300 if (target_async_permitted)
92d1e331 4301 {
23860348 4302 /* With this target we start out by owning the terminal. */
92d1e331
DJ
4303 remote_async_terminal_ours_p = 1;
4304
4305 /* FIXME: cagney/1999-09-23: During the initial connection it is
4306 assumed that the target is already ready and able to respond to
0df8b418 4307 requests. Unfortunately remote_start_remote() eventually calls
92d1e331 4308 wait_for_inferior() with no timeout. wait_forever_enabled_p gets
0df8b418 4309 around this. Eventually a mechanism that allows
92d1e331 4310 wait_for_inferior() to expect/get timeouts will be
23860348 4311 implemented. */
92d1e331
DJ
4312 wait_forever_enabled_p = 0;
4313 }
4314
23860348 4315 /* First delete any symbols previously loaded from shared libraries. */
f78f6cf1 4316 no_shared_libraries (NULL, 0);
f78f6cf1 4317
74531fed
PA
4318 /* Start afresh. */
4319 init_thread_list ();
4320
36918e70 4321 /* Start the remote connection. If error() or QUIT, discard this
165b8e33
AC
4322 target (we'd otherwise be in an inconsistent state) and then
4323 propogate the error on up the exception chain. This ensures that
4324 the caller doesn't stumble along blindly assuming that the
4325 function succeeded. The CLI doesn't have this problem but other
4326 UI's, such as MI do.
36918e70
AC
4327
4328 FIXME: cagney/2002-05-19: Instead of re-throwing the exception,
4329 this function should return an error indication letting the
ce2826aa 4330 caller restore the previous state. Unfortunately the command
36918e70
AC
4331 ``target remote'' is directly wired to this function making that
4332 impossible. On a positive note, the CLI side of this problem has
4333 been fixed - the function set_cmd_context() makes it possible for
4334 all the ``target ....'' commands to share a common callback
4335 function. See cli-dump.c. */
109c3e39 4336 {
04bd08de 4337 volatile struct gdb_exception ex;
2d717e4f 4338
04bd08de
TT
4339 TRY_CATCH (ex, RETURN_MASK_ALL)
4340 {
4341 remote_start_remote (from_tty, target, extended_p);
4342 }
109c3e39
AC
4343 if (ex.reason < 0)
4344 {
c8d104ad
PA
4345 /* Pop the partially set up target - unless something else did
4346 already before throwing the exception. */
4347 if (remote_desc != NULL)
78a095c3 4348 remote_unpush_target ();
c6ebd6cf 4349 if (target_async_permitted)
109c3e39
AC
4350 wait_forever_enabled_p = 1;
4351 throw_exception (ex);
4352 }
4353 }
c906108c 4354
c6ebd6cf 4355 if (target_async_permitted)
92d1e331 4356 wait_forever_enabled_p = 1;
43ff13b4
JM
4357}
4358
c906108c
SS
4359/* This takes a program previously attached to and detaches it. After
4360 this is done, GDB can be used to debug some other program. We
4361 better not have left any breakpoints in the target program or it'll
4362 die when it hits one. */
4363
4364static void
2d717e4f 4365remote_detach_1 (char *args, int from_tty, int extended)
c906108c 4366{
82f73884 4367 int pid = ptid_get_pid (inferior_ptid);
d01949b6 4368 struct remote_state *rs = get_remote_state ();
c906108c
SS
4369
4370 if (args)
8a3fe4f8 4371 error (_("Argument given to \"detach\" when remotely debugging."));
c906108c 4372
2d717e4f
DJ
4373 if (!target_has_execution)
4374 error (_("No process to detach from."));
4375
7cee1e54
PA
4376 if (from_tty)
4377 {
4378 char *exec_file = get_exec_file (0);
4379 if (exec_file == NULL)
4380 exec_file = "";
4381 printf_unfiltered (_("Detaching from program: %s, %s\n"), exec_file,
4382 target_pid_to_str (pid_to_ptid (pid)));
4383 gdb_flush (gdb_stdout);
4384 }
4385
c906108c 4386 /* Tell the remote target to detach. */
82f73884 4387 if (remote_multi_process_p (rs))
bba74b36 4388 xsnprintf (rs->buf, get_remote_packet_size (), "D;%x", pid);
82f73884
PA
4389 else
4390 strcpy (rs->buf, "D");
4391
4ddda9b5
PA
4392 putpkt (rs->buf);
4393 getpkt (&rs->buf, &rs->buf_size, 0);
4394
82f73884
PA
4395 if (rs->buf[0] == 'O' && rs->buf[1] == 'K')
4396 ;
4397 else if (rs->buf[0] == '\0')
4398 error (_("Remote doesn't know how to detach"));
4399 else
4ddda9b5 4400 error (_("Can't detach process."));
c906108c 4401
7cee1e54
PA
4402 if (from_tty && !extended)
4403 puts_filtered (_("Ending remote debugging.\n"));
82f73884 4404
82f73884 4405 target_mourn_inferior ();
2d717e4f
DJ
4406}
4407
4408static void
136d6dae 4409remote_detach (struct target_ops *ops, char *args, int from_tty)
2d717e4f
DJ
4410{
4411 remote_detach_1 (args, from_tty, 0);
4412}
4413
4414static void
136d6dae 4415extended_remote_detach (struct target_ops *ops, char *args, int from_tty)
2d717e4f
DJ
4416{
4417 remote_detach_1 (args, from_tty, 1);
c906108c
SS
4418}
4419
6ad8ae5c
DJ
4420/* Same as remote_detach, but don't send the "D" packet; just disconnect. */
4421
43ff13b4 4422static void
597320e7 4423remote_disconnect (struct target_ops *target, char *args, int from_tty)
43ff13b4 4424{
43ff13b4 4425 if (args)
2d717e4f 4426 error (_("Argument given to \"disconnect\" when remotely debugging."));
43ff13b4 4427
2d717e4f
DJ
4428 /* Make sure we unpush even the extended remote targets; mourn
4429 won't do it. So call remote_mourn_1 directly instead of
4430 target_mourn_inferior. */
4431 remote_mourn_1 (target);
4432
43ff13b4
JM
4433 if (from_tty)
4434 puts_filtered ("Ending remote debugging.\n");
4435}
4436
2d717e4f
DJ
4437/* Attach to the process specified by ARGS. If FROM_TTY is non-zero,
4438 be chatty about it. */
4439
4440static void
4441extended_remote_attach_1 (struct target_ops *target, char *args, int from_tty)
4442{
4443 struct remote_state *rs = get_remote_state ();
be86555c 4444 int pid;
96ef3384 4445 char *wait_status = NULL;
2d717e4f 4446
74164c56 4447 pid = parse_pid_to_attach (args);
2d717e4f 4448
74164c56
JK
4449 /* Remote PID can be freely equal to getpid, do not check it here the same
4450 way as in other targets. */
2d717e4f
DJ
4451
4452 if (remote_protocol_packets[PACKET_vAttach].support == PACKET_DISABLE)
4453 error (_("This target does not support attaching to a process"));
4454
7cee1e54
PA
4455 if (from_tty)
4456 {
4457 char *exec_file = get_exec_file (0);
4458
4459 if (exec_file)
4460 printf_unfiltered (_("Attaching to program: %s, %s\n"), exec_file,
4461 target_pid_to_str (pid_to_ptid (pid)));
4462 else
4463 printf_unfiltered (_("Attaching to %s\n"),
4464 target_pid_to_str (pid_to_ptid (pid)));
4465
4466 gdb_flush (gdb_stdout);
4467 }
4468
bba74b36 4469 xsnprintf (rs->buf, get_remote_packet_size (), "vAttach;%x", pid);
2d717e4f
DJ
4470 putpkt (rs->buf);
4471 getpkt (&rs->buf, &rs->buf_size, 0);
4472
3e43a32a
MS
4473 if (packet_ok (rs->buf,
4474 &remote_protocol_packets[PACKET_vAttach]) == PACKET_OK)
2d717e4f 4475 {
74531fed
PA
4476 if (!non_stop)
4477 {
4478 /* Save the reply for later. */
4479 wait_status = alloca (strlen (rs->buf) + 1);
4480 strcpy (wait_status, rs->buf);
4481 }
4482 else if (strcmp (rs->buf, "OK") != 0)
4483 error (_("Attaching to %s failed with: %s"),
4484 target_pid_to_str (pid_to_ptid (pid)),
4485 rs->buf);
2d717e4f
DJ
4486 }
4487 else if (remote_protocol_packets[PACKET_vAttach].support == PACKET_DISABLE)
4488 error (_("This target does not support attaching to a process"));
4489 else
4490 error (_("Attaching to %s failed"),
4491 target_pid_to_str (pid_to_ptid (pid)));
4492
49c62f2e 4493 set_current_inferior (remote_add_inferior (0, pid, 1));
bad34192 4494
2d717e4f 4495 inferior_ptid = pid_to_ptid (pid);
79d7f229 4496
bad34192
PA
4497 if (non_stop)
4498 {
4499 struct thread_info *thread;
79d7f229 4500
bad34192
PA
4501 /* Get list of threads. */
4502 remote_threads_info (target);
82f73884 4503
bad34192
PA
4504 thread = first_thread_of_process (pid);
4505 if (thread)
4506 inferior_ptid = thread->ptid;
4507 else
4508 inferior_ptid = pid_to_ptid (pid);
4509
4510 /* Invalidate our notion of the remote current thread. */
4511 record_currthread (minus_one_ptid);
4512 }
74531fed 4513 else
bad34192
PA
4514 {
4515 /* Now, if we have thread information, update inferior_ptid. */
4516 inferior_ptid = remote_current_thread (inferior_ptid);
4517
4518 /* Add the main thread to the thread list. */
4519 add_thread_silent (inferior_ptid);
4520 }
c0a2216e 4521
96ef3384
UW
4522 /* Next, if the target can specify a description, read it. We do
4523 this before anything involving memory or registers. */
4524 target_find_description ();
4525
74531fed
PA
4526 if (!non_stop)
4527 {
4528 /* Use the previously fetched status. */
4529 gdb_assert (wait_status != NULL);
4530
4531 if (target_can_async_p ())
4532 {
722247f1
YQ
4533 struct notif_event *reply
4534 = remote_notif_parse (&notif_client_stop, wait_status);
74531fed 4535
722247f1 4536 push_stop_reply ((struct stop_reply *) reply);
74531fed
PA
4537
4538 target_async (inferior_event_handler, 0);
4539 }
4540 else
4541 {
4542 gdb_assert (wait_status != NULL);
4543 strcpy (rs->buf, wait_status);
4544 rs->cached_wait_status = 1;
4545 }
4546 }
4547 else
4548 gdb_assert (wait_status == NULL);
2d717e4f
DJ
4549}
4550
4551static void
136d6dae 4552extended_remote_attach (struct target_ops *ops, char *args, int from_tty)
2d717e4f 4553{
136d6dae 4554 extended_remote_attach_1 (ops, args, from_tty);
2d717e4f
DJ
4555}
4556
c906108c
SS
4557/* Convert hex digit A to a number. */
4558
30559e10 4559static int
fba45db2 4560fromhex (int a)
c906108c
SS
4561{
4562 if (a >= '0' && a <= '9')
4563 return a - '0';
4564 else if (a >= 'a' && a <= 'f')
4565 return a - 'a' + 10;
4566 else if (a >= 'A' && a <= 'F')
4567 return a - 'A' + 10;
c5aa993b 4568 else
8a3fe4f8 4569 error (_("Reply contains invalid hex digit %d"), a);
c906108c
SS
4570}
4571
00bf0b85 4572int
cfd77fa1 4573hex2bin (const char *hex, gdb_byte *bin, int count)
30559e10
MS
4574{
4575 int i;
4576
30559e10
MS
4577 for (i = 0; i < count; i++)
4578 {
4579 if (hex[0] == 0 || hex[1] == 0)
4580 {
4581 /* Hex string is short, or of uneven length.
23860348 4582 Return the count that has been converted so far. */
30559e10
MS
4583 return i;
4584 }
4585 *bin++ = fromhex (hex[0]) * 16 + fromhex (hex[1]);
4586 hex += 2;
4587 }
4588 return i;
4589}
4590
c906108c
SS
4591/* Convert number NIB to a hex digit. */
4592
4593static int
fba45db2 4594tohex (int nib)
c906108c
SS
4595{
4596 if (nib < 10)
c5aa993b 4597 return '0' + nib;
c906108c 4598 else
c5aa993b 4599 return 'a' + nib - 10;
c906108c 4600}
30559e10 4601
00bf0b85 4602int
cfd77fa1 4603bin2hex (const gdb_byte *bin, char *hex, int count)
30559e10
MS
4604{
4605 int i;
a744cf53 4606
23860348 4607 /* May use a length, or a nul-terminated string as input. */
30559e10 4608 if (count == 0)
cfd77fa1 4609 count = strlen ((char *) bin);
30559e10
MS
4610
4611 for (i = 0; i < count; i++)
4612 {
4613 *hex++ = tohex ((*bin >> 4) & 0xf);
4614 *hex++ = tohex (*bin++ & 0xf);
4615 }
4616 *hex = 0;
4617 return i;
4618}
c906108c 4619\f
506fb367
DJ
4620/* Check for the availability of vCont. This function should also check
4621 the response. */
c906108c
SS
4622
4623static void
6d820c5c 4624remote_vcont_probe (struct remote_state *rs)
c906108c 4625{
2e9f7625 4626 char *buf;
6d820c5c 4627
2e9f7625
DJ
4628 strcpy (rs->buf, "vCont?");
4629 putpkt (rs->buf);
6d820c5c 4630 getpkt (&rs->buf, &rs->buf_size, 0);
2e9f7625 4631 buf = rs->buf;
c906108c 4632
506fb367
DJ
4633 /* Make sure that the features we assume are supported. */
4634 if (strncmp (buf, "vCont", 5) == 0)
4635 {
4636 char *p = &buf[5];
4637 int support_s, support_S, support_c, support_C;
4638
4639 support_s = 0;
4640 support_S = 0;
4641 support_c = 0;
4642 support_C = 0;
74531fed 4643 rs->support_vCont_t = 0;
506fb367
DJ
4644 while (p && *p == ';')
4645 {
4646 p++;
4647 if (*p == 's' && (*(p + 1) == ';' || *(p + 1) == 0))
4648 support_s = 1;
4649 else if (*p == 'S' && (*(p + 1) == ';' || *(p + 1) == 0))
4650 support_S = 1;
4651 else if (*p == 'c' && (*(p + 1) == ';' || *(p + 1) == 0))
4652 support_c = 1;
4653 else if (*p == 'C' && (*(p + 1) == ';' || *(p + 1) == 0))
4654 support_C = 1;
74531fed
PA
4655 else if (*p == 't' && (*(p + 1) == ';' || *(p + 1) == 0))
4656 rs->support_vCont_t = 1;
506fb367
DJ
4657
4658 p = strchr (p, ';');
4659 }
c906108c 4660
506fb367
DJ
4661 /* If s, S, c, and C are not all supported, we can't use vCont. Clearing
4662 BUF will make packet_ok disable the packet. */
4663 if (!support_s || !support_S || !support_c || !support_C)
4664 buf[0] = 0;
4665 }
c906108c 4666
444abaca 4667 packet_ok (buf, &remote_protocol_packets[PACKET_vCont]);
506fb367 4668}
c906108c 4669
0d8f58ca
PA
4670/* Helper function for building "vCont" resumptions. Write a
4671 resumption to P. ENDP points to one-passed-the-end of the buffer
4672 we're allowed to write to. Returns BUF+CHARACTERS_WRITTEN. The
4673 thread to be resumed is PTID; STEP and SIGGNAL indicate whether the
4674 resumed thread should be single-stepped and/or signalled. If PTID
4675 equals minus_one_ptid, then all threads are resumed; if PTID
4676 represents a process, then all threads of the process are resumed;
4677 the thread to be stepped and/or signalled is given in the global
4678 INFERIOR_PTID. */
4679
4680static char *
4681append_resumption (char *p, char *endp,
2ea28649 4682 ptid_t ptid, int step, enum gdb_signal siggnal)
0d8f58ca
PA
4683{
4684 struct remote_state *rs = get_remote_state ();
4685
a493e3e2 4686 if (step && siggnal != GDB_SIGNAL_0)
0d8f58ca
PA
4687 p += xsnprintf (p, endp - p, ";S%02x", siggnal);
4688 else if (step)
4689 p += xsnprintf (p, endp - p, ";s");
a493e3e2 4690 else if (siggnal != GDB_SIGNAL_0)
0d8f58ca
PA
4691 p += xsnprintf (p, endp - p, ";C%02x", siggnal);
4692 else
4693 p += xsnprintf (p, endp - p, ";c");
4694
4695 if (remote_multi_process_p (rs) && ptid_is_pid (ptid))
4696 {
4697 ptid_t nptid;
4698
4699 /* All (-1) threads of process. */
4700 nptid = ptid_build (ptid_get_pid (ptid), 0, -1);
4701
4702 p += xsnprintf (p, endp - p, ":");
4703 p = write_ptid (p, endp, nptid);
4704 }
4705 else if (!ptid_equal (ptid, minus_one_ptid))
4706 {
4707 p += xsnprintf (p, endp - p, ":");
4708 p = write_ptid (p, endp, ptid);
4709 }
4710
4711 return p;
4712}
4713
e5ef252a
PA
4714/* Append a vCont continue-with-signal action for threads that have a
4715 non-zero stop signal. */
4716
4717static char *
4718append_pending_thread_resumptions (char *p, char *endp, ptid_t ptid)
4719{
4720 struct thread_info *thread;
4721
4722 ALL_THREADS (thread)
4723 if (ptid_match (thread->ptid, ptid)
4724 && !ptid_equal (inferior_ptid, thread->ptid)
4725 && thread->suspend.stop_signal != GDB_SIGNAL_0
4726 && signal_pass_state (thread->suspend.stop_signal))
4727 {
4728 p = append_resumption (p, endp, thread->ptid,
4729 0, thread->suspend.stop_signal);
4730 thread->suspend.stop_signal = GDB_SIGNAL_0;
4731 }
4732
4733 return p;
4734}
4735
506fb367
DJ
4736/* Resume the remote inferior by using a "vCont" packet. The thread
4737 to be resumed is PTID; STEP and SIGGNAL indicate whether the
79d7f229
PA
4738 resumed thread should be single-stepped and/or signalled. If PTID
4739 equals minus_one_ptid, then all threads are resumed; the thread to
4740 be stepped and/or signalled is given in the global INFERIOR_PTID.
4741 This function returns non-zero iff it resumes the inferior.
44eaed12 4742
506fb367
DJ
4743 This function issues a strict subset of all possible vCont commands at the
4744 moment. */
44eaed12 4745
506fb367 4746static int
2ea28649 4747remote_vcont_resume (ptid_t ptid, int step, enum gdb_signal siggnal)
506fb367
DJ
4748{
4749 struct remote_state *rs = get_remote_state ();
82f73884
PA
4750 char *p;
4751 char *endp;
44eaed12 4752
444abaca 4753 if (remote_protocol_packets[PACKET_vCont].support == PACKET_SUPPORT_UNKNOWN)
6d820c5c 4754 remote_vcont_probe (rs);
44eaed12 4755
444abaca 4756 if (remote_protocol_packets[PACKET_vCont].support == PACKET_DISABLE)
6d820c5c 4757 return 0;
44eaed12 4758
82f73884
PA
4759 p = rs->buf;
4760 endp = rs->buf + get_remote_packet_size ();
4761
506fb367
DJ
4762 /* If we could generate a wider range of packets, we'd have to worry
4763 about overflowing BUF. Should there be a generic
4764 "multi-part-packet" packet? */
4765
0d8f58ca
PA
4766 p += xsnprintf (p, endp - p, "vCont");
4767
79d7f229 4768 if (ptid_equal (ptid, magic_null_ptid))
c906108c 4769 {
79d7f229
PA
4770 /* MAGIC_NULL_PTID means that we don't have any active threads,
4771 so we don't have any TID numbers the inferior will
4772 understand. Make sure to only send forms that do not specify
4773 a TID. */
a9cbf802 4774 append_resumption (p, endp, minus_one_ptid, step, siggnal);
506fb367 4775 }
0d8f58ca 4776 else if (ptid_equal (ptid, minus_one_ptid) || ptid_is_pid (ptid))
506fb367 4777 {
0d8f58ca
PA
4778 /* Resume all threads (of all processes, or of a single
4779 process), with preference for INFERIOR_PTID. This assumes
4780 inferior_ptid belongs to the set of all threads we are about
4781 to resume. */
a493e3e2 4782 if (step || siggnal != GDB_SIGNAL_0)
82f73884 4783 {
0d8f58ca
PA
4784 /* Step inferior_ptid, with or without signal. */
4785 p = append_resumption (p, endp, inferior_ptid, step, siggnal);
82f73884 4786 }
0d8f58ca 4787
e5ef252a
PA
4788 /* Also pass down any pending signaled resumption for other
4789 threads not the current. */
4790 p = append_pending_thread_resumptions (p, endp, ptid);
4791
0d8f58ca 4792 /* And continue others without a signal. */
a493e3e2 4793 append_resumption (p, endp, ptid, /*step=*/ 0, GDB_SIGNAL_0);
c906108c
SS
4794 }
4795 else
506fb367
DJ
4796 {
4797 /* Scheduler locking; resume only PTID. */
a9cbf802 4798 append_resumption (p, endp, ptid, step, siggnal);
506fb367 4799 }
c906108c 4800
82f73884
PA
4801 gdb_assert (strlen (rs->buf) < get_remote_packet_size ());
4802 putpkt (rs->buf);
506fb367 4803
74531fed
PA
4804 if (non_stop)
4805 {
4806 /* In non-stop, the stub replies to vCont with "OK". The stop
4807 reply will be reported asynchronously by means of a `%Stop'
4808 notification. */
4809 getpkt (&rs->buf, &rs->buf_size, 0);
4810 if (strcmp (rs->buf, "OK") != 0)
4811 error (_("Unexpected vCont reply in non-stop mode: %s"), rs->buf);
4812 }
4813
506fb367 4814 return 1;
c906108c 4815}
43ff13b4 4816
506fb367
DJ
4817/* Tell the remote machine to resume. */
4818
a493e3e2 4819static enum gdb_signal last_sent_signal = GDB_SIGNAL_0;
506fb367
DJ
4820
4821static int last_sent_step;
4822
43ff13b4 4823static void
28439f5e 4824remote_resume (struct target_ops *ops,
2ea28649 4825 ptid_t ptid, int step, enum gdb_signal siggnal)
43ff13b4 4826{
d01949b6 4827 struct remote_state *rs = get_remote_state ();
2e9f7625 4828 char *buf;
43ff13b4 4829
722247f1
YQ
4830 /* In all-stop, we can't mark REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN
4831 (explained in remote-notif.c:handle_notification) so
4832 remote_notif_process is not called. We need find a place where
4833 it is safe to start a 'vNotif' sequence. It is good to do it
4834 before resuming inferior, because inferior was stopped and no RSP
4835 traffic at that moment. */
4836 if (!non_stop)
4837 remote_notif_process (&notif_client_stop);
4838
43ff13b4
JM
4839 last_sent_signal = siggnal;
4840 last_sent_step = step;
4841
506fb367 4842 /* The vCont packet doesn't need to specify threads via Hc. */
40ab02ce
MS
4843 /* No reverse support (yet) for vCont. */
4844 if (execution_direction != EXEC_REVERSE)
4845 if (remote_vcont_resume (ptid, step, siggnal))
4846 goto done;
506fb367 4847
79d7f229
PA
4848 /* All other supported resume packets do use Hc, so set the continue
4849 thread. */
4850 if (ptid_equal (ptid, minus_one_ptid))
4851 set_continue_thread (any_thread_ptid);
506fb367 4852 else
79d7f229 4853 set_continue_thread (ptid);
506fb367 4854
2e9f7625 4855 buf = rs->buf;
b2175913
MS
4856 if (execution_direction == EXEC_REVERSE)
4857 {
4858 /* We don't pass signals to the target in reverse exec mode. */
a493e3e2 4859 if (info_verbose && siggnal != GDB_SIGNAL_0)
7ea6d463 4860 warning (_(" - Can't pass signal %d to target in reverse: ignored."),
b2175913 4861 siggnal);
40ab02ce
MS
4862
4863 if (step
4864 && remote_protocol_packets[PACKET_bs].support == PACKET_DISABLE)
4865 error (_("Remote reverse-step not supported."));
4866 if (!step
4867 && remote_protocol_packets[PACKET_bc].support == PACKET_DISABLE)
08c93ed9 4868 error (_("Remote reverse-continue not supported."));
40ab02ce 4869
b2175913
MS
4870 strcpy (buf, step ? "bs" : "bc");
4871 }
a493e3e2 4872 else if (siggnal != GDB_SIGNAL_0)
43ff13b4
JM
4873 {
4874 buf[0] = step ? 'S' : 'C';
c5aa993b 4875 buf[1] = tohex (((int) siggnal >> 4) & 0xf);
506fb367 4876 buf[2] = tohex (((int) siggnal) & 0xf);
43ff13b4
JM
4877 buf[3] = '\0';
4878 }
4879 else
c5aa993b 4880 strcpy (buf, step ? "s" : "c");
506fb367 4881
44eaed12 4882 putpkt (buf);
43ff13b4 4883
75c99385 4884 done:
2acceee2 4885 /* We are about to start executing the inferior, let's register it
0df8b418
MS
4886 with the event loop. NOTE: this is the one place where all the
4887 execution commands end up. We could alternatively do this in each
23860348 4888 of the execution commands in infcmd.c. */
2acceee2
JM
4889 /* FIXME: ezannoni 1999-09-28: We may need to move this out of here
4890 into infcmd.c in order to allow inferior function calls to work
23860348 4891 NOT asynchronously. */
362646f5 4892 if (target_can_async_p ())
2acceee2 4893 target_async (inferior_event_handler, 0);
e24a49d8
PA
4894
4895 /* We've just told the target to resume. The remote server will
4896 wait for the inferior to stop, and then send a stop reply. In
4897 the mean time, we can't start another command/query ourselves
74531fed
PA
4898 because the stub wouldn't be ready to process it. This applies
4899 only to the base all-stop protocol, however. In non-stop (which
4900 only supports vCont), the stub replies with an "OK", and is
4901 immediate able to process further serial input. */
4902 if (!non_stop)
4903 rs->waiting_for_stop_reply = 1;
43ff13b4 4904}
c906108c 4905\f
43ff13b4
JM
4906
4907/* Set up the signal handler for SIGINT, while the target is
23860348 4908 executing, ovewriting the 'regular' SIGINT signal handler. */
43ff13b4 4909static void
fba45db2 4910initialize_sigint_signal_handler (void)
43ff13b4 4911{
43ff13b4
JM
4912 signal (SIGINT, handle_remote_sigint);
4913}
4914
23860348 4915/* Signal handler for SIGINT, while the target is executing. */
43ff13b4 4916static void
fba45db2 4917handle_remote_sigint (int sig)
43ff13b4
JM
4918{
4919 signal (sig, handle_remote_sigint_twice);
f6fbab7d 4920 mark_async_signal_handler (sigint_remote_token);
43ff13b4
JM
4921}
4922
4923/* Signal handler for SIGINT, installed after SIGINT has already been
4924 sent once. It will take effect the second time that the user sends
23860348 4925 a ^C. */
43ff13b4 4926static void
fba45db2 4927handle_remote_sigint_twice (int sig)
43ff13b4 4928{
b803fb0f 4929 signal (sig, handle_remote_sigint);
f6fbab7d 4930 mark_async_signal_handler (sigint_remote_twice_token);
43ff13b4
JM
4931}
4932
6426a772 4933/* Perform the real interruption of the target execution, in response
23860348 4934 to a ^C. */
c5aa993b 4935static void
fba45db2 4936async_remote_interrupt (gdb_client_data arg)
43ff13b4
JM
4937{
4938 if (remote_debug)
248fd3bf 4939 fprintf_unfiltered (gdb_stdlog, "async_remote_interrupt called\n");
43ff13b4 4940
94cc34af 4941 target_stop (inferior_ptid);
43ff13b4
JM
4942}
4943
0df8b418 4944/* Perform interrupt, if the first attempt did not succeed. Just give
23860348 4945 up on the target alltogether. */
2df3850c 4946void
fba45db2 4947async_remote_interrupt_twice (gdb_client_data arg)
43ff13b4 4948{
2df3850c 4949 if (remote_debug)
248fd3bf 4950 fprintf_unfiltered (gdb_stdlog, "async_remote_interrupt_twice called\n");
b803fb0f
DJ
4951
4952 interrupt_query ();
43ff13b4
JM
4953}
4954
4955/* Reinstall the usual SIGINT handlers, after the target has
23860348 4956 stopped. */
6426a772
JM
4957static void
4958cleanup_sigint_signal_handler (void *dummy)
43ff13b4
JM
4959{
4960 signal (SIGINT, handle_sigint);
43ff13b4
JM
4961}
4962
c906108c
SS
4963/* Send ^C to target to halt it. Target will respond, and send us a
4964 packet. */
507f3c78 4965static void (*ofunc) (int);
c906108c 4966
0df8b418
MS
4967/* The command line interface's stop routine. This function is installed
4968 as a signal handler for SIGINT. The first time a user requests a
4969 stop, we call remote_stop to send a break or ^C. If there is no
7a292a7a 4970 response from the target (it didn't stop when the user requested it),
23860348 4971 we ask the user if he'd like to detach from the target. */
c906108c 4972static void
fba45db2 4973remote_interrupt (int signo)
c906108c 4974{
23860348 4975 /* If this doesn't work, try more severe steps. */
7a292a7a
SS
4976 signal (signo, remote_interrupt_twice);
4977
b803fb0f 4978 gdb_call_async_signal_handler (sigint_remote_token, 1);
7a292a7a
SS
4979}
4980
4981/* The user typed ^C twice. */
4982
4983static void
fba45db2 4984remote_interrupt_twice (int signo)
7a292a7a
SS
4985{
4986 signal (signo, ofunc);
b803fb0f 4987 gdb_call_async_signal_handler (sigint_remote_twice_token, 1);
c906108c
SS
4988 signal (signo, remote_interrupt);
4989}
7a292a7a 4990
74531fed
PA
4991/* Non-stop version of target_stop. Uses `vCont;t' to stop a remote
4992 thread, all threads of a remote process, or all threads of all
4993 processes. */
4994
4995static void
4996remote_stop_ns (ptid_t ptid)
4997{
4998 struct remote_state *rs = get_remote_state ();
4999 char *p = rs->buf;
5000 char *endp = rs->buf + get_remote_packet_size ();
74531fed
PA
5001
5002 if (remote_protocol_packets[PACKET_vCont].support == PACKET_SUPPORT_UNKNOWN)
5003 remote_vcont_probe (rs);
5004
5005 if (!rs->support_vCont_t)
5006 error (_("Remote server does not support stopping threads"));
5007
f91d3df5
PA
5008 if (ptid_equal (ptid, minus_one_ptid)
5009 || (!remote_multi_process_p (rs) && ptid_is_pid (ptid)))
74531fed
PA
5010 p += xsnprintf (p, endp - p, "vCont;t");
5011 else
5012 {
5013 ptid_t nptid;
5014
74531fed
PA
5015 p += xsnprintf (p, endp - p, "vCont;t:");
5016
5017 if (ptid_is_pid (ptid))
5018 /* All (-1) threads of process. */
5019 nptid = ptid_build (ptid_get_pid (ptid), 0, -1);
5020 else
5021 {
5022 /* Small optimization: if we already have a stop reply for
5023 this thread, no use in telling the stub we want this
5024 stopped. */
5025 if (peek_stop_reply (ptid))
5026 return;
5027
5028 nptid = ptid;
5029 }
5030
a9cbf802 5031 write_ptid (p, endp, nptid);
74531fed
PA
5032 }
5033
5034 /* In non-stop, we get an immediate OK reply. The stop reply will
5035 come in asynchronously by notification. */
5036 putpkt (rs->buf);
5037 getpkt (&rs->buf, &rs->buf_size, 0);
5038 if (strcmp (rs->buf, "OK") != 0)
5039 error (_("Stopping %s failed: %s"), target_pid_to_str (ptid), rs->buf);
5040}
5041
5042/* All-stop version of target_stop. Sends a break or a ^C to stop the
5043 remote target. It is undefined which thread of which process
5044 reports the stop. */
5045
5046static void
5047remote_stop_as (ptid_t ptid)
5048{
5049 struct remote_state *rs = get_remote_state ();
5050
3a29589a
DJ
5051 rs->ctrlc_pending_p = 1;
5052
74531fed
PA
5053 /* If the inferior is stopped already, but the core didn't know
5054 about it yet, just ignore the request. The cached wait status
5055 will be collected in remote_wait. */
5056 if (rs->cached_wait_status)
5057 return;
5058
9a7071a8
JB
5059 /* Send interrupt_sequence to remote target. */
5060 send_interrupt_sequence ();
74531fed
PA
5061}
5062
0df8b418 5063/* This is the generic stop called via the target vector. When a target
7a292a7a 5064 interrupt is requested, either by the command line or the GUI, we
23860348 5065 will eventually end up here. */
74531fed 5066
c906108c 5067static void
94cc34af 5068remote_stop (ptid_t ptid)
c906108c 5069{
7a292a7a 5070 if (remote_debug)
0f71a2f6 5071 fprintf_unfiltered (gdb_stdlog, "remote_stop called\n");
c906108c 5072
74531fed
PA
5073 if (non_stop)
5074 remote_stop_ns (ptid);
c906108c 5075 else
74531fed 5076 remote_stop_as (ptid);
c906108c
SS
5077}
5078
5079/* Ask the user what to do when an interrupt is received. */
5080
5081static void
fba45db2 5082interrupt_query (void)
c906108c
SS
5083{
5084 target_terminal_ours ();
5085
74531fed 5086 if (target_can_async_p ())
c906108c 5087 {
74531fed 5088 signal (SIGINT, handle_sigint);
315a522e 5089 deprecated_throw_reason (RETURN_QUIT);
c906108c 5090 }
74531fed
PA
5091 else
5092 {
9e2f0ad4
HZ
5093 if (query (_("Interrupted while waiting for the program.\n\
5094Give up (and stop debugging it)? ")))
74531fed 5095 {
78a095c3 5096 remote_unpush_target ();
74531fed
PA
5097 deprecated_throw_reason (RETURN_QUIT);
5098 }
5099 }
c906108c
SS
5100
5101 target_terminal_inferior ();
5102}
5103
6426a772
JM
5104/* Enable/disable target terminal ownership. Most targets can use
5105 terminal groups to control terminal ownership. Remote targets are
5106 different in that explicit transfer of ownership to/from GDB/target
23860348 5107 is required. */
6426a772
JM
5108
5109static void
75c99385 5110remote_terminal_inferior (void)
6426a772 5111{
c6ebd6cf 5112 if (!target_async_permitted)
75c99385
PA
5113 /* Nothing to do. */
5114 return;
5115
d9d2d8b6
PA
5116 /* FIXME: cagney/1999-09-27: Make calls to target_terminal_*()
5117 idempotent. The event-loop GDB talking to an asynchronous target
5118 with a synchronous command calls this function from both
5119 event-top.c and infrun.c/infcmd.c. Once GDB stops trying to
5120 transfer the terminal to the target when it shouldn't this guard
5121 can go away. */
6426a772
JM
5122 if (!remote_async_terminal_ours_p)
5123 return;
5124 delete_file_handler (input_fd);
5125 remote_async_terminal_ours_p = 0;
5126 initialize_sigint_signal_handler ();
5127 /* NOTE: At this point we could also register our selves as the
5128 recipient of all input. Any characters typed could then be
23860348 5129 passed on down to the target. */
6426a772
JM
5130}
5131
5132static void
75c99385 5133remote_terminal_ours (void)
6426a772 5134{
c6ebd6cf 5135 if (!target_async_permitted)
75c99385
PA
5136 /* Nothing to do. */
5137 return;
5138
5139 /* See FIXME in remote_terminal_inferior. */
6426a772
JM
5140 if (remote_async_terminal_ours_p)
5141 return;
5142 cleanup_sigint_signal_handler (NULL);
5143 add_file_handler (input_fd, stdin_event_handler, 0);
5144 remote_async_terminal_ours_p = 1;
5145}
5146
176a6961 5147static void
917317f4 5148remote_console_output (char *msg)
c906108c
SS
5149{
5150 char *p;
5151
c5aa993b 5152 for (p = msg; p[0] && p[1]; p += 2)
c906108c
SS
5153 {
5154 char tb[2];
5155 char c = fromhex (p[0]) * 16 + fromhex (p[1]);
a744cf53 5156
c906108c
SS
5157 tb[0] = c;
5158 tb[1] = 0;
43ff13b4 5159 fputs_unfiltered (tb, gdb_stdtarg);
c906108c 5160 }
00db5b94
PA
5161 gdb_flush (gdb_stdtarg);
5162}
74531fed
PA
5163
5164typedef struct cached_reg
5165{
5166 int num;
5167 gdb_byte data[MAX_REGISTER_SIZE];
5168} cached_reg_t;
5169
5170DEF_VEC_O(cached_reg_t);
5171
722247f1 5172typedef struct stop_reply
74531fed 5173{
722247f1 5174 struct notif_event base;
74531fed 5175
722247f1 5176 /* The identifier of the thread about this event */
74531fed
PA
5177 ptid_t ptid;
5178
5179 struct target_waitstatus ws;
5180
15148d6a
PA
5181 /* Expedited registers. This makes remote debugging a bit more
5182 efficient for those targets that provide critical registers as
5183 part of their normal status mechanism (as another roundtrip to
5184 fetch them is avoided). */
74531fed
PA
5185 VEC(cached_reg_t) *regcache;
5186
5187 int stopped_by_watchpoint_p;
5188 CORE_ADDR watch_data_address;
5189
5190 int solibs_changed;
5191 int replay_event;
dc146f7c
VP
5192
5193 int core;
722247f1 5194} *stop_reply_p;
a744cf53 5195
722247f1
YQ
5196DECLARE_QUEUE_P (stop_reply_p);
5197DEFINE_QUEUE_P (stop_reply_p);
5198/* The list of already fetched and acknowledged stop events. This
5199 queue is used for notification Stop, and other notifications
5200 don't need queue for their events, because the notification events
5201 of Stop can't be consumed immediately, so that events should be
5202 queued first, and be consumed by remote_wait_{ns,as} one per
5203 time. Other notifications can consume their events immediately,
5204 so queue is not needed for them. */
5205static QUEUE (stop_reply_p) *stop_reply_queue;
74531fed
PA
5206
5207static void
5208stop_reply_xfree (struct stop_reply *r)
5209{
5210 if (r != NULL)
5211 {
5212 VEC_free (cached_reg_t, r->regcache);
5213 xfree (r);
5214 }
c906108c
SS
5215}
5216
722247f1
YQ
5217static void
5218remote_notif_stop_parse (struct notif_client *self, char *buf,
5219 struct notif_event *event)
5220{
5221 remote_parse_stop_reply (buf, (struct stop_reply *) event);
5222}
5223
5224static void
5225remote_notif_stop_ack (struct notif_client *self, char *buf,
5226 struct notif_event *event)
5227{
5228 struct stop_reply *stop_reply = (struct stop_reply *) event;
5229
5230 /* acknowledge */
5231 putpkt ((char *) self->ack_command);
5232
5233 if (stop_reply->ws.kind == TARGET_WAITKIND_IGNORE)
5234 /* We got an unknown stop reply. */
5235 error (_("Unknown stop reply"));
5236
5237 push_stop_reply (stop_reply);
5238}
5239
5240static int
5241remote_notif_stop_can_get_pending_events (struct notif_client *self)
5242{
5243 /* We can't get pending events in remote_notif_process for
5244 notification stop, and we have to do this in remote_wait_ns
5245 instead. If we fetch all queued events from stub, remote stub
5246 may exit and we have no chance to process them back in
5247 remote_wait_ns. */
5248 mark_async_event_handler (remote_async_inferior_event_token);
5249 return 0;
5250}
5251
5252static void
5253stop_reply_dtr (struct notif_event *event)
5254{
5255 struct stop_reply *r = (struct stop_reply *) event;
5256
5257 VEC_free (cached_reg_t, r->regcache);
5258}
5259
5260static struct notif_event *
5261remote_notif_stop_alloc_reply (void)
5262{
5263 struct notif_event *r
5264 = (struct notif_event *) XMALLOC (struct stop_reply);
5265
5266 r->dtr = stop_reply_dtr;
5267
5268 return r;
5269}
5270
5271/* A client of notification Stop. */
5272
5273struct notif_client notif_client_stop =
5274{
5275 "Stop",
5276 "vStopped",
5277 remote_notif_stop_parse,
5278 remote_notif_stop_ack,
5279 remote_notif_stop_can_get_pending_events,
5280 remote_notif_stop_alloc_reply,
5281 NULL,
5282};
5283
5284/* A parameter to pass data in and out. */
5285
5286struct queue_iter_param
5287{
5288 void *input;
5289 struct stop_reply *output;
5290};
5291
5292/* Remove all queue elements meet the condition it checks. */
5293
5294static int
5295remote_notif_remove_all (QUEUE (stop_reply_p) *q,
5296 QUEUE_ITER (stop_reply_p) *iter,
5297 stop_reply_p event,
5298 void *data)
5299{
5300 struct queue_iter_param *param = data;
5301 struct inferior *inf = param->input;
5302
5303 if (inf == NULL || ptid_get_pid (event->ptid) == inf->pid)
5304 {
5305 stop_reply_xfree (event);
5306 QUEUE_remove_elem (stop_reply_p, q, iter);
5307 }
5308
5309 return 1;
5310}
5311
5f4cf0bb 5312/* Discard all pending stop replies of inferior INF. If INF is NULL,
74531fed 5313 discard everything. */
c906108c 5314
74531fed 5315static void
5f4cf0bb 5316discard_pending_stop_replies (struct inferior *inf)
c906108c 5317{
722247f1
YQ
5318 int i;
5319 struct queue_iter_param param;
5320 struct stop_reply *reply
5321 = (struct stop_reply *) notif_client_stop.pending_event;
c906108c 5322
74531fed 5323 /* Discard the in-flight notification. */
722247f1 5324 if (reply != NULL
5f4cf0bb 5325 && (inf == NULL
722247f1 5326 || ptid_get_pid (reply->ptid) == inf->pid))
74531fed 5327 {
722247f1
YQ
5328 stop_reply_xfree (reply);
5329 notif_client_stop.pending_event = NULL;
74531fed 5330 }
c906108c 5331
722247f1
YQ
5332 param.input = inf;
5333 param.output = NULL;
74531fed
PA
5334 /* Discard the stop replies we have already pulled with
5335 vStopped. */
722247f1
YQ
5336 QUEUE_iterate (stop_reply_p, stop_reply_queue,
5337 remote_notif_remove_all, &param);
5338}
74531fed 5339
722247f1
YQ
5340/* A parameter to pass data in and out. */
5341
5342static int
5343remote_notif_remove_once_on_match (QUEUE (stop_reply_p) *q,
5344 QUEUE_ITER (stop_reply_p) *iter,
5345 stop_reply_p event,
5346 void *data)
5347{
5348 struct queue_iter_param *param = data;
5349 ptid_t *ptid = param->input;
5350
5351 if (ptid_match (event->ptid, *ptid))
5352 {
5353 param->output = event;
5354 QUEUE_remove_elem (stop_reply_p, q, iter);
5355 return 0;
c8e38a49 5356 }
722247f1
YQ
5357
5358 return 1;
74531fed 5359}
43ff13b4 5360
722247f1
YQ
5361/* Remove the first reply in 'stop_reply_queue' which matches
5362 PTID. */
2e9f7625 5363
722247f1
YQ
5364static struct stop_reply *
5365remote_notif_remove_queued_reply (ptid_t ptid)
74531fed 5366{
722247f1
YQ
5367 struct queue_iter_param param;
5368
5369 param.input = &ptid;
5370 param.output = NULL;
5371
5372 QUEUE_iterate (stop_reply_p, stop_reply_queue,
5373 remote_notif_remove_once_on_match, &param);
5374 if (notif_debug)
5375 fprintf_unfiltered (gdb_stdlog,
5376 "notif: discard queued event: 'Stop' in %s\n",
5377 target_pid_to_str (ptid));
a744cf53 5378
722247f1 5379 return param.output;
74531fed 5380}
75c99385 5381
74531fed
PA
5382/* Look for a queued stop reply belonging to PTID. If one is found,
5383 remove it from the queue, and return it. Returns NULL if none is
5384 found. If there are still queued events left to process, tell the
5385 event loop to get back to target_wait soon. */
e24a49d8 5386
74531fed
PA
5387static struct stop_reply *
5388queued_stop_reply (ptid_t ptid)
5389{
722247f1 5390 struct stop_reply *r = remote_notif_remove_queued_reply (ptid);
74531fed 5391
722247f1 5392 if (!QUEUE_is_empty (stop_reply_p, stop_reply_queue))
74531fed
PA
5393 /* There's still at least an event left. */
5394 mark_async_event_handler (remote_async_inferior_event_token);
5395
722247f1 5396 return r;
74531fed
PA
5397}
5398
5399/* Push a fully parsed stop reply in the stop reply queue. Since we
5400 know that we now have at least one queued event left to pass to the
5401 core side, tell the event loop to get back to target_wait soon. */
5402
5403static void
5404push_stop_reply (struct stop_reply *new_event)
5405{
722247f1 5406 QUEUE_enque (stop_reply_p, stop_reply_queue, new_event);
74531fed 5407
722247f1
YQ
5408 if (notif_debug)
5409 fprintf_unfiltered (gdb_stdlog,
5410 "notif: push 'Stop' %s to queue %d\n",
5411 target_pid_to_str (new_event->ptid),
5412 QUEUE_length (stop_reply_p,
5413 stop_reply_queue));
74531fed
PA
5414
5415 mark_async_event_handler (remote_async_inferior_event_token);
5416}
5417
722247f1
YQ
5418static int
5419stop_reply_match_ptid_and_ws (QUEUE (stop_reply_p) *q,
5420 QUEUE_ITER (stop_reply_p) *iter,
5421 struct stop_reply *event,
5422 void *data)
5423{
5424 ptid_t *ptid = data;
5425
5426 return !(ptid_equal (*ptid, event->ptid)
5427 && event->ws.kind == TARGET_WAITKIND_STOPPED);
5428}
5429
74531fed
PA
5430/* Returns true if we have a stop reply for PTID. */
5431
5432static int
5433peek_stop_reply (ptid_t ptid)
5434{
722247f1
YQ
5435 return !QUEUE_iterate (stop_reply_p, stop_reply_queue,
5436 stop_reply_match_ptid_and_ws, &ptid);
74531fed
PA
5437}
5438
5439/* Parse the stop reply in BUF. Either the function succeeds, and the
5440 result is stored in EVENT, or throws an error. */
5441
5442static void
5443remote_parse_stop_reply (char *buf, struct stop_reply *event)
5444{
5445 struct remote_arch_state *rsa = get_remote_arch_state ();
5446 ULONGEST addr;
5447 char *p;
5448
5449 event->ptid = null_ptid;
5450 event->ws.kind = TARGET_WAITKIND_IGNORE;
5451 event->ws.value.integer = 0;
5452 event->solibs_changed = 0;
5453 event->replay_event = 0;
5454 event->stopped_by_watchpoint_p = 0;
5455 event->regcache = NULL;
dc146f7c 5456 event->core = -1;
74531fed
PA
5457
5458 switch (buf[0])
5459 {
5460 case 'T': /* Status with PC, SP, FP, ... */
cea39f65
MS
5461 /* Expedited reply, containing Signal, {regno, reg} repeat. */
5462 /* format is: 'Tssn...:r...;n...:r...;n...:r...;#cc', where
5463 ss = signal number
5464 n... = register number
5465 r... = register contents
5466 */
5467
5468 p = &buf[3]; /* after Txx */
5469 while (*p)
5470 {
5471 char *p1;
5472 char *p_temp;
5473 int fieldsize;
5474 LONGEST pnum = 0;
43ff13b4 5475
cea39f65
MS
5476 /* If the packet contains a register number, save it in
5477 pnum and set p1 to point to the character following it.
5478 Otherwise p1 points to p. */
3c3bea1c 5479
cea39f65
MS
5480 /* If this packet is an awatch packet, don't parse the 'a'
5481 as a register number. */
c8e38a49 5482
dc146f7c
VP
5483 if (strncmp (p, "awatch", strlen("awatch")) != 0
5484 && strncmp (p, "core", strlen ("core") != 0))
cea39f65
MS
5485 {
5486 /* Read the ``P'' register number. */
5487 pnum = strtol (p, &p_temp, 16);
5488 p1 = p_temp;
5489 }
5490 else
5491 p1 = p;
802188a7 5492
cea39f65
MS
5493 if (p1 == p) /* No register number present here. */
5494 {
5495 p1 = strchr (p, ':');
5496 if (p1 == NULL)
5497 error (_("Malformed packet(a) (missing colon): %s\n\
c8e38a49 5498Packet: '%s'\n"),
cea39f65
MS
5499 p, buf);
5500 if (strncmp (p, "thread", p1 - p) == 0)
5501 event->ptid = read_ptid (++p1, &p);
5502 else if ((strncmp (p, "watch", p1 - p) == 0)
5503 || (strncmp (p, "rwatch", p1 - p) == 0)
5504 || (strncmp (p, "awatch", p1 - p) == 0))
5505 {
5506 event->stopped_by_watchpoint_p = 1;
5507 p = unpack_varlen_hex (++p1, &addr);
5508 event->watch_data_address = (CORE_ADDR) addr;
5509 }
5510 else if (strncmp (p, "library", p1 - p) == 0)
5511 {
5512 p1++;
5513 p_temp = p1;
5514 while (*p_temp && *p_temp != ';')
5515 p_temp++;
c8e38a49 5516
cea39f65
MS
5517 event->solibs_changed = 1;
5518 p = p_temp;
5519 }
5520 else if (strncmp (p, "replaylog", p1 - p) == 0)
5521 {
5522 /* NO_HISTORY event.
5523 p1 will indicate "begin" or "end", but
5524 it makes no difference for now, so ignore it. */
5525 event->replay_event = 1;
5526 p_temp = strchr (p1 + 1, ';');
5527 if (p_temp)
c8e38a49 5528 p = p_temp;
cea39f65 5529 }
dc146f7c
VP
5530 else if (strncmp (p, "core", p1 - p) == 0)
5531 {
5532 ULONGEST c;
a744cf53 5533
dc146f7c
VP
5534 p = unpack_varlen_hex (++p1, &c);
5535 event->core = c;
5536 }
cea39f65
MS
5537 else
5538 {
5539 /* Silently skip unknown optional info. */
5540 p_temp = strchr (p1 + 1, ';');
5541 if (p_temp)
5542 p = p_temp;
5543 }
5544 }
5545 else
5546 {
5547 struct packet_reg *reg = packet_reg_from_pnum (rsa, pnum);
5548 cached_reg_t cached_reg;
74531fed 5549
cea39f65 5550 p = p1;
75c99385 5551
cea39f65
MS
5552 if (*p != ':')
5553 error (_("Malformed packet(b) (missing colon): %s\n\
8a3fe4f8 5554Packet: '%s'\n"),
cea39f65
MS
5555 p, buf);
5556 ++p;
43ff13b4 5557
cea39f65
MS
5558 if (reg == NULL)
5559 error (_("Remote sent bad register number %s: %s\n\
8a3fe4f8 5560Packet: '%s'\n"),
7c47795c 5561 hex_string (pnum), p, buf);
c8e38a49 5562
cea39f65 5563 cached_reg.num = reg->regnum;
4100683b 5564
cea39f65 5565 fieldsize = hex2bin (p, cached_reg.data,
f5656ead 5566 register_size (target_gdbarch (),
cea39f65
MS
5567 reg->regnum));
5568 p += 2 * fieldsize;
f5656ead 5569 if (fieldsize < register_size (target_gdbarch (),
cea39f65
MS
5570 reg->regnum))
5571 warning (_("Remote reply is too short: %s"), buf);
74531fed 5572
cea39f65
MS
5573 VEC_safe_push (cached_reg_t, event->regcache, &cached_reg);
5574 }
c8e38a49 5575
cea39f65
MS
5576 if (*p != ';')
5577 error (_("Remote register badly formatted: %s\nhere: %s"),
5578 buf, p);
5579 ++p;
5580 }
c8e38a49
PA
5581 /* fall through */
5582 case 'S': /* Old style status, just signal only. */
74531fed
PA
5583 if (event->solibs_changed)
5584 event->ws.kind = TARGET_WAITKIND_LOADED;
5585 else if (event->replay_event)
5586 event->ws.kind = TARGET_WAITKIND_NO_HISTORY;
c8e38a49
PA
5587 else
5588 {
74531fed 5589 event->ws.kind = TARGET_WAITKIND_STOPPED;
2ea28649 5590 event->ws.value.sig = (enum gdb_signal)
c8e38a49
PA
5591 (((fromhex (buf[1])) << 4) + (fromhex (buf[2])));
5592 }
5593 break;
5594 case 'W': /* Target exited. */
5595 case 'X':
5596 {
5597 char *p;
5598 int pid;
5599 ULONGEST value;
82f73884 5600
c8e38a49
PA
5601 /* GDB used to accept only 2 hex chars here. Stubs should
5602 only send more if they detect GDB supports multi-process
5603 support. */
5604 p = unpack_varlen_hex (&buf[1], &value);
82f73884 5605
c8e38a49
PA
5606 if (buf[0] == 'W')
5607 {
5608 /* The remote process exited. */
74531fed
PA
5609 event->ws.kind = TARGET_WAITKIND_EXITED;
5610 event->ws.value.integer = value;
c8e38a49
PA
5611 }
5612 else
5613 {
5614 /* The remote process exited with a signal. */
74531fed 5615 event->ws.kind = TARGET_WAITKIND_SIGNALLED;
2ea28649 5616 event->ws.value.sig = (enum gdb_signal) value;
c8e38a49 5617 }
82f73884 5618
c8e38a49
PA
5619 /* If no process is specified, assume inferior_ptid. */
5620 pid = ptid_get_pid (inferior_ptid);
5621 if (*p == '\0')
5622 ;
5623 else if (*p == ';')
5624 {
5625 p++;
5626
5627 if (p == '\0')
82f73884 5628 ;
c8e38a49
PA
5629 else if (strncmp (p,
5630 "process:", sizeof ("process:") - 1) == 0)
82f73884 5631 {
c8e38a49 5632 ULONGEST upid;
a744cf53 5633
c8e38a49
PA
5634 p += sizeof ("process:") - 1;
5635 unpack_varlen_hex (p, &upid);
5636 pid = upid;
82f73884
PA
5637 }
5638 else
5639 error (_("unknown stop reply packet: %s"), buf);
43ff13b4 5640 }
c8e38a49
PA
5641 else
5642 error (_("unknown stop reply packet: %s"), buf);
74531fed
PA
5643 event->ptid = pid_to_ptid (pid);
5644 }
5645 break;
5646 }
5647
5648 if (non_stop && ptid_equal (event->ptid, null_ptid))
5649 error (_("No process or thread specified in stop reply: %s"), buf);
5650}
5651
722247f1
YQ
5652/* When the stub wants to tell GDB about a new notification reply, it
5653 sends a notification (%Stop, for example). Those can come it at
5654 any time, hence, we have to make sure that any pending
5655 putpkt/getpkt sequence we're making is finished, before querying
5656 the stub for more events with the corresponding ack command
5657 (vStopped, for example). E.g., if we started a vStopped sequence
5658 immediately upon receiving the notification, something like this
5659 could happen:
74531fed
PA
5660
5661 1.1) --> Hg 1
5662 1.2) <-- OK
5663 1.3) --> g
5664 1.4) <-- %Stop
5665 1.5) --> vStopped
5666 1.6) <-- (registers reply to step #1.3)
5667
5668 Obviously, the reply in step #1.6 would be unexpected to a vStopped
5669 query.
5670
796cb314 5671 To solve this, whenever we parse a %Stop notification successfully,
74531fed
PA
5672 we mark the REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN, and carry on
5673 doing whatever we were doing:
5674
5675 2.1) --> Hg 1
5676 2.2) <-- OK
5677 2.3) --> g
5678 2.4) <-- %Stop
5679 <GDB marks the REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN>
5680 2.5) <-- (registers reply to step #2.3)
5681
5682 Eventualy after step #2.5, we return to the event loop, which
5683 notices there's an event on the
5684 REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN event and calls the
5685 associated callback --- the function below. At this point, we're
5686 always safe to start a vStopped sequence. :
5687
5688 2.6) --> vStopped
5689 2.7) <-- T05 thread:2
5690 2.8) --> vStopped
5691 2.9) --> OK
5692*/
5693
722247f1
YQ
5694void
5695remote_notif_get_pending_events (struct notif_client *nc)
74531fed
PA
5696{
5697 struct remote_state *rs = get_remote_state ();
74531fed 5698
722247f1 5699 if (nc->pending_event)
74531fed 5700 {
722247f1
YQ
5701 if (notif_debug)
5702 fprintf_unfiltered (gdb_stdlog,
5703 "notif: process: '%s' ack pending event\n",
5704 nc->name);
74531fed 5705
722247f1
YQ
5706 /* acknowledge */
5707 nc->ack (nc, rs->buf, nc->pending_event);
5708 nc->pending_event = NULL;
74531fed
PA
5709
5710 while (1)
5711 {
5712 getpkt (&rs->buf, &rs->buf_size, 0);
5713 if (strcmp (rs->buf, "OK") == 0)
5714 break;
5715 else
722247f1 5716 remote_notif_ack (nc, rs->buf);
74531fed
PA
5717 }
5718 }
722247f1
YQ
5719 else
5720 {
5721 if (notif_debug)
5722 fprintf_unfiltered (gdb_stdlog,
5723 "notif: process: '%s' no pending reply\n",
5724 nc->name);
5725 }
74531fed
PA
5726}
5727
74531fed
PA
5728/* Called when it is decided that STOP_REPLY holds the info of the
5729 event that is to be returned to the core. This function always
5730 destroys STOP_REPLY. */
5731
5732static ptid_t
5733process_stop_reply (struct stop_reply *stop_reply,
5734 struct target_waitstatus *status)
5735{
5736 ptid_t ptid;
5737
5738 *status = stop_reply->ws;
5739 ptid = stop_reply->ptid;
5740
5741 /* If no thread/process was reported by the stub, assume the current
5742 inferior. */
5743 if (ptid_equal (ptid, null_ptid))
5744 ptid = inferior_ptid;
5745
5f3563ea
PA
5746 if (status->kind != TARGET_WAITKIND_EXITED
5747 && status->kind != TARGET_WAITKIND_SIGNALLED)
74531fed 5748 {
5f3563ea
PA
5749 /* Expedited registers. */
5750 if (stop_reply->regcache)
5751 {
217f1f79 5752 struct regcache *regcache
f5656ead 5753 = get_thread_arch_regcache (ptid, target_gdbarch ());
5f3563ea
PA
5754 cached_reg_t *reg;
5755 int ix;
5756
5757 for (ix = 0;
5758 VEC_iterate(cached_reg_t, stop_reply->regcache, ix, reg);
5759 ix++)
217f1f79 5760 regcache_raw_supply (regcache, reg->num, reg->data);
5f3563ea
PA
5761 VEC_free (cached_reg_t, stop_reply->regcache);
5762 }
74531fed 5763
5f3563ea
PA
5764 remote_stopped_by_watchpoint_p = stop_reply->stopped_by_watchpoint_p;
5765 remote_watch_data_address = stop_reply->watch_data_address;
1941c569
PA
5766
5767 remote_notice_new_inferior (ptid, 0);
dc146f7c 5768 demand_private_info (ptid)->core = stop_reply->core;
74531fed
PA
5769 }
5770
74531fed
PA
5771 stop_reply_xfree (stop_reply);
5772 return ptid;
5773}
5774
5775/* The non-stop mode version of target_wait. */
5776
5777static ptid_t
47608cb1 5778remote_wait_ns (ptid_t ptid, struct target_waitstatus *status, int options)
74531fed
PA
5779{
5780 struct remote_state *rs = get_remote_state ();
74531fed
PA
5781 struct stop_reply *stop_reply;
5782 int ret;
fee9eda9 5783 int is_notif = 0;
74531fed
PA
5784
5785 /* If in non-stop mode, get out of getpkt even if a
5786 notification is received. */
5787
5788 ret = getpkt_or_notif_sane (&rs->buf, &rs->buf_size,
fee9eda9 5789 0 /* forever */, &is_notif);
74531fed
PA
5790 while (1)
5791 {
fee9eda9 5792 if (ret != -1 && !is_notif)
74531fed
PA
5793 switch (rs->buf[0])
5794 {
5795 case 'E': /* Error of some sort. */
5796 /* We're out of sync with the target now. Did it continue
5797 or not? We can't tell which thread it was in non-stop,
5798 so just ignore this. */
5799 warning (_("Remote failure reply: %s"), rs->buf);
5800 break;
5801 case 'O': /* Console output. */
5802 remote_console_output (rs->buf + 1);
5803 break;
5804 default:
5805 warning (_("Invalid remote reply: %s"), rs->buf);
5806 break;
5807 }
5808
5809 /* Acknowledge a pending stop reply that may have arrived in the
5810 mean time. */
722247f1
YQ
5811 if (notif_client_stop.pending_event != NULL)
5812 remote_notif_get_pending_events (&notif_client_stop);
74531fed
PA
5813
5814 /* If indeed we noticed a stop reply, we're done. */
5815 stop_reply = queued_stop_reply (ptid);
5816 if (stop_reply != NULL)
5817 return process_stop_reply (stop_reply, status);
5818
47608cb1 5819 /* Still no event. If we're just polling for an event, then
74531fed 5820 return to the event loop. */
47608cb1 5821 if (options & TARGET_WNOHANG)
74531fed
PA
5822 {
5823 status->kind = TARGET_WAITKIND_IGNORE;
5824 return minus_one_ptid;
5825 }
5826
47608cb1 5827 /* Otherwise do a blocking wait. */
74531fed 5828 ret = getpkt_or_notif_sane (&rs->buf, &rs->buf_size,
fee9eda9 5829 1 /* forever */, &is_notif);
74531fed
PA
5830 }
5831}
5832
5833/* Wait until the remote machine stops, then return, storing status in
5834 STATUS just as `wait' would. */
5835
5836static ptid_t
47608cb1 5837remote_wait_as (ptid_t ptid, struct target_waitstatus *status, int options)
74531fed
PA
5838{
5839 struct remote_state *rs = get_remote_state ();
74531fed 5840 ptid_t event_ptid = null_ptid;
cea39f65 5841 char *buf;
74531fed
PA
5842 struct stop_reply *stop_reply;
5843
47608cb1
PA
5844 again:
5845
74531fed
PA
5846 status->kind = TARGET_WAITKIND_IGNORE;
5847 status->value.integer = 0;
5848
5849 stop_reply = queued_stop_reply (ptid);
5850 if (stop_reply != NULL)
5851 return process_stop_reply (stop_reply, status);
5852
5853 if (rs->cached_wait_status)
5854 /* Use the cached wait status, but only once. */
5855 rs->cached_wait_status = 0;
5856 else
5857 {
5858 int ret;
722247f1 5859 int is_notif;
74531fed
PA
5860
5861 if (!target_is_async_p ())
5862 {
5863 ofunc = signal (SIGINT, remote_interrupt);
5864 /* If the user hit C-c before this packet, or between packets,
5865 pretend that it was hit right here. */
522002f9 5866 if (check_quit_flag ())
74531fed 5867 {
522002f9 5868 clear_quit_flag ();
74531fed
PA
5869 remote_interrupt (SIGINT);
5870 }
5871 }
5872
5873 /* FIXME: cagney/1999-09-27: If we're in async mode we should
5874 _never_ wait for ever -> test on target_is_async_p().
5875 However, before we do that we need to ensure that the caller
5876 knows how to take the target into/out of async mode. */
722247f1
YQ
5877 ret = getpkt_or_notif_sane (&rs->buf, &rs->buf_size,
5878 wait_forever_enabled_p, &is_notif);
5879
5880 /* GDB gets a notification. Return to core as this event is
5881 not interesting. */
5882 if (ret != -1 && is_notif)
5883 return minus_one_ptid;
5884
74531fed
PA
5885 if (!target_is_async_p ())
5886 signal (SIGINT, ofunc);
5887 }
5888
5889 buf = rs->buf;
5890
5891 remote_stopped_by_watchpoint_p = 0;
5892
5893 /* We got something. */
5894 rs->waiting_for_stop_reply = 0;
5895
3a29589a
DJ
5896 /* Assume that the target has acknowledged Ctrl-C unless we receive
5897 an 'F' or 'O' packet. */
5898 if (buf[0] != 'F' && buf[0] != 'O')
5899 rs->ctrlc_pending_p = 0;
5900
74531fed
PA
5901 switch (buf[0])
5902 {
5903 case 'E': /* Error of some sort. */
5904 /* We're out of sync with the target now. Did it continue or
5905 not? Not is more likely, so report a stop. */
5906 warning (_("Remote failure reply: %s"), buf);
5907 status->kind = TARGET_WAITKIND_STOPPED;
a493e3e2 5908 status->value.sig = GDB_SIGNAL_0;
74531fed
PA
5909 break;
5910 case 'F': /* File-I/O request. */
3a29589a
DJ
5911 remote_fileio_request (buf, rs->ctrlc_pending_p);
5912 rs->ctrlc_pending_p = 0;
74531fed
PA
5913 break;
5914 case 'T': case 'S': case 'X': case 'W':
5915 {
722247f1
YQ
5916 struct stop_reply *stop_reply
5917 = (struct stop_reply *) remote_notif_parse (&notif_client_stop,
5918 rs->buf);
74531fed 5919
74531fed 5920 event_ptid = process_stop_reply (stop_reply, status);
c8e38a49
PA
5921 break;
5922 }
5923 case 'O': /* Console output. */
5924 remote_console_output (buf + 1);
e24a49d8 5925
c8e38a49
PA
5926 /* The target didn't really stop; keep waiting. */
5927 rs->waiting_for_stop_reply = 1;
e24a49d8 5928
c8e38a49
PA
5929 break;
5930 case '\0':
a493e3e2 5931 if (last_sent_signal != GDB_SIGNAL_0)
c8e38a49
PA
5932 {
5933 /* Zero length reply means that we tried 'S' or 'C' and the
5934 remote system doesn't support it. */
5935 target_terminal_ours_for_output ();
5936 printf_filtered
5937 ("Can't send signals to this remote system. %s not sent.\n",
2ea28649 5938 gdb_signal_to_name (last_sent_signal));
a493e3e2 5939 last_sent_signal = GDB_SIGNAL_0;
c8e38a49
PA
5940 target_terminal_inferior ();
5941
5942 strcpy ((char *) buf, last_sent_step ? "s" : "c");
5943 putpkt ((char *) buf);
5944
5945 /* We just told the target to resume, so a stop reply is in
5946 order. */
e24a49d8 5947 rs->waiting_for_stop_reply = 1;
c8e38a49 5948 break;
43ff13b4 5949 }
c8e38a49
PA
5950 /* else fallthrough */
5951 default:
5952 warning (_("Invalid remote reply: %s"), buf);
5953 /* Keep waiting. */
5954 rs->waiting_for_stop_reply = 1;
5955 break;
43ff13b4 5956 }
c8e38a49 5957
c8e38a49 5958 if (status->kind == TARGET_WAITKIND_IGNORE)
47608cb1
PA
5959 {
5960 /* Nothing interesting happened. If we're doing a non-blocking
5961 poll, we're done. Otherwise, go back to waiting. */
5962 if (options & TARGET_WNOHANG)
5963 return minus_one_ptid;
5964 else
5965 goto again;
5966 }
74531fed
PA
5967 else if (status->kind != TARGET_WAITKIND_EXITED
5968 && status->kind != TARGET_WAITKIND_SIGNALLED)
82f73884
PA
5969 {
5970 if (!ptid_equal (event_ptid, null_ptid))
5971 record_currthread (event_ptid);
5972 else
5973 event_ptid = inferior_ptid;
43ff13b4 5974 }
74531fed
PA
5975 else
5976 /* A process exit. Invalidate our notion of current thread. */
5977 record_currthread (minus_one_ptid);
79d7f229 5978
82f73884 5979 return event_ptid;
43ff13b4
JM
5980}
5981
74531fed
PA
5982/* Wait until the remote machine stops, then return, storing status in
5983 STATUS just as `wait' would. */
5984
c8e38a49 5985static ptid_t
117de6a9 5986remote_wait (struct target_ops *ops,
47608cb1 5987 ptid_t ptid, struct target_waitstatus *status, int options)
c8e38a49
PA
5988{
5989 ptid_t event_ptid;
5990
74531fed 5991 if (non_stop)
47608cb1 5992 event_ptid = remote_wait_ns (ptid, status, options);
74531fed 5993 else
47608cb1 5994 event_ptid = remote_wait_as (ptid, status, options);
c8e38a49 5995
74531fed 5996 if (target_can_async_p ())
c8e38a49 5997 {
74531fed
PA
5998 /* If there are are events left in the queue tell the event loop
5999 to return here. */
722247f1 6000 if (!QUEUE_is_empty (stop_reply_p, stop_reply_queue))
74531fed 6001 mark_async_event_handler (remote_async_inferior_event_token);
c8e38a49 6002 }
c8e38a49
PA
6003
6004 return event_ptid;
6005}
6006
74ca34ce 6007/* Fetch a single register using a 'p' packet. */
c906108c 6008
b96ec7ac 6009static int
56be3814 6010fetch_register_using_p (struct regcache *regcache, struct packet_reg *reg)
b96ec7ac
AC
6011{
6012 struct remote_state *rs = get_remote_state ();
2e9f7625 6013 char *buf, *p;
b96ec7ac
AC
6014 char regp[MAX_REGISTER_SIZE];
6015 int i;
6016
74ca34ce
DJ
6017 if (remote_protocol_packets[PACKET_p].support == PACKET_DISABLE)
6018 return 0;
6019
6020 if (reg->pnum == -1)
6021 return 0;
6022
2e9f7625 6023 p = rs->buf;
fcad0fa4 6024 *p++ = 'p';
74ca34ce 6025 p += hexnumstr (p, reg->pnum);
fcad0fa4 6026 *p++ = '\0';
1f4437a4
MS
6027 putpkt (rs->buf);
6028 getpkt (&rs->buf, &rs->buf_size, 0);
3f9a994c 6029
2e9f7625
DJ
6030 buf = rs->buf;
6031
74ca34ce
DJ
6032 switch (packet_ok (buf, &remote_protocol_packets[PACKET_p]))
6033 {
6034 case PACKET_OK:
6035 break;
6036 case PACKET_UNKNOWN:
6037 return 0;
6038 case PACKET_ERROR:
27a9c0bf
MS
6039 error (_("Could not fetch register \"%s\"; remote failure reply '%s'"),
6040 gdbarch_register_name (get_regcache_arch (regcache),
6041 reg->regnum),
6042 buf);
74ca34ce 6043 }
3f9a994c
JB
6044
6045 /* If this register is unfetchable, tell the regcache. */
6046 if (buf[0] == 'x')
8480adf2 6047 {
56be3814 6048 regcache_raw_supply (regcache, reg->regnum, NULL);
8480adf2 6049 return 1;
b96ec7ac 6050 }
b96ec7ac 6051
3f9a994c
JB
6052 /* Otherwise, parse and supply the value. */
6053 p = buf;
6054 i = 0;
6055 while (p[0] != 0)
6056 {
6057 if (p[1] == 0)
74ca34ce 6058 error (_("fetch_register_using_p: early buf termination"));
3f9a994c
JB
6059
6060 regp[i++] = fromhex (p[0]) * 16 + fromhex (p[1]);
6061 p += 2;
6062 }
56be3814 6063 regcache_raw_supply (regcache, reg->regnum, regp);
3f9a994c 6064 return 1;
b96ec7ac
AC
6065}
6066
74ca34ce
DJ
6067/* Fetch the registers included in the target's 'g' packet. */
6068
29709017
DJ
6069static int
6070send_g_packet (void)
c906108c 6071{
d01949b6 6072 struct remote_state *rs = get_remote_state ();
cea39f65 6073 int buf_len;
c906108c 6074
bba74b36 6075 xsnprintf (rs->buf, get_remote_packet_size (), "g");
74ca34ce 6076 remote_send (&rs->buf, &rs->buf_size);
c906108c 6077
29709017
DJ
6078 /* We can get out of synch in various cases. If the first character
6079 in the buffer is not a hex character, assume that has happened
6080 and try to fetch another packet to read. */
6081 while ((rs->buf[0] < '0' || rs->buf[0] > '9')
6082 && (rs->buf[0] < 'A' || rs->buf[0] > 'F')
6083 && (rs->buf[0] < 'a' || rs->buf[0] > 'f')
6084 && rs->buf[0] != 'x') /* New: unavailable register value. */
6085 {
6086 if (remote_debug)
6087 fprintf_unfiltered (gdb_stdlog,
6088 "Bad register packet; fetching a new packet\n");
6089 getpkt (&rs->buf, &rs->buf_size, 0);
6090 }
6091
74ca34ce
DJ
6092 buf_len = strlen (rs->buf);
6093
6094 /* Sanity check the received packet. */
6095 if (buf_len % 2 != 0)
6096 error (_("Remote 'g' packet reply is of odd length: %s"), rs->buf);
29709017
DJ
6097
6098 return buf_len / 2;
6099}
6100
6101static void
56be3814 6102process_g_packet (struct regcache *regcache)
29709017 6103{
4a22f64d 6104 struct gdbarch *gdbarch = get_regcache_arch (regcache);
29709017
DJ
6105 struct remote_state *rs = get_remote_state ();
6106 struct remote_arch_state *rsa = get_remote_arch_state ();
6107 int i, buf_len;
6108 char *p;
6109 char *regs;
6110
6111 buf_len = strlen (rs->buf);
6112
6113 /* Further sanity checks, with knowledge of the architecture. */
74ca34ce
DJ
6114 if (buf_len > 2 * rsa->sizeof_g_packet)
6115 error (_("Remote 'g' packet reply is too long: %s"), rs->buf);
6116
6117 /* Save the size of the packet sent to us by the target. It is used
6118 as a heuristic when determining the max size of packets that the
6119 target can safely receive. */
6120 if (rsa->actual_register_packet_size == 0)
6121 rsa->actual_register_packet_size = buf_len;
6122
6123 /* If this is smaller than we guessed the 'g' packet would be,
6124 update our records. A 'g' reply that doesn't include a register's
6125 value implies either that the register is not available, or that
6126 the 'p' packet must be used. */
6127 if (buf_len < 2 * rsa->sizeof_g_packet)
b323314b 6128 {
74ca34ce
DJ
6129 rsa->sizeof_g_packet = buf_len / 2;
6130
4a22f64d 6131 for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
b96ec7ac 6132 {
74ca34ce
DJ
6133 if (rsa->regs[i].pnum == -1)
6134 continue;
6135
6136 if (rsa->regs[i].offset >= rsa->sizeof_g_packet)
6137 rsa->regs[i].in_g_packet = 0;
b96ec7ac 6138 else
74ca34ce 6139 rsa->regs[i].in_g_packet = 1;
b96ec7ac 6140 }
74ca34ce 6141 }
b323314b 6142
74ca34ce 6143 regs = alloca (rsa->sizeof_g_packet);
c906108c
SS
6144
6145 /* Unimplemented registers read as all bits zero. */
ea9c271d 6146 memset (regs, 0, rsa->sizeof_g_packet);
c906108c 6147
c906108c
SS
6148 /* Reply describes registers byte by byte, each byte encoded as two
6149 hex characters. Suck them all up, then supply them to the
6150 register cacheing/storage mechanism. */
6151
74ca34ce 6152 p = rs->buf;
ea9c271d 6153 for (i = 0; i < rsa->sizeof_g_packet; i++)
c906108c 6154 {
74ca34ce
DJ
6155 if (p[0] == 0 || p[1] == 0)
6156 /* This shouldn't happen - we adjusted sizeof_g_packet above. */
6157 internal_error (__FILE__, __LINE__,
9b20d036 6158 _("unexpected end of 'g' packet reply"));
74ca34ce 6159
c906108c 6160 if (p[0] == 'x' && p[1] == 'x')
c5aa993b 6161 regs[i] = 0; /* 'x' */
c906108c
SS
6162 else
6163 regs[i] = fromhex (p[0]) * 16 + fromhex (p[1]);
6164 p += 2;
6165 }
6166
a744cf53
MS
6167 for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
6168 {
6169 struct packet_reg *r = &rsa->regs[i];
6170
6171 if (r->in_g_packet)
6172 {
6173 if (r->offset * 2 >= strlen (rs->buf))
6174 /* This shouldn't happen - we adjusted in_g_packet above. */
6175 internal_error (__FILE__, __LINE__,
9b20d036 6176 _("unexpected end of 'g' packet reply"));
a744cf53
MS
6177 else if (rs->buf[r->offset * 2] == 'x')
6178 {
6179 gdb_assert (r->offset * 2 < strlen (rs->buf));
6180 /* The register isn't available, mark it as such (at
6181 the same time setting the value to zero). */
6182 regcache_raw_supply (regcache, r->regnum, NULL);
6183 }
6184 else
6185 regcache_raw_supply (regcache, r->regnum,
6186 regs + r->offset);
6187 }
6188 }
c906108c
SS
6189}
6190
29709017 6191static void
56be3814 6192fetch_registers_using_g (struct regcache *regcache)
29709017
DJ
6193{
6194 send_g_packet ();
56be3814 6195 process_g_packet (regcache);
29709017
DJ
6196}
6197
e6e4e701
PA
6198/* Make the remote selected traceframe match GDB's selected
6199 traceframe. */
6200
6201static void
6202set_remote_traceframe (void)
6203{
6204 int newnum;
6205
6206 if (remote_traceframe_number == get_traceframe_number ())
6207 return;
6208
6209 /* Avoid recursion, remote_trace_find calls us again. */
6210 remote_traceframe_number = get_traceframe_number ();
6211
6212 newnum = target_trace_find (tfind_number,
6213 get_traceframe_number (), 0, 0, NULL);
6214
6215 /* Should not happen. If it does, all bets are off. */
6216 if (newnum != get_traceframe_number ())
6217 warning (_("could not set remote traceframe"));
6218}
6219
74ca34ce 6220static void
28439f5e
PA
6221remote_fetch_registers (struct target_ops *ops,
6222 struct regcache *regcache, int regnum)
74ca34ce 6223{
74ca34ce
DJ
6224 struct remote_arch_state *rsa = get_remote_arch_state ();
6225 int i;
6226
e6e4e701 6227 set_remote_traceframe ();
79d7f229 6228 set_general_thread (inferior_ptid);
74ca34ce
DJ
6229
6230 if (regnum >= 0)
6231 {
6232 struct packet_reg *reg = packet_reg_from_regnum (rsa, regnum);
a744cf53 6233
74ca34ce
DJ
6234 gdb_assert (reg != NULL);
6235
6236 /* If this register might be in the 'g' packet, try that first -
6237 we are likely to read more than one register. If this is the
6238 first 'g' packet, we might be overly optimistic about its
6239 contents, so fall back to 'p'. */
6240 if (reg->in_g_packet)
6241 {
56be3814 6242 fetch_registers_using_g (regcache);
74ca34ce
DJ
6243 if (reg->in_g_packet)
6244 return;
6245 }
6246
56be3814 6247 if (fetch_register_using_p (regcache, reg))
74ca34ce
DJ
6248 return;
6249
6250 /* This register is not available. */
56be3814 6251 regcache_raw_supply (regcache, reg->regnum, NULL);
74ca34ce
DJ
6252
6253 return;
6254 }
6255
56be3814 6256 fetch_registers_using_g (regcache);
74ca34ce 6257
4a22f64d 6258 for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++)
74ca34ce 6259 if (!rsa->regs[i].in_g_packet)
56be3814 6260 if (!fetch_register_using_p (regcache, &rsa->regs[i]))
74ca34ce
DJ
6261 {
6262 /* This register is not available. */
56be3814 6263 regcache_raw_supply (regcache, i, NULL);
74ca34ce
DJ
6264 }
6265}
6266
c906108c
SS
6267/* Prepare to store registers. Since we may send them all (using a
6268 'G' request), we have to read out the ones we don't want to change
6269 first. */
6270
c5aa993b 6271static void
316f2060 6272remote_prepare_to_store (struct regcache *regcache)
c906108c 6273{
ea9c271d 6274 struct remote_arch_state *rsa = get_remote_arch_state ();
cf0e1e0d 6275 int i;
cfd77fa1 6276 gdb_byte buf[MAX_REGISTER_SIZE];
cf0e1e0d 6277
c906108c 6278 /* Make sure the entire registers array is valid. */
444abaca 6279 switch (remote_protocol_packets[PACKET_P].support)
5a2468f5
JM
6280 {
6281 case PACKET_DISABLE:
6282 case PACKET_SUPPORT_UNKNOWN:
cf0e1e0d 6283 /* Make sure all the necessary registers are cached. */
4a22f64d 6284 for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++)
ea9c271d 6285 if (rsa->regs[i].in_g_packet)
316f2060 6286 regcache_raw_read (regcache, rsa->regs[i].regnum, buf);
5a2468f5
JM
6287 break;
6288 case PACKET_ENABLE:
6289 break;
6290 }
6291}
6292
ad10f812 6293/* Helper: Attempt to store REGNUM using the P packet. Return fail IFF
23860348 6294 packet was not recognized. */
5a2468f5
JM
6295
6296static int
1f4437a4
MS
6297store_register_using_P (const struct regcache *regcache,
6298 struct packet_reg *reg)
5a2468f5 6299{
4a22f64d 6300 struct gdbarch *gdbarch = get_regcache_arch (regcache);
d01949b6 6301 struct remote_state *rs = get_remote_state ();
5a2468f5 6302 /* Try storing a single register. */
6d820c5c 6303 char *buf = rs->buf;
cfd77fa1 6304 gdb_byte regp[MAX_REGISTER_SIZE];
5a2468f5 6305 char *p;
5a2468f5 6306
74ca34ce
DJ
6307 if (remote_protocol_packets[PACKET_P].support == PACKET_DISABLE)
6308 return 0;
6309
6310 if (reg->pnum == -1)
6311 return 0;
6312
ea9c271d 6313 xsnprintf (buf, get_remote_packet_size (), "P%s=", phex_nz (reg->pnum, 0));
5a2468f5 6314 p = buf + strlen (buf);
56be3814 6315 regcache_raw_collect (regcache, reg->regnum, regp);
4a22f64d 6316 bin2hex (regp, p, register_size (gdbarch, reg->regnum));
1f4437a4
MS
6317 putpkt (rs->buf);
6318 getpkt (&rs->buf, &rs->buf_size, 0);
5a2468f5 6319
74ca34ce
DJ
6320 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_P]))
6321 {
6322 case PACKET_OK:
6323 return 1;
6324 case PACKET_ERROR:
27a9c0bf
MS
6325 error (_("Could not write register \"%s\"; remote failure reply '%s'"),
6326 gdbarch_register_name (gdbarch, reg->regnum), rs->buf);
74ca34ce
DJ
6327 case PACKET_UNKNOWN:
6328 return 0;
6329 default:
6330 internal_error (__FILE__, __LINE__, _("Bad result from packet_ok"));
6331 }
c906108c
SS
6332}
6333
23860348
MS
6334/* Store register REGNUM, or all registers if REGNUM == -1, from the
6335 contents of the register cache buffer. FIXME: ignores errors. */
c906108c
SS
6336
6337static void
56be3814 6338store_registers_using_G (const struct regcache *regcache)
c906108c 6339{
d01949b6 6340 struct remote_state *rs = get_remote_state ();
ea9c271d 6341 struct remote_arch_state *rsa = get_remote_arch_state ();
cfd77fa1 6342 gdb_byte *regs;
c906108c
SS
6343 char *p;
6344
193cb69f
AC
6345 /* Extract all the registers in the regcache copying them into a
6346 local buffer. */
6347 {
b323314b 6348 int i;
a744cf53 6349
ea9c271d
DJ
6350 regs = alloca (rsa->sizeof_g_packet);
6351 memset (regs, 0, rsa->sizeof_g_packet);
4a22f64d 6352 for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++)
193cb69f 6353 {
ea9c271d 6354 struct packet_reg *r = &rsa->regs[i];
a744cf53 6355
b323314b 6356 if (r->in_g_packet)
56be3814 6357 regcache_raw_collect (regcache, r->regnum, regs + r->offset);
193cb69f
AC
6358 }
6359 }
c906108c
SS
6360
6361 /* Command describes registers byte by byte,
6362 each byte encoded as two hex characters. */
6d820c5c 6363 p = rs->buf;
193cb69f 6364 *p++ = 'G';
74ca34ce
DJ
6365 /* remote_prepare_to_store insures that rsa->sizeof_g_packet gets
6366 updated. */
6367 bin2hex (regs, p, rsa->sizeof_g_packet);
1f4437a4
MS
6368 putpkt (rs->buf);
6369 getpkt (&rs->buf, &rs->buf_size, 0);
6370 if (packet_check_result (rs->buf) == PACKET_ERROR)
27a9c0bf
MS
6371 error (_("Could not write registers; remote failure reply '%s'"),
6372 rs->buf);
c906108c 6373}
74ca34ce
DJ
6374
6375/* Store register REGNUM, or all registers if REGNUM == -1, from the contents
6376 of the register cache buffer. FIXME: ignores errors. */
6377
6378static void
28439f5e
PA
6379remote_store_registers (struct target_ops *ops,
6380 struct regcache *regcache, int regnum)
74ca34ce 6381{
74ca34ce
DJ
6382 struct remote_arch_state *rsa = get_remote_arch_state ();
6383 int i;
6384
e6e4e701 6385 set_remote_traceframe ();
79d7f229 6386 set_general_thread (inferior_ptid);
74ca34ce
DJ
6387
6388 if (regnum >= 0)
6389 {
6390 struct packet_reg *reg = packet_reg_from_regnum (rsa, regnum);
a744cf53 6391
74ca34ce
DJ
6392 gdb_assert (reg != NULL);
6393
6394 /* Always prefer to store registers using the 'P' packet if
6395 possible; we often change only a small number of registers.
6396 Sometimes we change a larger number; we'd need help from a
6397 higher layer to know to use 'G'. */
56be3814 6398 if (store_register_using_P (regcache, reg))
74ca34ce
DJ
6399 return;
6400
6401 /* For now, don't complain if we have no way to write the
6402 register. GDB loses track of unavailable registers too
6403 easily. Some day, this may be an error. We don't have
0df8b418 6404 any way to read the register, either... */
74ca34ce
DJ
6405 if (!reg->in_g_packet)
6406 return;
6407
56be3814 6408 store_registers_using_G (regcache);
74ca34ce
DJ
6409 return;
6410 }
6411
56be3814 6412 store_registers_using_G (regcache);
74ca34ce 6413
4a22f64d 6414 for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++)
74ca34ce 6415 if (!rsa->regs[i].in_g_packet)
56be3814 6416 if (!store_register_using_P (regcache, &rsa->regs[i]))
74ca34ce
DJ
6417 /* See above for why we do not issue an error here. */
6418 continue;
6419}
c906108c
SS
6420\f
6421
6422/* Return the number of hex digits in num. */
6423
6424static int
fba45db2 6425hexnumlen (ULONGEST num)
c906108c
SS
6426{
6427 int i;
6428
6429 for (i = 0; num != 0; i++)
6430 num >>= 4;
6431
6432 return max (i, 1);
6433}
6434
2df3850c 6435/* Set BUF to the minimum number of hex digits representing NUM. */
c906108c
SS
6436
6437static int
fba45db2 6438hexnumstr (char *buf, ULONGEST num)
c906108c 6439{
c906108c 6440 int len = hexnumlen (num);
a744cf53 6441
2df3850c
JM
6442 return hexnumnstr (buf, num, len);
6443}
6444
c906108c 6445
2df3850c 6446/* Set BUF to the hex digits representing NUM, padded to WIDTH characters. */
c906108c 6447
2df3850c 6448static int
fba45db2 6449hexnumnstr (char *buf, ULONGEST num, int width)
2df3850c
JM
6450{
6451 int i;
6452
6453 buf[width] = '\0';
6454
6455 for (i = width - 1; i >= 0; i--)
c906108c 6456 {
c5aa993b 6457 buf[i] = "0123456789abcdef"[(num & 0xf)];
c906108c
SS
6458 num >>= 4;
6459 }
6460
2df3850c 6461 return width;
c906108c
SS
6462}
6463
23860348 6464/* Mask all but the least significant REMOTE_ADDRESS_SIZE bits. */
c906108c
SS
6465
6466static CORE_ADDR
fba45db2 6467remote_address_masked (CORE_ADDR addr)
c906108c 6468{
883b9c6c 6469 unsigned int address_size = remote_address_size;
a744cf53 6470
911c95a5
UW
6471 /* If "remoteaddresssize" was not set, default to target address size. */
6472 if (!address_size)
f5656ead 6473 address_size = gdbarch_addr_bit (target_gdbarch ());
911c95a5
UW
6474
6475 if (address_size > 0
6476 && address_size < (sizeof (ULONGEST) * 8))
c906108c
SS
6477 {
6478 /* Only create a mask when that mask can safely be constructed
23860348 6479 in a ULONGEST variable. */
c906108c 6480 ULONGEST mask = 1;
a744cf53 6481
911c95a5 6482 mask = (mask << address_size) - 1;
c906108c
SS
6483 addr &= mask;
6484 }
6485 return addr;
6486}
6487
a31ea83d
DJ
6488/* Convert BUFFER, binary data at least LEN bytes long, into escaped
6489 binary data in OUT_BUF. Set *OUT_LEN to the length of the data
6490 encoded in OUT_BUF, and return the number of bytes in OUT_BUF
6491 (which may be more than *OUT_LEN due to escape characters). The
6492 total number of bytes in the output buffer will be at most
6493 OUT_MAXLEN. */
6494
6495static int
6496remote_escape_output (const gdb_byte *buffer, int len,
6497 gdb_byte *out_buf, int *out_len,
6498 int out_maxlen)
6499{
6500 int input_index, output_index;
6501
6502 output_index = 0;
6503 for (input_index = 0; input_index < len; input_index++)
6504 {
6505 gdb_byte b = buffer[input_index];
6506
6507 if (b == '$' || b == '#' || b == '}')
6508 {
6509 /* These must be escaped. */
6510 if (output_index + 2 > out_maxlen)
6511 break;
6512 out_buf[output_index++] = '}';
6513 out_buf[output_index++] = b ^ 0x20;
6514 }
6515 else
6516 {
6517 if (output_index + 1 > out_maxlen)
6518 break;
6519 out_buf[output_index++] = b;
6520 }
6521 }
6522
6523 *out_len = input_index;
6524 return output_index;
6525}
6526
0876f84a
DJ
6527/* Convert BUFFER, escaped data LEN bytes long, into binary data
6528 in OUT_BUF. Return the number of bytes written to OUT_BUF.
6529 Raise an error if the total number of bytes exceeds OUT_MAXLEN.
6530
6531 This function reverses remote_escape_output. It allows more
6532 escaped characters than that function does, in particular because
6533 '*' must be escaped to avoid the run-length encoding processing
6534 in reading packets. */
6535
6536static int
6537remote_unescape_input (const gdb_byte *buffer, int len,
6538 gdb_byte *out_buf, int out_maxlen)
6539{
6540 int input_index, output_index;
6541 int escaped;
6542
6543 output_index = 0;
6544 escaped = 0;
6545 for (input_index = 0; input_index < len; input_index++)
6546 {
6547 gdb_byte b = buffer[input_index];
6548
6549 if (output_index + 1 > out_maxlen)
6550 {
6551 warning (_("Received too much data from remote target;"
6552 " ignoring overflow."));
6553 return output_index;
6554 }
6555
6556 if (escaped)
6557 {
6558 out_buf[output_index++] = b ^ 0x20;
6559 escaped = 0;
6560 }
6561 else if (b == '}')
6562 escaped = 1;
6563 else
6564 out_buf[output_index++] = b;
6565 }
6566
6567 if (escaped)
6568 error (_("Unmatched escape character in target response."));
6569
6570 return output_index;
6571}
6572
c906108c
SS
6573/* Determine whether the remote target supports binary downloading.
6574 This is accomplished by sending a no-op memory write of zero length
6575 to the target at the specified address. It does not suffice to send
23860348
MS
6576 the whole packet, since many stubs strip the eighth bit and
6577 subsequently compute a wrong checksum, which causes real havoc with
6578 remote_write_bytes.
7a292a7a 6579
96baa820 6580 NOTE: This can still lose if the serial line is not eight-bit
0df8b418 6581 clean. In cases like this, the user should clear "remote
23860348 6582 X-packet". */
96baa820 6583
c906108c 6584static void
fba45db2 6585check_binary_download (CORE_ADDR addr)
c906108c 6586{
d01949b6 6587 struct remote_state *rs = get_remote_state ();
24b06219 6588
444abaca 6589 switch (remote_protocol_packets[PACKET_X].support)
c906108c 6590 {
96baa820
JM
6591 case PACKET_DISABLE:
6592 break;
6593 case PACKET_ENABLE:
6594 break;
6595 case PACKET_SUPPORT_UNKNOWN:
6596 {
96baa820 6597 char *p;
802188a7 6598
2e9f7625 6599 p = rs->buf;
96baa820
JM
6600 *p++ = 'X';
6601 p += hexnumstr (p, (ULONGEST) addr);
6602 *p++ = ',';
6603 p += hexnumstr (p, (ULONGEST) 0);
6604 *p++ = ':';
6605 *p = '\0';
802188a7 6606
2e9f7625 6607 putpkt_binary (rs->buf, (int) (p - rs->buf));
6d820c5c 6608 getpkt (&rs->buf, &rs->buf_size, 0);
c906108c 6609
2e9f7625 6610 if (rs->buf[0] == '\0')
96baa820
JM
6611 {
6612 if (remote_debug)
6613 fprintf_unfiltered (gdb_stdlog,
3e43a32a
MS
6614 "binary downloading NOT "
6615 "supported by target\n");
444abaca 6616 remote_protocol_packets[PACKET_X].support = PACKET_DISABLE;
96baa820
JM
6617 }
6618 else
6619 {
6620 if (remote_debug)
6621 fprintf_unfiltered (gdb_stdlog,
64b9b334 6622 "binary downloading supported by target\n");
444abaca 6623 remote_protocol_packets[PACKET_X].support = PACKET_ENABLE;
96baa820
JM
6624 }
6625 break;
6626 }
c906108c
SS
6627 }
6628}
6629
6630/* Write memory data directly to the remote machine.
6631 This does not inform the data cache; the data cache uses this.
a76d924d 6632 HEADER is the starting part of the packet.
c906108c
SS
6633 MEMADDR is the address in the remote memory space.
6634 MYADDR is the address of the buffer in our space.
6635 LEN is the number of bytes.
a76d924d
DJ
6636 PACKET_FORMAT should be either 'X' or 'M', and indicates if we
6637 should send data as binary ('X'), or hex-encoded ('M').
6638
6639 The function creates packet of the form
6640 <HEADER><ADDRESS>,<LENGTH>:<DATA>
6641
6642 where encoding of <DATA> is termined by PACKET_FORMAT.
6643
6644 If USE_LENGTH is 0, then the <LENGTH> field and the preceding comma
6645 are omitted.
6646
6647 Returns the number of bytes transferred, or 0 (setting errno) for
23860348 6648 error. Only transfer a single packet. */
c906108c 6649
a76d924d
DJ
6650static int
6651remote_write_bytes_aux (const char *header, CORE_ADDR memaddr,
45aa4659 6652 const gdb_byte *myaddr, ssize_t len,
a76d924d 6653 char packet_format, int use_length)
c906108c 6654{
6d820c5c 6655 struct remote_state *rs = get_remote_state ();
cfd77fa1 6656 char *p;
a76d924d
DJ
6657 char *plen = NULL;
6658 int plenlen = 0;
917317f4
JM
6659 int todo;
6660 int nr_bytes;
a257b5bb 6661 int payload_size;
6765f3e5 6662 int payload_length;
a76d924d
DJ
6663 int header_length;
6664
6665 if (packet_format != 'X' && packet_format != 'M')
6666 internal_error (__FILE__, __LINE__,
9b20d036 6667 _("remote_write_bytes_aux: bad packet format"));
c906108c 6668
b2182ed2
DJ
6669 if (len <= 0)
6670 return 0;
6671
3de11b2e 6672 payload_size = get_memory_write_packet_size ();
2bc416ba 6673
6d820c5c
DJ
6674 /* The packet buffer will be large enough for the payload;
6675 get_memory_packet_size ensures this. */
a76d924d 6676 rs->buf[0] = '\0';
c906108c 6677
a257b5bb 6678 /* Compute the size of the actual payload by subtracting out the
0df8b418
MS
6679 packet header and footer overhead: "$M<memaddr>,<len>:...#nn". */
6680
a76d924d
DJ
6681 payload_size -= strlen ("$,:#NN");
6682 if (!use_length)
0df8b418 6683 /* The comma won't be used. */
a76d924d
DJ
6684 payload_size += 1;
6685 header_length = strlen (header);
6686 payload_size -= header_length;
3de11b2e 6687 payload_size -= hexnumlen (memaddr);
c906108c 6688
a76d924d 6689 /* Construct the packet excluding the data: "<header><memaddr>,<len>:". */
917317f4 6690
a76d924d
DJ
6691 strcat (rs->buf, header);
6692 p = rs->buf + strlen (header);
6693
6694 /* Compute a best guess of the number of bytes actually transfered. */
6695 if (packet_format == 'X')
c906108c 6696 {
23860348 6697 /* Best guess at number of bytes that will fit. */
a257b5bb 6698 todo = min (len, payload_size);
a76d924d
DJ
6699 if (use_length)
6700 payload_size -= hexnumlen (todo);
3de11b2e 6701 todo = min (todo, payload_size);
a76d924d
DJ
6702 }
6703 else
6704 {
23860348 6705 /* Num bytes that will fit. */
a257b5bb 6706 todo = min (len, payload_size / 2);
a76d924d
DJ
6707 if (use_length)
6708 payload_size -= hexnumlen (todo);
3de11b2e 6709 todo = min (todo, payload_size / 2);
917317f4 6710 }
a76d924d 6711
3de11b2e
NS
6712 if (todo <= 0)
6713 internal_error (__FILE__, __LINE__,
405f8e94 6714 _("minimum packet size too small to write data"));
802188a7 6715
6765f3e5
DJ
6716 /* If we already need another packet, then try to align the end
6717 of this packet to a useful boundary. */
6718 if (todo > 2 * REMOTE_ALIGN_WRITES && todo < len)
6719 todo = ((memaddr + todo) & ~(REMOTE_ALIGN_WRITES - 1)) - memaddr;
6720
a257b5bb 6721 /* Append "<memaddr>". */
917317f4
JM
6722 memaddr = remote_address_masked (memaddr);
6723 p += hexnumstr (p, (ULONGEST) memaddr);
a257b5bb 6724
a76d924d
DJ
6725 if (use_length)
6726 {
6727 /* Append ",". */
6728 *p++ = ',';
802188a7 6729
a76d924d
DJ
6730 /* Append <len>. Retain the location/size of <len>. It may need to
6731 be adjusted once the packet body has been created. */
6732 plen = p;
6733 plenlen = hexnumstr (p, (ULONGEST) todo);
6734 p += plenlen;
6735 }
a257b5bb
AC
6736
6737 /* Append ":". */
917317f4
JM
6738 *p++ = ':';
6739 *p = '\0';
802188a7 6740
a257b5bb 6741 /* Append the packet body. */
a76d924d 6742 if (packet_format == 'X')
917317f4 6743 {
917317f4
JM
6744 /* Binary mode. Send target system values byte by byte, in
6745 increasing byte addresses. Only escape certain critical
6746 characters. */
6765f3e5
DJ
6747 payload_length = remote_escape_output (myaddr, todo, p, &nr_bytes,
6748 payload_size);
6749
6750 /* If not all TODO bytes fit, then we'll need another packet. Make
9b7194bc
DJ
6751 a second try to keep the end of the packet aligned. Don't do
6752 this if the packet is tiny. */
6753 if (nr_bytes < todo && nr_bytes > 2 * REMOTE_ALIGN_WRITES)
6765f3e5
DJ
6754 {
6755 int new_nr_bytes;
6756
6757 new_nr_bytes = (((memaddr + nr_bytes) & ~(REMOTE_ALIGN_WRITES - 1))
6758 - memaddr);
6759 if (new_nr_bytes != nr_bytes)
6760 payload_length = remote_escape_output (myaddr, new_nr_bytes,
6761 p, &nr_bytes,
6762 payload_size);
6763 }
6764
6765 p += payload_length;
a76d924d 6766 if (use_length && nr_bytes < todo)
c906108c 6767 {
802188a7 6768 /* Escape chars have filled up the buffer prematurely,
917317f4
JM
6769 and we have actually sent fewer bytes than planned.
6770 Fix-up the length field of the packet. Use the same
6771 number of characters as before. */
917317f4
JM
6772 plen += hexnumnstr (plen, (ULONGEST) nr_bytes, plenlen);
6773 *plen = ':'; /* overwrite \0 from hexnumnstr() */
c906108c 6774 }
a76d924d
DJ
6775 }
6776 else
6777 {
917317f4
JM
6778 /* Normal mode: Send target system values byte by byte, in
6779 increasing byte addresses. Each byte is encoded as a two hex
6780 value. */
2644f393 6781 nr_bytes = bin2hex (myaddr, p, todo);
aa6c0017 6782 p += 2 * nr_bytes;
c906108c 6783 }
802188a7 6784
2e9f7625 6785 putpkt_binary (rs->buf, (int) (p - rs->buf));
6d820c5c 6786 getpkt (&rs->buf, &rs->buf_size, 0);
802188a7 6787
2e9f7625 6788 if (rs->buf[0] == 'E')
917317f4
JM
6789 {
6790 /* There is no correspondance between what the remote protocol
6791 uses for errors and errno codes. We would like a cleaner way
6792 of representing errors (big enough to include errno codes,
6793 bfd_error codes, and others). But for now just return EIO. */
6794 errno = EIO;
6795 return 0;
6796 }
802188a7 6797
23860348
MS
6798 /* Return NR_BYTES, not TODO, in case escape chars caused us to send
6799 fewer bytes than we'd planned. */
917317f4 6800 return nr_bytes;
c906108c
SS
6801}
6802
a76d924d
DJ
6803/* Write memory data directly to the remote machine.
6804 This does not inform the data cache; the data cache uses this.
6805 MEMADDR is the address in the remote memory space.
6806 MYADDR is the address of the buffer in our space.
6807 LEN is the number of bytes.
6808
6809 Returns number of bytes transferred, or 0 (setting errno) for
6810 error. Only transfer a single packet. */
6811
f7605bc2 6812static int
45aa4659 6813remote_write_bytes (CORE_ADDR memaddr, const gdb_byte *myaddr, ssize_t len)
a76d924d
DJ
6814{
6815 char *packet_format = 0;
6816
6817 /* Check whether the target supports binary download. */
6818 check_binary_download (memaddr);
6819
6820 switch (remote_protocol_packets[PACKET_X].support)
6821 {
6822 case PACKET_ENABLE:
6823 packet_format = "X";
6824 break;
6825 case PACKET_DISABLE:
6826 packet_format = "M";
6827 break;
6828 case PACKET_SUPPORT_UNKNOWN:
6829 internal_error (__FILE__, __LINE__,
6830 _("remote_write_bytes: bad internal state"));
6831 default:
6832 internal_error (__FILE__, __LINE__, _("bad switch"));
6833 }
6834
6835 return remote_write_bytes_aux (packet_format,
6836 memaddr, myaddr, len, packet_format[0], 1);
6837}
6838
c906108c
SS
6839/* Read memory data directly from the remote machine.
6840 This does not use the data cache; the data cache uses this.
6841 MEMADDR is the address in the remote memory space.
6842 MYADDR is the address of the buffer in our space.
6843 LEN is the number of bytes.
6844
6845 Returns number of bytes transferred, or 0 for error. */
6846
f7605bc2 6847static int
cfd77fa1 6848remote_read_bytes (CORE_ADDR memaddr, gdb_byte *myaddr, int len)
c906108c 6849{
6d820c5c 6850 struct remote_state *rs = get_remote_state ();
23860348 6851 int max_buf_size; /* Max size of packet output buffer. */
f7605bc2
PA
6852 char *p;
6853 int todo;
6854 int i;
c906108c 6855
b2182ed2
DJ
6856 if (len <= 0)
6857 return 0;
6858
11cf8741 6859 max_buf_size = get_memory_read_packet_size ();
6d820c5c
DJ
6860 /* The packet buffer will be large enough for the payload;
6861 get_memory_packet_size ensures this. */
c906108c 6862
f7605bc2
PA
6863 /* Number if bytes that will fit. */
6864 todo = min (len, max_buf_size / 2);
c906108c 6865
f7605bc2
PA
6866 /* Construct "m"<memaddr>","<len>". */
6867 memaddr = remote_address_masked (memaddr);
6868 p = rs->buf;
6869 *p++ = 'm';
6870 p += hexnumstr (p, (ULONGEST) memaddr);
6871 *p++ = ',';
6872 p += hexnumstr (p, (ULONGEST) todo);
6873 *p = '\0';
6874 putpkt (rs->buf);
6875 getpkt (&rs->buf, &rs->buf_size, 0);
6876 if (rs->buf[0] == 'E'
6877 && isxdigit (rs->buf[1]) && isxdigit (rs->buf[2])
6878 && rs->buf[3] == '\0')
6879 {
6880 /* There is no correspondance between what the remote protocol
6881 uses for errors and errno codes. We would like a cleaner way
6882 of representing errors (big enough to include errno codes,
6883 bfd_error codes, and others). But for now just return
6884 EIO. */
6885 errno = EIO;
6886 return 0;
c906108c 6887 }
f7605bc2
PA
6888 /* Reply describes memory byte by byte, each byte encoded as two hex
6889 characters. */
6890 p = rs->buf;
6891 i = hex2bin (p, myaddr, todo);
6892 /* Return what we have. Let higher layers handle partial reads. */
6893 return i;
c906108c 6894}
74531fed 6895
c906108c
SS
6896\f
6897/* Read or write LEN bytes from inferior memory at MEMADDR,
23860348
MS
6898 transferring to or from debugger address BUFFER. Write to inferior
6899 if SHOULD_WRITE is nonzero. Returns length of data written or
6900 read; 0 for error. TARGET is unused. */
392a587b 6901
c906108c 6902static int
961cb7b5 6903remote_xfer_memory (CORE_ADDR mem_addr, gdb_byte *buffer, int mem_len,
0a65a603 6904 int should_write, struct mem_attrib *attrib,
29e57380 6905 struct target_ops *target)
c906108c 6906{
4930751a
C
6907 int res;
6908
e6e4e701 6909 set_remote_traceframe ();
82f73884
PA
6910 set_general_thread (inferior_ptid);
6911
4930751a 6912 if (should_write)
b2182ed2 6913 res = remote_write_bytes (mem_addr, buffer, mem_len);
4930751a 6914 else
b2182ed2 6915 res = remote_read_bytes (mem_addr, buffer, mem_len);
4930751a
C
6916
6917 return res;
c906108c
SS
6918}
6919
a76d924d
DJ
6920/* Sends a packet with content determined by the printf format string
6921 FORMAT and the remaining arguments, then gets the reply. Returns
6922 whether the packet was a success, a failure, or unknown. */
6923
2c0b251b 6924static enum packet_result
a76d924d
DJ
6925remote_send_printf (const char *format, ...)
6926{
6927 struct remote_state *rs = get_remote_state ();
6928 int max_size = get_remote_packet_size ();
a76d924d 6929 va_list ap;
a744cf53 6930
a76d924d
DJ
6931 va_start (ap, format);
6932
6933 rs->buf[0] = '\0';
6934 if (vsnprintf (rs->buf, max_size, format, ap) >= max_size)
9b20d036 6935 internal_error (__FILE__, __LINE__, _("Too long remote packet."));
a76d924d
DJ
6936
6937 if (putpkt (rs->buf) < 0)
6938 error (_("Communication problem with target."));
6939
6940 rs->buf[0] = '\0';
6941 getpkt (&rs->buf, &rs->buf_size, 0);
6942
6943 return packet_check_result (rs->buf);
6944}
6945
6946static void
6947restore_remote_timeout (void *p)
6948{
6949 int value = *(int *)p;
a744cf53 6950
a76d924d
DJ
6951 remote_timeout = value;
6952}
6953
6954/* Flash writing can take quite some time. We'll set
6955 effectively infinite timeout for flash operations.
6956 In future, we'll need to decide on a better approach. */
6957static const int remote_flash_timeout = 1000;
6958
6959static void
6960remote_flash_erase (struct target_ops *ops,
6961 ULONGEST address, LONGEST length)
6962{
f5656ead 6963 int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
a76d924d
DJ
6964 int saved_remote_timeout = remote_timeout;
6965 enum packet_result ret;
a76d924d
DJ
6966 struct cleanup *back_to = make_cleanup (restore_remote_timeout,
6967 &saved_remote_timeout);
a744cf53 6968
a76d924d
DJ
6969 remote_timeout = remote_flash_timeout;
6970
6971 ret = remote_send_printf ("vFlashErase:%s,%s",
5af949e3 6972 phex (address, addr_size),
a76d924d
DJ
6973 phex (length, 4));
6974 switch (ret)
6975 {
6976 case PACKET_UNKNOWN:
6977 error (_("Remote target does not support flash erase"));
6978 case PACKET_ERROR:
6979 error (_("Error erasing flash with vFlashErase packet"));
6980 default:
6981 break;
6982 }
6983
6984 do_cleanups (back_to);
6985}
6986
6987static LONGEST
6988remote_flash_write (struct target_ops *ops,
6989 ULONGEST address, LONGEST length,
6990 const gdb_byte *data)
6991{
6992 int saved_remote_timeout = remote_timeout;
6993 int ret;
6994 struct cleanup *back_to = make_cleanup (restore_remote_timeout,
6995 &saved_remote_timeout);
6996
6997 remote_timeout = remote_flash_timeout;
6998 ret = remote_write_bytes_aux ("vFlashWrite:", address, data, length, 'X', 0);
6999 do_cleanups (back_to);
7000
7001 return ret;
7002}
7003
7004static void
7005remote_flash_done (struct target_ops *ops)
7006{
7007 int saved_remote_timeout = remote_timeout;
7008 int ret;
7009 struct cleanup *back_to = make_cleanup (restore_remote_timeout,
7010 &saved_remote_timeout);
7011
7012 remote_timeout = remote_flash_timeout;
7013 ret = remote_send_printf ("vFlashDone");
7014 do_cleanups (back_to);
7015
7016 switch (ret)
7017 {
7018 case PACKET_UNKNOWN:
7019 error (_("Remote target does not support vFlashDone"));
7020 case PACKET_ERROR:
7021 error (_("Error finishing flash operation"));
7022 default:
7023 break;
7024 }
7025}
7026
c906108c 7027static void
fba45db2 7028remote_files_info (struct target_ops *ignore)
c906108c
SS
7029{
7030 puts_filtered ("Debugging a target over a serial line.\n");
7031}
7032\f
7033/* Stuff for dealing with the packets which are part of this protocol.
7034 See comment at top of file for details. */
7035
1927e618
PA
7036/* Close/unpush the remote target, and throw a TARGET_CLOSE_ERROR
7037 error to higher layers. Called when a serial error is detected.
7038 The exception message is STRING, followed by a colon and a blank,
7039 then the system error message for errno at function entry. */
7040
7041static void
7042unpush_and_perror (const char *string)
7043{
7044 char *errstr;
7045
7046 errstr = xstrprintf ("%s: %s", string, safe_strerror (errno));
7047 make_cleanup (xfree, errstr);
7048
7049 remote_unpush_target ();
7050 throw_error (TARGET_CLOSE_ERROR, "%s", errstr);
7051}
7052
0876f84a 7053/* Read a single character from the remote end. */
c906108c
SS
7054
7055static int
fba45db2 7056readchar (int timeout)
c906108c
SS
7057{
7058 int ch;
7059
2cd58942 7060 ch = serial_readchar (remote_desc, timeout);
c906108c 7061
2acceee2 7062 if (ch >= 0)
0876f84a 7063 return ch;
2acceee2
JM
7064
7065 switch ((enum serial_rc) ch)
c906108c
SS
7066 {
7067 case SERIAL_EOF:
78a095c3 7068 remote_unpush_target ();
598d3636 7069 throw_error (TARGET_CLOSE_ERROR, _("Remote connection closed"));
2acceee2 7070 /* no return */
c906108c 7071 case SERIAL_ERROR:
1927e618
PA
7072 unpush_and_perror (_("Remote communication error. "
7073 "Target disconnected."));
2acceee2 7074 /* no return */
c906108c 7075 case SERIAL_TIMEOUT:
2acceee2 7076 break;
c906108c 7077 }
2acceee2 7078 return ch;
c906108c
SS
7079}
7080
c33e31fd
PA
7081/* Wrapper for serial_write that closes the target and throws if
7082 writing fails. */
7083
7084static void
7085remote_serial_write (const char *str, int len)
7086{
7087 if (serial_write (remote_desc, str, len))
7088 {
1927e618
PA
7089 unpush_and_perror (_("Remote communication error. "
7090 "Target disconnected."));
c33e31fd
PA
7091 }
7092}
7093
6d820c5c
DJ
7094/* Send the command in *BUF to the remote machine, and read the reply
7095 into *BUF. Report an error if we get an error reply. Resize
7096 *BUF using xrealloc if necessary to hold the result, and update
7097 *SIZEOF_BUF. */
c906108c
SS
7098
7099static void
6d820c5c
DJ
7100remote_send (char **buf,
7101 long *sizeof_buf)
c906108c 7102{
6d820c5c 7103 putpkt (*buf);
c2d11a7d 7104 getpkt (buf, sizeof_buf, 0);
c906108c 7105
6d820c5c
DJ
7106 if ((*buf)[0] == 'E')
7107 error (_("Remote failure reply: %s"), *buf);
c906108c
SS
7108}
7109
6e5abd65
PA
7110/* Return a pointer to an xmalloc'ed string representing an escaped
7111 version of BUF, of len N. E.g. \n is converted to \\n, \t to \\t,
7112 etc. The caller is responsible for releasing the returned
7113 memory. */
7114
7115static char *
7116escape_buffer (const char *buf, int n)
7117{
7118 struct cleanup *old_chain;
7119 struct ui_file *stb;
7120 char *str;
6e5abd65
PA
7121
7122 stb = mem_fileopen ();
7123 old_chain = make_cleanup_ui_file_delete (stb);
7124
7125 fputstrn_unfiltered (buf, n, 0, stb);
759ef836 7126 str = ui_file_xstrdup (stb, NULL);
6e5abd65
PA
7127 do_cleanups (old_chain);
7128 return str;
7129}
7130
c906108c
SS
7131/* Display a null-terminated packet on stdout, for debugging, using C
7132 string notation. */
7133
7134static void
fba45db2 7135print_packet (char *buf)
c906108c
SS
7136{
7137 puts_filtered ("\"");
43e526b9 7138 fputstr_filtered (buf, '"', gdb_stdout);
c906108c
SS
7139 puts_filtered ("\"");
7140}
7141
7142int
fba45db2 7143putpkt (char *buf)
c906108c
SS
7144{
7145 return putpkt_binary (buf, strlen (buf));
7146}
7147
7148/* Send a packet to the remote machine, with error checking. The data
23860348 7149 of the packet is in BUF. The string in BUF can be at most
ea9c271d 7150 get_remote_packet_size () - 5 to account for the $, # and checksum,
23860348
MS
7151 and for a possible /0 if we are debugging (remote_debug) and want
7152 to print the sent packet as a string. */
c906108c
SS
7153
7154static int
fba45db2 7155putpkt_binary (char *buf, int cnt)
c906108c 7156{
2d717e4f 7157 struct remote_state *rs = get_remote_state ();
c906108c
SS
7158 int i;
7159 unsigned char csum = 0;
11cf8741 7160 char *buf2 = alloca (cnt + 6);
085dd6e6 7161
c906108c
SS
7162 int ch;
7163 int tcount = 0;
7164 char *p;
dd61ec5c 7165 char *message;
c906108c 7166
e24a49d8
PA
7167 /* Catch cases like trying to read memory or listing threads while
7168 we're waiting for a stop reply. The remote server wouldn't be
7169 ready to handle this request, so we'd hang and timeout. We don't
7170 have to worry about this in synchronous mode, because in that
7171 case it's not possible to issue a command while the target is
74531fed
PA
7172 running. This is not a problem in non-stop mode, because in that
7173 case, the stub is always ready to process serial input. */
7174 if (!non_stop && target_can_async_p () && rs->waiting_for_stop_reply)
e24a49d8
PA
7175 error (_("Cannot execute this command while the target is running."));
7176
2d717e4f
DJ
7177 /* We're sending out a new packet. Make sure we don't look at a
7178 stale cached response. */
7179 rs->cached_wait_status = 0;
7180
c906108c
SS
7181 /* Copy the packet into buffer BUF2, encapsulating it
7182 and giving it a checksum. */
7183
c906108c
SS
7184 p = buf2;
7185 *p++ = '$';
7186
7187 for (i = 0; i < cnt; i++)
7188 {
7189 csum += buf[i];
7190 *p++ = buf[i];
7191 }
7192 *p++ = '#';
7193 *p++ = tohex ((csum >> 4) & 0xf);
7194 *p++ = tohex (csum & 0xf);
7195
7196 /* Send it over and over until we get a positive ack. */
7197
7198 while (1)
7199 {
7200 int started_error_output = 0;
7201
7202 if (remote_debug)
7203 {
6e5abd65
PA
7204 struct cleanup *old_chain;
7205 char *str;
7206
c906108c 7207 *p = '\0';
6e5abd65
PA
7208 str = escape_buffer (buf2, p - buf2);
7209 old_chain = make_cleanup (xfree, str);
7210 fprintf_unfiltered (gdb_stdlog, "Sending packet: %s...", str);
0f71a2f6 7211 gdb_flush (gdb_stdlog);
6e5abd65 7212 do_cleanups (old_chain);
c906108c 7213 }
c33e31fd 7214 remote_serial_write (buf2, p - buf2);
c906108c 7215
a6f3e723
SL
7216 /* If this is a no acks version of the remote protocol, send the
7217 packet and move on. */
7218 if (rs->noack_mode)
7219 break;
7220
74531fed
PA
7221 /* Read until either a timeout occurs (-2) or '+' is read.
7222 Handle any notification that arrives in the mean time. */
c906108c
SS
7223 while (1)
7224 {
7225 ch = readchar (remote_timeout);
7226
c5aa993b 7227 if (remote_debug)
c906108c
SS
7228 {
7229 switch (ch)
7230 {
7231 case '+':
1216fa2c 7232 case '-':
c906108c
SS
7233 case SERIAL_TIMEOUT:
7234 case '$':
74531fed 7235 case '%':
c906108c
SS
7236 if (started_error_output)
7237 {
7238 putchar_unfiltered ('\n');
7239 started_error_output = 0;
7240 }
7241 }
7242 }
7243
7244 switch (ch)
7245 {
7246 case '+':
7247 if (remote_debug)
0f71a2f6 7248 fprintf_unfiltered (gdb_stdlog, "Ack\n");
c906108c 7249 return 1;
1216fa2c
AC
7250 case '-':
7251 if (remote_debug)
7252 fprintf_unfiltered (gdb_stdlog, "Nak\n");
a17d146e 7253 /* FALLTHROUGH */
c906108c 7254 case SERIAL_TIMEOUT:
c5aa993b 7255 tcount++;
c906108c
SS
7256 if (tcount > 3)
7257 return 0;
23860348 7258 break; /* Retransmit buffer. */
c906108c
SS
7259 case '$':
7260 {
40e3f985 7261 if (remote_debug)
2bc416ba 7262 fprintf_unfiltered (gdb_stdlog,
23860348 7263 "Packet instead of Ack, ignoring it\n");
d6f7abdf
AC
7264 /* It's probably an old response sent because an ACK
7265 was lost. Gobble up the packet and ack it so it
7266 doesn't get retransmitted when we resend this
7267 packet. */
6d820c5c 7268 skip_frame ();
c33e31fd 7269 remote_serial_write ("+", 1);
23860348 7270 continue; /* Now, go look for +. */
c906108c 7271 }
74531fed
PA
7272
7273 case '%':
7274 {
7275 int val;
7276
7277 /* If we got a notification, handle it, and go back to looking
7278 for an ack. */
7279 /* We've found the start of a notification. Now
7280 collect the data. */
7281 val = read_frame (&rs->buf, &rs->buf_size);
7282 if (val >= 0)
7283 {
7284 if (remote_debug)
7285 {
6e5abd65
PA
7286 struct cleanup *old_chain;
7287 char *str;
7288
7289 str = escape_buffer (rs->buf, val);
7290 old_chain = make_cleanup (xfree, str);
7291 fprintf_unfiltered (gdb_stdlog,
7292 " Notification received: %s\n",
7293 str);
7294 do_cleanups (old_chain);
74531fed 7295 }
8128fd8e 7296 handle_notification (rs->buf);
74531fed
PA
7297 /* We're in sync now, rewait for the ack. */
7298 tcount = 0;
7299 }
7300 else
7301 {
7302 if (remote_debug)
7303 {
7304 if (!started_error_output)
7305 {
7306 started_error_output = 1;
7307 fprintf_unfiltered (gdb_stdlog, "putpkt: Junk: ");
7308 }
7309 fputc_unfiltered (ch & 0177, gdb_stdlog);
7310 fprintf_unfiltered (gdb_stdlog, "%s", rs->buf);
7311 }
7312 }
7313 continue;
7314 }
7315 /* fall-through */
c906108c
SS
7316 default:
7317 if (remote_debug)
7318 {
7319 if (!started_error_output)
7320 {
7321 started_error_output = 1;
0f71a2f6 7322 fprintf_unfiltered (gdb_stdlog, "putpkt: Junk: ");
c906108c 7323 }
0f71a2f6 7324 fputc_unfiltered (ch & 0177, gdb_stdlog);
c906108c
SS
7325 }
7326 continue;
7327 }
23860348 7328 break; /* Here to retransmit. */
c906108c
SS
7329 }
7330
7331#if 0
7332 /* This is wrong. If doing a long backtrace, the user should be
c5aa993b
JM
7333 able to get out next time we call QUIT, without anything as
7334 violent as interrupt_query. If we want to provide a way out of
7335 here without getting to the next QUIT, it should be based on
7336 hitting ^C twice as in remote_wait. */
c906108c
SS
7337 if (quit_flag)
7338 {
7339 quit_flag = 0;
7340 interrupt_query ();
7341 }
7342#endif
7343 }
a6f3e723 7344 return 0;
c906108c
SS
7345}
7346
6d820c5c
DJ
7347/* Come here after finding the start of a frame when we expected an
7348 ack. Do our best to discard the rest of this packet. */
7349
7350static void
7351skip_frame (void)
7352{
7353 int c;
7354
7355 while (1)
7356 {
7357 c = readchar (remote_timeout);
7358 switch (c)
7359 {
7360 case SERIAL_TIMEOUT:
7361 /* Nothing we can do. */
7362 return;
7363 case '#':
7364 /* Discard the two bytes of checksum and stop. */
7365 c = readchar (remote_timeout);
7366 if (c >= 0)
7367 c = readchar (remote_timeout);
7368
7369 return;
7370 case '*': /* Run length encoding. */
7371 /* Discard the repeat count. */
7372 c = readchar (remote_timeout);
7373 if (c < 0)
7374 return;
7375 break;
7376 default:
7377 /* A regular character. */
7378 break;
7379 }
7380 }
7381}
7382
c906108c 7383/* Come here after finding the start of the frame. Collect the rest
6d820c5c
DJ
7384 into *BUF, verifying the checksum, length, and handling run-length
7385 compression. NUL terminate the buffer. If there is not enough room,
7386 expand *BUF using xrealloc.
c906108c 7387
c2d11a7d
JM
7388 Returns -1 on error, number of characters in buffer (ignoring the
7389 trailing NULL) on success. (could be extended to return one of the
23860348 7390 SERIAL status indications). */
c2d11a7d
JM
7391
7392static long
6d820c5c
DJ
7393read_frame (char **buf_p,
7394 long *sizeof_buf)
c906108c
SS
7395{
7396 unsigned char csum;
c2d11a7d 7397 long bc;
c906108c 7398 int c;
6d820c5c 7399 char *buf = *buf_p;
a6f3e723 7400 struct remote_state *rs = get_remote_state ();
c906108c
SS
7401
7402 csum = 0;
c2d11a7d 7403 bc = 0;
c906108c
SS
7404
7405 while (1)
7406 {
7407 c = readchar (remote_timeout);
c906108c
SS
7408 switch (c)
7409 {
7410 case SERIAL_TIMEOUT:
7411 if (remote_debug)
0f71a2f6 7412 fputs_filtered ("Timeout in mid-packet, retrying\n", gdb_stdlog);
c2d11a7d 7413 return -1;
c906108c
SS
7414 case '$':
7415 if (remote_debug)
0f71a2f6
JM
7416 fputs_filtered ("Saw new packet start in middle of old one\n",
7417 gdb_stdlog);
23860348 7418 return -1; /* Start a new packet, count retries. */
c906108c
SS
7419 case '#':
7420 {
7421 unsigned char pktcsum;
e1b09194
AC
7422 int check_0 = 0;
7423 int check_1 = 0;
c906108c 7424
c2d11a7d 7425 buf[bc] = '\0';
c906108c 7426
e1b09194
AC
7427 check_0 = readchar (remote_timeout);
7428 if (check_0 >= 0)
7429 check_1 = readchar (remote_timeout);
802188a7 7430
e1b09194
AC
7431 if (check_0 == SERIAL_TIMEOUT || check_1 == SERIAL_TIMEOUT)
7432 {
7433 if (remote_debug)
2bc416ba 7434 fputs_filtered ("Timeout in checksum, retrying\n",
23860348 7435 gdb_stdlog);
e1b09194
AC
7436 return -1;
7437 }
7438 else if (check_0 < 0 || check_1 < 0)
40e3f985
FN
7439 {
7440 if (remote_debug)
2bc416ba 7441 fputs_filtered ("Communication error in checksum\n",
23860348 7442 gdb_stdlog);
40e3f985
FN
7443 return -1;
7444 }
c906108c 7445
a6f3e723
SL
7446 /* Don't recompute the checksum; with no ack packets we
7447 don't have any way to indicate a packet retransmission
7448 is necessary. */
7449 if (rs->noack_mode)
7450 return bc;
7451
e1b09194 7452 pktcsum = (fromhex (check_0) << 4) | fromhex (check_1);
c906108c 7453 if (csum == pktcsum)
c2d11a7d 7454 return bc;
c906108c 7455
c5aa993b 7456 if (remote_debug)
c906108c 7457 {
6e5abd65
PA
7458 struct cleanup *old_chain;
7459 char *str;
7460
7461 str = escape_buffer (buf, bc);
7462 old_chain = make_cleanup (xfree, str);
7463 fprintf_unfiltered (gdb_stdlog,
3e43a32a
MS
7464 "Bad checksum, sentsum=0x%x, "
7465 "csum=0x%x, buf=%s\n",
6e5abd65
PA
7466 pktcsum, csum, str);
7467 do_cleanups (old_chain);
c906108c 7468 }
c2d11a7d 7469 /* Number of characters in buffer ignoring trailing
23860348 7470 NULL. */
c2d11a7d 7471 return -1;
c906108c 7472 }
23860348 7473 case '*': /* Run length encoding. */
c2c6d25f
JM
7474 {
7475 int repeat;
c906108c 7476
a744cf53 7477 csum += c;
b4501125
AC
7478 c = readchar (remote_timeout);
7479 csum += c;
23860348 7480 repeat = c - ' ' + 3; /* Compute repeat count. */
c906108c 7481
23860348 7482 /* The character before ``*'' is repeated. */
c2d11a7d 7483
6d820c5c 7484 if (repeat > 0 && repeat <= 255 && bc > 0)
c2c6d25f 7485 {
6d820c5c
DJ
7486 if (bc + repeat - 1 >= *sizeof_buf - 1)
7487 {
7488 /* Make some more room in the buffer. */
7489 *sizeof_buf += repeat;
7490 *buf_p = xrealloc (*buf_p, *sizeof_buf);
7491 buf = *buf_p;
7492 }
7493
c2d11a7d
JM
7494 memset (&buf[bc], buf[bc - 1], repeat);
7495 bc += repeat;
c2c6d25f
JM
7496 continue;
7497 }
7498
c2d11a7d 7499 buf[bc] = '\0';
6d820c5c 7500 printf_filtered (_("Invalid run length encoding: %s\n"), buf);
c2d11a7d 7501 return -1;
c2c6d25f 7502 }
c906108c 7503 default:
6d820c5c 7504 if (bc >= *sizeof_buf - 1)
c906108c 7505 {
6d820c5c
DJ
7506 /* Make some more room in the buffer. */
7507 *sizeof_buf *= 2;
7508 *buf_p = xrealloc (*buf_p, *sizeof_buf);
7509 buf = *buf_p;
c906108c
SS
7510 }
7511
6d820c5c
DJ
7512 buf[bc++] = c;
7513 csum += c;
7514 continue;
c906108c
SS
7515 }
7516 }
7517}
7518
7519/* Read a packet from the remote machine, with error checking, and
6d820c5c
DJ
7520 store it in *BUF. Resize *BUF using xrealloc if necessary to hold
7521 the result, and update *SIZEOF_BUF. If FOREVER, wait forever
7522 rather than timing out; this is used (in synchronous mode) to wait
7523 for a target that is is executing user code to stop. */
d9fcf2fb
JM
7524/* FIXME: ezannoni 2000-02-01 this wrapper is necessary so that we
7525 don't have to change all the calls to getpkt to deal with the
7526 return value, because at the moment I don't know what the right
23860348 7527 thing to do it for those. */
c906108c 7528void
6d820c5c
DJ
7529getpkt (char **buf,
7530 long *sizeof_buf,
c2d11a7d 7531 int forever)
d9fcf2fb
JM
7532{
7533 int timed_out;
7534
7535 timed_out = getpkt_sane (buf, sizeof_buf, forever);
7536}
7537
7538
7539/* Read a packet from the remote machine, with error checking, and
6d820c5c
DJ
7540 store it in *BUF. Resize *BUF using xrealloc if necessary to hold
7541 the result, and update *SIZEOF_BUF. If FOREVER, wait forever
7542 rather than timing out; this is used (in synchronous mode) to wait
7543 for a target that is is executing user code to stop. If FOREVER ==
7544 0, this function is allowed to time out gracefully and return an
74531fed
PA
7545 indication of this to the caller. Otherwise return the number of
7546 bytes read. If EXPECTING_NOTIF, consider receiving a notification
fee9eda9
YQ
7547 enough reason to return to the caller. *IS_NOTIF is an output
7548 boolean that indicates whether *BUF holds a notification or not
7549 (a regular packet). */
74531fed 7550
3172dc30 7551static int
74531fed 7552getpkt_or_notif_sane_1 (char **buf, long *sizeof_buf, int forever,
fee9eda9 7553 int expecting_notif, int *is_notif)
c906108c 7554{
2d717e4f 7555 struct remote_state *rs = get_remote_state ();
c906108c
SS
7556 int c;
7557 int tries;
7558 int timeout;
df4b58fe 7559 int val = -1;
c906108c 7560
2d717e4f
DJ
7561 /* We're reading a new response. Make sure we don't look at a
7562 previously cached response. */
7563 rs->cached_wait_status = 0;
7564
6d820c5c 7565 strcpy (*buf, "timeout");
c906108c
SS
7566
7567 if (forever)
74531fed
PA
7568 timeout = watchdog > 0 ? watchdog : -1;
7569 else if (expecting_notif)
7570 timeout = 0; /* There should already be a char in the buffer. If
7571 not, bail out. */
c906108c
SS
7572 else
7573 timeout = remote_timeout;
7574
7575#define MAX_TRIES 3
7576
74531fed
PA
7577 /* Process any number of notifications, and then return when
7578 we get a packet. */
7579 for (;;)
c906108c 7580 {
74531fed
PA
7581 /* If we get a timeout or bad checksm, retry up to MAX_TRIES
7582 times. */
7583 for (tries = 1; tries <= MAX_TRIES; tries++)
c906108c 7584 {
74531fed
PA
7585 /* This can loop forever if the remote side sends us
7586 characters continuously, but if it pauses, we'll get
7587 SERIAL_TIMEOUT from readchar because of timeout. Then
7588 we'll count that as a retry.
7589
7590 Note that even when forever is set, we will only wait
7591 forever prior to the start of a packet. After that, we
7592 expect characters to arrive at a brisk pace. They should
7593 show up within remote_timeout intervals. */
7594 do
7595 c = readchar (timeout);
7596 while (c != SERIAL_TIMEOUT && c != '$' && c != '%');
c906108c
SS
7597
7598 if (c == SERIAL_TIMEOUT)
7599 {
74531fed
PA
7600 if (expecting_notif)
7601 return -1; /* Don't complain, it's normal to not get
7602 anything in this case. */
7603
23860348 7604 if (forever) /* Watchdog went off? Kill the target. */
c906108c 7605 {
2acceee2 7606 QUIT;
78a095c3 7607 remote_unpush_target ();
598d3636
JK
7608 throw_error (TARGET_CLOSE_ERROR,
7609 _("Watchdog timeout has expired. "
7610 "Target detached."));
c906108c 7611 }
c906108c 7612 if (remote_debug)
0f71a2f6 7613 fputs_filtered ("Timed out.\n", gdb_stdlog);
c906108c 7614 }
74531fed
PA
7615 else
7616 {
7617 /* We've found the start of a packet or notification.
7618 Now collect the data. */
7619 val = read_frame (buf, sizeof_buf);
7620 if (val >= 0)
7621 break;
7622 }
7623
c33e31fd 7624 remote_serial_write ("-", 1);
c906108c 7625 }
c906108c 7626
74531fed
PA
7627 if (tries > MAX_TRIES)
7628 {
7629 /* We have tried hard enough, and just can't receive the
7630 packet/notification. Give up. */
7631 printf_unfiltered (_("Ignoring packet error, continuing...\n"));
c906108c 7632
74531fed
PA
7633 /* Skip the ack char if we're in no-ack mode. */
7634 if (!rs->noack_mode)
c33e31fd 7635 remote_serial_write ("+", 1);
74531fed
PA
7636 return -1;
7637 }
c906108c 7638
74531fed
PA
7639 /* If we got an ordinary packet, return that to our caller. */
7640 if (c == '$')
c906108c
SS
7641 {
7642 if (remote_debug)
43e526b9 7643 {
6e5abd65
PA
7644 struct cleanup *old_chain;
7645 char *str;
7646
7647 str = escape_buffer (*buf, val);
7648 old_chain = make_cleanup (xfree, str);
7649 fprintf_unfiltered (gdb_stdlog, "Packet received: %s\n", str);
7650 do_cleanups (old_chain);
43e526b9 7651 }
a6f3e723
SL
7652
7653 /* Skip the ack char if we're in no-ack mode. */
7654 if (!rs->noack_mode)
c33e31fd 7655 remote_serial_write ("+", 1);
fee9eda9
YQ
7656 if (is_notif != NULL)
7657 *is_notif = 0;
0876f84a 7658 return val;
c906108c
SS
7659 }
7660
74531fed
PA
7661 /* If we got a notification, handle it, and go back to looking
7662 for a packet. */
7663 else
7664 {
7665 gdb_assert (c == '%');
7666
7667 if (remote_debug)
7668 {
6e5abd65
PA
7669 struct cleanup *old_chain;
7670 char *str;
7671
7672 str = escape_buffer (*buf, val);
7673 old_chain = make_cleanup (xfree, str);
7674 fprintf_unfiltered (gdb_stdlog,
7675 " Notification received: %s\n",
7676 str);
7677 do_cleanups (old_chain);
74531fed 7678 }
fee9eda9
YQ
7679 if (is_notif != NULL)
7680 *is_notif = 1;
c906108c 7681
8128fd8e 7682 handle_notification (*buf);
c906108c 7683
74531fed 7684 /* Notifications require no acknowledgement. */
a6f3e723 7685
74531fed 7686 if (expecting_notif)
fee9eda9 7687 return val;
74531fed
PA
7688 }
7689 }
7690}
7691
7692static int
7693getpkt_sane (char **buf, long *sizeof_buf, int forever)
7694{
fee9eda9 7695 return getpkt_or_notif_sane_1 (buf, sizeof_buf, forever, 0, NULL);
74531fed
PA
7696}
7697
7698static int
fee9eda9
YQ
7699getpkt_or_notif_sane (char **buf, long *sizeof_buf, int forever,
7700 int *is_notif)
74531fed 7701{
fee9eda9
YQ
7702 return getpkt_or_notif_sane_1 (buf, sizeof_buf, forever, 1,
7703 is_notif);
c906108c 7704}
74531fed 7705
c906108c 7706\f
732f3f12
TT
7707/* A helper function that just calls putpkt; for type correctness. */
7708
7709static int
7710putpkt_for_catch_errors (void *arg)
7711{
7712 return putpkt (arg);
7713}
7714
c906108c 7715static void
7d85a9c0 7716remote_kill (struct target_ops *ops)
43ff13b4 7717{
23860348
MS
7718 /* Use catch_errors so the user can quit from gdb even when we
7719 aren't on speaking terms with the remote system. */
732f3f12 7720 catch_errors (putpkt_for_catch_errors, "k", "", RETURN_MASK_ERROR);
43ff13b4
JM
7721
7722 /* Don't wait for it to die. I'm not really sure it matters whether
7723 we do or not. For the existing stubs, kill is a noop. */
7724 target_mourn_inferior ();
7725}
7726
82f73884
PA
7727static int
7728remote_vkill (int pid, struct remote_state *rs)
7729{
7730 if (remote_protocol_packets[PACKET_vKill].support == PACKET_DISABLE)
7731 return -1;
7732
7733 /* Tell the remote target to detach. */
bba74b36 7734 xsnprintf (rs->buf, get_remote_packet_size (), "vKill;%x", pid);
82f73884
PA
7735 putpkt (rs->buf);
7736 getpkt (&rs->buf, &rs->buf_size, 0);
7737
7738 if (packet_ok (rs->buf,
7739 &remote_protocol_packets[PACKET_vKill]) == PACKET_OK)
7740 return 0;
7741 else if (remote_protocol_packets[PACKET_vKill].support == PACKET_DISABLE)
7742 return -1;
7743 else
7744 return 1;
7745}
7746
7747static void
7d85a9c0 7748extended_remote_kill (struct target_ops *ops)
82f73884
PA
7749{
7750 int res;
7751 int pid = ptid_get_pid (inferior_ptid);
7752 struct remote_state *rs = get_remote_state ();
7753
7754 res = remote_vkill (pid, rs);
901f9912 7755 if (res == -1 && !(rs->extended && remote_multi_process_p (rs)))
82f73884
PA
7756 {
7757 /* Don't try 'k' on a multi-process aware stub -- it has no way
7758 to specify the pid. */
7759
7760 putpkt ("k");
7761#if 0
7762 getpkt (&rs->buf, &rs->buf_size, 0);
7763 if (rs->buf[0] != 'O' || rs->buf[0] != 'K')
7764 res = 1;
7765#else
7766 /* Don't wait for it to die. I'm not really sure it matters whether
7767 we do or not. For the existing stubs, kill is a noop. */
7768 res = 0;
7769#endif
7770 }
7771
7772 if (res != 0)
7773 error (_("Can't kill process"));
7774
82f73884
PA
7775 target_mourn_inferior ();
7776}
7777
c906108c 7778static void
136d6dae 7779remote_mourn (struct target_ops *ops)
c906108c 7780{
136d6dae 7781 remote_mourn_1 (ops);
c906108c
SS
7782}
7783
c906108c
SS
7784/* Worker function for remote_mourn. */
7785static void
fba45db2 7786remote_mourn_1 (struct target_ops *target)
c906108c
SS
7787{
7788 unpush_target (target);
ce5ce7ed 7789
8a2492ee
PA
7790 /* remote_close takes care of doing most of the clean up. */
7791 generic_mourn_inferior ();
c906108c
SS
7792}
7793
2d717e4f
DJ
7794static void
7795extended_remote_mourn_1 (struct target_ops *target)
7796{
7797 struct remote_state *rs = get_remote_state ();
c906108c 7798
e24a49d8
PA
7799 /* In case we got here due to an error, but we're going to stay
7800 connected. */
7801 rs->waiting_for_stop_reply = 0;
7802
dc1981d7
PA
7803 /* If the current general thread belonged to the process we just
7804 detached from or has exited, the remote side current general
7805 thread becomes undefined. Considering a case like this:
7806
7807 - We just got here due to a detach.
7808 - The process that we're detaching from happens to immediately
7809 report a global breakpoint being hit in non-stop mode, in the
7810 same thread we had selected before.
7811 - GDB attaches to this process again.
7812 - This event happens to be the next event we handle.
7813
7814 GDB would consider that the current general thread didn't need to
7815 be set on the stub side (with Hg), since for all it knew,
7816 GENERAL_THREAD hadn't changed.
7817
7818 Notice that although in all-stop mode, the remote server always
7819 sets the current thread to the thread reporting the stop event,
7820 that doesn't happen in non-stop mode; in non-stop, the stub *must
7821 not* change the current thread when reporting a breakpoint hit,
7822 due to the decoupling of event reporting and event handling.
7823
7824 To keep things simple, we always invalidate our notion of the
7825 current thread. */
7826 record_currthread (minus_one_ptid);
7827
2d717e4f
DJ
7828 /* Unlike "target remote", we do not want to unpush the target; then
7829 the next time the user says "run", we won't be connected. */
7830
48aa3c27
PA
7831 /* Call common code to mark the inferior as not running. */
7832 generic_mourn_inferior ();
7833
d729566a 7834 if (!have_inferiors ())
2d717e4f 7835 {
82f73884
PA
7836 if (!remote_multi_process_p (rs))
7837 {
7838 /* Check whether the target is running now - some remote stubs
7839 automatically restart after kill. */
7840 putpkt ("?");
7841 getpkt (&rs->buf, &rs->buf_size, 0);
7842
7843 if (rs->buf[0] == 'S' || rs->buf[0] == 'T')
7844 {
3e43a32a
MS
7845 /* Assume that the target has been restarted. Set
7846 inferior_ptid so that bits of core GDB realizes
7847 there's something here, e.g., so that the user can
7848 say "kill" again. */
82f73884
PA
7849 inferior_ptid = magic_null_ptid;
7850 }
82f73884 7851 }
2d717e4f
DJ
7852 }
7853}
c906108c
SS
7854
7855static void
136d6dae 7856extended_remote_mourn (struct target_ops *ops)
c906108c 7857{
136d6dae 7858 extended_remote_mourn_1 (ops);
2d717e4f 7859}
c906108c 7860
03583c20
UW
7861static int
7862extended_remote_supports_disable_randomization (void)
7863{
7864 return (remote_protocol_packets[PACKET_QDisableRandomization].support
7865 == PACKET_ENABLE);
7866}
7867
7868static void
7869extended_remote_disable_randomization (int val)
7870{
7871 struct remote_state *rs = get_remote_state ();
7872 char *reply;
7873
bba74b36
YQ
7874 xsnprintf (rs->buf, get_remote_packet_size (), "QDisableRandomization:%x",
7875 val);
03583c20
UW
7876 putpkt (rs->buf);
7877 reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
7878 if (*reply == '\0')
7879 error (_("Target does not support QDisableRandomization."));
7880 if (strcmp (reply, "OK") != 0)
7881 error (_("Bogus QDisableRandomization reply from target: %s"), reply);
7882}
7883
2d717e4f
DJ
7884static int
7885extended_remote_run (char *args)
7886{
7887 struct remote_state *rs = get_remote_state ();
2d717e4f 7888 int len;
c906108c 7889
2d717e4f
DJ
7890 /* If the user has disabled vRun support, or we have detected that
7891 support is not available, do not try it. */
7892 if (remote_protocol_packets[PACKET_vRun].support == PACKET_DISABLE)
7893 return -1;
424163ea 7894
2d717e4f
DJ
7895 strcpy (rs->buf, "vRun;");
7896 len = strlen (rs->buf);
c906108c 7897
2d717e4f
DJ
7898 if (strlen (remote_exec_file) * 2 + len >= get_remote_packet_size ())
7899 error (_("Remote file name too long for run packet"));
7900 len += 2 * bin2hex ((gdb_byte *) remote_exec_file, rs->buf + len, 0);
7901
d1a41061 7902 gdb_assert (args != NULL);
2d717e4f
DJ
7903 if (*args)
7904 {
7905 struct cleanup *back_to;
7906 int i;
7907 char **argv;
7908
d1a41061 7909 argv = gdb_buildargv (args);
2d717e4f
DJ
7910 back_to = make_cleanup ((void (*) (void *)) freeargv, argv);
7911 for (i = 0; argv[i] != NULL; i++)
7912 {
7913 if (strlen (argv[i]) * 2 + 1 + len >= get_remote_packet_size ())
7914 error (_("Argument list too long for run packet"));
7915 rs->buf[len++] = ';';
7916 len += 2 * bin2hex ((gdb_byte *) argv[i], rs->buf + len, 0);
7917 }
7918 do_cleanups (back_to);
7919 }
7920
7921 rs->buf[len++] = '\0';
7922
7923 putpkt (rs->buf);
7924 getpkt (&rs->buf, &rs->buf_size, 0);
7925
7926 if (packet_ok (rs->buf, &remote_protocol_packets[PACKET_vRun]) == PACKET_OK)
7927 {
3405876a 7928 /* We have a wait response. All is well. */
2d717e4f
DJ
7929 return 0;
7930 }
7931 else if (remote_protocol_packets[PACKET_vRun].support == PACKET_DISABLE)
7932 /* It wasn't disabled before, but it is now. */
7933 return -1;
7934 else
7935 {
7936 if (remote_exec_file[0] == '\0')
7937 error (_("Running the default executable on the remote target failed; "
7938 "try \"set remote exec-file\"?"));
7939 else
7940 error (_("Running \"%s\" on the remote target failed"),
7941 remote_exec_file);
7942 }
c906108c
SS
7943}
7944
2d717e4f
DJ
7945/* In the extended protocol we want to be able to do things like
7946 "run" and have them basically work as expected. So we need
7947 a special create_inferior function. We support changing the
7948 executable file and the command line arguments, but not the
7949 environment. */
7950
43ff13b4 7951static void
2d717e4f 7952extended_remote_create_inferior_1 (char *exec_file, char *args,
75c99385 7953 char **env, int from_tty)
43ff13b4 7954{
3405876a
PA
7955 int run_worked;
7956 char *stop_reply;
7957 struct remote_state *rs = get_remote_state ();
7958
43ff13b4 7959 /* If running asynchronously, register the target file descriptor
23860348 7960 with the event loop. */
75c99385 7961 if (target_can_async_p ())
2acceee2 7962 target_async (inferior_event_handler, 0);
43ff13b4 7963
03583c20
UW
7964 /* Disable address space randomization if requested (and supported). */
7965 if (extended_remote_supports_disable_randomization ())
7966 extended_remote_disable_randomization (disable_randomization);
7967
43ff13b4 7968 /* Now restart the remote server. */
3405876a
PA
7969 run_worked = extended_remote_run (args) != -1;
7970 if (!run_worked)
2d717e4f
DJ
7971 {
7972 /* vRun was not supported. Fail if we need it to do what the
7973 user requested. */
7974 if (remote_exec_file[0])
7975 error (_("Remote target does not support \"set remote exec-file\""));
7976 if (args[0])
7977 error (_("Remote target does not support \"set args\" or run <ARGS>"));
43ff13b4 7978
2d717e4f
DJ
7979 /* Fall back to "R". */
7980 extended_remote_restart ();
7981 }
424163ea 7982
6c95b8df
PA
7983 if (!have_inferiors ())
7984 {
7985 /* Clean up from the last time we ran, before we mark the target
7986 running again. This will mark breakpoints uninserted, and
7987 get_offsets may insert breakpoints. */
7988 init_thread_list ();
7989 init_wait_for_inferior ();
7990 }
45280a52 7991
3405876a
PA
7992 /* vRun's success return is a stop reply. */
7993 stop_reply = run_worked ? rs->buf : NULL;
7994 add_current_inferior_and_thread (stop_reply);
c0a2216e 7995
2d717e4f
DJ
7996 /* Get updated offsets, if the stub uses qOffsets. */
7997 get_offsets ();
2d717e4f
DJ
7998}
7999
8000static void
136d6dae
VP
8001extended_remote_create_inferior (struct target_ops *ops,
8002 char *exec_file, char *args,
2d717e4f
DJ
8003 char **env, int from_tty)
8004{
75c99385 8005 extended_remote_create_inferior_1 (exec_file, args, env, from_tty);
43ff13b4 8006}
c906108c 8007\f
c5aa993b 8008
b775012e
LM
8009/* Given a location's target info BP_TGT and the packet buffer BUF, output
8010 the list of conditions (in agent expression bytecode format), if any, the
8011 target needs to evaluate. The output is placed into the packet buffer
bba74b36 8012 started from BUF and ended at BUF_END. */
b775012e
LM
8013
8014static int
8015remote_add_target_side_condition (struct gdbarch *gdbarch,
bba74b36
YQ
8016 struct bp_target_info *bp_tgt, char *buf,
8017 char *buf_end)
b775012e
LM
8018{
8019 struct agent_expr *aexpr = NULL;
8020 int i, ix;
8021 char *pkt;
8022 char *buf_start = buf;
8023
8024 if (VEC_empty (agent_expr_p, bp_tgt->conditions))
8025 return 0;
8026
8027 buf += strlen (buf);
bba74b36 8028 xsnprintf (buf, buf_end - buf, "%s", ";");
b775012e
LM
8029 buf++;
8030
8031 /* Send conditions to the target and free the vector. */
8032 for (ix = 0;
8033 VEC_iterate (agent_expr_p, bp_tgt->conditions, ix, aexpr);
8034 ix++)
8035 {
bba74b36 8036 xsnprintf (buf, buf_end - buf, "X%x,", aexpr->len);
b775012e
LM
8037 buf += strlen (buf);
8038 for (i = 0; i < aexpr->len; ++i)
8039 buf = pack_hex_byte (buf, aexpr->buf[i]);
8040 *buf = '\0';
8041 }
8042
8043 VEC_free (agent_expr_p, bp_tgt->conditions);
8044 return 0;
8045}
8046
d3ce09f5
SS
8047static void
8048remote_add_target_side_commands (struct gdbarch *gdbarch,
8049 struct bp_target_info *bp_tgt, char *buf)
8050{
8051 struct agent_expr *aexpr = NULL;
8052 int i, ix;
8053
8054 if (VEC_empty (agent_expr_p, bp_tgt->tcommands))
8055 return;
8056
8057 buf += strlen (buf);
8058
8059 sprintf (buf, ";cmds:%x,", bp_tgt->persist);
8060 buf += strlen (buf);
8061
8062 /* Concatenate all the agent expressions that are commands into the
8063 cmds parameter. */
8064 for (ix = 0;
8065 VEC_iterate (agent_expr_p, bp_tgt->tcommands, ix, aexpr);
8066 ix++)
8067 {
8068 sprintf (buf, "X%x,", aexpr->len);
8069 buf += strlen (buf);
8070 for (i = 0; i < aexpr->len; ++i)
8071 buf = pack_hex_byte (buf, aexpr->buf[i]);
8072 *buf = '\0';
8073 }
8074
8075 VEC_free (agent_expr_p, bp_tgt->tcommands);
8076}
8077
8181d85f
DJ
8078/* Insert a breakpoint. On targets that have software breakpoint
8079 support, we ask the remote target to do the work; on targets
8080 which don't, we insert a traditional memory breakpoint. */
c906108c
SS
8081
8082static int
a6d9a66e
UW
8083remote_insert_breakpoint (struct gdbarch *gdbarch,
8084 struct bp_target_info *bp_tgt)
c906108c 8085{
d471ea57
AC
8086 /* Try the "Z" s/w breakpoint packet if it is not already disabled.
8087 If it succeeds, then set the support to PACKET_ENABLE. If it
8088 fails, and the user has explicitly requested the Z support then
23860348 8089 report an error, otherwise, mark it disabled and go on. */
802188a7 8090
444abaca 8091 if (remote_protocol_packets[PACKET_Z0].support != PACKET_DISABLE)
96baa820 8092 {
7c0f6dcc 8093 CORE_ADDR addr = bp_tgt->placed_address;
4fff2411 8094 struct remote_state *rs;
bba74b36 8095 char *p, *endbuf;
7c0f6dcc 8096 int bpsize;
b775012e 8097 struct condition_list *cond = NULL;
4fff2411 8098
a1dcb23a 8099 gdbarch_remote_breakpoint_from_pc (gdbarch, &addr, &bpsize);
4fff2411
JZ
8100
8101 rs = get_remote_state ();
8102 p = rs->buf;
bba74b36 8103 endbuf = rs->buf + get_remote_packet_size ();
802188a7 8104
96baa820
JM
8105 *(p++) = 'Z';
8106 *(p++) = '0';
8107 *(p++) = ',';
7c0f6dcc 8108 addr = (ULONGEST) remote_address_masked (addr);
8181d85f 8109 p += hexnumstr (p, addr);
bba74b36 8110 xsnprintf (p, endbuf - p, ",%d", bpsize);
802188a7 8111
b775012e 8112 if (remote_supports_cond_breakpoints ())
bba74b36 8113 remote_add_target_side_condition (gdbarch, bp_tgt, p, endbuf);
b775012e 8114
d3ce09f5
SS
8115 if (remote_can_run_breakpoint_commands ())
8116 remote_add_target_side_commands (gdbarch, bp_tgt, p);
8117
6d820c5c
DJ
8118 putpkt (rs->buf);
8119 getpkt (&rs->buf, &rs->buf_size, 0);
96baa820 8120
6d820c5c 8121 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0]))
96baa820 8122 {
d471ea57
AC
8123 case PACKET_ERROR:
8124 return -1;
8125 case PACKET_OK:
7c0f6dcc
JL
8126 bp_tgt->placed_address = addr;
8127 bp_tgt->placed_size = bpsize;
d471ea57
AC
8128 return 0;
8129 case PACKET_UNKNOWN:
8130 break;
96baa820
JM
8131 }
8132 }
c906108c 8133
a6d9a66e 8134 return memory_insert_breakpoint (gdbarch, bp_tgt);
c906108c
SS
8135}
8136
8137static int
a6d9a66e
UW
8138remote_remove_breakpoint (struct gdbarch *gdbarch,
8139 struct bp_target_info *bp_tgt)
c906108c 8140{
8181d85f 8141 CORE_ADDR addr = bp_tgt->placed_address;
d01949b6 8142 struct remote_state *rs = get_remote_state ();
96baa820 8143
444abaca 8144 if (remote_protocol_packets[PACKET_Z0].support != PACKET_DISABLE)
96baa820 8145 {
6d820c5c 8146 char *p = rs->buf;
bba74b36 8147 char *endbuf = rs->buf + get_remote_packet_size ();
802188a7 8148
96baa820
JM
8149 *(p++) = 'z';
8150 *(p++) = '0';
8151 *(p++) = ',';
8152
8181d85f
DJ
8153 addr = (ULONGEST) remote_address_masked (bp_tgt->placed_address);
8154 p += hexnumstr (p, addr);
bba74b36 8155 xsnprintf (p, endbuf - p, ",%d", bp_tgt->placed_size);
802188a7 8156
6d820c5c
DJ
8157 putpkt (rs->buf);
8158 getpkt (&rs->buf, &rs->buf_size, 0);
96baa820 8159
6d820c5c 8160 return (rs->buf[0] == 'E');
96baa820
JM
8161 }
8162
a6d9a66e 8163 return memory_remove_breakpoint (gdbarch, bp_tgt);
c906108c
SS
8164}
8165
d471ea57
AC
8166static int
8167watchpoint_to_Z_packet (int type)
8168{
8169 switch (type)
8170 {
8171 case hw_write:
bb858e6a 8172 return Z_PACKET_WRITE_WP;
d471ea57
AC
8173 break;
8174 case hw_read:
bb858e6a 8175 return Z_PACKET_READ_WP;
d471ea57
AC
8176 break;
8177 case hw_access:
bb858e6a 8178 return Z_PACKET_ACCESS_WP;
d471ea57
AC
8179 break;
8180 default:
8e65ff28 8181 internal_error (__FILE__, __LINE__,
e2e0b3e5 8182 _("hw_bp_to_z: bad watchpoint type %d"), type);
d471ea57
AC
8183 }
8184}
8185
3c3bea1c 8186static int
0cf6dd15
TJB
8187remote_insert_watchpoint (CORE_ADDR addr, int len, int type,
8188 struct expression *cond)
96baa820 8189{
d01949b6 8190 struct remote_state *rs = get_remote_state ();
bba74b36 8191 char *endbuf = rs->buf + get_remote_packet_size ();
e514a9d6 8192 char *p;
d471ea57 8193 enum Z_packet_type packet = watchpoint_to_Z_packet (type);
96baa820 8194
444abaca 8195 if (remote_protocol_packets[PACKET_Z0 + packet].support == PACKET_DISABLE)
85d721b8 8196 return 1;
802188a7 8197
bba74b36 8198 xsnprintf (rs->buf, endbuf - rs->buf, "Z%x,", packet);
6d820c5c 8199 p = strchr (rs->buf, '\0');
96baa820
JM
8200 addr = remote_address_masked (addr);
8201 p += hexnumstr (p, (ULONGEST) addr);
bba74b36 8202 xsnprintf (p, endbuf - p, ",%x", len);
802188a7 8203
6d820c5c
DJ
8204 putpkt (rs->buf);
8205 getpkt (&rs->buf, &rs->buf_size, 0);
96baa820 8206
6d820c5c 8207 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0 + packet]))
d471ea57
AC
8208 {
8209 case PACKET_ERROR:
d471ea57 8210 return -1;
85d721b8
PA
8211 case PACKET_UNKNOWN:
8212 return 1;
d471ea57
AC
8213 case PACKET_OK:
8214 return 0;
8215 }
8e65ff28 8216 internal_error (__FILE__, __LINE__,
e2e0b3e5 8217 _("remote_insert_watchpoint: reached end of function"));
96baa820
JM
8218}
8219
283002cf
MR
8220static int
8221remote_watchpoint_addr_within_range (struct target_ops *target, CORE_ADDR addr,
8222 CORE_ADDR start, int length)
8223{
8224 CORE_ADDR diff = remote_address_masked (addr - start);
8225
8226 return diff < length;
8227}
8228
d471ea57 8229
3c3bea1c 8230static int
0cf6dd15
TJB
8231remote_remove_watchpoint (CORE_ADDR addr, int len, int type,
8232 struct expression *cond)
96baa820 8233{
d01949b6 8234 struct remote_state *rs = get_remote_state ();
bba74b36 8235 char *endbuf = rs->buf + get_remote_packet_size ();
e514a9d6 8236 char *p;
d471ea57
AC
8237 enum Z_packet_type packet = watchpoint_to_Z_packet (type);
8238
444abaca 8239 if (remote_protocol_packets[PACKET_Z0 + packet].support == PACKET_DISABLE)
5cffb350 8240 return -1;
802188a7 8241
bba74b36 8242 xsnprintf (rs->buf, endbuf - rs->buf, "z%x,", packet);
6d820c5c 8243 p = strchr (rs->buf, '\0');
96baa820
JM
8244 addr = remote_address_masked (addr);
8245 p += hexnumstr (p, (ULONGEST) addr);
bba74b36 8246 xsnprintf (p, endbuf - p, ",%x", len);
6d820c5c
DJ
8247 putpkt (rs->buf);
8248 getpkt (&rs->buf, &rs->buf_size, 0);
96baa820 8249
6d820c5c 8250 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0 + packet]))
d471ea57
AC
8251 {
8252 case PACKET_ERROR:
8253 case PACKET_UNKNOWN:
8254 return -1;
8255 case PACKET_OK:
8256 return 0;
8257 }
8e65ff28 8258 internal_error (__FILE__, __LINE__,
e2e0b3e5 8259 _("remote_remove_watchpoint: reached end of function"));
96baa820
JM
8260}
8261
3c3bea1c 8262
501eef12 8263int remote_hw_watchpoint_limit = -1;
480a3f21 8264int remote_hw_watchpoint_length_limit = -1;
501eef12 8265int remote_hw_breakpoint_limit = -1;
d471ea57 8266
480a3f21
PW
8267static int
8268remote_region_ok_for_hw_watchpoint (CORE_ADDR addr, int len)
8269{
8270 if (remote_hw_watchpoint_length_limit == 0)
8271 return 0;
8272 else if (remote_hw_watchpoint_length_limit < 0)
8273 return 1;
8274 else if (len <= remote_hw_watchpoint_length_limit)
8275 return 1;
8276 else
8277 return 0;
8278}
8279
b9362cc7 8280static int
3c3bea1c 8281remote_check_watch_resources (int type, int cnt, int ot)
96baa820 8282{
3c3bea1c
GS
8283 if (type == bp_hardware_breakpoint)
8284 {
8285 if (remote_hw_breakpoint_limit == 0)
8286 return 0;
501eef12
AC
8287 else if (remote_hw_breakpoint_limit < 0)
8288 return 1;
3c3bea1c
GS
8289 else if (cnt <= remote_hw_breakpoint_limit)
8290 return 1;
8291 }
8292 else
8293 {
8294 if (remote_hw_watchpoint_limit == 0)
8295 return 0;
501eef12
AC
8296 else if (remote_hw_watchpoint_limit < 0)
8297 return 1;
3c3bea1c
GS
8298 else if (ot)
8299 return -1;
8300 else if (cnt <= remote_hw_watchpoint_limit)
8301 return 1;
8302 }
8303 return -1;
8304}
8305
b9362cc7 8306static int
3c3bea1c
GS
8307remote_stopped_by_watchpoint (void)
8308{
82f73884 8309 return remote_stopped_by_watchpoint_p;
3c3bea1c
GS
8310}
8311
4aa7a7f5
JJ
8312static int
8313remote_stopped_data_address (struct target_ops *target, CORE_ADDR *addr_p)
3c3bea1c 8314{
4aa7a7f5 8315 int rc = 0;
a744cf53 8316
d983da9c 8317 if (remote_stopped_by_watchpoint ())
4aa7a7f5
JJ
8318 {
8319 *addr_p = remote_watch_data_address;
8320 rc = 1;
8321 }
8322
8323 return rc;
3c3bea1c
GS
8324}
8325
8326
8327static int
a6d9a66e
UW
8328remote_insert_hw_breakpoint (struct gdbarch *gdbarch,
8329 struct bp_target_info *bp_tgt)
3c3bea1c 8330{
8181d85f 8331 CORE_ADDR addr;
4fff2411 8332 struct remote_state *rs;
bba74b36 8333 char *p, *endbuf;
dd61ec5c 8334 char *message;
802188a7 8335
c8189ed1 8336 /* The length field should be set to the size of a breakpoint
8181d85f 8337 instruction, even though we aren't inserting one ourselves. */
c8189ed1 8338
a1dcb23a 8339 gdbarch_remote_breakpoint_from_pc
a6d9a66e 8340 (gdbarch, &bp_tgt->placed_address, &bp_tgt->placed_size);
3c3bea1c 8341
444abaca 8342 if (remote_protocol_packets[PACKET_Z1].support == PACKET_DISABLE)
5cffb350 8343 return -1;
2bc416ba 8344
4fff2411
JZ
8345 rs = get_remote_state ();
8346 p = rs->buf;
bba74b36 8347 endbuf = rs->buf + get_remote_packet_size ();
4fff2411 8348
96baa820
JM
8349 *(p++) = 'Z';
8350 *(p++) = '1';
8351 *(p++) = ',';
802188a7 8352
8181d85f 8353 addr = remote_address_masked (bp_tgt->placed_address);
96baa820 8354 p += hexnumstr (p, (ULONGEST) addr);
bba74b36 8355 xsnprintf (p, endbuf - p, ",%x", bp_tgt->placed_size);
96baa820 8356
b775012e 8357 if (remote_supports_cond_breakpoints ())
bba74b36 8358 remote_add_target_side_condition (gdbarch, bp_tgt, p, endbuf);
b775012e 8359
d3ce09f5
SS
8360 if (remote_can_run_breakpoint_commands ())
8361 remote_add_target_side_commands (gdbarch, bp_tgt, p);
8362
6d820c5c
DJ
8363 putpkt (rs->buf);
8364 getpkt (&rs->buf, &rs->buf_size, 0);
96baa820 8365
6d820c5c 8366 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z1]))
d471ea57
AC
8367 {
8368 case PACKET_ERROR:
dd61ec5c
MW
8369 if (rs->buf[1] == '.')
8370 {
8371 message = strchr (rs->buf + 2, '.');
8372 if (message)
0316657e 8373 error (_("Remote failure reply: %s"), message + 1);
dd61ec5c
MW
8374 }
8375 return -1;
d471ea57
AC
8376 case PACKET_UNKNOWN:
8377 return -1;
8378 case PACKET_OK:
8379 return 0;
8380 }
8e65ff28 8381 internal_error (__FILE__, __LINE__,
e2e0b3e5 8382 _("remote_insert_hw_breakpoint: reached end of function"));
96baa820
JM
8383}
8384
d471ea57 8385
802188a7 8386static int
a6d9a66e
UW
8387remote_remove_hw_breakpoint (struct gdbarch *gdbarch,
8388 struct bp_target_info *bp_tgt)
96baa820 8389{
8181d85f 8390 CORE_ADDR addr;
d01949b6 8391 struct remote_state *rs = get_remote_state ();
6d820c5c 8392 char *p = rs->buf;
bba74b36 8393 char *endbuf = rs->buf + get_remote_packet_size ();
c8189ed1 8394
444abaca 8395 if (remote_protocol_packets[PACKET_Z1].support == PACKET_DISABLE)
5cffb350 8396 return -1;
802188a7 8397
96baa820
JM
8398 *(p++) = 'z';
8399 *(p++) = '1';
8400 *(p++) = ',';
802188a7 8401
8181d85f 8402 addr = remote_address_masked (bp_tgt->placed_address);
96baa820 8403 p += hexnumstr (p, (ULONGEST) addr);
bba74b36 8404 xsnprintf (p, endbuf - p, ",%x", bp_tgt->placed_size);
96baa820 8405
6d820c5c
DJ
8406 putpkt (rs->buf);
8407 getpkt (&rs->buf, &rs->buf_size, 0);
802188a7 8408
6d820c5c 8409 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z1]))
d471ea57
AC
8410 {
8411 case PACKET_ERROR:
8412 case PACKET_UNKNOWN:
8413 return -1;
8414 case PACKET_OK:
8415 return 0;
8416 }
8e65ff28 8417 internal_error (__FILE__, __LINE__,
e2e0b3e5 8418 _("remote_remove_hw_breakpoint: reached end of function"));
96baa820 8419}
96baa820 8420
23860348 8421/* Table used by the crc32 function to calcuate the checksum. */
c906108c 8422
c5aa993b
JM
8423static unsigned long crc32_table[256] =
8424{0, 0};
c906108c
SS
8425
8426static unsigned long
4a5e7a5b 8427crc32 (const unsigned char *buf, int len, unsigned int crc)
c906108c 8428{
c5aa993b 8429 if (!crc32_table[1])
c906108c 8430 {
23860348 8431 /* Initialize the CRC table and the decoding table. */
c906108c
SS
8432 int i, j;
8433 unsigned int c;
8434
8435 for (i = 0; i < 256; i++)
c5aa993b
JM
8436 {
8437 for (c = i << 24, j = 8; j > 0; --j)
8438 c = c & 0x80000000 ? (c << 1) ^ 0x04c11db7 : (c << 1);
8439 crc32_table[i] = c;
8440 }
c906108c
SS
8441 }
8442
8443 while (len--)
8444 {
8445 crc = (crc << 8) ^ crc32_table[((crc >> 24) ^ *buf) & 255];
8446 buf++;
8447 }
8448 return crc;
8449}
8450
4a5e7a5b
PA
8451/* Verify memory using the "qCRC:" request. */
8452
8453static int
8454remote_verify_memory (struct target_ops *ops,
8455 const gdb_byte *data, CORE_ADDR lma, ULONGEST size)
8456{
8457 struct remote_state *rs = get_remote_state ();
8458 unsigned long host_crc, target_crc;
8459 char *tmp;
8460
8461 /* FIXME: assumes lma can fit into long. */
8462 xsnprintf (rs->buf, get_remote_packet_size (), "qCRC:%lx,%lx",
8463 (long) lma, (long) size);
8464 putpkt (rs->buf);
8465
8466 /* Be clever; compute the host_crc before waiting for target
8467 reply. */
8468 host_crc = crc32 (data, size, 0xffffffff);
8469
8470 getpkt (&rs->buf, &rs->buf_size, 0);
8471 if (rs->buf[0] == 'E')
8472 return -1;
8473
8474 if (rs->buf[0] != 'C')
8475 error (_("remote target does not support this operation"));
8476
8477 for (target_crc = 0, tmp = &rs->buf[1]; *tmp; tmp++)
8478 target_crc = target_crc * 16 + fromhex (*tmp);
8479
8480 return (host_crc == target_crc);
8481}
8482
c906108c
SS
8483/* compare-sections command
8484
8485 With no arguments, compares each loadable section in the exec bfd
8486 with the same memory range on the target, and reports mismatches.
4a5e7a5b 8487 Useful for verifying the image on the target against the exec file. */
e514a9d6 8488
c906108c 8489static void
fba45db2 8490compare_sections_command (char *args, int from_tty)
c906108c
SS
8491{
8492 asection *s;
c906108c 8493 struct cleanup *old_chain;
085dd6e6 8494 char *sectdata;
ce359b09 8495 const char *sectname;
c906108c
SS
8496 bfd_size_type size;
8497 bfd_vma lma;
8498 int matched = 0;
8499 int mismatched = 0;
4a5e7a5b 8500 int res;
c906108c
SS
8501
8502 if (!exec_bfd)
8a3fe4f8 8503 error (_("command cannot be used without an exec file"));
c906108c 8504
c5aa993b 8505 for (s = exec_bfd->sections; s; s = s->next)
c906108c
SS
8506 {
8507 if (!(s->flags & SEC_LOAD))
0df8b418 8508 continue; /* Skip non-loadable section. */
c906108c 8509
2c500098 8510 size = bfd_get_section_size (s);
c906108c 8511 if (size == 0)
0df8b418 8512 continue; /* Skip zero-length section. */
c906108c 8513
ce359b09 8514 sectname = bfd_get_section_name (exec_bfd, s);
c906108c 8515 if (args && strcmp (args, sectname) != 0)
0df8b418 8516 continue; /* Not the section selected by user. */
c906108c 8517
0df8b418 8518 matched = 1; /* Do this section. */
c906108c 8519 lma = s->lma;
c906108c 8520
c906108c 8521 sectdata = xmalloc (size);
b8c9b27d 8522 old_chain = make_cleanup (xfree, sectdata);
c906108c 8523 bfd_get_section_contents (exec_bfd, s, sectdata, 0, size);
c906108c 8524
4a5e7a5b
PA
8525 res = target_verify_memory (sectdata, lma, size);
8526
8527 if (res == -1)
5af949e3 8528 error (_("target memory fault, section %s, range %s -- %s"), sectname,
f5656ead
TT
8529 paddress (target_gdbarch (), lma),
8530 paddress (target_gdbarch (), lma + size));
c906108c 8531
5af949e3 8532 printf_filtered ("Section %s, range %s -- %s: ", sectname,
f5656ead
TT
8533 paddress (target_gdbarch (), lma),
8534 paddress (target_gdbarch (), lma + size));
4a5e7a5b 8535 if (res)
c906108c
SS
8536 printf_filtered ("matched.\n");
8537 else
c5aa993b
JM
8538 {
8539 printf_filtered ("MIS-MATCHED!\n");
8540 mismatched++;
8541 }
c906108c
SS
8542
8543 do_cleanups (old_chain);
8544 }
8545 if (mismatched > 0)
8a3fe4f8
AC
8546 warning (_("One or more sections of the remote executable does not match\n\
8547the loaded file\n"));
c906108c 8548 if (args && !matched)
a3f17187 8549 printf_filtered (_("No loaded section named '%s'.\n"), args);
c906108c
SS
8550}
8551
0e7f50da
UW
8552/* Write LEN bytes from WRITEBUF into OBJECT_NAME/ANNEX at OFFSET
8553 into remote target. The number of bytes written to the remote
8554 target is returned, or -1 for error. */
8555
8556static LONGEST
8557remote_write_qxfer (struct target_ops *ops, const char *object_name,
8558 const char *annex, const gdb_byte *writebuf,
8559 ULONGEST offset, LONGEST len,
8560 struct packet_config *packet)
8561{
8562 int i, buf_len;
8563 ULONGEST n;
0e7f50da
UW
8564 struct remote_state *rs = get_remote_state ();
8565 int max_size = get_memory_write_packet_size ();
8566
8567 if (packet->support == PACKET_DISABLE)
8568 return -1;
8569
8570 /* Insert header. */
8571 i = snprintf (rs->buf, max_size,
8572 "qXfer:%s:write:%s:%s:",
8573 object_name, annex ? annex : "",
8574 phex_nz (offset, sizeof offset));
8575 max_size -= (i + 1);
8576
8577 /* Escape as much data as fits into rs->buf. */
8578 buf_len = remote_escape_output
8579 (writebuf, len, (rs->buf + i), &max_size, max_size);
8580
8581 if (putpkt_binary (rs->buf, i + buf_len) < 0
8582 || getpkt_sane (&rs->buf, &rs->buf_size, 0) < 0
8583 || packet_ok (rs->buf, packet) != PACKET_OK)
8584 return -1;
8585
8586 unpack_varlen_hex (rs->buf, &n);
8587 return n;
8588}
8589
0876f84a
DJ
8590/* Read OBJECT_NAME/ANNEX from the remote target using a qXfer packet.
8591 Data at OFFSET, of up to LEN bytes, is read into READBUF; the
8592 number of bytes read is returned, or 0 for EOF, or -1 for error.
8593 The number of bytes read may be less than LEN without indicating an
8594 EOF. PACKET is checked and updated to indicate whether the remote
8595 target supports this object. */
8596
8597static LONGEST
8598remote_read_qxfer (struct target_ops *ops, const char *object_name,
8599 const char *annex,
8600 gdb_byte *readbuf, ULONGEST offset, LONGEST len,
8601 struct packet_config *packet)
8602{
8603 static char *finished_object;
8604 static char *finished_annex;
8605 static ULONGEST finished_offset;
8606
8607 struct remote_state *rs = get_remote_state ();
0876f84a
DJ
8608 LONGEST i, n, packet_len;
8609
8610 if (packet->support == PACKET_DISABLE)
8611 return -1;
8612
8613 /* Check whether we've cached an end-of-object packet that matches
8614 this request. */
8615 if (finished_object)
8616 {
8617 if (strcmp (object_name, finished_object) == 0
8618 && strcmp (annex ? annex : "", finished_annex) == 0
8619 && offset == finished_offset)
8620 return 0;
8621
8622 /* Otherwise, we're now reading something different. Discard
8623 the cache. */
8624 xfree (finished_object);
8625 xfree (finished_annex);
8626 finished_object = NULL;
8627 finished_annex = NULL;
8628 }
8629
8630 /* Request only enough to fit in a single packet. The actual data
8631 may not, since we don't know how much of it will need to be escaped;
8632 the target is free to respond with slightly less data. We subtract
8633 five to account for the response type and the protocol frame. */
8634 n = min (get_remote_packet_size () - 5, len);
8635 snprintf (rs->buf, get_remote_packet_size () - 4, "qXfer:%s:read:%s:%s,%s",
8636 object_name, annex ? annex : "",
8637 phex_nz (offset, sizeof offset),
8638 phex_nz (n, sizeof n));
8639 i = putpkt (rs->buf);
8640 if (i < 0)
8641 return -1;
8642
8643 rs->buf[0] = '\0';
8644 packet_len = getpkt_sane (&rs->buf, &rs->buf_size, 0);
8645 if (packet_len < 0 || packet_ok (rs->buf, packet) != PACKET_OK)
8646 return -1;
8647
8648 if (rs->buf[0] != 'l' && rs->buf[0] != 'm')
8649 error (_("Unknown remote qXfer reply: %s"), rs->buf);
8650
8651 /* 'm' means there is (or at least might be) more data after this
8652 batch. That does not make sense unless there's at least one byte
8653 of data in this reply. */
8654 if (rs->buf[0] == 'm' && packet_len == 1)
8655 error (_("Remote qXfer reply contained no data."));
8656
8657 /* Got some data. */
8658 i = remote_unescape_input (rs->buf + 1, packet_len - 1, readbuf, n);
8659
8660 /* 'l' is an EOF marker, possibly including a final block of data,
0e7f50da
UW
8661 or possibly empty. If we have the final block of a non-empty
8662 object, record this fact to bypass a subsequent partial read. */
8663 if (rs->buf[0] == 'l' && offset + i > 0)
0876f84a
DJ
8664 {
8665 finished_object = xstrdup (object_name);
8666 finished_annex = xstrdup (annex ? annex : "");
8667 finished_offset = offset + i;
8668 }
8669
8670 return i;
8671}
8672
1e3ff5ad 8673static LONGEST
4b8a223f 8674remote_xfer_partial (struct target_ops *ops, enum target_object object,
961cb7b5
MK
8675 const char *annex, gdb_byte *readbuf,
8676 const gdb_byte *writebuf, ULONGEST offset, LONGEST len)
c906108c 8677{
82f73884 8678 struct remote_state *rs;
c906108c 8679 int i;
6d820c5c 8680 char *p2;
1e3ff5ad 8681 char query_type;
c906108c 8682
e6e4e701 8683 set_remote_traceframe ();
82f73884
PA
8684 set_general_thread (inferior_ptid);
8685
8686 rs = get_remote_state ();
8687
b2182ed2 8688 /* Handle memory using the standard memory routines. */
21e3b9b9
DJ
8689 if (object == TARGET_OBJECT_MEMORY)
8690 {
8691 int xfered;
a744cf53 8692
21e3b9b9
DJ
8693 errno = 0;
8694
2d717e4f
DJ
8695 /* If the remote target is connected but not running, we should
8696 pass this request down to a lower stratum (e.g. the executable
8697 file). */
8698 if (!target_has_execution)
8699 return 0;
8700
21e3b9b9 8701 if (writebuf != NULL)
b2182ed2 8702 xfered = remote_write_bytes (offset, writebuf, len);
21e3b9b9 8703 else
b2182ed2 8704 xfered = remote_read_bytes (offset, readbuf, len);
21e3b9b9
DJ
8705
8706 if (xfered > 0)
8707 return xfered;
8708 else if (xfered == 0 && errno == 0)
8709 return 0;
8710 else
8711 return -1;
8712 }
8713
0df8b418 8714 /* Handle SPU memory using qxfer packets. */
0e7f50da
UW
8715 if (object == TARGET_OBJECT_SPU)
8716 {
8717 if (readbuf)
8718 return remote_read_qxfer (ops, "spu", annex, readbuf, offset, len,
8719 &remote_protocol_packets
8720 [PACKET_qXfer_spu_read]);
8721 else
8722 return remote_write_qxfer (ops, "spu", annex, writebuf, offset, len,
8723 &remote_protocol_packets
8724 [PACKET_qXfer_spu_write]);
8725 }
8726
4aa995e1
PA
8727 /* Handle extra signal info using qxfer packets. */
8728 if (object == TARGET_OBJECT_SIGNAL_INFO)
8729 {
8730 if (readbuf)
8731 return remote_read_qxfer (ops, "siginfo", annex, readbuf, offset, len,
8732 &remote_protocol_packets
8733 [PACKET_qXfer_siginfo_read]);
8734 else
3e43a32a
MS
8735 return remote_write_qxfer (ops, "siginfo", annex,
8736 writebuf, offset, len,
4aa995e1
PA
8737 &remote_protocol_packets
8738 [PACKET_qXfer_siginfo_write]);
8739 }
8740
0fb4aa4b
PA
8741 if (object == TARGET_OBJECT_STATIC_TRACE_DATA)
8742 {
8743 if (readbuf)
3e43a32a
MS
8744 return remote_read_qxfer (ops, "statictrace", annex,
8745 readbuf, offset, len,
0fb4aa4b
PA
8746 &remote_protocol_packets
8747 [PACKET_qXfer_statictrace_read]);
8748 else
8749 return -1;
8750 }
8751
a76d924d
DJ
8752 /* Only handle flash writes. */
8753 if (writebuf != NULL)
8754 {
8755 LONGEST xfered;
8756
8757 switch (object)
8758 {
8759 case TARGET_OBJECT_FLASH:
8760 xfered = remote_flash_write (ops, offset, len, writebuf);
8761
8762 if (xfered > 0)
8763 return xfered;
8764 else if (xfered == 0 && errno == 0)
8765 return 0;
8766 else
8767 return -1;
8768
8769 default:
8770 return -1;
8771 }
8772 }
4b8a223f 8773
1e3ff5ad
AC
8774 /* Map pre-existing objects onto letters. DO NOT do this for new
8775 objects!!! Instead specify new query packets. */
8776 switch (object)
c906108c 8777 {
1e3ff5ad
AC
8778 case TARGET_OBJECT_AVR:
8779 query_type = 'R';
8780 break;
802188a7
RM
8781
8782 case TARGET_OBJECT_AUXV:
0876f84a
DJ
8783 gdb_assert (annex == NULL);
8784 return remote_read_qxfer (ops, "auxv", annex, readbuf, offset, len,
8785 &remote_protocol_packets[PACKET_qXfer_auxv]);
802188a7 8786
23181151
DJ
8787 case TARGET_OBJECT_AVAILABLE_FEATURES:
8788 return remote_read_qxfer
8789 (ops, "features", annex, readbuf, offset, len,
8790 &remote_protocol_packets[PACKET_qXfer_features]);
8791
cfa9d6d9
DJ
8792 case TARGET_OBJECT_LIBRARIES:
8793 return remote_read_qxfer
8794 (ops, "libraries", annex, readbuf, offset, len,
8795 &remote_protocol_packets[PACKET_qXfer_libraries]);
8796
2268b414
JK
8797 case TARGET_OBJECT_LIBRARIES_SVR4:
8798 return remote_read_qxfer
8799 (ops, "libraries-svr4", annex, readbuf, offset, len,
8800 &remote_protocol_packets[PACKET_qXfer_libraries_svr4]);
8801
fd79ecee
DJ
8802 case TARGET_OBJECT_MEMORY_MAP:
8803 gdb_assert (annex == NULL);
8804 return remote_read_qxfer (ops, "memory-map", annex, readbuf, offset, len,
8805 &remote_protocol_packets[PACKET_qXfer_memory_map]);
8806
07e059b5
VP
8807 case TARGET_OBJECT_OSDATA:
8808 /* Should only get here if we're connected. */
8809 gdb_assert (remote_desc);
8810 return remote_read_qxfer
8811 (ops, "osdata", annex, readbuf, offset, len,
8812 &remote_protocol_packets[PACKET_qXfer_osdata]);
8813
dc146f7c
VP
8814 case TARGET_OBJECT_THREADS:
8815 gdb_assert (annex == NULL);
8816 return remote_read_qxfer (ops, "threads", annex, readbuf, offset, len,
8817 &remote_protocol_packets[PACKET_qXfer_threads]);
8818
b3b9301e
PA
8819 case TARGET_OBJECT_TRACEFRAME_INFO:
8820 gdb_assert (annex == NULL);
8821 return remote_read_qxfer
8822 (ops, "traceframe-info", annex, readbuf, offset, len,
8823 &remote_protocol_packets[PACKET_qXfer_traceframe_info]);
78d85199
YQ
8824
8825 case TARGET_OBJECT_FDPIC:
8826 return remote_read_qxfer (ops, "fdpic", annex, readbuf, offset, len,
8827 &remote_protocol_packets[PACKET_qXfer_fdpic]);
169081d0
TG
8828
8829 case TARGET_OBJECT_OPENVMS_UIB:
8830 return remote_read_qxfer (ops, "uib", annex, readbuf, offset, len,
8831 &remote_protocol_packets[PACKET_qXfer_uib]);
8832
9accd112
MM
8833 case TARGET_OBJECT_BTRACE:
8834 return remote_read_qxfer (ops, "btrace", annex, readbuf, offset, len,
8835 &remote_protocol_packets[PACKET_qXfer_btrace]);
8836
1e3ff5ad 8837 default:
c906108c
SS
8838 return -1;
8839 }
8840
4b8a223f 8841 /* Note: a zero OFFSET and LEN can be used to query the minimum
1e3ff5ad 8842 buffer size. */
4b8a223f 8843 if (offset == 0 && len == 0)
ea9c271d 8844 return (get_remote_packet_size ());
0df8b418 8845 /* Minimum outbuf size is get_remote_packet_size (). If LEN is not
24b06219 8846 large enough let the caller deal with it. */
ea9c271d 8847 if (len < get_remote_packet_size ())
1e3ff5ad 8848 return -1;
ea9c271d 8849 len = get_remote_packet_size ();
1e3ff5ad 8850
23860348 8851 /* Except for querying the minimum buffer size, target must be open. */
c5aa993b 8852 if (!remote_desc)
8a3fe4f8 8853 error (_("remote query is only available after target open"));
c906108c 8854
1e3ff5ad 8855 gdb_assert (annex != NULL);
4b8a223f 8856 gdb_assert (readbuf != NULL);
c906108c 8857
6d820c5c 8858 p2 = rs->buf;
c906108c
SS
8859 *p2++ = 'q';
8860 *p2++ = query_type;
8861
23860348
MS
8862 /* We used one buffer char for the remote protocol q command and
8863 another for the query type. As the remote protocol encapsulation
8864 uses 4 chars plus one extra in case we are debugging
8865 (remote_debug), we have PBUFZIZ - 7 left to pack the query
8866 string. */
c906108c 8867 i = 0;
ea9c271d 8868 while (annex[i] && (i < (get_remote_packet_size () - 8)))
c906108c 8869 {
1e3ff5ad
AC
8870 /* Bad caller may have sent forbidden characters. */
8871 gdb_assert (isprint (annex[i]) && annex[i] != '$' && annex[i] != '#');
8872 *p2++ = annex[i];
c906108c
SS
8873 i++;
8874 }
1e3ff5ad
AC
8875 *p2 = '\0';
8876 gdb_assert (annex[i] == '\0');
c906108c 8877
6d820c5c 8878 i = putpkt (rs->buf);
c5aa993b
JM
8879 if (i < 0)
8880 return i;
c906108c 8881
6d820c5c
DJ
8882 getpkt (&rs->buf, &rs->buf_size, 0);
8883 strcpy ((char *) readbuf, rs->buf);
c906108c 8884
cfd77fa1 8885 return strlen ((char *) readbuf);
c906108c
SS
8886}
8887
08388c79
DE
8888static int
8889remote_search_memory (struct target_ops* ops,
8890 CORE_ADDR start_addr, ULONGEST search_space_len,
8891 const gdb_byte *pattern, ULONGEST pattern_len,
8892 CORE_ADDR *found_addrp)
8893{
f5656ead 8894 int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
08388c79
DE
8895 struct remote_state *rs = get_remote_state ();
8896 int max_size = get_memory_write_packet_size ();
8897 struct packet_config *packet =
8898 &remote_protocol_packets[PACKET_qSearch_memory];
0df8b418
MS
8899 /* Number of packet bytes used to encode the pattern;
8900 this could be more than PATTERN_LEN due to escape characters. */
08388c79 8901 int escaped_pattern_len;
0df8b418 8902 /* Amount of pattern that was encodable in the packet. */
08388c79
DE
8903 int used_pattern_len;
8904 int i;
8905 int found;
8906 ULONGEST found_addr;
8907
8908 /* Don't go to the target if we don't have to.
8909 This is done before checking packet->support to avoid the possibility that
8910 a success for this edge case means the facility works in general. */
8911 if (pattern_len > search_space_len)
8912 return 0;
8913 if (pattern_len == 0)
8914 {
8915 *found_addrp = start_addr;
8916 return 1;
8917 }
8918
8919 /* If we already know the packet isn't supported, fall back to the simple
8920 way of searching memory. */
8921
8922 if (packet->support == PACKET_DISABLE)
8923 {
8924 /* Target doesn't provided special support, fall back and use the
8925 standard support (copy memory and do the search here). */
8926 return simple_search_memory (ops, start_addr, search_space_len,
8927 pattern, pattern_len, found_addrp);
8928 }
8929
8930 /* Insert header. */
8931 i = snprintf (rs->buf, max_size,
8932 "qSearch:memory:%s;%s;",
5af949e3 8933 phex_nz (start_addr, addr_size),
08388c79
DE
8934 phex_nz (search_space_len, sizeof (search_space_len)));
8935 max_size -= (i + 1);
8936
8937 /* Escape as much data as fits into rs->buf. */
8938 escaped_pattern_len =
8939 remote_escape_output (pattern, pattern_len, (rs->buf + i),
8940 &used_pattern_len, max_size);
8941
8942 /* Bail if the pattern is too large. */
8943 if (used_pattern_len != pattern_len)
9b20d036 8944 error (_("Pattern is too large to transmit to remote target."));
08388c79
DE
8945
8946 if (putpkt_binary (rs->buf, i + escaped_pattern_len) < 0
8947 || getpkt_sane (&rs->buf, &rs->buf_size, 0) < 0
8948 || packet_ok (rs->buf, packet) != PACKET_OK)
8949 {
8950 /* The request may not have worked because the command is not
8951 supported. If so, fall back to the simple way. */
8952 if (packet->support == PACKET_DISABLE)
8953 {
8954 return simple_search_memory (ops, start_addr, search_space_len,
8955 pattern, pattern_len, found_addrp);
8956 }
8957 return -1;
8958 }
8959
8960 if (rs->buf[0] == '0')
8961 found = 0;
8962 else if (rs->buf[0] == '1')
8963 {
8964 found = 1;
8965 if (rs->buf[1] != ',')
10e0fa18 8966 error (_("Unknown qSearch:memory reply: %s"), rs->buf);
08388c79
DE
8967 unpack_varlen_hex (rs->buf + 2, &found_addr);
8968 *found_addrp = found_addr;
8969 }
8970 else
10e0fa18 8971 error (_("Unknown qSearch:memory reply: %s"), rs->buf);
08388c79
DE
8972
8973 return found;
8974}
8975
96baa820
JM
8976static void
8977remote_rcmd (char *command,
d9fcf2fb 8978 struct ui_file *outbuf)
96baa820 8979{
d01949b6 8980 struct remote_state *rs = get_remote_state ();
2e9f7625 8981 char *p = rs->buf;
96baa820
JM
8982
8983 if (!remote_desc)
8a3fe4f8 8984 error (_("remote rcmd is only available after target open"));
96baa820 8985
23860348 8986 /* Send a NULL command across as an empty command. */
7be570e7
JM
8987 if (command == NULL)
8988 command = "";
8989
23860348 8990 /* The query prefix. */
2e9f7625
DJ
8991 strcpy (rs->buf, "qRcmd,");
8992 p = strchr (rs->buf, '\0');
96baa820 8993
3e43a32a
MS
8994 if ((strlen (rs->buf) + strlen (command) * 2 + 8/*misc*/)
8995 > get_remote_packet_size ())
8a3fe4f8 8996 error (_("\"monitor\" command ``%s'' is too long."), command);
96baa820 8997
23860348 8998 /* Encode the actual command. */
cfd77fa1 8999 bin2hex ((gdb_byte *) command, p, 0);
96baa820 9000
6d820c5c 9001 if (putpkt (rs->buf) < 0)
8a3fe4f8 9002 error (_("Communication problem with target."));
96baa820
JM
9003
9004 /* get/display the response */
9005 while (1)
9006 {
2e9f7625
DJ
9007 char *buf;
9008
00bf0b85 9009 /* XXX - see also remote_get_noisy_reply(). */
5b37825d 9010 QUIT; /* Allow user to bail out with ^C. */
2e9f7625 9011 rs->buf[0] = '\0';
5b37825d
PW
9012 if (getpkt_sane (&rs->buf, &rs->buf_size, 0) == -1)
9013 {
9014 /* Timeout. Continue to (try to) read responses.
9015 This is better than stopping with an error, assuming the stub
9016 is still executing the (long) monitor command.
9017 If needed, the user can interrupt gdb using C-c, obtaining
9018 an effect similar to stop on timeout. */
9019 continue;
9020 }
2e9f7625 9021 buf = rs->buf;
96baa820 9022 if (buf[0] == '\0')
8a3fe4f8 9023 error (_("Target does not support this command."));
96baa820
JM
9024 if (buf[0] == 'O' && buf[1] != 'K')
9025 {
23860348 9026 remote_console_output (buf + 1); /* 'O' message from stub. */
96baa820
JM
9027 continue;
9028 }
9029 if (strcmp (buf, "OK") == 0)
9030 break;
7be570e7
JM
9031 if (strlen (buf) == 3 && buf[0] == 'E'
9032 && isdigit (buf[1]) && isdigit (buf[2]))
9033 {
8a3fe4f8 9034 error (_("Protocol error with Rcmd"));
7be570e7 9035 }
96baa820
JM
9036 for (p = buf; p[0] != '\0' && p[1] != '\0'; p += 2)
9037 {
9038 char c = (fromhex (p[0]) << 4) + fromhex (p[1]);
a744cf53 9039
96baa820
JM
9040 fputc_unfiltered (c, outbuf);
9041 }
9042 break;
9043 }
9044}
9045
fd79ecee
DJ
9046static VEC(mem_region_s) *
9047remote_memory_map (struct target_ops *ops)
9048{
9049 VEC(mem_region_s) *result = NULL;
9050 char *text = target_read_stralloc (&current_target,
9051 TARGET_OBJECT_MEMORY_MAP, NULL);
9052
9053 if (text)
9054 {
9055 struct cleanup *back_to = make_cleanup (xfree, text);
a744cf53 9056
fd79ecee
DJ
9057 result = parse_memory_map (text);
9058 do_cleanups (back_to);
9059 }
9060
9061 return result;
9062}
9063
c906108c 9064static void
fba45db2 9065packet_command (char *args, int from_tty)
c906108c 9066{
d01949b6 9067 struct remote_state *rs = get_remote_state ();
c906108c 9068
c5aa993b 9069 if (!remote_desc)
8a3fe4f8 9070 error (_("command can only be used with remote target"));
c906108c 9071
c5aa993b 9072 if (!args)
8a3fe4f8 9073 error (_("remote-packet command requires packet text as argument"));
c906108c
SS
9074
9075 puts_filtered ("sending: ");
9076 print_packet (args);
9077 puts_filtered ("\n");
9078 putpkt (args);
9079
6d820c5c 9080 getpkt (&rs->buf, &rs->buf_size, 0);
c906108c 9081 puts_filtered ("received: ");
6d820c5c 9082 print_packet (rs->buf);
c906108c
SS
9083 puts_filtered ("\n");
9084}
9085
9086#if 0
23860348 9087/* --------- UNIT_TEST for THREAD oriented PACKETS ------------------- */
c906108c 9088
a14ed312 9089static void display_thread_info (struct gdb_ext_thread_info *info);
c906108c 9090
a14ed312 9091static void threadset_test_cmd (char *cmd, int tty);
c906108c 9092
a14ed312 9093static void threadalive_test (char *cmd, int tty);
c906108c 9094
a14ed312 9095static void threadlist_test_cmd (char *cmd, int tty);
c906108c 9096
23860348 9097int get_and_display_threadinfo (threadref *ref);
c906108c 9098
a14ed312 9099static void threadinfo_test_cmd (char *cmd, int tty);
c906108c 9100
23860348 9101static int thread_display_step (threadref *ref, void *context);
c906108c 9102
a14ed312 9103static void threadlist_update_test_cmd (char *cmd, int tty);
c906108c 9104
a14ed312 9105static void init_remote_threadtests (void);
c906108c 9106
23860348 9107#define SAMPLE_THREAD 0x05060708 /* Truncated 64 bit threadid. */
c906108c
SS
9108
9109static void
fba45db2 9110threadset_test_cmd (char *cmd, int tty)
c906108c
SS
9111{
9112 int sample_thread = SAMPLE_THREAD;
9113
a3f17187 9114 printf_filtered (_("Remote threadset test\n"));
79d7f229 9115 set_general_thread (sample_thread);
c906108c
SS
9116}
9117
9118
9119static void
fba45db2 9120threadalive_test (char *cmd, int tty)
c906108c
SS
9121{
9122 int sample_thread = SAMPLE_THREAD;
79d7f229
PA
9123 int pid = ptid_get_pid (inferior_ptid);
9124 ptid_t ptid = ptid_build (pid, 0, sample_thread);
c906108c 9125
79d7f229 9126 if (remote_thread_alive (ptid))
c906108c
SS
9127 printf_filtered ("PASS: Thread alive test\n");
9128 else
9129 printf_filtered ("FAIL: Thread alive test\n");
9130}
9131
23860348 9132void output_threadid (char *title, threadref *ref);
c906108c
SS
9133
9134void
fba45db2 9135output_threadid (char *title, threadref *ref)
c906108c
SS
9136{
9137 char hexid[20];
9138
23860348 9139 pack_threadid (&hexid[0], ref); /* Convert threead id into hex. */
c906108c
SS
9140 hexid[16] = 0;
9141 printf_filtered ("%s %s\n", title, (&hexid[0]));
9142}
9143
9144static void
fba45db2 9145threadlist_test_cmd (char *cmd, int tty)
c906108c
SS
9146{
9147 int startflag = 1;
9148 threadref nextthread;
9149 int done, result_count;
9150 threadref threadlist[3];
9151
9152 printf_filtered ("Remote Threadlist test\n");
9153 if (!remote_get_threadlist (startflag, &nextthread, 3, &done,
9154 &result_count, &threadlist[0]))
9155 printf_filtered ("FAIL: threadlist test\n");
9156 else
9157 {
9158 threadref *scan = threadlist;
9159 threadref *limit = scan + result_count;
9160
9161 while (scan < limit)
9162 output_threadid (" thread ", scan++);
9163 }
9164}
9165
9166void
fba45db2 9167display_thread_info (struct gdb_ext_thread_info *info)
c906108c
SS
9168{
9169 output_threadid ("Threadid: ", &info->threadid);
9170 printf_filtered ("Name: %s\n ", info->shortname);
9171 printf_filtered ("State: %s\n", info->display);
9172 printf_filtered ("other: %s\n\n", info->more_display);
9173}
9174
9175int
fba45db2 9176get_and_display_threadinfo (threadref *ref)
c906108c
SS
9177{
9178 int result;
9179 int set;
9180 struct gdb_ext_thread_info threadinfo;
9181
9182 set = TAG_THREADID | TAG_EXISTS | TAG_THREADNAME
9183 | TAG_MOREDISPLAY | TAG_DISPLAY;
9184 if (0 != (result = remote_get_threadinfo (ref, set, &threadinfo)))
9185 display_thread_info (&threadinfo);
9186 return result;
9187}
9188
9189static void
fba45db2 9190threadinfo_test_cmd (char *cmd, int tty)
c906108c
SS
9191{
9192 int athread = SAMPLE_THREAD;
9193 threadref thread;
9194 int set;
9195
9196 int_to_threadref (&thread, athread);
9197 printf_filtered ("Remote Threadinfo test\n");
9198 if (!get_and_display_threadinfo (&thread))
9199 printf_filtered ("FAIL cannot get thread info\n");
9200}
9201
9202static int
fba45db2 9203thread_display_step (threadref *ref, void *context)
c906108c
SS
9204{
9205 /* output_threadid(" threadstep ",ref); *//* simple test */
9206 return get_and_display_threadinfo (ref);
9207}
9208
9209static void
fba45db2 9210threadlist_update_test_cmd (char *cmd, int tty)
c906108c
SS
9211{
9212 printf_filtered ("Remote Threadlist update test\n");
9213 remote_threadlist_iterator (thread_display_step, 0, CRAZY_MAX_THREADS);
9214}
9215
9216static void
9217init_remote_threadtests (void)
9218{
3e43a32a
MS
9219 add_com ("tlist", class_obscure, threadlist_test_cmd,
9220 _("Fetch and print the remote list of "
9221 "thread identifiers, one pkt only"));
c906108c 9222 add_com ("tinfo", class_obscure, threadinfo_test_cmd,
1bedd215 9223 _("Fetch and display info about one thread"));
c906108c 9224 add_com ("tset", class_obscure, threadset_test_cmd,
1bedd215 9225 _("Test setting to a different thread"));
c906108c 9226 add_com ("tupd", class_obscure, threadlist_update_test_cmd,
1bedd215 9227 _("Iterate through updating all remote thread info"));
c906108c 9228 add_com ("talive", class_obscure, threadalive_test,
1bedd215 9229 _(" Remote thread alive test "));
c906108c
SS
9230}
9231
9232#endif /* 0 */
9233
f3fb8c85
MS
9234/* Convert a thread ID to a string. Returns the string in a static
9235 buffer. */
9236
9237static char *
117de6a9 9238remote_pid_to_str (struct target_ops *ops, ptid_t ptid)
f3fb8c85 9239{
79d7f229 9240 static char buf[64];
82f73884 9241 struct remote_state *rs = get_remote_state ();
f3fb8c85 9242
7cee1e54
PA
9243 if (ptid_equal (ptid, null_ptid))
9244 return normal_pid_to_str (ptid);
9245 else if (ptid_is_pid (ptid))
ecd0ada5
PA
9246 {
9247 /* Printing an inferior target id. */
9248
9249 /* When multi-process extensions are off, there's no way in the
9250 remote protocol to know the remote process id, if there's any
9251 at all. There's one exception --- when we're connected with
9252 target extended-remote, and we manually attached to a process
9253 with "attach PID". We don't record anywhere a flag that
9254 allows us to distinguish that case from the case of
9255 connecting with extended-remote and the stub already being
9256 attached to a process, and reporting yes to qAttached, hence
9257 no smart special casing here. */
9258 if (!remote_multi_process_p (rs))
9259 {
9260 xsnprintf (buf, sizeof buf, "Remote target");
9261 return buf;
9262 }
9263
9264 return normal_pid_to_str (ptid);
82f73884 9265 }
ecd0ada5 9266 else
79d7f229 9267 {
ecd0ada5
PA
9268 if (ptid_equal (magic_null_ptid, ptid))
9269 xsnprintf (buf, sizeof buf, "Thread <main>");
901f9912 9270 else if (rs->extended && remote_multi_process_p (rs))
ecd0ada5
PA
9271 xsnprintf (buf, sizeof buf, "Thread %d.%ld",
9272 ptid_get_pid (ptid), ptid_get_tid (ptid));
9273 else
9274 xsnprintf (buf, sizeof buf, "Thread %ld",
9275 ptid_get_tid (ptid));
79d7f229
PA
9276 return buf;
9277 }
f3fb8c85
MS
9278}
9279
38691318
KB
9280/* Get the address of the thread local variable in OBJFILE which is
9281 stored at OFFSET within the thread local storage for thread PTID. */
9282
9283static CORE_ADDR
117de6a9
PA
9284remote_get_thread_local_address (struct target_ops *ops,
9285 ptid_t ptid, CORE_ADDR lm, CORE_ADDR offset)
38691318 9286{
444abaca 9287 if (remote_protocol_packets[PACKET_qGetTLSAddr].support != PACKET_DISABLE)
38691318
KB
9288 {
9289 struct remote_state *rs = get_remote_state ();
6d820c5c 9290 char *p = rs->buf;
82f73884 9291 char *endp = rs->buf + get_remote_packet_size ();
571dd617 9292 enum packet_result result;
38691318
KB
9293
9294 strcpy (p, "qGetTLSAddr:");
9295 p += strlen (p);
82f73884 9296 p = write_ptid (p, endp, ptid);
38691318
KB
9297 *p++ = ',';
9298 p += hexnumstr (p, offset);
9299 *p++ = ',';
9300 p += hexnumstr (p, lm);
9301 *p++ = '\0';
9302
6d820c5c
DJ
9303 putpkt (rs->buf);
9304 getpkt (&rs->buf, &rs->buf_size, 0);
3e43a32a
MS
9305 result = packet_ok (rs->buf,
9306 &remote_protocol_packets[PACKET_qGetTLSAddr]);
571dd617 9307 if (result == PACKET_OK)
38691318
KB
9308 {
9309 ULONGEST result;
9310
6d820c5c 9311 unpack_varlen_hex (rs->buf, &result);
38691318
KB
9312 return result;
9313 }
571dd617 9314 else if (result == PACKET_UNKNOWN)
109c3e39
AC
9315 throw_error (TLS_GENERIC_ERROR,
9316 _("Remote target doesn't support qGetTLSAddr packet"));
38691318 9317 else
109c3e39
AC
9318 throw_error (TLS_GENERIC_ERROR,
9319 _("Remote target failed to process qGetTLSAddr request"));
38691318
KB
9320 }
9321 else
109c3e39
AC
9322 throw_error (TLS_GENERIC_ERROR,
9323 _("TLS not supported or disabled on this target"));
38691318
KB
9324 /* Not reached. */
9325 return 0;
9326}
9327
711e434b
PM
9328/* Provide thread local base, i.e. Thread Information Block address.
9329 Returns 1 if ptid is found and thread_local_base is non zero. */
9330
70221824 9331static int
711e434b
PM
9332remote_get_tib_address (ptid_t ptid, CORE_ADDR *addr)
9333{
9334 if (remote_protocol_packets[PACKET_qGetTIBAddr].support != PACKET_DISABLE)
9335 {
9336 struct remote_state *rs = get_remote_state ();
9337 char *p = rs->buf;
9338 char *endp = rs->buf + get_remote_packet_size ();
9339 enum packet_result result;
9340
9341 strcpy (p, "qGetTIBAddr:");
9342 p += strlen (p);
9343 p = write_ptid (p, endp, ptid);
9344 *p++ = '\0';
9345
9346 putpkt (rs->buf);
9347 getpkt (&rs->buf, &rs->buf_size, 0);
9348 result = packet_ok (rs->buf,
9349 &remote_protocol_packets[PACKET_qGetTIBAddr]);
9350 if (result == PACKET_OK)
9351 {
9352 ULONGEST result;
9353
9354 unpack_varlen_hex (rs->buf, &result);
9355 if (addr)
9356 *addr = (CORE_ADDR) result;
9357 return 1;
9358 }
9359 else if (result == PACKET_UNKNOWN)
9360 error (_("Remote target doesn't support qGetTIBAddr packet"));
9361 else
9362 error (_("Remote target failed to process qGetTIBAddr request"));
9363 }
9364 else
9365 error (_("qGetTIBAddr not supported or disabled on this target"));
9366 /* Not reached. */
9367 return 0;
9368}
9369
29709017
DJ
9370/* Support for inferring a target description based on the current
9371 architecture and the size of a 'g' packet. While the 'g' packet
9372 can have any size (since optional registers can be left off the
9373 end), some sizes are easily recognizable given knowledge of the
9374 approximate architecture. */
9375
9376struct remote_g_packet_guess
9377{
9378 int bytes;
9379 const struct target_desc *tdesc;
9380};
9381typedef struct remote_g_packet_guess remote_g_packet_guess_s;
9382DEF_VEC_O(remote_g_packet_guess_s);
9383
9384struct remote_g_packet_data
9385{
9386 VEC(remote_g_packet_guess_s) *guesses;
9387};
9388
9389static struct gdbarch_data *remote_g_packet_data_handle;
9390
9391static void *
9392remote_g_packet_data_init (struct obstack *obstack)
9393{
9394 return OBSTACK_ZALLOC (obstack, struct remote_g_packet_data);
9395}
9396
9397void
9398register_remote_g_packet_guess (struct gdbarch *gdbarch, int bytes,
9399 const struct target_desc *tdesc)
9400{
9401 struct remote_g_packet_data *data
9402 = gdbarch_data (gdbarch, remote_g_packet_data_handle);
9403 struct remote_g_packet_guess new_guess, *guess;
9404 int ix;
9405
9406 gdb_assert (tdesc != NULL);
9407
9408 for (ix = 0;
9409 VEC_iterate (remote_g_packet_guess_s, data->guesses, ix, guess);
9410 ix++)
9411 if (guess->bytes == bytes)
9412 internal_error (__FILE__, __LINE__,
9b20d036 9413 _("Duplicate g packet description added for size %d"),
29709017
DJ
9414 bytes);
9415
9416 new_guess.bytes = bytes;
9417 new_guess.tdesc = tdesc;
9418 VEC_safe_push (remote_g_packet_guess_s, data->guesses, &new_guess);
9419}
9420
d962ef82
DJ
9421/* Return 1 if remote_read_description would do anything on this target
9422 and architecture, 0 otherwise. */
9423
9424static int
9425remote_read_description_p (struct target_ops *target)
9426{
9427 struct remote_g_packet_data *data
f5656ead 9428 = gdbarch_data (target_gdbarch (), remote_g_packet_data_handle);
d962ef82
DJ
9429
9430 if (!VEC_empty (remote_g_packet_guess_s, data->guesses))
9431 return 1;
9432
9433 return 0;
9434}
9435
29709017
DJ
9436static const struct target_desc *
9437remote_read_description (struct target_ops *target)
9438{
9439 struct remote_g_packet_data *data
f5656ead 9440 = gdbarch_data (target_gdbarch (), remote_g_packet_data_handle);
29709017 9441
d962ef82
DJ
9442 /* Do not try this during initial connection, when we do not know
9443 whether there is a running but stopped thread. */
9444 if (!target_has_execution || ptid_equal (inferior_ptid, null_ptid))
9445 return NULL;
9446
29709017
DJ
9447 if (!VEC_empty (remote_g_packet_guess_s, data->guesses))
9448 {
9449 struct remote_g_packet_guess *guess;
9450 int ix;
9451 int bytes = send_g_packet ();
9452
9453 for (ix = 0;
9454 VEC_iterate (remote_g_packet_guess_s, data->guesses, ix, guess);
9455 ix++)
9456 if (guess->bytes == bytes)
9457 return guess->tdesc;
9458
9459 /* We discard the g packet. A minor optimization would be to
9460 hold on to it, and fill the register cache once we have selected
9461 an architecture, but it's too tricky to do safely. */
9462 }
9463
9464 return NULL;
9465}
9466
a6b151f1
DJ
9467/* Remote file transfer support. This is host-initiated I/O, not
9468 target-initiated; for target-initiated, see remote-fileio.c. */
9469
9470/* If *LEFT is at least the length of STRING, copy STRING to
9471 *BUFFER, update *BUFFER to point to the new end of the buffer, and
9472 decrease *LEFT. Otherwise raise an error. */
9473
9474static void
9475remote_buffer_add_string (char **buffer, int *left, char *string)
9476{
9477 int len = strlen (string);
9478
9479 if (len > *left)
9480 error (_("Packet too long for target."));
9481
9482 memcpy (*buffer, string, len);
9483 *buffer += len;
9484 *left -= len;
9485
9486 /* NUL-terminate the buffer as a convenience, if there is
9487 room. */
9488 if (*left)
9489 **buffer = '\0';
9490}
9491
9492/* If *LEFT is large enough, hex encode LEN bytes from BYTES into
9493 *BUFFER, update *BUFFER to point to the new end of the buffer, and
9494 decrease *LEFT. Otherwise raise an error. */
9495
9496static void
9497remote_buffer_add_bytes (char **buffer, int *left, const gdb_byte *bytes,
9498 int len)
9499{
9500 if (2 * len > *left)
9501 error (_("Packet too long for target."));
9502
9503 bin2hex (bytes, *buffer, len);
9504 *buffer += 2 * len;
9505 *left -= 2 * len;
9506
9507 /* NUL-terminate the buffer as a convenience, if there is
9508 room. */
9509 if (*left)
9510 **buffer = '\0';
9511}
9512
9513/* If *LEFT is large enough, convert VALUE to hex and add it to
9514 *BUFFER, update *BUFFER to point to the new end of the buffer, and
9515 decrease *LEFT. Otherwise raise an error. */
9516
9517static void
9518remote_buffer_add_int (char **buffer, int *left, ULONGEST value)
9519{
9520 int len = hexnumlen (value);
9521
9522 if (len > *left)
9523 error (_("Packet too long for target."));
9524
9525 hexnumstr (*buffer, value);
9526 *buffer += len;
9527 *left -= len;
9528
9529 /* NUL-terminate the buffer as a convenience, if there is
9530 room. */
9531 if (*left)
9532 **buffer = '\0';
9533}
9534
9535/* Parse an I/O result packet from BUFFER. Set RETCODE to the return
9536 value, *REMOTE_ERRNO to the remote error number or zero if none
9537 was included, and *ATTACHMENT to point to the start of the annex
9538 if any. The length of the packet isn't needed here; there may
9539 be NUL bytes in BUFFER, but they will be after *ATTACHMENT.
9540
9541 Return 0 if the packet could be parsed, -1 if it could not. If
9542 -1 is returned, the other variables may not be initialized. */
9543
9544static int
9545remote_hostio_parse_result (char *buffer, int *retcode,
9546 int *remote_errno, char **attachment)
9547{
9548 char *p, *p2;
9549
9550 *remote_errno = 0;
9551 *attachment = NULL;
9552
9553 if (buffer[0] != 'F')
9554 return -1;
9555
9556 errno = 0;
9557 *retcode = strtol (&buffer[1], &p, 16);
9558 if (errno != 0 || p == &buffer[1])
9559 return -1;
9560
9561 /* Check for ",errno". */
9562 if (*p == ',')
9563 {
9564 errno = 0;
9565 *remote_errno = strtol (p + 1, &p2, 16);
9566 if (errno != 0 || p + 1 == p2)
9567 return -1;
9568 p = p2;
9569 }
9570
9571 /* Check for ";attachment". If there is no attachment, the
9572 packet should end here. */
9573 if (*p == ';')
9574 {
9575 *attachment = p + 1;
9576 return 0;
9577 }
9578 else if (*p == '\0')
9579 return 0;
9580 else
9581 return -1;
9582}
9583
9584/* Send a prepared I/O packet to the target and read its response.
9585 The prepared packet is in the global RS->BUF before this function
9586 is called, and the answer is there when we return.
9587
9588 COMMAND_BYTES is the length of the request to send, which may include
9589 binary data. WHICH_PACKET is the packet configuration to check
9590 before attempting a packet. If an error occurs, *REMOTE_ERRNO
9591 is set to the error number and -1 is returned. Otherwise the value
9592 returned by the function is returned.
9593
9594 ATTACHMENT and ATTACHMENT_LEN should be non-NULL if and only if an
9595 attachment is expected; an error will be reported if there's a
9596 mismatch. If one is found, *ATTACHMENT will be set to point into
9597 the packet buffer and *ATTACHMENT_LEN will be set to the
9598 attachment's length. */
9599
9600static int
9601remote_hostio_send_command (int command_bytes, int which_packet,
9602 int *remote_errno, char **attachment,
9603 int *attachment_len)
9604{
9605 struct remote_state *rs = get_remote_state ();
9606 int ret, bytes_read;
9607 char *attachment_tmp;
9608
f1838a98
UW
9609 if (!remote_desc
9610 || remote_protocol_packets[which_packet].support == PACKET_DISABLE)
a6b151f1
DJ
9611 {
9612 *remote_errno = FILEIO_ENOSYS;
9613 return -1;
9614 }
9615
9616 putpkt_binary (rs->buf, command_bytes);
9617 bytes_read = getpkt_sane (&rs->buf, &rs->buf_size, 0);
9618
9619 /* If it timed out, something is wrong. Don't try to parse the
9620 buffer. */
9621 if (bytes_read < 0)
9622 {
9623 *remote_errno = FILEIO_EINVAL;
9624 return -1;
9625 }
9626
9627 switch (packet_ok (rs->buf, &remote_protocol_packets[which_packet]))
9628 {
9629 case PACKET_ERROR:
9630 *remote_errno = FILEIO_EINVAL;
9631 return -1;
9632 case PACKET_UNKNOWN:
9633 *remote_errno = FILEIO_ENOSYS;
9634 return -1;
9635 case PACKET_OK:
9636 break;
9637 }
9638
9639 if (remote_hostio_parse_result (rs->buf, &ret, remote_errno,
9640 &attachment_tmp))
9641 {
9642 *remote_errno = FILEIO_EINVAL;
9643 return -1;
9644 }
9645
9646 /* Make sure we saw an attachment if and only if we expected one. */
9647 if ((attachment_tmp == NULL && attachment != NULL)
9648 || (attachment_tmp != NULL && attachment == NULL))
9649 {
9650 *remote_errno = FILEIO_EINVAL;
9651 return -1;
9652 }
9653
9654 /* If an attachment was found, it must point into the packet buffer;
9655 work out how many bytes there were. */
9656 if (attachment_tmp != NULL)
9657 {
9658 *attachment = attachment_tmp;
9659 *attachment_len = bytes_read - (*attachment - rs->buf);
9660 }
9661
9662 return ret;
9663}
9664
9665/* Open FILENAME on the remote target, using FLAGS and MODE. Return a
9666 remote file descriptor, or -1 if an error occurs (and set
9667 *REMOTE_ERRNO). */
9668
9669static int
9670remote_hostio_open (const char *filename, int flags, int mode,
9671 int *remote_errno)
9672{
9673 struct remote_state *rs = get_remote_state ();
9674 char *p = rs->buf;
9675 int left = get_remote_packet_size () - 1;
9676
9677 remote_buffer_add_string (&p, &left, "vFile:open:");
9678
9679 remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
9680 strlen (filename));
9681 remote_buffer_add_string (&p, &left, ",");
9682
9683 remote_buffer_add_int (&p, &left, flags);
9684 remote_buffer_add_string (&p, &left, ",");
9685
9686 remote_buffer_add_int (&p, &left, mode);
9687
9688 return remote_hostio_send_command (p - rs->buf, PACKET_vFile_open,
9689 remote_errno, NULL, NULL);
9690}
9691
9692/* Write up to LEN bytes from WRITE_BUF to FD on the remote target.
9693 Return the number of bytes written, or -1 if an error occurs (and
9694 set *REMOTE_ERRNO). */
9695
9696static int
9697remote_hostio_pwrite (int fd, const gdb_byte *write_buf, int len,
9698 ULONGEST offset, int *remote_errno)
9699{
9700 struct remote_state *rs = get_remote_state ();
9701 char *p = rs->buf;
9702 int left = get_remote_packet_size ();
9703 int out_len;
9704
9705 remote_buffer_add_string (&p, &left, "vFile:pwrite:");
9706
9707 remote_buffer_add_int (&p, &left, fd);
9708 remote_buffer_add_string (&p, &left, ",");
9709
9710 remote_buffer_add_int (&p, &left, offset);
9711 remote_buffer_add_string (&p, &left, ",");
9712
9713 p += remote_escape_output (write_buf, len, p, &out_len,
9714 get_remote_packet_size () - (p - rs->buf));
9715
9716 return remote_hostio_send_command (p - rs->buf, PACKET_vFile_pwrite,
9717 remote_errno, NULL, NULL);
9718}
9719
9720/* Read up to LEN bytes FD on the remote target into READ_BUF
9721 Return the number of bytes read, or -1 if an error occurs (and
9722 set *REMOTE_ERRNO). */
9723
9724static int
9725remote_hostio_pread (int fd, gdb_byte *read_buf, int len,
9726 ULONGEST offset, int *remote_errno)
9727{
9728 struct remote_state *rs = get_remote_state ();
9729 char *p = rs->buf;
9730 char *attachment;
9731 int left = get_remote_packet_size ();
9732 int ret, attachment_len;
9733 int read_len;
9734
9735 remote_buffer_add_string (&p, &left, "vFile:pread:");
9736
9737 remote_buffer_add_int (&p, &left, fd);
9738 remote_buffer_add_string (&p, &left, ",");
9739
9740 remote_buffer_add_int (&p, &left, len);
9741 remote_buffer_add_string (&p, &left, ",");
9742
9743 remote_buffer_add_int (&p, &left, offset);
9744
9745 ret = remote_hostio_send_command (p - rs->buf, PACKET_vFile_pread,
9746 remote_errno, &attachment,
9747 &attachment_len);
9748
9749 if (ret < 0)
9750 return ret;
9751
9752 read_len = remote_unescape_input (attachment, attachment_len,
9753 read_buf, len);
9754 if (read_len != ret)
9755 error (_("Read returned %d, but %d bytes."), ret, (int) read_len);
9756
9757 return ret;
9758}
9759
9760/* Close FD on the remote target. Return 0, or -1 if an error occurs
9761 (and set *REMOTE_ERRNO). */
9762
9763static int
9764remote_hostio_close (int fd, int *remote_errno)
9765{
9766 struct remote_state *rs = get_remote_state ();
9767 char *p = rs->buf;
9768 int left = get_remote_packet_size () - 1;
9769
9770 remote_buffer_add_string (&p, &left, "vFile:close:");
9771
9772 remote_buffer_add_int (&p, &left, fd);
9773
9774 return remote_hostio_send_command (p - rs->buf, PACKET_vFile_close,
9775 remote_errno, NULL, NULL);
9776}
9777
9778/* Unlink FILENAME on the remote target. Return 0, or -1 if an error
9779 occurs (and set *REMOTE_ERRNO). */
9780
9781static int
9782remote_hostio_unlink (const char *filename, int *remote_errno)
9783{
9784 struct remote_state *rs = get_remote_state ();
9785 char *p = rs->buf;
9786 int left = get_remote_packet_size () - 1;
9787
9788 remote_buffer_add_string (&p, &left, "vFile:unlink:");
9789
9790 remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
9791 strlen (filename));
9792
9793 return remote_hostio_send_command (p - rs->buf, PACKET_vFile_unlink,
9794 remote_errno, NULL, NULL);
9795}
9796
b9e7b9c3
UW
9797/* Read value of symbolic link FILENAME on the remote target. Return
9798 a null-terminated string allocated via xmalloc, or NULL if an error
9799 occurs (and set *REMOTE_ERRNO). */
9800
9801static char *
9802remote_hostio_readlink (const char *filename, int *remote_errno)
9803{
9804 struct remote_state *rs = get_remote_state ();
9805 char *p = rs->buf;
9806 char *attachment;
9807 int left = get_remote_packet_size ();
9808 int len, attachment_len;
9809 int read_len;
9810 char *ret;
9811
9812 remote_buffer_add_string (&p, &left, "vFile:readlink:");
9813
9814 remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
9815 strlen (filename));
9816
9817 len = remote_hostio_send_command (p - rs->buf, PACKET_vFile_readlink,
9818 remote_errno, &attachment,
9819 &attachment_len);
9820
9821 if (len < 0)
9822 return NULL;
9823
9824 ret = xmalloc (len + 1);
9825
9826 read_len = remote_unescape_input (attachment, attachment_len,
9827 ret, len);
9828 if (read_len != len)
9829 error (_("Readlink returned %d, but %d bytes."), len, read_len);
9830
9831 ret[len] = '\0';
9832 return ret;
9833}
9834
a6b151f1
DJ
9835static int
9836remote_fileio_errno_to_host (int errnum)
9837{
9838 switch (errnum)
9839 {
9840 case FILEIO_EPERM:
9841 return EPERM;
9842 case FILEIO_ENOENT:
9843 return ENOENT;
9844 case FILEIO_EINTR:
9845 return EINTR;
9846 case FILEIO_EIO:
9847 return EIO;
9848 case FILEIO_EBADF:
9849 return EBADF;
9850 case FILEIO_EACCES:
9851 return EACCES;
9852 case FILEIO_EFAULT:
9853 return EFAULT;
9854 case FILEIO_EBUSY:
9855 return EBUSY;
9856 case FILEIO_EEXIST:
9857 return EEXIST;
9858 case FILEIO_ENODEV:
9859 return ENODEV;
9860 case FILEIO_ENOTDIR:
9861 return ENOTDIR;
9862 case FILEIO_EISDIR:
9863 return EISDIR;
9864 case FILEIO_EINVAL:
9865 return EINVAL;
9866 case FILEIO_ENFILE:
9867 return ENFILE;
9868 case FILEIO_EMFILE:
9869 return EMFILE;
9870 case FILEIO_EFBIG:
9871 return EFBIG;
9872 case FILEIO_ENOSPC:
9873 return ENOSPC;
9874 case FILEIO_ESPIPE:
9875 return ESPIPE;
9876 case FILEIO_EROFS:
9877 return EROFS;
9878 case FILEIO_ENOSYS:
9879 return ENOSYS;
9880 case FILEIO_ENAMETOOLONG:
9881 return ENAMETOOLONG;
9882 }
9883 return -1;
9884}
9885
9886static char *
9887remote_hostio_error (int errnum)
9888{
9889 int host_error = remote_fileio_errno_to_host (errnum);
9890
9891 if (host_error == -1)
9892 error (_("Unknown remote I/O error %d"), errnum);
9893 else
9894 error (_("Remote I/O error: %s"), safe_strerror (host_error));
9895}
9896
a6b151f1
DJ
9897static void
9898remote_hostio_close_cleanup (void *opaque)
9899{
9900 int fd = *(int *) opaque;
9901 int remote_errno;
9902
9903 remote_hostio_close (fd, &remote_errno);
9904}
9905
f1838a98
UW
9906
9907static void *
9908remote_bfd_iovec_open (struct bfd *abfd, void *open_closure)
9909{
9910 const char *filename = bfd_get_filename (abfd);
9911 int fd, remote_errno;
9912 int *stream;
9913
9914 gdb_assert (remote_filename_p (filename));
9915
9916 fd = remote_hostio_open (filename + 7, FILEIO_O_RDONLY, 0, &remote_errno);
9917 if (fd == -1)
9918 {
9919 errno = remote_fileio_errno_to_host (remote_errno);
9920 bfd_set_error (bfd_error_system_call);
9921 return NULL;
9922 }
9923
9924 stream = xmalloc (sizeof (int));
9925 *stream = fd;
9926 return stream;
9927}
9928
9929static int
9930remote_bfd_iovec_close (struct bfd *abfd, void *stream)
9931{
9932 int fd = *(int *)stream;
9933 int remote_errno;
9934
9935 xfree (stream);
9936
9937 /* Ignore errors on close; these may happen if the remote
9938 connection was already torn down. */
9939 remote_hostio_close (fd, &remote_errno);
9940
9941 return 1;
9942}
9943
9944static file_ptr
9945remote_bfd_iovec_pread (struct bfd *abfd, void *stream, void *buf,
9946 file_ptr nbytes, file_ptr offset)
9947{
9948 int fd = *(int *)stream;
9949 int remote_errno;
9950 file_ptr pos, bytes;
9951
9952 pos = 0;
9953 while (nbytes > pos)
9954 {
9955 bytes = remote_hostio_pread (fd, (char *)buf + pos, nbytes - pos,
9956 offset + pos, &remote_errno);
9957 if (bytes == 0)
9958 /* Success, but no bytes, means end-of-file. */
9959 break;
9960 if (bytes == -1)
9961 {
9962 errno = remote_fileio_errno_to_host (remote_errno);
9963 bfd_set_error (bfd_error_system_call);
9964 return -1;
9965 }
9966
9967 pos += bytes;
9968 }
9969
9970 return pos;
9971}
9972
9973static int
9974remote_bfd_iovec_stat (struct bfd *abfd, void *stream, struct stat *sb)
9975{
9976 /* FIXME: We should probably implement remote_hostio_stat. */
9977 sb->st_size = INT_MAX;
9978 return 0;
9979}
9980
9981int
9982remote_filename_p (const char *filename)
9983{
9984 return strncmp (filename, "remote:", 7) == 0;
9985}
9986
9987bfd *
9988remote_bfd_open (const char *remote_file, const char *target)
9989{
64c31149
TT
9990 bfd *abfd = gdb_bfd_openr_iovec (remote_file, target,
9991 remote_bfd_iovec_open, NULL,
9992 remote_bfd_iovec_pread,
9993 remote_bfd_iovec_close,
9994 remote_bfd_iovec_stat);
9995
a4453b7e 9996 return abfd;
f1838a98
UW
9997}
9998
a6b151f1
DJ
9999void
10000remote_file_put (const char *local_file, const char *remote_file, int from_tty)
10001{
10002 struct cleanup *back_to, *close_cleanup;
10003 int retcode, fd, remote_errno, bytes, io_size;
10004 FILE *file;
10005 gdb_byte *buffer;
10006 int bytes_in_buffer;
10007 int saw_eof;
10008 ULONGEST offset;
10009
10010 if (!remote_desc)
10011 error (_("command can only be used with remote target"));
10012
10013 file = fopen (local_file, "rb");
10014 if (file == NULL)
10015 perror_with_name (local_file);
7c8a8b04 10016 back_to = make_cleanup_fclose (file);
a6b151f1
DJ
10017
10018 fd = remote_hostio_open (remote_file, (FILEIO_O_WRONLY | FILEIO_O_CREAT
10019 | FILEIO_O_TRUNC),
10020 0700, &remote_errno);
10021 if (fd == -1)
10022 remote_hostio_error (remote_errno);
10023
10024 /* Send up to this many bytes at once. They won't all fit in the
10025 remote packet limit, so we'll transfer slightly fewer. */
10026 io_size = get_remote_packet_size ();
10027 buffer = xmalloc (io_size);
10028 make_cleanup (xfree, buffer);
10029
10030 close_cleanup = make_cleanup (remote_hostio_close_cleanup, &fd);
10031
10032 bytes_in_buffer = 0;
10033 saw_eof = 0;
10034 offset = 0;
10035 while (bytes_in_buffer || !saw_eof)
10036 {
10037 if (!saw_eof)
10038 {
3e43a32a
MS
10039 bytes = fread (buffer + bytes_in_buffer, 1,
10040 io_size - bytes_in_buffer,
a6b151f1
DJ
10041 file);
10042 if (bytes == 0)
10043 {
10044 if (ferror (file))
10045 error (_("Error reading %s."), local_file);
10046 else
10047 {
10048 /* EOF. Unless there is something still in the
10049 buffer from the last iteration, we are done. */
10050 saw_eof = 1;
10051 if (bytes_in_buffer == 0)
10052 break;
10053 }
10054 }
10055 }
10056 else
10057 bytes = 0;
10058
10059 bytes += bytes_in_buffer;
10060 bytes_in_buffer = 0;
10061
3e43a32a
MS
10062 retcode = remote_hostio_pwrite (fd, buffer, bytes,
10063 offset, &remote_errno);
a6b151f1
DJ
10064
10065 if (retcode < 0)
10066 remote_hostio_error (remote_errno);
10067 else if (retcode == 0)
10068 error (_("Remote write of %d bytes returned 0!"), bytes);
10069 else if (retcode < bytes)
10070 {
10071 /* Short write. Save the rest of the read data for the next
10072 write. */
10073 bytes_in_buffer = bytes - retcode;
10074 memmove (buffer, buffer + retcode, bytes_in_buffer);
10075 }
10076
10077 offset += retcode;
10078 }
10079
10080 discard_cleanups (close_cleanup);
10081 if (remote_hostio_close (fd, &remote_errno))
10082 remote_hostio_error (remote_errno);
10083
10084 if (from_tty)
10085 printf_filtered (_("Successfully sent file \"%s\".\n"), local_file);
10086 do_cleanups (back_to);
10087}
10088
10089void
10090remote_file_get (const char *remote_file, const char *local_file, int from_tty)
10091{
10092 struct cleanup *back_to, *close_cleanup;
cea39f65 10093 int fd, remote_errno, bytes, io_size;
a6b151f1
DJ
10094 FILE *file;
10095 gdb_byte *buffer;
10096 ULONGEST offset;
10097
10098 if (!remote_desc)
10099 error (_("command can only be used with remote target"));
10100
10101 fd = remote_hostio_open (remote_file, FILEIO_O_RDONLY, 0, &remote_errno);
10102 if (fd == -1)
10103 remote_hostio_error (remote_errno);
10104
10105 file = fopen (local_file, "wb");
10106 if (file == NULL)
10107 perror_with_name (local_file);
7c8a8b04 10108 back_to = make_cleanup_fclose (file);
a6b151f1
DJ
10109
10110 /* Send up to this many bytes at once. They won't all fit in the
10111 remote packet limit, so we'll transfer slightly fewer. */
10112 io_size = get_remote_packet_size ();
10113 buffer = xmalloc (io_size);
10114 make_cleanup (xfree, buffer);
10115
10116 close_cleanup = make_cleanup (remote_hostio_close_cleanup, &fd);
10117
10118 offset = 0;
10119 while (1)
10120 {
10121 bytes = remote_hostio_pread (fd, buffer, io_size, offset, &remote_errno);
10122 if (bytes == 0)
10123 /* Success, but no bytes, means end-of-file. */
10124 break;
10125 if (bytes == -1)
10126 remote_hostio_error (remote_errno);
10127
10128 offset += bytes;
10129
10130 bytes = fwrite (buffer, 1, bytes, file);
10131 if (bytes == 0)
10132 perror_with_name (local_file);
10133 }
10134
10135 discard_cleanups (close_cleanup);
10136 if (remote_hostio_close (fd, &remote_errno))
10137 remote_hostio_error (remote_errno);
10138
10139 if (from_tty)
10140 printf_filtered (_("Successfully fetched file \"%s\".\n"), remote_file);
10141 do_cleanups (back_to);
10142}
10143
10144void
10145remote_file_delete (const char *remote_file, int from_tty)
10146{
10147 int retcode, remote_errno;
10148
10149 if (!remote_desc)
10150 error (_("command can only be used with remote target"));
10151
10152 retcode = remote_hostio_unlink (remote_file, &remote_errno);
10153 if (retcode == -1)
10154 remote_hostio_error (remote_errno);
10155
10156 if (from_tty)
10157 printf_filtered (_("Successfully deleted file \"%s\".\n"), remote_file);
10158}
10159
10160static void
10161remote_put_command (char *args, int from_tty)
10162{
10163 struct cleanup *back_to;
10164 char **argv;
10165
d1a41061
PP
10166 if (args == NULL)
10167 error_no_arg (_("file to put"));
10168
10169 argv = gdb_buildargv (args);
a6b151f1
DJ
10170 back_to = make_cleanup_freeargv (argv);
10171 if (argv[0] == NULL || argv[1] == NULL || argv[2] != NULL)
10172 error (_("Invalid parameters to remote put"));
10173
10174 remote_file_put (argv[0], argv[1], from_tty);
10175
10176 do_cleanups (back_to);
10177}
10178
10179static void
10180remote_get_command (char *args, int from_tty)
10181{
10182 struct cleanup *back_to;
10183 char **argv;
10184
d1a41061
PP
10185 if (args == NULL)
10186 error_no_arg (_("file to get"));
10187
10188 argv = gdb_buildargv (args);
a6b151f1
DJ
10189 back_to = make_cleanup_freeargv (argv);
10190 if (argv[0] == NULL || argv[1] == NULL || argv[2] != NULL)
10191 error (_("Invalid parameters to remote get"));
10192
10193 remote_file_get (argv[0], argv[1], from_tty);
10194
10195 do_cleanups (back_to);
10196}
10197
10198static void
10199remote_delete_command (char *args, int from_tty)
10200{
10201 struct cleanup *back_to;
10202 char **argv;
10203
d1a41061
PP
10204 if (args == NULL)
10205 error_no_arg (_("file to delete"));
10206
10207 argv = gdb_buildargv (args);
a6b151f1
DJ
10208 back_to = make_cleanup_freeargv (argv);
10209 if (argv[0] == NULL || argv[1] != NULL)
10210 error (_("Invalid parameters to remote delete"));
10211
10212 remote_file_delete (argv[0], from_tty);
10213
10214 do_cleanups (back_to);
10215}
10216
10217static void
10218remote_command (char *args, int from_tty)
10219{
10220 help_list (remote_cmdlist, "remote ", -1, gdb_stdout);
10221}
10222
b2175913
MS
10223static int
10224remote_can_execute_reverse (void)
10225{
40ab02ce
MS
10226 if (remote_protocol_packets[PACKET_bs].support == PACKET_ENABLE
10227 || remote_protocol_packets[PACKET_bc].support == PACKET_ENABLE)
10228 return 1;
10229 else
10230 return 0;
b2175913
MS
10231}
10232
74531fed
PA
10233static int
10234remote_supports_non_stop (void)
10235{
10236 return 1;
10237}
10238
03583c20
UW
10239static int
10240remote_supports_disable_randomization (void)
10241{
10242 /* Only supported in extended mode. */
10243 return 0;
10244}
10245
8a305172
PA
10246static int
10247remote_supports_multi_process (void)
10248{
10249 struct remote_state *rs = get_remote_state ();
a744cf53 10250
901f9912
UW
10251 /* Only extended-remote handles being attached to multiple
10252 processes, even though plain remote can use the multi-process
10253 thread id extensions, so that GDB knows the target process's
10254 PID. */
10255 return rs->extended && remote_multi_process_p (rs);
8a305172
PA
10256}
10257
70221824 10258static int
782b2b07
SS
10259remote_supports_cond_tracepoints (void)
10260{
10261 struct remote_state *rs = get_remote_state ();
a744cf53 10262
782b2b07
SS
10263 return rs->cond_tracepoints;
10264}
10265
3788aec7
LM
10266static int
10267remote_supports_cond_breakpoints (void)
10268{
10269 struct remote_state *rs = get_remote_state ();
10270
10271 return rs->cond_breakpoints;
10272}
10273
70221824 10274static int
7a697b8d
SS
10275remote_supports_fast_tracepoints (void)
10276{
10277 struct remote_state *rs = get_remote_state ();
a744cf53 10278
7a697b8d
SS
10279 return rs->fast_tracepoints;
10280}
10281
0fb4aa4b
PA
10282static int
10283remote_supports_static_tracepoints (void)
10284{
10285 struct remote_state *rs = get_remote_state ();
10286
10287 return rs->static_tracepoints;
10288}
10289
1e4d1764
YQ
10290static int
10291remote_supports_install_in_trace (void)
10292{
10293 struct remote_state *rs = get_remote_state ();
10294
10295 return rs->install_in_trace;
10296}
10297
d248b706
KY
10298static int
10299remote_supports_enable_disable_tracepoint (void)
10300{
10301 struct remote_state *rs = get_remote_state ();
10302
10303 return rs->enable_disable_tracepoints;
10304}
10305
3065dfb6
SS
10306static int
10307remote_supports_string_tracing (void)
10308{
10309 struct remote_state *rs = get_remote_state ();
10310
10311 return rs->string_tracing;
10312}
10313
d3ce09f5
SS
10314static int
10315remote_can_run_breakpoint_commands (void)
10316{
10317 struct remote_state *rs = get_remote_state ();
10318
10319 return rs->breakpoint_commands;
10320}
10321
35b1e5cc 10322static void
ad91cd99 10323remote_trace_init (void)
35b1e5cc
SS
10324{
10325 putpkt ("QTinit");
10326 remote_get_noisy_reply (&target_buf, &target_buf_size);
ad91cd99 10327 if (strcmp (target_buf, "OK") != 0)
35b1e5cc
SS
10328 error (_("Target does not support this command."));
10329}
10330
10331static void free_actions_list (char **actions_list);
10332static void free_actions_list_cleanup_wrapper (void *);
10333static void
10334free_actions_list_cleanup_wrapper (void *al)
10335{
10336 free_actions_list (al);
10337}
10338
10339static void
10340free_actions_list (char **actions_list)
10341{
10342 int ndx;
10343
10344 if (actions_list == 0)
10345 return;
10346
10347 for (ndx = 0; actions_list[ndx]; ndx++)
10348 xfree (actions_list[ndx]);
10349
10350 xfree (actions_list);
10351}
10352
409873ef
SS
10353/* Recursive routine to walk through command list including loops, and
10354 download packets for each command. */
10355
10356static void
10357remote_download_command_source (int num, ULONGEST addr,
10358 struct command_line *cmds)
10359{
10360 struct remote_state *rs = get_remote_state ();
10361 struct command_line *cmd;
10362
10363 for (cmd = cmds; cmd; cmd = cmd->next)
10364 {
0df8b418 10365 QUIT; /* Allow user to bail out with ^C. */
409873ef
SS
10366 strcpy (rs->buf, "QTDPsrc:");
10367 encode_source_string (num, addr, "cmd", cmd->line,
10368 rs->buf + strlen (rs->buf),
10369 rs->buf_size - strlen (rs->buf));
10370 putpkt (rs->buf);
10371 remote_get_noisy_reply (&target_buf, &target_buf_size);
10372 if (strcmp (target_buf, "OK"))
10373 warning (_("Target does not support source download."));
10374
10375 if (cmd->control_type == while_control
10376 || cmd->control_type == while_stepping_control)
10377 {
10378 remote_download_command_source (num, addr, *cmd->body_list);
10379
0df8b418 10380 QUIT; /* Allow user to bail out with ^C. */
409873ef
SS
10381 strcpy (rs->buf, "QTDPsrc:");
10382 encode_source_string (num, addr, "cmd", "end",
10383 rs->buf + strlen (rs->buf),
10384 rs->buf_size - strlen (rs->buf));
10385 putpkt (rs->buf);
10386 remote_get_noisy_reply (&target_buf, &target_buf_size);
10387 if (strcmp (target_buf, "OK"))
10388 warning (_("Target does not support source download."));
10389 }
10390 }
10391}
10392
35b1e5cc 10393static void
e8ba3115 10394remote_download_tracepoint (struct bp_location *loc)
35b1e5cc 10395{
bba74b36 10396#define BUF_SIZE 2048
e8ba3115 10397
35b1e5cc 10398 CORE_ADDR tpaddr;
409873ef 10399 char addrbuf[40];
bba74b36 10400 char buf[BUF_SIZE];
35b1e5cc
SS
10401 char **tdp_actions;
10402 char **stepping_actions;
10403 int ndx;
10404 struct cleanup *old_chain = NULL;
10405 struct agent_expr *aexpr;
10406 struct cleanup *aexpr_chain = NULL;
10407 char *pkt;
e8ba3115 10408 struct breakpoint *b = loc->owner;
d9b3f62e 10409 struct tracepoint *t = (struct tracepoint *) b;
35b1e5cc 10410
e8ba3115
YQ
10411 encode_actions (loc->owner, loc, &tdp_actions, &stepping_actions);
10412 old_chain = make_cleanup (free_actions_list_cleanup_wrapper,
10413 tdp_actions);
10414 (void) make_cleanup (free_actions_list_cleanup_wrapper,
10415 stepping_actions);
10416
10417 tpaddr = loc->address;
10418 sprintf_vma (addrbuf, tpaddr);
bba74b36
YQ
10419 xsnprintf (buf, BUF_SIZE, "QTDP:%x:%s:%c:%lx:%x", b->number,
10420 addrbuf, /* address */
10421 (b->enable_state == bp_enabled ? 'E' : 'D'),
10422 t->step_count, t->pass_count);
e8ba3115
YQ
10423 /* Fast tracepoints are mostly handled by the target, but we can
10424 tell the target how big of an instruction block should be moved
10425 around. */
10426 if (b->type == bp_fast_tracepoint)
10427 {
10428 /* Only test for support at download time; we may not know
10429 target capabilities at definition time. */
10430 if (remote_supports_fast_tracepoints ())
35b1e5cc 10431 {
e8ba3115 10432 int isize;
35b1e5cc 10433
f5656ead 10434 if (gdbarch_fast_tracepoint_valid_at (target_gdbarch (),
e8ba3115 10435 tpaddr, &isize, NULL))
bba74b36
YQ
10436 xsnprintf (buf + strlen (buf), BUF_SIZE - strlen (buf), ":F%x",
10437 isize);
35b1e5cc 10438 else
e8ba3115
YQ
10439 /* If it passed validation at definition but fails now,
10440 something is very wrong. */
10441 internal_error (__FILE__, __LINE__,
10442 _("Fast tracepoint not "
10443 "valid during download"));
35b1e5cc 10444 }
e8ba3115
YQ
10445 else
10446 /* Fast tracepoints are functionally identical to regular
10447 tracepoints, so don't take lack of support as a reason to
10448 give up on the trace run. */
10449 warning (_("Target does not support fast tracepoints, "
10450 "downloading %d as regular tracepoint"), b->number);
10451 }
10452 else if (b->type == bp_static_tracepoint)
10453 {
10454 /* Only test for support at download time; we may not know
10455 target capabilities at definition time. */
10456 if (remote_supports_static_tracepoints ())
0fb4aa4b 10457 {
e8ba3115 10458 struct static_tracepoint_marker marker;
0fb4aa4b 10459
e8ba3115
YQ
10460 if (target_static_tracepoint_marker_at (tpaddr, &marker))
10461 strcat (buf, ":S");
0fb4aa4b 10462 else
e8ba3115 10463 error (_("Static tracepoint not valid during download"));
0fb4aa4b 10464 }
e8ba3115
YQ
10465 else
10466 /* Fast tracepoints are functionally identical to regular
10467 tracepoints, so don't take lack of support as a reason
10468 to give up on the trace run. */
10469 error (_("Target does not support static tracepoints"));
10470 }
10471 /* If the tracepoint has a conditional, make it into an agent
10472 expression and append to the definition. */
10473 if (loc->cond)
10474 {
10475 /* Only test support at download time, we may not know target
10476 capabilities at definition time. */
10477 if (remote_supports_cond_tracepoints ())
35b1e5cc 10478 {
e8ba3115
YQ
10479 aexpr = gen_eval_for_expr (tpaddr, loc->cond);
10480 aexpr_chain = make_cleanup_free_agent_expr (aexpr);
bba74b36
YQ
10481 xsnprintf (buf + strlen (buf), BUF_SIZE - strlen (buf), ":X%x,",
10482 aexpr->len);
e8ba3115
YQ
10483 pkt = buf + strlen (buf);
10484 for (ndx = 0; ndx < aexpr->len; ++ndx)
10485 pkt = pack_hex_byte (pkt, aexpr->buf[ndx]);
10486 *pkt = '\0';
10487 do_cleanups (aexpr_chain);
35b1e5cc 10488 }
e8ba3115
YQ
10489 else
10490 warning (_("Target does not support conditional tracepoints, "
10491 "ignoring tp %d cond"), b->number);
10492 }
35b1e5cc 10493
d9b3f62e 10494 if (b->commands || *default_collect)
e8ba3115
YQ
10495 strcat (buf, "-");
10496 putpkt (buf);
10497 remote_get_noisy_reply (&target_buf, &target_buf_size);
10498 if (strcmp (target_buf, "OK"))
10499 error (_("Target does not support tracepoints."));
35b1e5cc 10500
e8ba3115
YQ
10501 /* do_single_steps (t); */
10502 if (tdp_actions)
10503 {
10504 for (ndx = 0; tdp_actions[ndx]; ndx++)
35b1e5cc 10505 {
e8ba3115 10506 QUIT; /* Allow user to bail out with ^C. */
bba74b36
YQ
10507 xsnprintf (buf, BUF_SIZE, "QTDP:-%x:%s:%s%c",
10508 b->number, addrbuf, /* address */
10509 tdp_actions[ndx],
10510 ((tdp_actions[ndx + 1] || stepping_actions)
10511 ? '-' : 0));
e8ba3115
YQ
10512 putpkt (buf);
10513 remote_get_noisy_reply (&target_buf,
10514 &target_buf_size);
10515 if (strcmp (target_buf, "OK"))
10516 error (_("Error on target while setting tracepoints."));
35b1e5cc 10517 }
e8ba3115
YQ
10518 }
10519 if (stepping_actions)
10520 {
10521 for (ndx = 0; stepping_actions[ndx]; ndx++)
35b1e5cc 10522 {
e8ba3115 10523 QUIT; /* Allow user to bail out with ^C. */
bba74b36
YQ
10524 xsnprintf (buf, BUF_SIZE, "QTDP:-%x:%s:%s%s%s",
10525 b->number, addrbuf, /* address */
10526 ((ndx == 0) ? "S" : ""),
10527 stepping_actions[ndx],
10528 (stepping_actions[ndx + 1] ? "-" : ""));
e8ba3115
YQ
10529 putpkt (buf);
10530 remote_get_noisy_reply (&target_buf,
10531 &target_buf_size);
10532 if (strcmp (target_buf, "OK"))
10533 error (_("Error on target while setting tracepoints."));
35b1e5cc 10534 }
e8ba3115 10535 }
409873ef 10536
e8ba3115
YQ
10537 if (remote_protocol_packets[PACKET_TracepointSource].support
10538 == PACKET_ENABLE)
10539 {
10540 if (b->addr_string)
409873ef 10541 {
e8ba3115
YQ
10542 strcpy (buf, "QTDPsrc:");
10543 encode_source_string (b->number, loc->address,
10544 "at", b->addr_string, buf + strlen (buf),
10545 2048 - strlen (buf));
409873ef 10546
e8ba3115
YQ
10547 putpkt (buf);
10548 remote_get_noisy_reply (&target_buf, &target_buf_size);
10549 if (strcmp (target_buf, "OK"))
10550 warning (_("Target does not support source download."));
409873ef 10551 }
e8ba3115
YQ
10552 if (b->cond_string)
10553 {
10554 strcpy (buf, "QTDPsrc:");
10555 encode_source_string (b->number, loc->address,
10556 "cond", b->cond_string, buf + strlen (buf),
10557 2048 - strlen (buf));
10558 putpkt (buf);
10559 remote_get_noisy_reply (&target_buf, &target_buf_size);
10560 if (strcmp (target_buf, "OK"))
10561 warning (_("Target does not support source download."));
10562 }
10563 remote_download_command_source (b->number, loc->address,
10564 breakpoint_commands (b));
35b1e5cc 10565 }
e8ba3115
YQ
10566
10567 do_cleanups (old_chain);
35b1e5cc
SS
10568}
10569
1e4d1764
YQ
10570static int
10571remote_can_download_tracepoint (void)
10572{
1e51243a
PA
10573 struct remote_state *rs = get_remote_state ();
10574 struct trace_status *ts;
10575 int status;
10576
10577 /* Don't try to install tracepoints until we've relocated our
10578 symbols, and fetched and merged the target's tracepoint list with
10579 ours. */
10580 if (rs->starting_up)
10581 return 0;
10582
10583 ts = current_trace_status ();
10584 status = remote_get_trace_status (ts);
1e4d1764
YQ
10585
10586 if (status == -1 || !ts->running_known || !ts->running)
10587 return 0;
10588
10589 /* If we are in a tracing experiment, but remote stub doesn't support
10590 installing tracepoint in trace, we have to return. */
10591 if (!remote_supports_install_in_trace ())
10592 return 0;
10593
10594 return 1;
10595}
10596
10597
35b1e5cc
SS
10598static void
10599remote_download_trace_state_variable (struct trace_state_variable *tsv)
10600{
10601 struct remote_state *rs = get_remote_state ();
00bf0b85 10602 char *p;
35b1e5cc 10603
bba74b36
YQ
10604 xsnprintf (rs->buf, get_remote_packet_size (), "QTDV:%x:%s:%x:",
10605 tsv->number, phex ((ULONGEST) tsv->initial_value, 8),
10606 tsv->builtin);
00bf0b85
SS
10607 p = rs->buf + strlen (rs->buf);
10608 if ((p - rs->buf) + strlen (tsv->name) * 2 >= get_remote_packet_size ())
10609 error (_("Trace state variable name too long for tsv definition packet"));
10610 p += 2 * bin2hex ((gdb_byte *) (tsv->name), p, 0);
10611 *p++ = '\0';
35b1e5cc
SS
10612 putpkt (rs->buf);
10613 remote_get_noisy_reply (&target_buf, &target_buf_size);
ad91cd99
PA
10614 if (*target_buf == '\0')
10615 error (_("Target does not support this command."));
10616 if (strcmp (target_buf, "OK") != 0)
10617 error (_("Error on target while downloading trace state variable."));
35b1e5cc
SS
10618}
10619
d248b706
KY
10620static void
10621remote_enable_tracepoint (struct bp_location *location)
10622{
10623 struct remote_state *rs = get_remote_state ();
10624 char addr_buf[40];
10625
10626 sprintf_vma (addr_buf, location->address);
bba74b36
YQ
10627 xsnprintf (rs->buf, get_remote_packet_size (), "QTEnable:%x:%s",
10628 location->owner->number, addr_buf);
d248b706
KY
10629 putpkt (rs->buf);
10630 remote_get_noisy_reply (&rs->buf, &rs->buf_size);
10631 if (*rs->buf == '\0')
10632 error (_("Target does not support enabling tracepoints while a trace run is ongoing."));
10633 if (strcmp (rs->buf, "OK") != 0)
10634 error (_("Error on target while enabling tracepoint."));
10635}
10636
10637static void
10638remote_disable_tracepoint (struct bp_location *location)
10639{
10640 struct remote_state *rs = get_remote_state ();
10641 char addr_buf[40];
10642
10643 sprintf_vma (addr_buf, location->address);
bba74b36
YQ
10644 xsnprintf (rs->buf, get_remote_packet_size (), "QTDisable:%x:%s",
10645 location->owner->number, addr_buf);
d248b706
KY
10646 putpkt (rs->buf);
10647 remote_get_noisy_reply (&rs->buf, &rs->buf_size);
10648 if (*rs->buf == '\0')
10649 error (_("Target does not support disabling tracepoints while a trace run is ongoing."));
10650 if (strcmp (rs->buf, "OK") != 0)
10651 error (_("Error on target while disabling tracepoint."));
10652}
10653
35b1e5cc 10654static void
ad91cd99 10655remote_trace_set_readonly_regions (void)
35b1e5cc
SS
10656{
10657 asection *s;
81b9b86e 10658 bfd *abfd = NULL;
35b1e5cc 10659 bfd_size_type size;
608bcef2 10660 bfd_vma vma;
35b1e5cc 10661 int anysecs = 0;
c2fa21f1 10662 int offset = 0;
35b1e5cc
SS
10663
10664 if (!exec_bfd)
10665 return; /* No information to give. */
10666
10667 strcpy (target_buf, "QTro");
10668 for (s = exec_bfd->sections; s; s = s->next)
10669 {
10670 char tmp1[40], tmp2[40];
c2fa21f1 10671 int sec_length;
35b1e5cc
SS
10672
10673 if ((s->flags & SEC_LOAD) == 0 ||
0df8b418 10674 /* (s->flags & SEC_CODE) == 0 || */
35b1e5cc
SS
10675 (s->flags & SEC_READONLY) == 0)
10676 continue;
10677
10678 anysecs = 1;
81b9b86e 10679 vma = bfd_get_section_vma (abfd, s);
35b1e5cc 10680 size = bfd_get_section_size (s);
608bcef2
HZ
10681 sprintf_vma (tmp1, vma);
10682 sprintf_vma (tmp2, vma + size);
c2fa21f1
HZ
10683 sec_length = 1 + strlen (tmp1) + 1 + strlen (tmp2);
10684 if (offset + sec_length + 1 > target_buf_size)
10685 {
864ac8a7
HZ
10686 if (remote_protocol_packets[PACKET_qXfer_traceframe_info].support
10687 != PACKET_ENABLE)
10688 warning (_("\
c2fa21f1
HZ
10689Too many sections for read-only sections definition packet."));
10690 break;
10691 }
bba74b36
YQ
10692 xsnprintf (target_buf + offset, target_buf_size - offset, ":%s,%s",
10693 tmp1, tmp2);
c2fa21f1 10694 offset += sec_length;
35b1e5cc
SS
10695 }
10696 if (anysecs)
10697 {
10698 putpkt (target_buf);
10699 getpkt (&target_buf, &target_buf_size, 0);
10700 }
10701}
10702
10703static void
ad91cd99 10704remote_trace_start (void)
35b1e5cc
SS
10705{
10706 putpkt ("QTStart");
10707 remote_get_noisy_reply (&target_buf, &target_buf_size);
ad91cd99
PA
10708 if (*target_buf == '\0')
10709 error (_("Target does not support this command."));
10710 if (strcmp (target_buf, "OK") != 0)
35b1e5cc
SS
10711 error (_("Bogus reply from target: %s"), target_buf);
10712}
10713
10714static int
00bf0b85 10715remote_get_trace_status (struct trace_status *ts)
35b1e5cc 10716{
953b98d1 10717 /* Initialize it just to avoid a GCC false warning. */
f652de6f 10718 char *p = NULL;
0df8b418 10719 /* FIXME we need to get register block size some other way. */
00bf0b85 10720 extern int trace_regblock_size;
67f41397 10721 volatile struct gdb_exception ex;
bd3eecc3
PA
10722 enum packet_result result;
10723
10724 if (remote_protocol_packets[PACKET_qTStatus].support == PACKET_DISABLE)
10725 return -1;
a744cf53 10726
00bf0b85
SS
10727 trace_regblock_size = get_remote_arch_state ()->sizeof_g_packet;
10728
049dc89b
JK
10729 putpkt ("qTStatus");
10730
67f41397
JK
10731 TRY_CATCH (ex, RETURN_MASK_ERROR)
10732 {
10733 p = remote_get_noisy_reply (&target_buf, &target_buf_size);
10734 }
10735 if (ex.reason < 0)
10736 {
598d3636
JK
10737 if (ex.error != TARGET_CLOSE_ERROR)
10738 {
10739 exception_fprintf (gdb_stderr, ex, "qTStatus: ");
10740 return -1;
10741 }
10742 throw_exception (ex);
67f41397 10743 }
00bf0b85 10744
bd3eecc3
PA
10745 result = packet_ok (p, &remote_protocol_packets[PACKET_qTStatus]);
10746
00bf0b85 10747 /* If the remote target doesn't do tracing, flag it. */
bd3eecc3 10748 if (result == PACKET_UNKNOWN)
00bf0b85 10749 return -1;
35b1e5cc 10750
00bf0b85 10751 /* We're working with a live target. */
f5911ea1 10752 ts->filename = NULL;
00bf0b85 10753
00bf0b85 10754 if (*p++ != 'T')
35b1e5cc
SS
10755 error (_("Bogus trace status reply from target: %s"), target_buf);
10756
84cebc4a
YQ
10757 /* Function 'parse_trace_status' sets default value of each field of
10758 'ts' at first, so we don't have to do it here. */
00bf0b85
SS
10759 parse_trace_status (p, ts);
10760
10761 return ts->running;
35b1e5cc
SS
10762}
10763
70221824 10764static void
f196051f
SS
10765remote_get_tracepoint_status (struct breakpoint *bp,
10766 struct uploaded_tp *utp)
10767{
10768 struct remote_state *rs = get_remote_state ();
f196051f
SS
10769 char *reply;
10770 struct bp_location *loc;
10771 struct tracepoint *tp = (struct tracepoint *) bp;
bba74b36 10772 size_t size = get_remote_packet_size ();
f196051f
SS
10773
10774 if (tp)
10775 {
10776 tp->base.hit_count = 0;
10777 tp->traceframe_usage = 0;
10778 for (loc = tp->base.loc; loc; loc = loc->next)
10779 {
10780 /* If the tracepoint was never downloaded, don't go asking for
10781 any status. */
10782 if (tp->number_on_target == 0)
10783 continue;
bba74b36
YQ
10784 xsnprintf (rs->buf, size, "qTP:%x:%s", tp->number_on_target,
10785 phex_nz (loc->address, 0));
f196051f
SS
10786 putpkt (rs->buf);
10787 reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
10788 if (reply && *reply)
10789 {
10790 if (*reply == 'V')
10791 parse_tracepoint_status (reply + 1, bp, utp);
10792 }
10793 }
10794 }
10795 else if (utp)
10796 {
10797 utp->hit_count = 0;
10798 utp->traceframe_usage = 0;
bba74b36
YQ
10799 xsnprintf (rs->buf, size, "qTP:%x:%s", utp->number,
10800 phex_nz (utp->addr, 0));
f196051f
SS
10801 putpkt (rs->buf);
10802 reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
10803 if (reply && *reply)
10804 {
10805 if (*reply == 'V')
10806 parse_tracepoint_status (reply + 1, bp, utp);
10807 }
10808 }
10809}
10810
35b1e5cc 10811static void
ad91cd99 10812remote_trace_stop (void)
35b1e5cc
SS
10813{
10814 putpkt ("QTStop");
10815 remote_get_noisy_reply (&target_buf, &target_buf_size);
ad91cd99
PA
10816 if (*target_buf == '\0')
10817 error (_("Target does not support this command."));
10818 if (strcmp (target_buf, "OK") != 0)
35b1e5cc
SS
10819 error (_("Bogus reply from target: %s"), target_buf);
10820}
10821
10822static int
10823remote_trace_find (enum trace_find_type type, int num,
cc5925ad 10824 CORE_ADDR addr1, CORE_ADDR addr2,
35b1e5cc
SS
10825 int *tpp)
10826{
10827 struct remote_state *rs = get_remote_state ();
bba74b36 10828 char *endbuf = rs->buf + get_remote_packet_size ();
35b1e5cc
SS
10829 char *p, *reply;
10830 int target_frameno = -1, target_tracept = -1;
10831
e6e4e701
PA
10832 /* Lookups other than by absolute frame number depend on the current
10833 trace selected, so make sure it is correct on the remote end
10834 first. */
10835 if (type != tfind_number)
10836 set_remote_traceframe ();
10837
35b1e5cc
SS
10838 p = rs->buf;
10839 strcpy (p, "QTFrame:");
10840 p = strchr (p, '\0');
10841 switch (type)
10842 {
10843 case tfind_number:
bba74b36 10844 xsnprintf (p, endbuf - p, "%x", num);
35b1e5cc
SS
10845 break;
10846 case tfind_pc:
bba74b36 10847 xsnprintf (p, endbuf - p, "pc:%s", phex_nz (addr1, 0));
35b1e5cc
SS
10848 break;
10849 case tfind_tp:
bba74b36 10850 xsnprintf (p, endbuf - p, "tdp:%x", num);
35b1e5cc
SS
10851 break;
10852 case tfind_range:
bba74b36
YQ
10853 xsnprintf (p, endbuf - p, "range:%s:%s", phex_nz (addr1, 0),
10854 phex_nz (addr2, 0));
35b1e5cc
SS
10855 break;
10856 case tfind_outside:
bba74b36
YQ
10857 xsnprintf (p, endbuf - p, "outside:%s:%s", phex_nz (addr1, 0),
10858 phex_nz (addr2, 0));
35b1e5cc
SS
10859 break;
10860 default:
9b20d036 10861 error (_("Unknown trace find type %d"), type);
35b1e5cc
SS
10862 }
10863
10864 putpkt (rs->buf);
10865 reply = remote_get_noisy_reply (&(rs->buf), &sizeof_pkt);
ad91cd99
PA
10866 if (*reply == '\0')
10867 error (_("Target does not support this command."));
35b1e5cc
SS
10868
10869 while (reply && *reply)
10870 switch (*reply)
10871 {
10872 case 'F':
f197e0f1
VP
10873 p = ++reply;
10874 target_frameno = (int) strtol (p, &reply, 16);
10875 if (reply == p)
10876 error (_("Unable to parse trace frame number"));
e6e4e701
PA
10877 /* Don't update our remote traceframe number cache on failure
10878 to select a remote traceframe. */
f197e0f1
VP
10879 if (target_frameno == -1)
10880 return -1;
35b1e5cc
SS
10881 break;
10882 case 'T':
f197e0f1
VP
10883 p = ++reply;
10884 target_tracept = (int) strtol (p, &reply, 16);
10885 if (reply == p)
10886 error (_("Unable to parse tracepoint number"));
35b1e5cc
SS
10887 break;
10888 case 'O': /* "OK"? */
10889 if (reply[1] == 'K' && reply[2] == '\0')
10890 reply += 2;
10891 else
10892 error (_("Bogus reply from target: %s"), reply);
10893 break;
10894 default:
10895 error (_("Bogus reply from target: %s"), reply);
10896 }
10897 if (tpp)
10898 *tpp = target_tracept;
e6e4e701
PA
10899
10900 remote_traceframe_number = target_frameno;
35b1e5cc
SS
10901 return target_frameno;
10902}
10903
10904static int
10905remote_get_trace_state_variable_value (int tsvnum, LONGEST *val)
10906{
10907 struct remote_state *rs = get_remote_state ();
10908 char *reply;
10909 ULONGEST uval;
10910
e6e4e701
PA
10911 set_remote_traceframe ();
10912
bba74b36 10913 xsnprintf (rs->buf, get_remote_packet_size (), "qTV:%x", tsvnum);
35b1e5cc
SS
10914 putpkt (rs->buf);
10915 reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
10916 if (reply && *reply)
10917 {
10918 if (*reply == 'V')
10919 {
10920 unpack_varlen_hex (reply + 1, &uval);
10921 *val = (LONGEST) uval;
10922 return 1;
10923 }
10924 }
10925 return 0;
10926}
10927
00bf0b85 10928static int
011aacb0 10929remote_save_trace_data (const char *filename)
00bf0b85
SS
10930{
10931 struct remote_state *rs = get_remote_state ();
10932 char *p, *reply;
10933
10934 p = rs->buf;
10935 strcpy (p, "QTSave:");
10936 p += strlen (p);
10937 if ((p - rs->buf) + strlen (filename) * 2 >= get_remote_packet_size ())
10938 error (_("Remote file name too long for trace save packet"));
10939 p += 2 * bin2hex ((gdb_byte *) filename, p, 0);
10940 *p++ = '\0';
10941 putpkt (rs->buf);
ad91cd99 10942 reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
d6c5869f 10943 if (*reply == '\0')
ad91cd99
PA
10944 error (_("Target does not support this command."));
10945 if (strcmp (reply, "OK") != 0)
10946 error (_("Bogus reply from target: %s"), reply);
00bf0b85
SS
10947 return 0;
10948}
10949
10950/* This is basically a memory transfer, but needs to be its own packet
10951 because we don't know how the target actually organizes its trace
10952 memory, plus we want to be able to ask for as much as possible, but
10953 not be unhappy if we don't get as much as we ask for. */
10954
10955static LONGEST
10956remote_get_raw_trace_data (gdb_byte *buf, ULONGEST offset, LONGEST len)
10957{
10958 struct remote_state *rs = get_remote_state ();
10959 char *reply;
10960 char *p;
10961 int rslt;
10962
10963 p = rs->buf;
10964 strcpy (p, "qTBuffer:");
10965 p += strlen (p);
10966 p += hexnumstr (p, offset);
10967 *p++ = ',';
10968 p += hexnumstr (p, len);
10969 *p++ = '\0';
10970
10971 putpkt (rs->buf);
10972 reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
10973 if (reply && *reply)
10974 {
10975 /* 'l' by itself means we're at the end of the buffer and
10976 there is nothing more to get. */
10977 if (*reply == 'l')
10978 return 0;
10979
10980 /* Convert the reply into binary. Limit the number of bytes to
10981 convert according to our passed-in buffer size, rather than
10982 what was returned in the packet; if the target is
10983 unexpectedly generous and gives us a bigger reply than we
10984 asked for, we don't want to crash. */
10985 rslt = hex2bin (target_buf, buf, len);
10986 return rslt;
10987 }
10988
10989 /* Something went wrong, flag as an error. */
10990 return -1;
10991}
10992
35b1e5cc
SS
10993static void
10994remote_set_disconnected_tracing (int val)
10995{
10996 struct remote_state *rs = get_remote_state ();
10997
33da3f1c
SS
10998 if (rs->disconnected_tracing)
10999 {
ad91cd99
PA
11000 char *reply;
11001
bba74b36 11002 xsnprintf (rs->buf, get_remote_packet_size (), "QTDisconnected:%x", val);
33da3f1c 11003 putpkt (rs->buf);
ad91cd99
PA
11004 reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
11005 if (*reply == '\0')
33da3f1c 11006 error (_("Target does not support this command."));
ad91cd99
PA
11007 if (strcmp (reply, "OK") != 0)
11008 error (_("Bogus reply from target: %s"), reply);
33da3f1c
SS
11009 }
11010 else if (val)
11011 warning (_("Target does not support disconnected tracing."));
35b1e5cc
SS
11012}
11013
dc146f7c
VP
11014static int
11015remote_core_of_thread (struct target_ops *ops, ptid_t ptid)
11016{
11017 struct thread_info *info = find_thread_ptid (ptid);
a744cf53 11018
dc146f7c
VP
11019 if (info && info->private)
11020 return info->private->core;
11021 return -1;
11022}
11023
4daf5ac0
SS
11024static void
11025remote_set_circular_trace_buffer (int val)
11026{
11027 struct remote_state *rs = get_remote_state ();
ad91cd99 11028 char *reply;
4daf5ac0 11029
bba74b36 11030 xsnprintf (rs->buf, get_remote_packet_size (), "QTBuffer:circular:%x", val);
4daf5ac0 11031 putpkt (rs->buf);
ad91cd99
PA
11032 reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
11033 if (*reply == '\0')
4daf5ac0 11034 error (_("Target does not support this command."));
ad91cd99
PA
11035 if (strcmp (reply, "OK") != 0)
11036 error (_("Bogus reply from target: %s"), reply);
4daf5ac0
SS
11037}
11038
b3b9301e
PA
11039static struct traceframe_info *
11040remote_traceframe_info (void)
11041{
11042 char *text;
11043
11044 text = target_read_stralloc (&current_target,
11045 TARGET_OBJECT_TRACEFRAME_INFO, NULL);
11046 if (text != NULL)
11047 {
11048 struct traceframe_info *info;
11049 struct cleanup *back_to = make_cleanup (xfree, text);
11050
11051 info = parse_traceframe_info (text);
11052 do_cleanups (back_to);
11053 return info;
11054 }
11055
11056 return NULL;
11057}
11058
405f8e94
SS
11059/* Handle the qTMinFTPILen packet. Returns the minimum length of
11060 instruction on which a fast tracepoint may be placed. Returns -1
11061 if the packet is not supported, and 0 if the minimum instruction
11062 length is unknown. */
11063
11064static int
11065remote_get_min_fast_tracepoint_insn_len (void)
11066{
11067 struct remote_state *rs = get_remote_state ();
11068 char *reply;
11069
e886a173
PA
11070 /* If we're not debugging a process yet, the IPA can't be
11071 loaded. */
11072 if (!target_has_execution)
11073 return 0;
11074
11075 /* Make sure the remote is pointing at the right process. */
11076 set_general_process ();
11077
bba74b36 11078 xsnprintf (rs->buf, get_remote_packet_size (), "qTMinFTPILen");
405f8e94
SS
11079 putpkt (rs->buf);
11080 reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
11081 if (*reply == '\0')
11082 return -1;
11083 else
11084 {
11085 ULONGEST min_insn_len;
11086
11087 unpack_varlen_hex (reply, &min_insn_len);
11088
11089 return (int) min_insn_len;
11090 }
11091}
11092
f6f899bf
HAQ
11093static void
11094remote_set_trace_buffer_size (LONGEST val)
11095{
90585175
HAQ
11096 if (remote_protocol_packets[PACKET_QTBuffer_size].support
11097 != PACKET_DISABLE)
f6f899bf
HAQ
11098 {
11099 struct remote_state *rs = get_remote_state ();
11100 char *buf = rs->buf;
11101 char *endbuf = rs->buf + get_remote_packet_size ();
11102 enum packet_result result;
11103
11104 gdb_assert (val >= 0 || val == -1);
11105 buf += xsnprintf (buf, endbuf - buf, "QTBuffer:size:");
11106 /* Send -1 as literal "-1" to avoid host size dependency. */
11107 if (val < 0)
11108 {
11109 *buf++ = '-';
11110 buf += hexnumstr (buf, (ULONGEST) -val);
11111 }
11112 else
11113 buf += hexnumstr (buf, (ULONGEST) val);
11114
11115 putpkt (rs->buf);
11116 remote_get_noisy_reply (&rs->buf, &rs->buf_size);
11117 result = packet_ok (rs->buf,
11118 &remote_protocol_packets[PACKET_QTBuffer_size]);
11119
11120 if (result != PACKET_OK)
11121 warning (_("Bogus reply from target: %s"), rs->buf);
11122 }
11123}
11124
f196051f
SS
11125static int
11126remote_set_trace_notes (char *user, char *notes, char *stop_notes)
11127{
11128 struct remote_state *rs = get_remote_state ();
11129 char *reply;
11130 char *buf = rs->buf;
11131 char *endbuf = rs->buf + get_remote_packet_size ();
11132 int nbytes;
11133
11134 buf += xsnprintf (buf, endbuf - buf, "QTNotes:");
11135 if (user)
11136 {
11137 buf += xsnprintf (buf, endbuf - buf, "user:");
11138 nbytes = bin2hex (user, buf, 0);
11139 buf += 2 * nbytes;
11140 *buf++ = ';';
11141 }
11142 if (notes)
11143 {
11144 buf += xsnprintf (buf, endbuf - buf, "notes:");
11145 nbytes = bin2hex (notes, buf, 0);
11146 buf += 2 * nbytes;
11147 *buf++ = ';';
11148 }
11149 if (stop_notes)
11150 {
11151 buf += xsnprintf (buf, endbuf - buf, "tstop:");
11152 nbytes = bin2hex (stop_notes, buf, 0);
11153 buf += 2 * nbytes;
11154 *buf++ = ';';
11155 }
11156 /* Ensure the buffer is terminated. */
11157 *buf = '\0';
11158
11159 putpkt (rs->buf);
11160 reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
11161 if (*reply == '\0')
11162 return 0;
11163
11164 if (strcmp (reply, "OK") != 0)
11165 error (_("Bogus reply from target: %s"), reply);
11166
11167 return 1;
11168}
11169
d1feda86
YQ
11170static int
11171remote_use_agent (int use)
11172{
11173 if (remote_protocol_packets[PACKET_QAgent].support != PACKET_DISABLE)
11174 {
11175 struct remote_state *rs = get_remote_state ();
11176
11177 /* If the stub supports QAgent. */
bba74b36 11178 xsnprintf (rs->buf, get_remote_packet_size (), "QAgent:%d", use);
d1feda86
YQ
11179 putpkt (rs->buf);
11180 getpkt (&rs->buf, &rs->buf_size, 0);
11181
11182 if (strcmp (rs->buf, "OK") == 0)
11183 {
11184 use_agent = use;
11185 return 1;
11186 }
11187 }
11188
11189 return 0;
11190}
11191
11192static int
11193remote_can_use_agent (void)
11194{
11195 return (remote_protocol_packets[PACKET_QAgent].support != PACKET_DISABLE);
11196}
11197
9accd112
MM
11198struct btrace_target_info
11199{
11200 /* The ptid of the traced thread. */
11201 ptid_t ptid;
11202};
11203
11204/* Check whether the target supports branch tracing. */
11205
11206static int
11207remote_supports_btrace (void)
11208{
11209 if (remote_protocol_packets[PACKET_Qbtrace_off].support != PACKET_ENABLE)
11210 return 0;
11211 if (remote_protocol_packets[PACKET_Qbtrace_bts].support != PACKET_ENABLE)
11212 return 0;
11213 if (remote_protocol_packets[PACKET_qXfer_btrace].support != PACKET_ENABLE)
11214 return 0;
11215
11216 return 1;
11217}
11218
11219/* Enable branch tracing. */
11220
11221static struct btrace_target_info *
11222remote_enable_btrace (ptid_t ptid)
11223{
11224 struct btrace_target_info *tinfo = NULL;
11225 struct packet_config *packet = &remote_protocol_packets[PACKET_Qbtrace_bts];
11226 struct remote_state *rs = get_remote_state ();
11227 char *buf = rs->buf;
11228 char *endbuf = rs->buf + get_remote_packet_size ();
11229
11230 if (packet->support != PACKET_ENABLE)
11231 error (_("Target does not support branch tracing."));
11232
11233 set_general_thread (ptid);
11234
11235 buf += xsnprintf (buf, endbuf - buf, "%s", packet->name);
11236 putpkt (rs->buf);
11237 getpkt (&rs->buf, &rs->buf_size, 0);
11238
11239 if (packet_ok (rs->buf, packet) == PACKET_ERROR)
11240 {
11241 if (rs->buf[0] == 'E' && rs->buf[1] == '.')
11242 error (_("Could not enable branch tracing for %s: %s"),
11243 target_pid_to_str (ptid), rs->buf + 2);
11244 else
11245 error (_("Could not enable branch tracing for %s."),
11246 target_pid_to_str (ptid));
11247 }
11248
11249 tinfo = xzalloc (sizeof (*tinfo));
11250 tinfo->ptid = ptid;
11251
11252 return tinfo;
11253}
11254
11255/* Disable branch tracing. */
11256
11257static void
11258remote_disable_btrace (struct btrace_target_info *tinfo)
11259{
11260 struct packet_config *packet = &remote_protocol_packets[PACKET_Qbtrace_off];
11261 struct remote_state *rs = get_remote_state ();
11262 char *buf = rs->buf;
11263 char *endbuf = rs->buf + get_remote_packet_size ();
11264
11265 if (packet->support != PACKET_ENABLE)
11266 error (_("Target does not support branch tracing."));
11267
11268 set_general_thread (tinfo->ptid);
11269
11270 buf += xsnprintf (buf, endbuf - buf, "%s", packet->name);
11271 putpkt (rs->buf);
11272 getpkt (&rs->buf, &rs->buf_size, 0);
11273
11274 if (packet_ok (rs->buf, packet) == PACKET_ERROR)
11275 {
11276 if (rs->buf[0] == 'E' && rs->buf[1] == '.')
11277 error (_("Could not disable branch tracing for %s: %s"),
11278 target_pid_to_str (tinfo->ptid), rs->buf + 2);
11279 else
11280 error (_("Could not disable branch tracing for %s."),
11281 target_pid_to_str (tinfo->ptid));
11282 }
11283
11284 xfree (tinfo);
11285}
11286
11287/* Teardown branch tracing. */
11288
11289static void
11290remote_teardown_btrace (struct btrace_target_info *tinfo)
11291{
11292 /* We must not talk to the target during teardown. */
11293 xfree (tinfo);
11294}
11295
11296/* Read the branch trace. */
11297
11298static VEC (btrace_block_s) *
11299remote_read_btrace (struct btrace_target_info *tinfo,
11300 enum btrace_read_type type)
11301{
11302 struct packet_config *packet = &remote_protocol_packets[PACKET_qXfer_btrace];
11303 struct remote_state *rs = get_remote_state ();
11304 VEC (btrace_block_s) *btrace = NULL;
11305 const char *annex;
11306 char *xml;
11307
11308 if (packet->support != PACKET_ENABLE)
11309 error (_("Target does not support branch tracing."));
11310
11311#if !defined(HAVE_LIBEXPAT)
11312 error (_("Cannot process branch tracing result. XML parsing not supported."));
11313#endif
11314
11315 switch (type)
11316 {
11317 case btrace_read_all:
11318 annex = "all";
11319 break;
11320 case btrace_read_new:
11321 annex = "new";
11322 break;
11323 default:
11324 internal_error (__FILE__, __LINE__,
11325 _("Bad branch tracing read type: %u."),
11326 (unsigned int) type);
11327 }
11328
11329 xml = target_read_stralloc (&current_target,
11330 TARGET_OBJECT_BTRACE, annex);
11331 if (xml != NULL)
11332 {
11333 struct cleanup *cleanup = make_cleanup (xfree, xml);
11334
11335 btrace = parse_xml_btrace (xml);
11336 do_cleanups (cleanup);
11337 }
11338
11339 return btrace;
11340}
11341
c906108c 11342static void
fba45db2 11343init_remote_ops (void)
c906108c 11344{
c5aa993b 11345 remote_ops.to_shortname = "remote";
c906108c 11346 remote_ops.to_longname = "Remote serial target in gdb-specific protocol";
c5aa993b 11347 remote_ops.to_doc =
c906108c 11348 "Use a remote computer via a serial line, using a gdb-specific protocol.\n\
0d06e24b
JM
11349Specify the serial device it is connected to\n\
11350(e.g. /dev/ttyS0, /dev/ttya, COM1, etc.).";
c5aa993b
JM
11351 remote_ops.to_open = remote_open;
11352 remote_ops.to_close = remote_close;
c906108c 11353 remote_ops.to_detach = remote_detach;
6ad8ae5c 11354 remote_ops.to_disconnect = remote_disconnect;
c5aa993b 11355 remote_ops.to_resume = remote_resume;
c906108c
SS
11356 remote_ops.to_wait = remote_wait;
11357 remote_ops.to_fetch_registers = remote_fetch_registers;
11358 remote_ops.to_store_registers = remote_store_registers;
11359 remote_ops.to_prepare_to_store = remote_prepare_to_store;
c8e73a31 11360 remote_ops.deprecated_xfer_memory = remote_xfer_memory;
c5aa993b 11361 remote_ops.to_files_info = remote_files_info;
c906108c
SS
11362 remote_ops.to_insert_breakpoint = remote_insert_breakpoint;
11363 remote_ops.to_remove_breakpoint = remote_remove_breakpoint;
3c3bea1c
GS
11364 remote_ops.to_stopped_by_watchpoint = remote_stopped_by_watchpoint;
11365 remote_ops.to_stopped_data_address = remote_stopped_data_address;
283002cf
MR
11366 remote_ops.to_watchpoint_addr_within_range =
11367 remote_watchpoint_addr_within_range;
3c3bea1c
GS
11368 remote_ops.to_can_use_hw_breakpoint = remote_check_watch_resources;
11369 remote_ops.to_insert_hw_breakpoint = remote_insert_hw_breakpoint;
11370 remote_ops.to_remove_hw_breakpoint = remote_remove_hw_breakpoint;
480a3f21
PW
11371 remote_ops.to_region_ok_for_hw_watchpoint
11372 = remote_region_ok_for_hw_watchpoint;
3c3bea1c
GS
11373 remote_ops.to_insert_watchpoint = remote_insert_watchpoint;
11374 remote_ops.to_remove_watchpoint = remote_remove_watchpoint;
c5aa993b
JM
11375 remote_ops.to_kill = remote_kill;
11376 remote_ops.to_load = generic_load;
c906108c 11377 remote_ops.to_mourn_inferior = remote_mourn;
2455069d 11378 remote_ops.to_pass_signals = remote_pass_signals;
9b224c5e 11379 remote_ops.to_program_signals = remote_program_signals;
c906108c 11380 remote_ops.to_thread_alive = remote_thread_alive;
0f71a2f6 11381 remote_ops.to_find_new_threads = remote_threads_info;
0caabb7e 11382 remote_ops.to_pid_to_str = remote_pid_to_str;
cf759d3b 11383 remote_ops.to_extra_thread_info = remote_threads_extra_info;
10760264 11384 remote_ops.to_get_ada_task_ptid = remote_get_ada_task_ptid;
c906108c 11385 remote_ops.to_stop = remote_stop;
4b8a223f 11386 remote_ops.to_xfer_partial = remote_xfer_partial;
96baa820 11387 remote_ops.to_rcmd = remote_rcmd;
49d03eab 11388 remote_ops.to_log_command = serial_log_command;
38691318 11389 remote_ops.to_get_thread_local_address = remote_get_thread_local_address;
c906108c 11390 remote_ops.to_stratum = process_stratum;
c35b1492
PA
11391 remote_ops.to_has_all_memory = default_child_has_all_memory;
11392 remote_ops.to_has_memory = default_child_has_memory;
11393 remote_ops.to_has_stack = default_child_has_stack;
11394 remote_ops.to_has_registers = default_child_has_registers;
11395 remote_ops.to_has_execution = default_child_has_execution;
3e43a32a 11396 remote_ops.to_has_thread_control = tc_schedlock; /* can lock scheduler */
b2175913 11397 remote_ops.to_can_execute_reverse = remote_can_execute_reverse;
c5aa993b 11398 remote_ops.to_magic = OPS_MAGIC;
fd79ecee 11399 remote_ops.to_memory_map = remote_memory_map;
a76d924d
DJ
11400 remote_ops.to_flash_erase = remote_flash_erase;
11401 remote_ops.to_flash_done = remote_flash_done;
29709017 11402 remote_ops.to_read_description = remote_read_description;
08388c79 11403 remote_ops.to_search_memory = remote_search_memory;
75c99385
PA
11404 remote_ops.to_can_async_p = remote_can_async_p;
11405 remote_ops.to_is_async_p = remote_is_async_p;
11406 remote_ops.to_async = remote_async;
75c99385
PA
11407 remote_ops.to_terminal_inferior = remote_terminal_inferior;
11408 remote_ops.to_terminal_ours = remote_terminal_ours;
74531fed 11409 remote_ops.to_supports_non_stop = remote_supports_non_stop;
8a305172 11410 remote_ops.to_supports_multi_process = remote_supports_multi_process;
03583c20
UW
11411 remote_ops.to_supports_disable_randomization
11412 = remote_supports_disable_randomization;
7313baad
UW
11413 remote_ops.to_fileio_open = remote_hostio_open;
11414 remote_ops.to_fileio_pwrite = remote_hostio_pwrite;
11415 remote_ops.to_fileio_pread = remote_hostio_pread;
11416 remote_ops.to_fileio_close = remote_hostio_close;
11417 remote_ops.to_fileio_unlink = remote_hostio_unlink;
b9e7b9c3 11418 remote_ops.to_fileio_readlink = remote_hostio_readlink;
d248b706 11419 remote_ops.to_supports_enable_disable_tracepoint = remote_supports_enable_disable_tracepoint;
3065dfb6 11420 remote_ops.to_supports_string_tracing = remote_supports_string_tracing;
b775012e 11421 remote_ops.to_supports_evaluation_of_breakpoint_conditions = remote_supports_cond_breakpoints;
d3ce09f5 11422 remote_ops.to_can_run_breakpoint_commands = remote_can_run_breakpoint_commands;
35b1e5cc
SS
11423 remote_ops.to_trace_init = remote_trace_init;
11424 remote_ops.to_download_tracepoint = remote_download_tracepoint;
1e4d1764 11425 remote_ops.to_can_download_tracepoint = remote_can_download_tracepoint;
3e43a32a
MS
11426 remote_ops.to_download_trace_state_variable
11427 = remote_download_trace_state_variable;
d248b706
KY
11428 remote_ops.to_enable_tracepoint = remote_enable_tracepoint;
11429 remote_ops.to_disable_tracepoint = remote_disable_tracepoint;
35b1e5cc
SS
11430 remote_ops.to_trace_set_readonly_regions = remote_trace_set_readonly_regions;
11431 remote_ops.to_trace_start = remote_trace_start;
11432 remote_ops.to_get_trace_status = remote_get_trace_status;
f196051f 11433 remote_ops.to_get_tracepoint_status = remote_get_tracepoint_status;
35b1e5cc
SS
11434 remote_ops.to_trace_stop = remote_trace_stop;
11435 remote_ops.to_trace_find = remote_trace_find;
3e43a32a
MS
11436 remote_ops.to_get_trace_state_variable_value
11437 = remote_get_trace_state_variable_value;
00bf0b85
SS
11438 remote_ops.to_save_trace_data = remote_save_trace_data;
11439 remote_ops.to_upload_tracepoints = remote_upload_tracepoints;
3e43a32a
MS
11440 remote_ops.to_upload_trace_state_variables
11441 = remote_upload_trace_state_variables;
00bf0b85 11442 remote_ops.to_get_raw_trace_data = remote_get_raw_trace_data;
405f8e94 11443 remote_ops.to_get_min_fast_tracepoint_insn_len = remote_get_min_fast_tracepoint_insn_len;
35b1e5cc 11444 remote_ops.to_set_disconnected_tracing = remote_set_disconnected_tracing;
4daf5ac0 11445 remote_ops.to_set_circular_trace_buffer = remote_set_circular_trace_buffer;
f6f899bf 11446 remote_ops.to_set_trace_buffer_size = remote_set_trace_buffer_size;
f196051f 11447 remote_ops.to_set_trace_notes = remote_set_trace_notes;
dc146f7c 11448 remote_ops.to_core_of_thread = remote_core_of_thread;
4a5e7a5b 11449 remote_ops.to_verify_memory = remote_verify_memory;
711e434b 11450 remote_ops.to_get_tib_address = remote_get_tib_address;
d914c394 11451 remote_ops.to_set_permissions = remote_set_permissions;
0fb4aa4b
PA
11452 remote_ops.to_static_tracepoint_marker_at
11453 = remote_static_tracepoint_marker_at;
11454 remote_ops.to_static_tracepoint_markers_by_strid
11455 = remote_static_tracepoint_markers_by_strid;
b3b9301e 11456 remote_ops.to_traceframe_info = remote_traceframe_info;
d1feda86
YQ
11457 remote_ops.to_use_agent = remote_use_agent;
11458 remote_ops.to_can_use_agent = remote_can_use_agent;
9accd112
MM
11459 remote_ops.to_supports_btrace = remote_supports_btrace;
11460 remote_ops.to_enable_btrace = remote_enable_btrace;
11461 remote_ops.to_disable_btrace = remote_disable_btrace;
11462 remote_ops.to_teardown_btrace = remote_teardown_btrace;
11463 remote_ops.to_read_btrace = remote_read_btrace;
c906108c
SS
11464}
11465
11466/* Set up the extended remote vector by making a copy of the standard
11467 remote vector and adding to it. */
11468
11469static void
fba45db2 11470init_extended_remote_ops (void)
c906108c
SS
11471{
11472 extended_remote_ops = remote_ops;
11473
0f71a2f6 11474 extended_remote_ops.to_shortname = "extended-remote";
c5aa993b 11475 extended_remote_ops.to_longname =
c906108c 11476 "Extended remote serial target in gdb-specific protocol";
c5aa993b 11477 extended_remote_ops.to_doc =
c906108c 11478 "Use a remote computer via a serial line, using a gdb-specific protocol.\n\
39237dd1
PA
11479Specify the serial device it is connected to (e.g. /dev/ttya).";
11480 extended_remote_ops.to_open = extended_remote_open;
c906108c
SS
11481 extended_remote_ops.to_create_inferior = extended_remote_create_inferior;
11482 extended_remote_ops.to_mourn_inferior = extended_remote_mourn;
2d717e4f
DJ
11483 extended_remote_ops.to_detach = extended_remote_detach;
11484 extended_remote_ops.to_attach = extended_remote_attach;
82f73884 11485 extended_remote_ops.to_kill = extended_remote_kill;
03583c20
UW
11486 extended_remote_ops.to_supports_disable_randomization
11487 = extended_remote_supports_disable_randomization;
0f71a2f6
JM
11488}
11489
6426a772
JM
11490static int
11491remote_can_async_p (void)
11492{
c6ebd6cf 11493 if (!target_async_permitted)
75c99385
PA
11494 /* We only enable async when the user specifically asks for it. */
11495 return 0;
11496
23860348 11497 /* We're async whenever the serial device is. */
3dd5b83d 11498 return serial_can_async_p (remote_desc);
6426a772
JM
11499}
11500
11501static int
11502remote_is_async_p (void)
11503{
c6ebd6cf 11504 if (!target_async_permitted)
75c99385
PA
11505 /* We only enable async when the user specifically asks for it. */
11506 return 0;
11507
23860348 11508 /* We're async whenever the serial device is. */
3dd5b83d 11509 return serial_is_async_p (remote_desc);
6426a772
JM
11510}
11511
2acceee2
JM
11512/* Pass the SERIAL event on and up to the client. One day this code
11513 will be able to delay notifying the client of an event until the
23860348 11514 point where an entire packet has been received. */
2acceee2 11515
2bc416ba 11516static void (*async_client_callback) (enum inferior_event_type event_type,
23860348 11517 void *context);
2acceee2
JM
11518static void *async_client_context;
11519static serial_event_ftype remote_async_serial_handler;
11520
6426a772 11521static void
819cc324 11522remote_async_serial_handler (struct serial *scb, void *context)
6426a772 11523{
2acceee2
JM
11524 /* Don't propogate error information up to the client. Instead let
11525 the client find out about the error by querying the target. */
11526 async_client_callback (INF_REG_EVENT, async_client_context);
11527}
11528
74531fed
PA
11529static void
11530remote_async_inferior_event_handler (gdb_client_data data)
11531{
11532 inferior_event_handler (INF_REG_EVENT, NULL);
11533}
11534
2acceee2 11535static void
2bc416ba 11536remote_async (void (*callback) (enum inferior_event_type event_type,
23860348 11537 void *context), void *context)
2acceee2
JM
11538{
11539 if (callback != NULL)
11540 {
2cd58942 11541 serial_async (remote_desc, remote_async_serial_handler, NULL);
2acceee2
JM
11542 async_client_callback = callback;
11543 async_client_context = context;
11544 }
11545 else
2cd58942 11546 serial_async (remote_desc, NULL, NULL);
6426a772
JM
11547}
11548
5a2468f5 11549static void
c2d11a7d 11550set_remote_cmd (char *args, int from_tty)
5a2468f5 11551{
427c3a89 11552 help_list (remote_set_cmdlist, "set remote ", -1, gdb_stdout);
5a2468f5
JM
11553}
11554
d471ea57
AC
11555static void
11556show_remote_cmd (char *args, int from_tty)
11557{
37a105a1 11558 /* We can't just use cmd_show_list here, because we want to skip
427c3a89 11559 the redundant "show remote Z-packet" and the legacy aliases. */
37a105a1
DJ
11560 struct cleanup *showlist_chain;
11561 struct cmd_list_element *list = remote_show_cmdlist;
79a45e25 11562 struct ui_out *uiout = current_uiout;
37a105a1
DJ
11563
11564 showlist_chain = make_cleanup_ui_out_tuple_begin_end (uiout, "showlist");
11565 for (; list != NULL; list = list->next)
11566 if (strcmp (list->name, "Z-packet") == 0)
11567 continue;
427c3a89
DJ
11568 else if (list->type == not_set_cmd)
11569 /* Alias commands are exactly like the original, except they
11570 don't have the normal type. */
11571 continue;
11572 else
37a105a1
DJ
11573 {
11574 struct cleanup *option_chain
11575 = make_cleanup_ui_out_tuple_begin_end (uiout, "option");
a744cf53 11576
37a105a1
DJ
11577 ui_out_field_string (uiout, "name", list->name);
11578 ui_out_text (uiout, ": ");
427c3a89 11579 if (list->type == show_cmd)
5b9afe8a 11580 do_show_command ((char *) NULL, from_tty, list);
427c3a89
DJ
11581 else
11582 cmd_func (list, NULL, from_tty);
37a105a1
DJ
11583 /* Close the tuple. */
11584 do_cleanups (option_chain);
11585 }
427c3a89
DJ
11586
11587 /* Close the tuple. */
11588 do_cleanups (showlist_chain);
d471ea57 11589}
5a2468f5 11590
0f71a2f6 11591
23860348 11592/* Function to be called whenever a new objfile (shlib) is detected. */
dc8acb97
MS
11593static void
11594remote_new_objfile (struct objfile *objfile)
11595{
23860348 11596 if (remote_desc != 0) /* Have a remote connection. */
06d3b283 11597 remote_check_symbols (objfile);
dc8acb97
MS
11598}
11599
00bf0b85
SS
11600/* Pull all the tracepoints defined on the target and create local
11601 data structures representing them. We don't want to create real
11602 tracepoints yet, we don't want to mess up the user's existing
11603 collection. */
11604
11605static int
11606remote_upload_tracepoints (struct uploaded_tp **utpp)
d5551862 11607{
00bf0b85
SS
11608 struct remote_state *rs = get_remote_state ();
11609 char *p;
d5551862 11610
00bf0b85
SS
11611 /* Ask for a first packet of tracepoint definition. */
11612 putpkt ("qTfP");
11613 getpkt (&rs->buf, &rs->buf_size, 0);
11614 p = rs->buf;
11615 while (*p && *p != 'l')
d5551862 11616 {
00bf0b85
SS
11617 parse_tracepoint_definition (p, utpp);
11618 /* Ask for another packet of tracepoint definition. */
11619 putpkt ("qTsP");
11620 getpkt (&rs->buf, &rs->buf_size, 0);
11621 p = rs->buf;
d5551862 11622 }
00bf0b85 11623 return 0;
d5551862
SS
11624}
11625
00bf0b85
SS
11626static int
11627remote_upload_trace_state_variables (struct uploaded_tsv **utsvp)
d5551862 11628{
00bf0b85 11629 struct remote_state *rs = get_remote_state ();
d5551862 11630 char *p;
d5551862 11631
00bf0b85
SS
11632 /* Ask for a first packet of variable definition. */
11633 putpkt ("qTfV");
d5551862
SS
11634 getpkt (&rs->buf, &rs->buf_size, 0);
11635 p = rs->buf;
00bf0b85 11636 while (*p && *p != 'l')
d5551862 11637 {
00bf0b85
SS
11638 parse_tsv_definition (p, utsvp);
11639 /* Ask for another packet of variable definition. */
11640 putpkt ("qTsV");
d5551862
SS
11641 getpkt (&rs->buf, &rs->buf_size, 0);
11642 p = rs->buf;
11643 }
00bf0b85 11644 return 0;
d5551862
SS
11645}
11646
c906108c 11647void
fba45db2 11648_initialize_remote (void)
c906108c 11649{
ea9c271d 11650 struct remote_state *rs;
9a7071a8 11651 struct cmd_list_element *cmd;
6f937416 11652 const char *cmd_name;
ea9c271d 11653
0f71a2f6 11654 /* architecture specific data */
2bc416ba 11655 remote_gdbarch_data_handle =
23860348 11656 gdbarch_data_register_post_init (init_remote_state);
29709017
DJ
11657 remote_g_packet_data_handle =
11658 gdbarch_data_register_pre_init (remote_g_packet_data_init);
d01949b6 11659
ea9c271d
DJ
11660 /* Initialize the per-target state. At the moment there is only one
11661 of these, not one per target. Only one target is active at a
11662 time. The default buffer size is unimportant; it will be expanded
11663 whenever a larger buffer is needed. */
0b83947e 11664 rs = get_remote_state_raw ();
ea9c271d
DJ
11665 rs->buf_size = 400;
11666 rs->buf = xmalloc (rs->buf_size);
11667
c906108c
SS
11668 init_remote_ops ();
11669 add_target (&remote_ops);
11670
11671 init_extended_remote_ops ();
11672 add_target (&extended_remote_ops);
cce74817 11673
dc8acb97 11674 /* Hook into new objfile notification. */
06d3b283 11675 observer_attach_new_objfile (remote_new_objfile);
5f4cf0bb
YQ
11676 /* We're no longer interested in notification events of an inferior
11677 when it exits. */
11678 observer_attach_inferior_exit (discard_pending_stop_replies);
dc8acb97 11679
b803fb0f
DJ
11680 /* Set up signal handlers. */
11681 sigint_remote_token =
11682 create_async_signal_handler (async_remote_interrupt, NULL);
11683 sigint_remote_twice_token =
6d549500 11684 create_async_signal_handler (async_remote_interrupt_twice, NULL);
b803fb0f 11685
c906108c
SS
11686#if 0
11687 init_remote_threadtests ();
11688#endif
11689
722247f1 11690 stop_reply_queue = QUEUE_alloc (stop_reply_p, stop_reply_xfree);
23860348 11691 /* set/show remote ... */
d471ea57 11692
1bedd215 11693 add_prefix_cmd ("remote", class_maintenance, set_remote_cmd, _("\
5a2468f5
JM
11694Remote protocol specific variables\n\
11695Configure various remote-protocol specific variables such as\n\
1bedd215 11696the packets being used"),
cff3e48b 11697 &remote_set_cmdlist, "set remote ",
23860348 11698 0 /* allow-unknown */, &setlist);
1bedd215 11699 add_prefix_cmd ("remote", class_maintenance, show_remote_cmd, _("\
5a2468f5
JM
11700Remote protocol specific variables\n\
11701Configure various remote-protocol specific variables such as\n\
1bedd215 11702the packets being used"),
cff3e48b 11703 &remote_show_cmdlist, "show remote ",
23860348 11704 0 /* allow-unknown */, &showlist);
5a2468f5 11705
1a966eab
AC
11706 add_cmd ("compare-sections", class_obscure, compare_sections_command, _("\
11707Compare section data on target to the exec file.\n\
11708Argument is a single section name (default: all loaded sections)."),
c906108c
SS
11709 &cmdlist);
11710
1a966eab
AC
11711 add_cmd ("packet", class_maintenance, packet_command, _("\
11712Send an arbitrary packet to a remote target.\n\
c906108c
SS
11713 maintenance packet TEXT\n\
11714If GDB is talking to an inferior via the GDB serial protocol, then\n\
11715this command sends the string TEXT to the inferior, and displays the\n\
11716response packet. GDB supplies the initial `$' character, and the\n\
1a966eab 11717terminating `#' character and checksum."),
c906108c
SS
11718 &maintenancelist);
11719
7915a72c
AC
11720 add_setshow_boolean_cmd ("remotebreak", no_class, &remote_break, _("\
11721Set whether to send break if interrupted."), _("\
11722Show whether to send break if interrupted."), _("\
11723If set, a break, instead of a cntrl-c, is sent to the remote target."),
9a7071a8 11724 set_remotebreak, show_remotebreak,
e707bbc2 11725 &setlist, &showlist);
9a7071a8
JB
11726 cmd_name = "remotebreak";
11727 cmd = lookup_cmd (&cmd_name, setlist, "", -1, 1);
11728 deprecate_cmd (cmd, "set remote interrupt-sequence");
11729 cmd_name = "remotebreak"; /* needed because lookup_cmd updates the pointer */
11730 cmd = lookup_cmd (&cmd_name, showlist, "", -1, 1);
11731 deprecate_cmd (cmd, "show remote interrupt-sequence");
11732
11733 add_setshow_enum_cmd ("interrupt-sequence", class_support,
3e43a32a
MS
11734 interrupt_sequence_modes, &interrupt_sequence_mode,
11735 _("\
9a7071a8
JB
11736Set interrupt sequence to remote target."), _("\
11737Show interrupt sequence to remote target."), _("\
11738Valid value is \"Ctrl-C\", \"BREAK\" or \"BREAK-g\". The default is \"Ctrl-C\"."),
11739 NULL, show_interrupt_sequence,
11740 &remote_set_cmdlist,
11741 &remote_show_cmdlist);
11742
11743 add_setshow_boolean_cmd ("interrupt-on-connect", class_support,
11744 &interrupt_on_connect, _("\
11745Set whether interrupt-sequence is sent to remote target when gdb connects to."), _(" \
11746Show whether interrupt-sequence is sent to remote target when gdb connects to."), _(" \
11747If set, interrupt sequence is sent to remote target."),
11748 NULL, NULL,
11749 &remote_set_cmdlist, &remote_show_cmdlist);
c906108c 11750
23860348 11751 /* Install commands for configuring memory read/write packets. */
11cf8741 11752
1a966eab
AC
11753 add_cmd ("remotewritesize", no_class, set_memory_write_packet_size, _("\
11754Set the maximum number of bytes per memory write packet (deprecated)."),
11cf8741 11755 &setlist);
1a966eab
AC
11756 add_cmd ("remotewritesize", no_class, show_memory_write_packet_size, _("\
11757Show the maximum number of bytes per memory write packet (deprecated)."),
11cf8741
JM
11758 &showlist);
11759 add_cmd ("memory-write-packet-size", no_class,
1a966eab
AC
11760 set_memory_write_packet_size, _("\
11761Set the maximum number of bytes per memory-write packet.\n\
11762Specify the number of bytes in a packet or 0 (zero) for the\n\
11763default packet size. The actual limit is further reduced\n\
11764dependent on the target. Specify ``fixed'' to disable the\n\
11765further restriction and ``limit'' to enable that restriction."),
11cf8741
JM
11766 &remote_set_cmdlist);
11767 add_cmd ("memory-read-packet-size", no_class,
1a966eab
AC
11768 set_memory_read_packet_size, _("\
11769Set the maximum number of bytes per memory-read packet.\n\
11770Specify the number of bytes in a packet or 0 (zero) for the\n\
11771default packet size. The actual limit is further reduced\n\
11772dependent on the target. Specify ``fixed'' to disable the\n\
11773further restriction and ``limit'' to enable that restriction."),
11cf8741
JM
11774 &remote_set_cmdlist);
11775 add_cmd ("memory-write-packet-size", no_class,
11776 show_memory_write_packet_size,
1a966eab 11777 _("Show the maximum number of bytes per memory-write packet."),
11cf8741
JM
11778 &remote_show_cmdlist);
11779 add_cmd ("memory-read-packet-size", no_class,
11780 show_memory_read_packet_size,
1a966eab 11781 _("Show the maximum number of bytes per memory-read packet."),
11cf8741 11782 &remote_show_cmdlist);
c906108c 11783
b3f42336 11784 add_setshow_zinteger_cmd ("hardware-watchpoint-limit", no_class,
7915a72c
AC
11785 &remote_hw_watchpoint_limit, _("\
11786Set the maximum number of target hardware watchpoints."), _("\
11787Show the maximum number of target hardware watchpoints."), _("\
11788Specify a negative limit for unlimited."),
3e43a32a
MS
11789 NULL, NULL, /* FIXME: i18n: The maximum
11790 number of target hardware
11791 watchpoints is %s. */
b3f42336 11792 &remote_set_cmdlist, &remote_show_cmdlist);
480a3f21
PW
11793 add_setshow_zinteger_cmd ("hardware-watchpoint-length-limit", no_class,
11794 &remote_hw_watchpoint_length_limit, _("\
11795Set the maximum length (in bytes) of a target hardware watchpoint."), _("\
11796Show the maximum length (in bytes) of a target hardware watchpoint."), _("\
11797Specify a negative limit for unlimited."),
11798 NULL, NULL, /* FIXME: i18n: The maximum
11799 length (in bytes) of a target
11800 hardware watchpoint is %s. */
11801 &remote_set_cmdlist, &remote_show_cmdlist);
b3f42336 11802 add_setshow_zinteger_cmd ("hardware-breakpoint-limit", no_class,
7915a72c
AC
11803 &remote_hw_breakpoint_limit, _("\
11804Set the maximum number of target hardware breakpoints."), _("\
11805Show the maximum number of target hardware breakpoints."), _("\
11806Specify a negative limit for unlimited."),
3e43a32a
MS
11807 NULL, NULL, /* FIXME: i18n: The maximum
11808 number of target hardware
11809 breakpoints is %s. */
b3f42336 11810 &remote_set_cmdlist, &remote_show_cmdlist);
501eef12 11811
1b493192
PA
11812 add_setshow_zuinteger_cmd ("remoteaddresssize", class_obscure,
11813 &remote_address_size, _("\
4d28ad1e
AC
11814Set the maximum size of the address (in bits) in a memory packet."), _("\
11815Show the maximum size of the address (in bits) in a memory packet."), NULL,
1b493192
PA
11816 NULL,
11817 NULL, /* FIXME: i18n: */
11818 &setlist, &showlist);
c906108c 11819
444abaca 11820 add_packet_config_cmd (&remote_protocol_packets[PACKET_X],
bb572ddd 11821 "X", "binary-download", 1);
0f71a2f6 11822
444abaca 11823 add_packet_config_cmd (&remote_protocol_packets[PACKET_vCont],
bb572ddd 11824 "vCont", "verbose-resume", 0);
506fb367 11825
89be2091
DJ
11826 add_packet_config_cmd (&remote_protocol_packets[PACKET_QPassSignals],
11827 "QPassSignals", "pass-signals", 0);
11828
9b224c5e
PA
11829 add_packet_config_cmd (&remote_protocol_packets[PACKET_QProgramSignals],
11830 "QProgramSignals", "program-signals", 0);
11831
444abaca 11832 add_packet_config_cmd (&remote_protocol_packets[PACKET_qSymbol],
bb572ddd 11833 "qSymbol", "symbol-lookup", 0);
dc8acb97 11834
444abaca 11835 add_packet_config_cmd (&remote_protocol_packets[PACKET_P],
bb572ddd 11836 "P", "set-register", 1);
d471ea57 11837
444abaca 11838 add_packet_config_cmd (&remote_protocol_packets[PACKET_p],
bb572ddd 11839 "p", "fetch-register", 1);
b96ec7ac 11840
444abaca 11841 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z0],
bb572ddd 11842 "Z0", "software-breakpoint", 0);
d471ea57 11843
444abaca 11844 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z1],
bb572ddd 11845 "Z1", "hardware-breakpoint", 0);
d471ea57 11846
444abaca 11847 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z2],
bb572ddd 11848 "Z2", "write-watchpoint", 0);
d471ea57 11849
444abaca 11850 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z3],
bb572ddd 11851 "Z3", "read-watchpoint", 0);
d471ea57 11852
444abaca 11853 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z4],
bb572ddd 11854 "Z4", "access-watchpoint", 0);
d471ea57 11855
0876f84a
DJ
11856 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_auxv],
11857 "qXfer:auxv:read", "read-aux-vector", 0);
802188a7 11858
23181151
DJ
11859 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_features],
11860 "qXfer:features:read", "target-features", 0);
11861
cfa9d6d9
DJ
11862 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_libraries],
11863 "qXfer:libraries:read", "library-info", 0);
11864
2268b414
JK
11865 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_libraries_svr4],
11866 "qXfer:libraries-svr4:read", "library-info-svr4", 0);
11867
fd79ecee
DJ
11868 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_memory_map],
11869 "qXfer:memory-map:read", "memory-map", 0);
11870
0e7f50da
UW
11871 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_spu_read],
11872 "qXfer:spu:read", "read-spu-object", 0);
11873
11874 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_spu_write],
11875 "qXfer:spu:write", "write-spu-object", 0);
11876
07e059b5
VP
11877 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_osdata],
11878 "qXfer:osdata:read", "osdata", 0);
11879
dc146f7c
VP
11880 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_threads],
11881 "qXfer:threads:read", "threads", 0);
11882
4aa995e1
PA
11883 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_siginfo_read],
11884 "qXfer:siginfo:read", "read-siginfo-object", 0);
11885
11886 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_siginfo_write],
11887 "qXfer:siginfo:write", "write-siginfo-object", 0);
11888
b3b9301e
PA
11889 add_packet_config_cmd
11890 (&remote_protocol_packets[PACKET_qXfer_traceframe_info],
11891 "qXfer:trace-frame-info:read", "traceframe-info", 0);
11892
169081d0
TG
11893 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_uib],
11894 "qXfer:uib:read", "unwind-info-block", 0);
11895
444abaca 11896 add_packet_config_cmd (&remote_protocol_packets[PACKET_qGetTLSAddr],
38691318 11897 "qGetTLSAddr", "get-thread-local-storage-address",
38691318
KB
11898 0);
11899
711e434b
PM
11900 add_packet_config_cmd (&remote_protocol_packets[PACKET_qGetTIBAddr],
11901 "qGetTIBAddr", "get-thread-information-block-address",
11902 0);
11903
40ab02ce
MS
11904 add_packet_config_cmd (&remote_protocol_packets[PACKET_bc],
11905 "bc", "reverse-continue", 0);
11906
11907 add_packet_config_cmd (&remote_protocol_packets[PACKET_bs],
11908 "bs", "reverse-step", 0);
11909
be2a5f71
DJ
11910 add_packet_config_cmd (&remote_protocol_packets[PACKET_qSupported],
11911 "qSupported", "supported-packets", 0);
11912
08388c79
DE
11913 add_packet_config_cmd (&remote_protocol_packets[PACKET_qSearch_memory],
11914 "qSearch:memory", "search-memory", 0);
11915
bd3eecc3
PA
11916 add_packet_config_cmd (&remote_protocol_packets[PACKET_qTStatus],
11917 "qTStatus", "trace-status", 0);
11918
a6b151f1
DJ
11919 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_open],
11920 "vFile:open", "hostio-open", 0);
11921
11922 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_pread],
11923 "vFile:pread", "hostio-pread", 0);
11924
11925 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_pwrite],
11926 "vFile:pwrite", "hostio-pwrite", 0);
11927
11928 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_close],
11929 "vFile:close", "hostio-close", 0);
11930
11931 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_unlink],
11932 "vFile:unlink", "hostio-unlink", 0);
11933
b9e7b9c3
UW
11934 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_readlink],
11935 "vFile:readlink", "hostio-readlink", 0);
11936
2d717e4f
DJ
11937 add_packet_config_cmd (&remote_protocol_packets[PACKET_vAttach],
11938 "vAttach", "attach", 0);
11939
11940 add_packet_config_cmd (&remote_protocol_packets[PACKET_vRun],
11941 "vRun", "run", 0);
11942
a6f3e723
SL
11943 add_packet_config_cmd (&remote_protocol_packets[PACKET_QStartNoAckMode],
11944 "QStartNoAckMode", "noack", 0);
11945
82f73884
PA
11946 add_packet_config_cmd (&remote_protocol_packets[PACKET_vKill],
11947 "vKill", "kill", 0);
11948
0b16c5cf
PA
11949 add_packet_config_cmd (&remote_protocol_packets[PACKET_qAttached],
11950 "qAttached", "query-attached", 0);
11951
782b2b07 11952 add_packet_config_cmd (&remote_protocol_packets[PACKET_ConditionalTracepoints],
3e43a32a
MS
11953 "ConditionalTracepoints",
11954 "conditional-tracepoints", 0);
3788aec7
LM
11955
11956 add_packet_config_cmd (&remote_protocol_packets[PACKET_ConditionalBreakpoints],
11957 "ConditionalBreakpoints",
11958 "conditional-breakpoints", 0);
11959
d3ce09f5
SS
11960 add_packet_config_cmd (&remote_protocol_packets[PACKET_BreakpointCommands],
11961 "BreakpointCommands",
11962 "breakpoint-commands", 0);
11963
7a697b8d
SS
11964 add_packet_config_cmd (&remote_protocol_packets[PACKET_FastTracepoints],
11965 "FastTracepoints", "fast-tracepoints", 0);
782b2b07 11966
409873ef
SS
11967 add_packet_config_cmd (&remote_protocol_packets[PACKET_TracepointSource],
11968 "TracepointSource", "TracepointSource", 0);
11969
d914c394
SS
11970 add_packet_config_cmd (&remote_protocol_packets[PACKET_QAllow],
11971 "QAllow", "allow", 0);
11972
0fb4aa4b
PA
11973 add_packet_config_cmd (&remote_protocol_packets[PACKET_StaticTracepoints],
11974 "StaticTracepoints", "static-tracepoints", 0);
11975
1e4d1764
YQ
11976 add_packet_config_cmd (&remote_protocol_packets[PACKET_InstallInTrace],
11977 "InstallInTrace", "install-in-trace", 0);
11978
0fb4aa4b
PA
11979 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_statictrace_read],
11980 "qXfer:statictrace:read", "read-sdata-object", 0);
11981
78d85199
YQ
11982 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_fdpic],
11983 "qXfer:fdpic:read", "read-fdpic-loadmap", 0);
11984
03583c20
UW
11985 add_packet_config_cmd (&remote_protocol_packets[PACKET_QDisableRandomization],
11986 "QDisableRandomization", "disable-randomization", 0);
11987
d1feda86
YQ
11988 add_packet_config_cmd (&remote_protocol_packets[PACKET_QAgent],
11989 "QAgent", "agent", 0);
11990
f6f899bf
HAQ
11991 add_packet_config_cmd (&remote_protocol_packets[PACKET_QTBuffer_size],
11992 "QTBuffer:size", "trace-buffer-size", 0);
11993
9accd112
MM
11994 add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_off],
11995 "Qbtrace:off", "disable-btrace", 0);
11996
11997 add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_bts],
11998 "Qbtrace:bts", "enable-btrace", 0);
11999
12000 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_btrace],
12001 "qXfer:btrace", "read-btrace", 0);
12002
37a105a1
DJ
12003 /* Keep the old ``set remote Z-packet ...'' working. Each individual
12004 Z sub-packet has its own set and show commands, but users may
12005 have sets to this variable in their .gdbinit files (or in their
12006 documentation). */
e9e68a56 12007 add_setshow_auto_boolean_cmd ("Z-packet", class_obscure,
7915a72c
AC
12008 &remote_Z_packet_detect, _("\
12009Set use of remote protocol `Z' packets"), _("\
12010Show use of remote protocol `Z' packets "), _("\
3b64bf98 12011When set, GDB will attempt to use the remote breakpoint and watchpoint\n\
7915a72c 12012packets."),
e9e68a56 12013 set_remote_protocol_Z_packet_cmd,
3e43a32a
MS
12014 show_remote_protocol_Z_packet_cmd,
12015 /* FIXME: i18n: Use of remote protocol
12016 `Z' packets is %s. */
e9e68a56 12017 &remote_set_cmdlist, &remote_show_cmdlist);
449092f6 12018
a6b151f1
DJ
12019 add_prefix_cmd ("remote", class_files, remote_command, _("\
12020Manipulate files on the remote system\n\
12021Transfer files to and from the remote target system."),
12022 &remote_cmdlist, "remote ",
12023 0 /* allow-unknown */, &cmdlist);
12024
12025 add_cmd ("put", class_files, remote_put_command,
12026 _("Copy a local file to the remote system."),
12027 &remote_cmdlist);
12028
12029 add_cmd ("get", class_files, remote_get_command,
12030 _("Copy a remote file to the local system."),
12031 &remote_cmdlist);
12032
12033 add_cmd ("delete", class_files, remote_delete_command,
12034 _("Delete a remote file."),
12035 &remote_cmdlist);
12036
2d717e4f
DJ
12037 remote_exec_file = xstrdup ("");
12038 add_setshow_string_noescape_cmd ("exec-file", class_files,
12039 &remote_exec_file, _("\
12040Set the remote pathname for \"run\""), _("\
12041Show the remote pathname for \"run\""), NULL, NULL, NULL,
12042 &remote_set_cmdlist, &remote_show_cmdlist);
12043
449092f6
CV
12044 /* Eventually initialize fileio. See fileio.c */
12045 initialize_remote_fileio (remote_set_cmdlist, remote_show_cmdlist);
79d7f229
PA
12046
12047 /* Take advantage of the fact that the LWP field is not used, to tag
12048 special ptids with it set to != 0. */
82f73884
PA
12049 magic_null_ptid = ptid_build (42000, 1, -1);
12050 not_sent_ptid = ptid_build (42000, 1, -2);
12051 any_thread_ptid = ptid_build (42000, 1, 0);
35b1e5cc
SS
12052
12053 target_buf_size = 2048;
12054 target_buf = xmalloc (target_buf_size);
c906108c 12055}
10760264 12056
This page took 2.289159 seconds and 4 git commands to generate.