gas/
[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
0876f84a 7036/* Read a single character from the remote end. */
c906108c
SS
7037
7038static int
fba45db2 7039readchar (int timeout)
c906108c
SS
7040{
7041 int ch;
7042
2cd58942 7043 ch = serial_readchar (remote_desc, timeout);
c906108c 7044
2acceee2 7045 if (ch >= 0)
0876f84a 7046 return ch;
2acceee2
JM
7047
7048 switch ((enum serial_rc) ch)
c906108c
SS
7049 {
7050 case SERIAL_EOF:
78a095c3 7051 remote_unpush_target ();
598d3636 7052 throw_error (TARGET_CLOSE_ERROR, _("Remote connection closed"));
2acceee2 7053 /* no return */
c906108c 7054 case SERIAL_ERROR:
78a095c3 7055 remote_unpush_target ();
598d3636
JK
7056 throw_perror_with_name (TARGET_CLOSE_ERROR,
7057 _("Remote communication error. "
7058 "Target disconnected."));
2acceee2 7059 /* no return */
c906108c 7060 case SERIAL_TIMEOUT:
2acceee2 7061 break;
c906108c 7062 }
2acceee2 7063 return ch;
c906108c
SS
7064}
7065
c33e31fd
PA
7066/* Wrapper for serial_write that closes the target and throws if
7067 writing fails. */
7068
7069static void
7070remote_serial_write (const char *str, int len)
7071{
7072 if (serial_write (remote_desc, str, len))
7073 {
7074 remote_unpush_target ();
7075 throw_perror_with_name (TARGET_CLOSE_ERROR,
7076 _("Remote communication error. "
7077 "Target disconnected."));
7078 }
7079}
7080
6d820c5c
DJ
7081/* Send the command in *BUF to the remote machine, and read the reply
7082 into *BUF. Report an error if we get an error reply. Resize
7083 *BUF using xrealloc if necessary to hold the result, and update
7084 *SIZEOF_BUF. */
c906108c
SS
7085
7086static void
6d820c5c
DJ
7087remote_send (char **buf,
7088 long *sizeof_buf)
c906108c 7089{
6d820c5c 7090 putpkt (*buf);
c2d11a7d 7091 getpkt (buf, sizeof_buf, 0);
c906108c 7092
6d820c5c
DJ
7093 if ((*buf)[0] == 'E')
7094 error (_("Remote failure reply: %s"), *buf);
c906108c
SS
7095}
7096
6e5abd65
PA
7097/* Return a pointer to an xmalloc'ed string representing an escaped
7098 version of BUF, of len N. E.g. \n is converted to \\n, \t to \\t,
7099 etc. The caller is responsible for releasing the returned
7100 memory. */
7101
7102static char *
7103escape_buffer (const char *buf, int n)
7104{
7105 struct cleanup *old_chain;
7106 struct ui_file *stb;
7107 char *str;
6e5abd65
PA
7108
7109 stb = mem_fileopen ();
7110 old_chain = make_cleanup_ui_file_delete (stb);
7111
7112 fputstrn_unfiltered (buf, n, 0, stb);
759ef836 7113 str = ui_file_xstrdup (stb, NULL);
6e5abd65
PA
7114 do_cleanups (old_chain);
7115 return str;
7116}
7117
c906108c
SS
7118/* Display a null-terminated packet on stdout, for debugging, using C
7119 string notation. */
7120
7121static void
fba45db2 7122print_packet (char *buf)
c906108c
SS
7123{
7124 puts_filtered ("\"");
43e526b9 7125 fputstr_filtered (buf, '"', gdb_stdout);
c906108c
SS
7126 puts_filtered ("\"");
7127}
7128
7129int
fba45db2 7130putpkt (char *buf)
c906108c
SS
7131{
7132 return putpkt_binary (buf, strlen (buf));
7133}
7134
7135/* Send a packet to the remote machine, with error checking. The data
23860348 7136 of the packet is in BUF. The string in BUF can be at most
ea9c271d 7137 get_remote_packet_size () - 5 to account for the $, # and checksum,
23860348
MS
7138 and for a possible /0 if we are debugging (remote_debug) and want
7139 to print the sent packet as a string. */
c906108c
SS
7140
7141static int
fba45db2 7142putpkt_binary (char *buf, int cnt)
c906108c 7143{
2d717e4f 7144 struct remote_state *rs = get_remote_state ();
c906108c
SS
7145 int i;
7146 unsigned char csum = 0;
11cf8741 7147 char *buf2 = alloca (cnt + 6);
085dd6e6 7148
c906108c
SS
7149 int ch;
7150 int tcount = 0;
7151 char *p;
dd61ec5c 7152 char *message;
c906108c 7153
e24a49d8
PA
7154 /* Catch cases like trying to read memory or listing threads while
7155 we're waiting for a stop reply. The remote server wouldn't be
7156 ready to handle this request, so we'd hang and timeout. We don't
7157 have to worry about this in synchronous mode, because in that
7158 case it's not possible to issue a command while the target is
74531fed
PA
7159 running. This is not a problem in non-stop mode, because in that
7160 case, the stub is always ready to process serial input. */
7161 if (!non_stop && target_can_async_p () && rs->waiting_for_stop_reply)
e24a49d8
PA
7162 error (_("Cannot execute this command while the target is running."));
7163
2d717e4f
DJ
7164 /* We're sending out a new packet. Make sure we don't look at a
7165 stale cached response. */
7166 rs->cached_wait_status = 0;
7167
c906108c
SS
7168 /* Copy the packet into buffer BUF2, encapsulating it
7169 and giving it a checksum. */
7170
c906108c
SS
7171 p = buf2;
7172 *p++ = '$';
7173
7174 for (i = 0; i < cnt; i++)
7175 {
7176 csum += buf[i];
7177 *p++ = buf[i];
7178 }
7179 *p++ = '#';
7180 *p++ = tohex ((csum >> 4) & 0xf);
7181 *p++ = tohex (csum & 0xf);
7182
7183 /* Send it over and over until we get a positive ack. */
7184
7185 while (1)
7186 {
7187 int started_error_output = 0;
7188
7189 if (remote_debug)
7190 {
6e5abd65
PA
7191 struct cleanup *old_chain;
7192 char *str;
7193
c906108c 7194 *p = '\0';
6e5abd65
PA
7195 str = escape_buffer (buf2, p - buf2);
7196 old_chain = make_cleanup (xfree, str);
7197 fprintf_unfiltered (gdb_stdlog, "Sending packet: %s...", str);
0f71a2f6 7198 gdb_flush (gdb_stdlog);
6e5abd65 7199 do_cleanups (old_chain);
c906108c 7200 }
c33e31fd 7201 remote_serial_write (buf2, p - buf2);
c906108c 7202
a6f3e723
SL
7203 /* If this is a no acks version of the remote protocol, send the
7204 packet and move on. */
7205 if (rs->noack_mode)
7206 break;
7207
74531fed
PA
7208 /* Read until either a timeout occurs (-2) or '+' is read.
7209 Handle any notification that arrives in the mean time. */
c906108c
SS
7210 while (1)
7211 {
7212 ch = readchar (remote_timeout);
7213
c5aa993b 7214 if (remote_debug)
c906108c
SS
7215 {
7216 switch (ch)
7217 {
7218 case '+':
1216fa2c 7219 case '-':
c906108c
SS
7220 case SERIAL_TIMEOUT:
7221 case '$':
74531fed 7222 case '%':
c906108c
SS
7223 if (started_error_output)
7224 {
7225 putchar_unfiltered ('\n');
7226 started_error_output = 0;
7227 }
7228 }
7229 }
7230
7231 switch (ch)
7232 {
7233 case '+':
7234 if (remote_debug)
0f71a2f6 7235 fprintf_unfiltered (gdb_stdlog, "Ack\n");
c906108c 7236 return 1;
1216fa2c
AC
7237 case '-':
7238 if (remote_debug)
7239 fprintf_unfiltered (gdb_stdlog, "Nak\n");
a17d146e 7240 /* FALLTHROUGH */
c906108c 7241 case SERIAL_TIMEOUT:
c5aa993b 7242 tcount++;
c906108c
SS
7243 if (tcount > 3)
7244 return 0;
23860348 7245 break; /* Retransmit buffer. */
c906108c
SS
7246 case '$':
7247 {
40e3f985 7248 if (remote_debug)
2bc416ba 7249 fprintf_unfiltered (gdb_stdlog,
23860348 7250 "Packet instead of Ack, ignoring it\n");
d6f7abdf
AC
7251 /* It's probably an old response sent because an ACK
7252 was lost. Gobble up the packet and ack it so it
7253 doesn't get retransmitted when we resend this
7254 packet. */
6d820c5c 7255 skip_frame ();
c33e31fd 7256 remote_serial_write ("+", 1);
23860348 7257 continue; /* Now, go look for +. */
c906108c 7258 }
74531fed
PA
7259
7260 case '%':
7261 {
7262 int val;
7263
7264 /* If we got a notification, handle it, and go back to looking
7265 for an ack. */
7266 /* We've found the start of a notification. Now
7267 collect the data. */
7268 val = read_frame (&rs->buf, &rs->buf_size);
7269 if (val >= 0)
7270 {
7271 if (remote_debug)
7272 {
6e5abd65
PA
7273 struct cleanup *old_chain;
7274 char *str;
7275
7276 str = escape_buffer (rs->buf, val);
7277 old_chain = make_cleanup (xfree, str);
7278 fprintf_unfiltered (gdb_stdlog,
7279 " Notification received: %s\n",
7280 str);
7281 do_cleanups (old_chain);
74531fed 7282 }
8128fd8e 7283 handle_notification (rs->buf);
74531fed
PA
7284 /* We're in sync now, rewait for the ack. */
7285 tcount = 0;
7286 }
7287 else
7288 {
7289 if (remote_debug)
7290 {
7291 if (!started_error_output)
7292 {
7293 started_error_output = 1;
7294 fprintf_unfiltered (gdb_stdlog, "putpkt: Junk: ");
7295 }
7296 fputc_unfiltered (ch & 0177, gdb_stdlog);
7297 fprintf_unfiltered (gdb_stdlog, "%s", rs->buf);
7298 }
7299 }
7300 continue;
7301 }
7302 /* fall-through */
c906108c
SS
7303 default:
7304 if (remote_debug)
7305 {
7306 if (!started_error_output)
7307 {
7308 started_error_output = 1;
0f71a2f6 7309 fprintf_unfiltered (gdb_stdlog, "putpkt: Junk: ");
c906108c 7310 }
0f71a2f6 7311 fputc_unfiltered (ch & 0177, gdb_stdlog);
c906108c
SS
7312 }
7313 continue;
7314 }
23860348 7315 break; /* Here to retransmit. */
c906108c
SS
7316 }
7317
7318#if 0
7319 /* This is wrong. If doing a long backtrace, the user should be
c5aa993b
JM
7320 able to get out next time we call QUIT, without anything as
7321 violent as interrupt_query. If we want to provide a way out of
7322 here without getting to the next QUIT, it should be based on
7323 hitting ^C twice as in remote_wait. */
c906108c
SS
7324 if (quit_flag)
7325 {
7326 quit_flag = 0;
7327 interrupt_query ();
7328 }
7329#endif
7330 }
a6f3e723 7331 return 0;
c906108c
SS
7332}
7333
6d820c5c
DJ
7334/* Come here after finding the start of a frame when we expected an
7335 ack. Do our best to discard the rest of this packet. */
7336
7337static void
7338skip_frame (void)
7339{
7340 int c;
7341
7342 while (1)
7343 {
7344 c = readchar (remote_timeout);
7345 switch (c)
7346 {
7347 case SERIAL_TIMEOUT:
7348 /* Nothing we can do. */
7349 return;
7350 case '#':
7351 /* Discard the two bytes of checksum and stop. */
7352 c = readchar (remote_timeout);
7353 if (c >= 0)
7354 c = readchar (remote_timeout);
7355
7356 return;
7357 case '*': /* Run length encoding. */
7358 /* Discard the repeat count. */
7359 c = readchar (remote_timeout);
7360 if (c < 0)
7361 return;
7362 break;
7363 default:
7364 /* A regular character. */
7365 break;
7366 }
7367 }
7368}
7369
c906108c 7370/* Come here after finding the start of the frame. Collect the rest
6d820c5c
DJ
7371 into *BUF, verifying the checksum, length, and handling run-length
7372 compression. NUL terminate the buffer. If there is not enough room,
7373 expand *BUF using xrealloc.
c906108c 7374
c2d11a7d
JM
7375 Returns -1 on error, number of characters in buffer (ignoring the
7376 trailing NULL) on success. (could be extended to return one of the
23860348 7377 SERIAL status indications). */
c2d11a7d
JM
7378
7379static long
6d820c5c
DJ
7380read_frame (char **buf_p,
7381 long *sizeof_buf)
c906108c
SS
7382{
7383 unsigned char csum;
c2d11a7d 7384 long bc;
c906108c 7385 int c;
6d820c5c 7386 char *buf = *buf_p;
a6f3e723 7387 struct remote_state *rs = get_remote_state ();
c906108c
SS
7388
7389 csum = 0;
c2d11a7d 7390 bc = 0;
c906108c
SS
7391
7392 while (1)
7393 {
7394 c = readchar (remote_timeout);
c906108c
SS
7395 switch (c)
7396 {
7397 case SERIAL_TIMEOUT:
7398 if (remote_debug)
0f71a2f6 7399 fputs_filtered ("Timeout in mid-packet, retrying\n", gdb_stdlog);
c2d11a7d 7400 return -1;
c906108c
SS
7401 case '$':
7402 if (remote_debug)
0f71a2f6
JM
7403 fputs_filtered ("Saw new packet start in middle of old one\n",
7404 gdb_stdlog);
23860348 7405 return -1; /* Start a new packet, count retries. */
c906108c
SS
7406 case '#':
7407 {
7408 unsigned char pktcsum;
e1b09194
AC
7409 int check_0 = 0;
7410 int check_1 = 0;
c906108c 7411
c2d11a7d 7412 buf[bc] = '\0';
c906108c 7413
e1b09194
AC
7414 check_0 = readchar (remote_timeout);
7415 if (check_0 >= 0)
7416 check_1 = readchar (remote_timeout);
802188a7 7417
e1b09194
AC
7418 if (check_0 == SERIAL_TIMEOUT || check_1 == SERIAL_TIMEOUT)
7419 {
7420 if (remote_debug)
2bc416ba 7421 fputs_filtered ("Timeout in checksum, retrying\n",
23860348 7422 gdb_stdlog);
e1b09194
AC
7423 return -1;
7424 }
7425 else if (check_0 < 0 || check_1 < 0)
40e3f985
FN
7426 {
7427 if (remote_debug)
2bc416ba 7428 fputs_filtered ("Communication error in checksum\n",
23860348 7429 gdb_stdlog);
40e3f985
FN
7430 return -1;
7431 }
c906108c 7432
a6f3e723
SL
7433 /* Don't recompute the checksum; with no ack packets we
7434 don't have any way to indicate a packet retransmission
7435 is necessary. */
7436 if (rs->noack_mode)
7437 return bc;
7438
e1b09194 7439 pktcsum = (fromhex (check_0) << 4) | fromhex (check_1);
c906108c 7440 if (csum == pktcsum)
c2d11a7d 7441 return bc;
c906108c 7442
c5aa993b 7443 if (remote_debug)
c906108c 7444 {
6e5abd65
PA
7445 struct cleanup *old_chain;
7446 char *str;
7447
7448 str = escape_buffer (buf, bc);
7449 old_chain = make_cleanup (xfree, str);
7450 fprintf_unfiltered (gdb_stdlog,
3e43a32a
MS
7451 "Bad checksum, sentsum=0x%x, "
7452 "csum=0x%x, buf=%s\n",
6e5abd65
PA
7453 pktcsum, csum, str);
7454 do_cleanups (old_chain);
c906108c 7455 }
c2d11a7d 7456 /* Number of characters in buffer ignoring trailing
23860348 7457 NULL. */
c2d11a7d 7458 return -1;
c906108c 7459 }
23860348 7460 case '*': /* Run length encoding. */
c2c6d25f
JM
7461 {
7462 int repeat;
c906108c 7463
a744cf53 7464 csum += c;
b4501125
AC
7465 c = readchar (remote_timeout);
7466 csum += c;
23860348 7467 repeat = c - ' ' + 3; /* Compute repeat count. */
c906108c 7468
23860348 7469 /* The character before ``*'' is repeated. */
c2d11a7d 7470
6d820c5c 7471 if (repeat > 0 && repeat <= 255 && bc > 0)
c2c6d25f 7472 {
6d820c5c
DJ
7473 if (bc + repeat - 1 >= *sizeof_buf - 1)
7474 {
7475 /* Make some more room in the buffer. */
7476 *sizeof_buf += repeat;
7477 *buf_p = xrealloc (*buf_p, *sizeof_buf);
7478 buf = *buf_p;
7479 }
7480
c2d11a7d
JM
7481 memset (&buf[bc], buf[bc - 1], repeat);
7482 bc += repeat;
c2c6d25f
JM
7483 continue;
7484 }
7485
c2d11a7d 7486 buf[bc] = '\0';
6d820c5c 7487 printf_filtered (_("Invalid run length encoding: %s\n"), buf);
c2d11a7d 7488 return -1;
c2c6d25f 7489 }
c906108c 7490 default:
6d820c5c 7491 if (bc >= *sizeof_buf - 1)
c906108c 7492 {
6d820c5c
DJ
7493 /* Make some more room in the buffer. */
7494 *sizeof_buf *= 2;
7495 *buf_p = xrealloc (*buf_p, *sizeof_buf);
7496 buf = *buf_p;
c906108c
SS
7497 }
7498
6d820c5c
DJ
7499 buf[bc++] = c;
7500 csum += c;
7501 continue;
c906108c
SS
7502 }
7503 }
7504}
7505
7506/* Read a packet from the remote machine, with error checking, and
6d820c5c
DJ
7507 store it in *BUF. Resize *BUF using xrealloc if necessary to hold
7508 the result, and update *SIZEOF_BUF. If FOREVER, wait forever
7509 rather than timing out; this is used (in synchronous mode) to wait
7510 for a target that is is executing user code to stop. */
d9fcf2fb
JM
7511/* FIXME: ezannoni 2000-02-01 this wrapper is necessary so that we
7512 don't have to change all the calls to getpkt to deal with the
7513 return value, because at the moment I don't know what the right
23860348 7514 thing to do it for those. */
c906108c 7515void
6d820c5c
DJ
7516getpkt (char **buf,
7517 long *sizeof_buf,
c2d11a7d 7518 int forever)
d9fcf2fb
JM
7519{
7520 int timed_out;
7521
7522 timed_out = getpkt_sane (buf, sizeof_buf, forever);
7523}
7524
7525
7526/* Read a packet from the remote machine, with error checking, and
6d820c5c
DJ
7527 store it in *BUF. Resize *BUF using xrealloc if necessary to hold
7528 the result, and update *SIZEOF_BUF. If FOREVER, wait forever
7529 rather than timing out; this is used (in synchronous mode) to wait
7530 for a target that is is executing user code to stop. If FOREVER ==
7531 0, this function is allowed to time out gracefully and return an
74531fed
PA
7532 indication of this to the caller. Otherwise return the number of
7533 bytes read. If EXPECTING_NOTIF, consider receiving a notification
fee9eda9
YQ
7534 enough reason to return to the caller. *IS_NOTIF is an output
7535 boolean that indicates whether *BUF holds a notification or not
7536 (a regular packet). */
74531fed 7537
3172dc30 7538static int
74531fed 7539getpkt_or_notif_sane_1 (char **buf, long *sizeof_buf, int forever,
fee9eda9 7540 int expecting_notif, int *is_notif)
c906108c 7541{
2d717e4f 7542 struct remote_state *rs = get_remote_state ();
c906108c
SS
7543 int c;
7544 int tries;
7545 int timeout;
df4b58fe 7546 int val = -1;
c906108c 7547
2d717e4f
DJ
7548 /* We're reading a new response. Make sure we don't look at a
7549 previously cached response. */
7550 rs->cached_wait_status = 0;
7551
6d820c5c 7552 strcpy (*buf, "timeout");
c906108c
SS
7553
7554 if (forever)
74531fed
PA
7555 timeout = watchdog > 0 ? watchdog : -1;
7556 else if (expecting_notif)
7557 timeout = 0; /* There should already be a char in the buffer. If
7558 not, bail out. */
c906108c
SS
7559 else
7560 timeout = remote_timeout;
7561
7562#define MAX_TRIES 3
7563
74531fed
PA
7564 /* Process any number of notifications, and then return when
7565 we get a packet. */
7566 for (;;)
c906108c 7567 {
74531fed
PA
7568 /* If we get a timeout or bad checksm, retry up to MAX_TRIES
7569 times. */
7570 for (tries = 1; tries <= MAX_TRIES; tries++)
c906108c 7571 {
74531fed
PA
7572 /* This can loop forever if the remote side sends us
7573 characters continuously, but if it pauses, we'll get
7574 SERIAL_TIMEOUT from readchar because of timeout. Then
7575 we'll count that as a retry.
7576
7577 Note that even when forever is set, we will only wait
7578 forever prior to the start of a packet. After that, we
7579 expect characters to arrive at a brisk pace. They should
7580 show up within remote_timeout intervals. */
7581 do
7582 c = readchar (timeout);
7583 while (c != SERIAL_TIMEOUT && c != '$' && c != '%');
c906108c
SS
7584
7585 if (c == SERIAL_TIMEOUT)
7586 {
74531fed
PA
7587 if (expecting_notif)
7588 return -1; /* Don't complain, it's normal to not get
7589 anything in this case. */
7590
23860348 7591 if (forever) /* Watchdog went off? Kill the target. */
c906108c 7592 {
2acceee2 7593 QUIT;
78a095c3 7594 remote_unpush_target ();
598d3636
JK
7595 throw_error (TARGET_CLOSE_ERROR,
7596 _("Watchdog timeout has expired. "
7597 "Target detached."));
c906108c 7598 }
c906108c 7599 if (remote_debug)
0f71a2f6 7600 fputs_filtered ("Timed out.\n", gdb_stdlog);
c906108c 7601 }
74531fed
PA
7602 else
7603 {
7604 /* We've found the start of a packet or notification.
7605 Now collect the data. */
7606 val = read_frame (buf, sizeof_buf);
7607 if (val >= 0)
7608 break;
7609 }
7610
c33e31fd 7611 remote_serial_write ("-", 1);
c906108c 7612 }
c906108c 7613
74531fed
PA
7614 if (tries > MAX_TRIES)
7615 {
7616 /* We have tried hard enough, and just can't receive the
7617 packet/notification. Give up. */
7618 printf_unfiltered (_("Ignoring packet error, continuing...\n"));
c906108c 7619
74531fed
PA
7620 /* Skip the ack char if we're in no-ack mode. */
7621 if (!rs->noack_mode)
c33e31fd 7622 remote_serial_write ("+", 1);
74531fed
PA
7623 return -1;
7624 }
c906108c 7625
74531fed
PA
7626 /* If we got an ordinary packet, return that to our caller. */
7627 if (c == '$')
c906108c
SS
7628 {
7629 if (remote_debug)
43e526b9 7630 {
6e5abd65
PA
7631 struct cleanup *old_chain;
7632 char *str;
7633
7634 str = escape_buffer (*buf, val);
7635 old_chain = make_cleanup (xfree, str);
7636 fprintf_unfiltered (gdb_stdlog, "Packet received: %s\n", str);
7637 do_cleanups (old_chain);
43e526b9 7638 }
a6f3e723
SL
7639
7640 /* Skip the ack char if we're in no-ack mode. */
7641 if (!rs->noack_mode)
c33e31fd 7642 remote_serial_write ("+", 1);
fee9eda9
YQ
7643 if (is_notif != NULL)
7644 *is_notif = 0;
0876f84a 7645 return val;
c906108c
SS
7646 }
7647
74531fed
PA
7648 /* If we got a notification, handle it, and go back to looking
7649 for a packet. */
7650 else
7651 {
7652 gdb_assert (c == '%');
7653
7654 if (remote_debug)
7655 {
6e5abd65
PA
7656 struct cleanup *old_chain;
7657 char *str;
7658
7659 str = escape_buffer (*buf, val);
7660 old_chain = make_cleanup (xfree, str);
7661 fprintf_unfiltered (gdb_stdlog,
7662 " Notification received: %s\n",
7663 str);
7664 do_cleanups (old_chain);
74531fed 7665 }
fee9eda9
YQ
7666 if (is_notif != NULL)
7667 *is_notif = 1;
c906108c 7668
8128fd8e 7669 handle_notification (*buf);
c906108c 7670
74531fed 7671 /* Notifications require no acknowledgement. */
a6f3e723 7672
74531fed 7673 if (expecting_notif)
fee9eda9 7674 return val;
74531fed
PA
7675 }
7676 }
7677}
7678
7679static int
7680getpkt_sane (char **buf, long *sizeof_buf, int forever)
7681{
fee9eda9 7682 return getpkt_or_notif_sane_1 (buf, sizeof_buf, forever, 0, NULL);
74531fed
PA
7683}
7684
7685static int
fee9eda9
YQ
7686getpkt_or_notif_sane (char **buf, long *sizeof_buf, int forever,
7687 int *is_notif)
74531fed 7688{
fee9eda9
YQ
7689 return getpkt_or_notif_sane_1 (buf, sizeof_buf, forever, 1,
7690 is_notif);
c906108c 7691}
74531fed 7692
c906108c 7693\f
732f3f12
TT
7694/* A helper function that just calls putpkt; for type correctness. */
7695
7696static int
7697putpkt_for_catch_errors (void *arg)
7698{
7699 return putpkt (arg);
7700}
7701
c906108c 7702static void
7d85a9c0 7703remote_kill (struct target_ops *ops)
43ff13b4 7704{
23860348
MS
7705 /* Use catch_errors so the user can quit from gdb even when we
7706 aren't on speaking terms with the remote system. */
732f3f12 7707 catch_errors (putpkt_for_catch_errors, "k", "", RETURN_MASK_ERROR);
43ff13b4
JM
7708
7709 /* Don't wait for it to die. I'm not really sure it matters whether
7710 we do or not. For the existing stubs, kill is a noop. */
7711 target_mourn_inferior ();
7712}
7713
82f73884
PA
7714static int
7715remote_vkill (int pid, struct remote_state *rs)
7716{
7717 if (remote_protocol_packets[PACKET_vKill].support == PACKET_DISABLE)
7718 return -1;
7719
7720 /* Tell the remote target to detach. */
bba74b36 7721 xsnprintf (rs->buf, get_remote_packet_size (), "vKill;%x", pid);
82f73884
PA
7722 putpkt (rs->buf);
7723 getpkt (&rs->buf, &rs->buf_size, 0);
7724
7725 if (packet_ok (rs->buf,
7726 &remote_protocol_packets[PACKET_vKill]) == PACKET_OK)
7727 return 0;
7728 else if (remote_protocol_packets[PACKET_vKill].support == PACKET_DISABLE)
7729 return -1;
7730 else
7731 return 1;
7732}
7733
7734static void
7d85a9c0 7735extended_remote_kill (struct target_ops *ops)
82f73884
PA
7736{
7737 int res;
7738 int pid = ptid_get_pid (inferior_ptid);
7739 struct remote_state *rs = get_remote_state ();
7740
7741 res = remote_vkill (pid, rs);
901f9912 7742 if (res == -1 && !(rs->extended && remote_multi_process_p (rs)))
82f73884
PA
7743 {
7744 /* Don't try 'k' on a multi-process aware stub -- it has no way
7745 to specify the pid. */
7746
7747 putpkt ("k");
7748#if 0
7749 getpkt (&rs->buf, &rs->buf_size, 0);
7750 if (rs->buf[0] != 'O' || rs->buf[0] != 'K')
7751 res = 1;
7752#else
7753 /* Don't wait for it to die. I'm not really sure it matters whether
7754 we do or not. For the existing stubs, kill is a noop. */
7755 res = 0;
7756#endif
7757 }
7758
7759 if (res != 0)
7760 error (_("Can't kill process"));
7761
82f73884
PA
7762 target_mourn_inferior ();
7763}
7764
c906108c 7765static void
136d6dae 7766remote_mourn (struct target_ops *ops)
c906108c 7767{
136d6dae 7768 remote_mourn_1 (ops);
c906108c
SS
7769}
7770
c906108c
SS
7771/* Worker function for remote_mourn. */
7772static void
fba45db2 7773remote_mourn_1 (struct target_ops *target)
c906108c
SS
7774{
7775 unpush_target (target);
ce5ce7ed 7776
8a2492ee
PA
7777 /* remote_close takes care of doing most of the clean up. */
7778 generic_mourn_inferior ();
c906108c
SS
7779}
7780
2d717e4f
DJ
7781static void
7782extended_remote_mourn_1 (struct target_ops *target)
7783{
7784 struct remote_state *rs = get_remote_state ();
c906108c 7785
e24a49d8
PA
7786 /* In case we got here due to an error, but we're going to stay
7787 connected. */
7788 rs->waiting_for_stop_reply = 0;
7789
dc1981d7
PA
7790 /* If the current general thread belonged to the process we just
7791 detached from or has exited, the remote side current general
7792 thread becomes undefined. Considering a case like this:
7793
7794 - We just got here due to a detach.
7795 - The process that we're detaching from happens to immediately
7796 report a global breakpoint being hit in non-stop mode, in the
7797 same thread we had selected before.
7798 - GDB attaches to this process again.
7799 - This event happens to be the next event we handle.
7800
7801 GDB would consider that the current general thread didn't need to
7802 be set on the stub side (with Hg), since for all it knew,
7803 GENERAL_THREAD hadn't changed.
7804
7805 Notice that although in all-stop mode, the remote server always
7806 sets the current thread to the thread reporting the stop event,
7807 that doesn't happen in non-stop mode; in non-stop, the stub *must
7808 not* change the current thread when reporting a breakpoint hit,
7809 due to the decoupling of event reporting and event handling.
7810
7811 To keep things simple, we always invalidate our notion of the
7812 current thread. */
7813 record_currthread (minus_one_ptid);
7814
2d717e4f
DJ
7815 /* Unlike "target remote", we do not want to unpush the target; then
7816 the next time the user says "run", we won't be connected. */
7817
48aa3c27
PA
7818 /* Call common code to mark the inferior as not running. */
7819 generic_mourn_inferior ();
7820
d729566a 7821 if (!have_inferiors ())
2d717e4f 7822 {
82f73884
PA
7823 if (!remote_multi_process_p (rs))
7824 {
7825 /* Check whether the target is running now - some remote stubs
7826 automatically restart after kill. */
7827 putpkt ("?");
7828 getpkt (&rs->buf, &rs->buf_size, 0);
7829
7830 if (rs->buf[0] == 'S' || rs->buf[0] == 'T')
7831 {
3e43a32a
MS
7832 /* Assume that the target has been restarted. Set
7833 inferior_ptid so that bits of core GDB realizes
7834 there's something here, e.g., so that the user can
7835 say "kill" again. */
82f73884
PA
7836 inferior_ptid = magic_null_ptid;
7837 }
82f73884 7838 }
2d717e4f
DJ
7839 }
7840}
c906108c
SS
7841
7842static void
136d6dae 7843extended_remote_mourn (struct target_ops *ops)
c906108c 7844{
136d6dae 7845 extended_remote_mourn_1 (ops);
2d717e4f 7846}
c906108c 7847
03583c20
UW
7848static int
7849extended_remote_supports_disable_randomization (void)
7850{
7851 return (remote_protocol_packets[PACKET_QDisableRandomization].support
7852 == PACKET_ENABLE);
7853}
7854
7855static void
7856extended_remote_disable_randomization (int val)
7857{
7858 struct remote_state *rs = get_remote_state ();
7859 char *reply;
7860
bba74b36
YQ
7861 xsnprintf (rs->buf, get_remote_packet_size (), "QDisableRandomization:%x",
7862 val);
03583c20
UW
7863 putpkt (rs->buf);
7864 reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
7865 if (*reply == '\0')
7866 error (_("Target does not support QDisableRandomization."));
7867 if (strcmp (reply, "OK") != 0)
7868 error (_("Bogus QDisableRandomization reply from target: %s"), reply);
7869}
7870
2d717e4f
DJ
7871static int
7872extended_remote_run (char *args)
7873{
7874 struct remote_state *rs = get_remote_state ();
2d717e4f 7875 int len;
c906108c 7876
2d717e4f
DJ
7877 /* If the user has disabled vRun support, or we have detected that
7878 support is not available, do not try it. */
7879 if (remote_protocol_packets[PACKET_vRun].support == PACKET_DISABLE)
7880 return -1;
424163ea 7881
2d717e4f
DJ
7882 strcpy (rs->buf, "vRun;");
7883 len = strlen (rs->buf);
c906108c 7884
2d717e4f
DJ
7885 if (strlen (remote_exec_file) * 2 + len >= get_remote_packet_size ())
7886 error (_("Remote file name too long for run packet"));
7887 len += 2 * bin2hex ((gdb_byte *) remote_exec_file, rs->buf + len, 0);
7888
d1a41061 7889 gdb_assert (args != NULL);
2d717e4f
DJ
7890 if (*args)
7891 {
7892 struct cleanup *back_to;
7893 int i;
7894 char **argv;
7895
d1a41061 7896 argv = gdb_buildargv (args);
2d717e4f
DJ
7897 back_to = make_cleanup ((void (*) (void *)) freeargv, argv);
7898 for (i = 0; argv[i] != NULL; i++)
7899 {
7900 if (strlen (argv[i]) * 2 + 1 + len >= get_remote_packet_size ())
7901 error (_("Argument list too long for run packet"));
7902 rs->buf[len++] = ';';
7903 len += 2 * bin2hex ((gdb_byte *) argv[i], rs->buf + len, 0);
7904 }
7905 do_cleanups (back_to);
7906 }
7907
7908 rs->buf[len++] = '\0';
7909
7910 putpkt (rs->buf);
7911 getpkt (&rs->buf, &rs->buf_size, 0);
7912
7913 if (packet_ok (rs->buf, &remote_protocol_packets[PACKET_vRun]) == PACKET_OK)
7914 {
3405876a 7915 /* We have a wait response. All is well. */
2d717e4f
DJ
7916 return 0;
7917 }
7918 else if (remote_protocol_packets[PACKET_vRun].support == PACKET_DISABLE)
7919 /* It wasn't disabled before, but it is now. */
7920 return -1;
7921 else
7922 {
7923 if (remote_exec_file[0] == '\0')
7924 error (_("Running the default executable on the remote target failed; "
7925 "try \"set remote exec-file\"?"));
7926 else
7927 error (_("Running \"%s\" on the remote target failed"),
7928 remote_exec_file);
7929 }
c906108c
SS
7930}
7931
2d717e4f
DJ
7932/* In the extended protocol we want to be able to do things like
7933 "run" and have them basically work as expected. So we need
7934 a special create_inferior function. We support changing the
7935 executable file and the command line arguments, but not the
7936 environment. */
7937
43ff13b4 7938static void
2d717e4f 7939extended_remote_create_inferior_1 (char *exec_file, char *args,
75c99385 7940 char **env, int from_tty)
43ff13b4 7941{
3405876a
PA
7942 int run_worked;
7943 char *stop_reply;
7944 struct remote_state *rs = get_remote_state ();
7945
43ff13b4 7946 /* If running asynchronously, register the target file descriptor
23860348 7947 with the event loop. */
75c99385 7948 if (target_can_async_p ())
2acceee2 7949 target_async (inferior_event_handler, 0);
43ff13b4 7950
03583c20
UW
7951 /* Disable address space randomization if requested (and supported). */
7952 if (extended_remote_supports_disable_randomization ())
7953 extended_remote_disable_randomization (disable_randomization);
7954
43ff13b4 7955 /* Now restart the remote server. */
3405876a
PA
7956 run_worked = extended_remote_run (args) != -1;
7957 if (!run_worked)
2d717e4f
DJ
7958 {
7959 /* vRun was not supported. Fail if we need it to do what the
7960 user requested. */
7961 if (remote_exec_file[0])
7962 error (_("Remote target does not support \"set remote exec-file\""));
7963 if (args[0])
7964 error (_("Remote target does not support \"set args\" or run <ARGS>"));
43ff13b4 7965
2d717e4f
DJ
7966 /* Fall back to "R". */
7967 extended_remote_restart ();
7968 }
424163ea 7969
6c95b8df
PA
7970 if (!have_inferiors ())
7971 {
7972 /* Clean up from the last time we ran, before we mark the target
7973 running again. This will mark breakpoints uninserted, and
7974 get_offsets may insert breakpoints. */
7975 init_thread_list ();
7976 init_wait_for_inferior ();
7977 }
45280a52 7978
3405876a
PA
7979 /* vRun's success return is a stop reply. */
7980 stop_reply = run_worked ? rs->buf : NULL;
7981 add_current_inferior_and_thread (stop_reply);
c0a2216e 7982
2d717e4f
DJ
7983 /* Get updated offsets, if the stub uses qOffsets. */
7984 get_offsets ();
2d717e4f
DJ
7985}
7986
7987static void
136d6dae
VP
7988extended_remote_create_inferior (struct target_ops *ops,
7989 char *exec_file, char *args,
2d717e4f
DJ
7990 char **env, int from_tty)
7991{
75c99385 7992 extended_remote_create_inferior_1 (exec_file, args, env, from_tty);
43ff13b4 7993}
c906108c 7994\f
c5aa993b 7995
b775012e
LM
7996/* Given a location's target info BP_TGT and the packet buffer BUF, output
7997 the list of conditions (in agent expression bytecode format), if any, the
7998 target needs to evaluate. The output is placed into the packet buffer
bba74b36 7999 started from BUF and ended at BUF_END. */
b775012e
LM
8000
8001static int
8002remote_add_target_side_condition (struct gdbarch *gdbarch,
bba74b36
YQ
8003 struct bp_target_info *bp_tgt, char *buf,
8004 char *buf_end)
b775012e
LM
8005{
8006 struct agent_expr *aexpr = NULL;
8007 int i, ix;
8008 char *pkt;
8009 char *buf_start = buf;
8010
8011 if (VEC_empty (agent_expr_p, bp_tgt->conditions))
8012 return 0;
8013
8014 buf += strlen (buf);
bba74b36 8015 xsnprintf (buf, buf_end - buf, "%s", ";");
b775012e
LM
8016 buf++;
8017
8018 /* Send conditions to the target and free the vector. */
8019 for (ix = 0;
8020 VEC_iterate (agent_expr_p, bp_tgt->conditions, ix, aexpr);
8021 ix++)
8022 {
bba74b36 8023 xsnprintf (buf, buf_end - buf, "X%x,", aexpr->len);
b775012e
LM
8024 buf += strlen (buf);
8025 for (i = 0; i < aexpr->len; ++i)
8026 buf = pack_hex_byte (buf, aexpr->buf[i]);
8027 *buf = '\0';
8028 }
8029
8030 VEC_free (agent_expr_p, bp_tgt->conditions);
8031 return 0;
8032}
8033
d3ce09f5
SS
8034static void
8035remote_add_target_side_commands (struct gdbarch *gdbarch,
8036 struct bp_target_info *bp_tgt, char *buf)
8037{
8038 struct agent_expr *aexpr = NULL;
8039 int i, ix;
8040
8041 if (VEC_empty (agent_expr_p, bp_tgt->tcommands))
8042 return;
8043
8044 buf += strlen (buf);
8045
8046 sprintf (buf, ";cmds:%x,", bp_tgt->persist);
8047 buf += strlen (buf);
8048
8049 /* Concatenate all the agent expressions that are commands into the
8050 cmds parameter. */
8051 for (ix = 0;
8052 VEC_iterate (agent_expr_p, bp_tgt->tcommands, ix, aexpr);
8053 ix++)
8054 {
8055 sprintf (buf, "X%x,", aexpr->len);
8056 buf += strlen (buf);
8057 for (i = 0; i < aexpr->len; ++i)
8058 buf = pack_hex_byte (buf, aexpr->buf[i]);
8059 *buf = '\0';
8060 }
8061
8062 VEC_free (agent_expr_p, bp_tgt->tcommands);
8063}
8064
8181d85f
DJ
8065/* Insert a breakpoint. On targets that have software breakpoint
8066 support, we ask the remote target to do the work; on targets
8067 which don't, we insert a traditional memory breakpoint. */
c906108c
SS
8068
8069static int
a6d9a66e
UW
8070remote_insert_breakpoint (struct gdbarch *gdbarch,
8071 struct bp_target_info *bp_tgt)
c906108c 8072{
d471ea57
AC
8073 /* Try the "Z" s/w breakpoint packet if it is not already disabled.
8074 If it succeeds, then set the support to PACKET_ENABLE. If it
8075 fails, and the user has explicitly requested the Z support then
23860348 8076 report an error, otherwise, mark it disabled and go on. */
802188a7 8077
444abaca 8078 if (remote_protocol_packets[PACKET_Z0].support != PACKET_DISABLE)
96baa820 8079 {
7c0f6dcc 8080 CORE_ADDR addr = bp_tgt->placed_address;
4fff2411 8081 struct remote_state *rs;
bba74b36 8082 char *p, *endbuf;
7c0f6dcc 8083 int bpsize;
b775012e 8084 struct condition_list *cond = NULL;
4fff2411 8085
a1dcb23a 8086 gdbarch_remote_breakpoint_from_pc (gdbarch, &addr, &bpsize);
4fff2411
JZ
8087
8088 rs = get_remote_state ();
8089 p = rs->buf;
bba74b36 8090 endbuf = rs->buf + get_remote_packet_size ();
802188a7 8091
96baa820
JM
8092 *(p++) = 'Z';
8093 *(p++) = '0';
8094 *(p++) = ',';
7c0f6dcc 8095 addr = (ULONGEST) remote_address_masked (addr);
8181d85f 8096 p += hexnumstr (p, addr);
bba74b36 8097 xsnprintf (p, endbuf - p, ",%d", bpsize);
802188a7 8098
b775012e 8099 if (remote_supports_cond_breakpoints ())
bba74b36 8100 remote_add_target_side_condition (gdbarch, bp_tgt, p, endbuf);
b775012e 8101
d3ce09f5
SS
8102 if (remote_can_run_breakpoint_commands ())
8103 remote_add_target_side_commands (gdbarch, bp_tgt, p);
8104
6d820c5c
DJ
8105 putpkt (rs->buf);
8106 getpkt (&rs->buf, &rs->buf_size, 0);
96baa820 8107
6d820c5c 8108 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0]))
96baa820 8109 {
d471ea57
AC
8110 case PACKET_ERROR:
8111 return -1;
8112 case PACKET_OK:
7c0f6dcc
JL
8113 bp_tgt->placed_address = addr;
8114 bp_tgt->placed_size = bpsize;
d471ea57
AC
8115 return 0;
8116 case PACKET_UNKNOWN:
8117 break;
96baa820
JM
8118 }
8119 }
c906108c 8120
a6d9a66e 8121 return memory_insert_breakpoint (gdbarch, bp_tgt);
c906108c
SS
8122}
8123
8124static int
a6d9a66e
UW
8125remote_remove_breakpoint (struct gdbarch *gdbarch,
8126 struct bp_target_info *bp_tgt)
c906108c 8127{
8181d85f 8128 CORE_ADDR addr = bp_tgt->placed_address;
d01949b6 8129 struct remote_state *rs = get_remote_state ();
96baa820 8130
444abaca 8131 if (remote_protocol_packets[PACKET_Z0].support != PACKET_DISABLE)
96baa820 8132 {
6d820c5c 8133 char *p = rs->buf;
bba74b36 8134 char *endbuf = rs->buf + get_remote_packet_size ();
802188a7 8135
96baa820
JM
8136 *(p++) = 'z';
8137 *(p++) = '0';
8138 *(p++) = ',';
8139
8181d85f
DJ
8140 addr = (ULONGEST) remote_address_masked (bp_tgt->placed_address);
8141 p += hexnumstr (p, addr);
bba74b36 8142 xsnprintf (p, endbuf - p, ",%d", bp_tgt->placed_size);
802188a7 8143
6d820c5c
DJ
8144 putpkt (rs->buf);
8145 getpkt (&rs->buf, &rs->buf_size, 0);
96baa820 8146
6d820c5c 8147 return (rs->buf[0] == 'E');
96baa820
JM
8148 }
8149
a6d9a66e 8150 return memory_remove_breakpoint (gdbarch, bp_tgt);
c906108c
SS
8151}
8152
d471ea57
AC
8153static int
8154watchpoint_to_Z_packet (int type)
8155{
8156 switch (type)
8157 {
8158 case hw_write:
bb858e6a 8159 return Z_PACKET_WRITE_WP;
d471ea57
AC
8160 break;
8161 case hw_read:
bb858e6a 8162 return Z_PACKET_READ_WP;
d471ea57
AC
8163 break;
8164 case hw_access:
bb858e6a 8165 return Z_PACKET_ACCESS_WP;
d471ea57
AC
8166 break;
8167 default:
8e65ff28 8168 internal_error (__FILE__, __LINE__,
e2e0b3e5 8169 _("hw_bp_to_z: bad watchpoint type %d"), type);
d471ea57
AC
8170 }
8171}
8172
3c3bea1c 8173static int
0cf6dd15
TJB
8174remote_insert_watchpoint (CORE_ADDR addr, int len, int type,
8175 struct expression *cond)
96baa820 8176{
d01949b6 8177 struct remote_state *rs = get_remote_state ();
bba74b36 8178 char *endbuf = rs->buf + get_remote_packet_size ();
e514a9d6 8179 char *p;
d471ea57 8180 enum Z_packet_type packet = watchpoint_to_Z_packet (type);
96baa820 8181
444abaca 8182 if (remote_protocol_packets[PACKET_Z0 + packet].support == PACKET_DISABLE)
85d721b8 8183 return 1;
802188a7 8184
bba74b36 8185 xsnprintf (rs->buf, endbuf - rs->buf, "Z%x,", packet);
6d820c5c 8186 p = strchr (rs->buf, '\0');
96baa820
JM
8187 addr = remote_address_masked (addr);
8188 p += hexnumstr (p, (ULONGEST) addr);
bba74b36 8189 xsnprintf (p, endbuf - p, ",%x", len);
802188a7 8190
6d820c5c
DJ
8191 putpkt (rs->buf);
8192 getpkt (&rs->buf, &rs->buf_size, 0);
96baa820 8193
6d820c5c 8194 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0 + packet]))
d471ea57
AC
8195 {
8196 case PACKET_ERROR:
d471ea57 8197 return -1;
85d721b8
PA
8198 case PACKET_UNKNOWN:
8199 return 1;
d471ea57
AC
8200 case PACKET_OK:
8201 return 0;
8202 }
8e65ff28 8203 internal_error (__FILE__, __LINE__,
e2e0b3e5 8204 _("remote_insert_watchpoint: reached end of function"));
96baa820
JM
8205}
8206
283002cf
MR
8207static int
8208remote_watchpoint_addr_within_range (struct target_ops *target, CORE_ADDR addr,
8209 CORE_ADDR start, int length)
8210{
8211 CORE_ADDR diff = remote_address_masked (addr - start);
8212
8213 return diff < length;
8214}
8215
d471ea57 8216
3c3bea1c 8217static int
0cf6dd15
TJB
8218remote_remove_watchpoint (CORE_ADDR addr, int len, int type,
8219 struct expression *cond)
96baa820 8220{
d01949b6 8221 struct remote_state *rs = get_remote_state ();
bba74b36 8222 char *endbuf = rs->buf + get_remote_packet_size ();
e514a9d6 8223 char *p;
d471ea57
AC
8224 enum Z_packet_type packet = watchpoint_to_Z_packet (type);
8225
444abaca 8226 if (remote_protocol_packets[PACKET_Z0 + packet].support == PACKET_DISABLE)
5cffb350 8227 return -1;
802188a7 8228
bba74b36 8229 xsnprintf (rs->buf, endbuf - rs->buf, "z%x,", packet);
6d820c5c 8230 p = strchr (rs->buf, '\0');
96baa820
JM
8231 addr = remote_address_masked (addr);
8232 p += hexnumstr (p, (ULONGEST) addr);
bba74b36 8233 xsnprintf (p, endbuf - p, ",%x", len);
6d820c5c
DJ
8234 putpkt (rs->buf);
8235 getpkt (&rs->buf, &rs->buf_size, 0);
96baa820 8236
6d820c5c 8237 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0 + packet]))
d471ea57
AC
8238 {
8239 case PACKET_ERROR:
8240 case PACKET_UNKNOWN:
8241 return -1;
8242 case PACKET_OK:
8243 return 0;
8244 }
8e65ff28 8245 internal_error (__FILE__, __LINE__,
e2e0b3e5 8246 _("remote_remove_watchpoint: reached end of function"));
96baa820
JM
8247}
8248
3c3bea1c 8249
501eef12 8250int remote_hw_watchpoint_limit = -1;
480a3f21 8251int remote_hw_watchpoint_length_limit = -1;
501eef12 8252int remote_hw_breakpoint_limit = -1;
d471ea57 8253
480a3f21
PW
8254static int
8255remote_region_ok_for_hw_watchpoint (CORE_ADDR addr, int len)
8256{
8257 if (remote_hw_watchpoint_length_limit == 0)
8258 return 0;
8259 else if (remote_hw_watchpoint_length_limit < 0)
8260 return 1;
8261 else if (len <= remote_hw_watchpoint_length_limit)
8262 return 1;
8263 else
8264 return 0;
8265}
8266
b9362cc7 8267static int
3c3bea1c 8268remote_check_watch_resources (int type, int cnt, int ot)
96baa820 8269{
3c3bea1c
GS
8270 if (type == bp_hardware_breakpoint)
8271 {
8272 if (remote_hw_breakpoint_limit == 0)
8273 return 0;
501eef12
AC
8274 else if (remote_hw_breakpoint_limit < 0)
8275 return 1;
3c3bea1c
GS
8276 else if (cnt <= remote_hw_breakpoint_limit)
8277 return 1;
8278 }
8279 else
8280 {
8281 if (remote_hw_watchpoint_limit == 0)
8282 return 0;
501eef12
AC
8283 else if (remote_hw_watchpoint_limit < 0)
8284 return 1;
3c3bea1c
GS
8285 else if (ot)
8286 return -1;
8287 else if (cnt <= remote_hw_watchpoint_limit)
8288 return 1;
8289 }
8290 return -1;
8291}
8292
b9362cc7 8293static int
3c3bea1c
GS
8294remote_stopped_by_watchpoint (void)
8295{
82f73884 8296 return remote_stopped_by_watchpoint_p;
3c3bea1c
GS
8297}
8298
4aa7a7f5
JJ
8299static int
8300remote_stopped_data_address (struct target_ops *target, CORE_ADDR *addr_p)
3c3bea1c 8301{
4aa7a7f5 8302 int rc = 0;
a744cf53 8303
d983da9c 8304 if (remote_stopped_by_watchpoint ())
4aa7a7f5
JJ
8305 {
8306 *addr_p = remote_watch_data_address;
8307 rc = 1;
8308 }
8309
8310 return rc;
3c3bea1c
GS
8311}
8312
8313
8314static int
a6d9a66e
UW
8315remote_insert_hw_breakpoint (struct gdbarch *gdbarch,
8316 struct bp_target_info *bp_tgt)
3c3bea1c 8317{
8181d85f 8318 CORE_ADDR addr;
4fff2411 8319 struct remote_state *rs;
bba74b36 8320 char *p, *endbuf;
dd61ec5c 8321 char *message;
802188a7 8322
c8189ed1 8323 /* The length field should be set to the size of a breakpoint
8181d85f 8324 instruction, even though we aren't inserting one ourselves. */
c8189ed1 8325
a1dcb23a 8326 gdbarch_remote_breakpoint_from_pc
a6d9a66e 8327 (gdbarch, &bp_tgt->placed_address, &bp_tgt->placed_size);
3c3bea1c 8328
444abaca 8329 if (remote_protocol_packets[PACKET_Z1].support == PACKET_DISABLE)
5cffb350 8330 return -1;
2bc416ba 8331
4fff2411
JZ
8332 rs = get_remote_state ();
8333 p = rs->buf;
bba74b36 8334 endbuf = rs->buf + get_remote_packet_size ();
4fff2411 8335
96baa820
JM
8336 *(p++) = 'Z';
8337 *(p++) = '1';
8338 *(p++) = ',';
802188a7 8339
8181d85f 8340 addr = remote_address_masked (bp_tgt->placed_address);
96baa820 8341 p += hexnumstr (p, (ULONGEST) addr);
bba74b36 8342 xsnprintf (p, endbuf - p, ",%x", bp_tgt->placed_size);
96baa820 8343
b775012e 8344 if (remote_supports_cond_breakpoints ())
bba74b36 8345 remote_add_target_side_condition (gdbarch, bp_tgt, p, endbuf);
b775012e 8346
d3ce09f5
SS
8347 if (remote_can_run_breakpoint_commands ())
8348 remote_add_target_side_commands (gdbarch, bp_tgt, p);
8349
6d820c5c
DJ
8350 putpkt (rs->buf);
8351 getpkt (&rs->buf, &rs->buf_size, 0);
96baa820 8352
6d820c5c 8353 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z1]))
d471ea57
AC
8354 {
8355 case PACKET_ERROR:
dd61ec5c
MW
8356 if (rs->buf[1] == '.')
8357 {
8358 message = strchr (rs->buf + 2, '.');
8359 if (message)
0316657e 8360 error (_("Remote failure reply: %s"), message + 1);
dd61ec5c
MW
8361 }
8362 return -1;
d471ea57
AC
8363 case PACKET_UNKNOWN:
8364 return -1;
8365 case PACKET_OK:
8366 return 0;
8367 }
8e65ff28 8368 internal_error (__FILE__, __LINE__,
e2e0b3e5 8369 _("remote_insert_hw_breakpoint: reached end of function"));
96baa820
JM
8370}
8371
d471ea57 8372
802188a7 8373static int
a6d9a66e
UW
8374remote_remove_hw_breakpoint (struct gdbarch *gdbarch,
8375 struct bp_target_info *bp_tgt)
96baa820 8376{
8181d85f 8377 CORE_ADDR addr;
d01949b6 8378 struct remote_state *rs = get_remote_state ();
6d820c5c 8379 char *p = rs->buf;
bba74b36 8380 char *endbuf = rs->buf + get_remote_packet_size ();
c8189ed1 8381
444abaca 8382 if (remote_protocol_packets[PACKET_Z1].support == PACKET_DISABLE)
5cffb350 8383 return -1;
802188a7 8384
96baa820
JM
8385 *(p++) = 'z';
8386 *(p++) = '1';
8387 *(p++) = ',';
802188a7 8388
8181d85f 8389 addr = remote_address_masked (bp_tgt->placed_address);
96baa820 8390 p += hexnumstr (p, (ULONGEST) addr);
bba74b36 8391 xsnprintf (p, endbuf - p, ",%x", bp_tgt->placed_size);
96baa820 8392
6d820c5c
DJ
8393 putpkt (rs->buf);
8394 getpkt (&rs->buf, &rs->buf_size, 0);
802188a7 8395
6d820c5c 8396 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z1]))
d471ea57
AC
8397 {
8398 case PACKET_ERROR:
8399 case PACKET_UNKNOWN:
8400 return -1;
8401 case PACKET_OK:
8402 return 0;
8403 }
8e65ff28 8404 internal_error (__FILE__, __LINE__,
e2e0b3e5 8405 _("remote_remove_hw_breakpoint: reached end of function"));
96baa820 8406}
96baa820 8407
23860348 8408/* Table used by the crc32 function to calcuate the checksum. */
c906108c 8409
c5aa993b
JM
8410static unsigned long crc32_table[256] =
8411{0, 0};
c906108c
SS
8412
8413static unsigned long
4a5e7a5b 8414crc32 (const unsigned char *buf, int len, unsigned int crc)
c906108c 8415{
c5aa993b 8416 if (!crc32_table[1])
c906108c 8417 {
23860348 8418 /* Initialize the CRC table and the decoding table. */
c906108c
SS
8419 int i, j;
8420 unsigned int c;
8421
8422 for (i = 0; i < 256; i++)
c5aa993b
JM
8423 {
8424 for (c = i << 24, j = 8; j > 0; --j)
8425 c = c & 0x80000000 ? (c << 1) ^ 0x04c11db7 : (c << 1);
8426 crc32_table[i] = c;
8427 }
c906108c
SS
8428 }
8429
8430 while (len--)
8431 {
8432 crc = (crc << 8) ^ crc32_table[((crc >> 24) ^ *buf) & 255];
8433 buf++;
8434 }
8435 return crc;
8436}
8437
4a5e7a5b
PA
8438/* Verify memory using the "qCRC:" request. */
8439
8440static int
8441remote_verify_memory (struct target_ops *ops,
8442 const gdb_byte *data, CORE_ADDR lma, ULONGEST size)
8443{
8444 struct remote_state *rs = get_remote_state ();
8445 unsigned long host_crc, target_crc;
8446 char *tmp;
8447
8448 /* FIXME: assumes lma can fit into long. */
8449 xsnprintf (rs->buf, get_remote_packet_size (), "qCRC:%lx,%lx",
8450 (long) lma, (long) size);
8451 putpkt (rs->buf);
8452
8453 /* Be clever; compute the host_crc before waiting for target
8454 reply. */
8455 host_crc = crc32 (data, size, 0xffffffff);
8456
8457 getpkt (&rs->buf, &rs->buf_size, 0);
8458 if (rs->buf[0] == 'E')
8459 return -1;
8460
8461 if (rs->buf[0] != 'C')
8462 error (_("remote target does not support this operation"));
8463
8464 for (target_crc = 0, tmp = &rs->buf[1]; *tmp; tmp++)
8465 target_crc = target_crc * 16 + fromhex (*tmp);
8466
8467 return (host_crc == target_crc);
8468}
8469
c906108c
SS
8470/* compare-sections command
8471
8472 With no arguments, compares each loadable section in the exec bfd
8473 with the same memory range on the target, and reports mismatches.
4a5e7a5b 8474 Useful for verifying the image on the target against the exec file. */
e514a9d6 8475
c906108c 8476static void
fba45db2 8477compare_sections_command (char *args, int from_tty)
c906108c
SS
8478{
8479 asection *s;
c906108c 8480 struct cleanup *old_chain;
085dd6e6 8481 char *sectdata;
ce359b09 8482 const char *sectname;
c906108c
SS
8483 bfd_size_type size;
8484 bfd_vma lma;
8485 int matched = 0;
8486 int mismatched = 0;
4a5e7a5b 8487 int res;
c906108c
SS
8488
8489 if (!exec_bfd)
8a3fe4f8 8490 error (_("command cannot be used without an exec file"));
c906108c 8491
c5aa993b 8492 for (s = exec_bfd->sections; s; s = s->next)
c906108c
SS
8493 {
8494 if (!(s->flags & SEC_LOAD))
0df8b418 8495 continue; /* Skip non-loadable section. */
c906108c 8496
2c500098 8497 size = bfd_get_section_size (s);
c906108c 8498 if (size == 0)
0df8b418 8499 continue; /* Skip zero-length section. */
c906108c 8500
ce359b09 8501 sectname = bfd_get_section_name (exec_bfd, s);
c906108c 8502 if (args && strcmp (args, sectname) != 0)
0df8b418 8503 continue; /* Not the section selected by user. */
c906108c 8504
0df8b418 8505 matched = 1; /* Do this section. */
c906108c 8506 lma = s->lma;
c906108c 8507
c906108c 8508 sectdata = xmalloc (size);
b8c9b27d 8509 old_chain = make_cleanup (xfree, sectdata);
c906108c 8510 bfd_get_section_contents (exec_bfd, s, sectdata, 0, size);
c906108c 8511
4a5e7a5b
PA
8512 res = target_verify_memory (sectdata, lma, size);
8513
8514 if (res == -1)
5af949e3 8515 error (_("target memory fault, section %s, range %s -- %s"), sectname,
f5656ead
TT
8516 paddress (target_gdbarch (), lma),
8517 paddress (target_gdbarch (), lma + size));
c906108c 8518
5af949e3 8519 printf_filtered ("Section %s, range %s -- %s: ", sectname,
f5656ead
TT
8520 paddress (target_gdbarch (), lma),
8521 paddress (target_gdbarch (), lma + size));
4a5e7a5b 8522 if (res)
c906108c
SS
8523 printf_filtered ("matched.\n");
8524 else
c5aa993b
JM
8525 {
8526 printf_filtered ("MIS-MATCHED!\n");
8527 mismatched++;
8528 }
c906108c
SS
8529
8530 do_cleanups (old_chain);
8531 }
8532 if (mismatched > 0)
8a3fe4f8
AC
8533 warning (_("One or more sections of the remote executable does not match\n\
8534the loaded file\n"));
c906108c 8535 if (args && !matched)
a3f17187 8536 printf_filtered (_("No loaded section named '%s'.\n"), args);
c906108c
SS
8537}
8538
0e7f50da
UW
8539/* Write LEN bytes from WRITEBUF into OBJECT_NAME/ANNEX at OFFSET
8540 into remote target. The number of bytes written to the remote
8541 target is returned, or -1 for error. */
8542
8543static LONGEST
8544remote_write_qxfer (struct target_ops *ops, const char *object_name,
8545 const char *annex, const gdb_byte *writebuf,
8546 ULONGEST offset, LONGEST len,
8547 struct packet_config *packet)
8548{
8549 int i, buf_len;
8550 ULONGEST n;
0e7f50da
UW
8551 struct remote_state *rs = get_remote_state ();
8552 int max_size = get_memory_write_packet_size ();
8553
8554 if (packet->support == PACKET_DISABLE)
8555 return -1;
8556
8557 /* Insert header. */
8558 i = snprintf (rs->buf, max_size,
8559 "qXfer:%s:write:%s:%s:",
8560 object_name, annex ? annex : "",
8561 phex_nz (offset, sizeof offset));
8562 max_size -= (i + 1);
8563
8564 /* Escape as much data as fits into rs->buf. */
8565 buf_len = remote_escape_output
8566 (writebuf, len, (rs->buf + i), &max_size, max_size);
8567
8568 if (putpkt_binary (rs->buf, i + buf_len) < 0
8569 || getpkt_sane (&rs->buf, &rs->buf_size, 0) < 0
8570 || packet_ok (rs->buf, packet) != PACKET_OK)
8571 return -1;
8572
8573 unpack_varlen_hex (rs->buf, &n);
8574 return n;
8575}
8576
0876f84a
DJ
8577/* Read OBJECT_NAME/ANNEX from the remote target using a qXfer packet.
8578 Data at OFFSET, of up to LEN bytes, is read into READBUF; the
8579 number of bytes read is returned, or 0 for EOF, or -1 for error.
8580 The number of bytes read may be less than LEN without indicating an
8581 EOF. PACKET is checked and updated to indicate whether the remote
8582 target supports this object. */
8583
8584static LONGEST
8585remote_read_qxfer (struct target_ops *ops, const char *object_name,
8586 const char *annex,
8587 gdb_byte *readbuf, ULONGEST offset, LONGEST len,
8588 struct packet_config *packet)
8589{
8590 static char *finished_object;
8591 static char *finished_annex;
8592 static ULONGEST finished_offset;
8593
8594 struct remote_state *rs = get_remote_state ();
0876f84a
DJ
8595 LONGEST i, n, packet_len;
8596
8597 if (packet->support == PACKET_DISABLE)
8598 return -1;
8599
8600 /* Check whether we've cached an end-of-object packet that matches
8601 this request. */
8602 if (finished_object)
8603 {
8604 if (strcmp (object_name, finished_object) == 0
8605 && strcmp (annex ? annex : "", finished_annex) == 0
8606 && offset == finished_offset)
8607 return 0;
8608
8609 /* Otherwise, we're now reading something different. Discard
8610 the cache. */
8611 xfree (finished_object);
8612 xfree (finished_annex);
8613 finished_object = NULL;
8614 finished_annex = NULL;
8615 }
8616
8617 /* Request only enough to fit in a single packet. The actual data
8618 may not, since we don't know how much of it will need to be escaped;
8619 the target is free to respond with slightly less data. We subtract
8620 five to account for the response type and the protocol frame. */
8621 n = min (get_remote_packet_size () - 5, len);
8622 snprintf (rs->buf, get_remote_packet_size () - 4, "qXfer:%s:read:%s:%s,%s",
8623 object_name, annex ? annex : "",
8624 phex_nz (offset, sizeof offset),
8625 phex_nz (n, sizeof n));
8626 i = putpkt (rs->buf);
8627 if (i < 0)
8628 return -1;
8629
8630 rs->buf[0] = '\0';
8631 packet_len = getpkt_sane (&rs->buf, &rs->buf_size, 0);
8632 if (packet_len < 0 || packet_ok (rs->buf, packet) != PACKET_OK)
8633 return -1;
8634
8635 if (rs->buf[0] != 'l' && rs->buf[0] != 'm')
8636 error (_("Unknown remote qXfer reply: %s"), rs->buf);
8637
8638 /* 'm' means there is (or at least might be) more data after this
8639 batch. That does not make sense unless there's at least one byte
8640 of data in this reply. */
8641 if (rs->buf[0] == 'm' && packet_len == 1)
8642 error (_("Remote qXfer reply contained no data."));
8643
8644 /* Got some data. */
8645 i = remote_unescape_input (rs->buf + 1, packet_len - 1, readbuf, n);
8646
8647 /* 'l' is an EOF marker, possibly including a final block of data,
0e7f50da
UW
8648 or possibly empty. If we have the final block of a non-empty
8649 object, record this fact to bypass a subsequent partial read. */
8650 if (rs->buf[0] == 'l' && offset + i > 0)
0876f84a
DJ
8651 {
8652 finished_object = xstrdup (object_name);
8653 finished_annex = xstrdup (annex ? annex : "");
8654 finished_offset = offset + i;
8655 }
8656
8657 return i;
8658}
8659
1e3ff5ad 8660static LONGEST
4b8a223f 8661remote_xfer_partial (struct target_ops *ops, enum target_object object,
961cb7b5
MK
8662 const char *annex, gdb_byte *readbuf,
8663 const gdb_byte *writebuf, ULONGEST offset, LONGEST len)
c906108c 8664{
82f73884 8665 struct remote_state *rs;
c906108c 8666 int i;
6d820c5c 8667 char *p2;
1e3ff5ad 8668 char query_type;
c906108c 8669
e6e4e701 8670 set_remote_traceframe ();
82f73884
PA
8671 set_general_thread (inferior_ptid);
8672
8673 rs = get_remote_state ();
8674
b2182ed2 8675 /* Handle memory using the standard memory routines. */
21e3b9b9
DJ
8676 if (object == TARGET_OBJECT_MEMORY)
8677 {
8678 int xfered;
a744cf53 8679
21e3b9b9
DJ
8680 errno = 0;
8681
2d717e4f
DJ
8682 /* If the remote target is connected but not running, we should
8683 pass this request down to a lower stratum (e.g. the executable
8684 file). */
8685 if (!target_has_execution)
8686 return 0;
8687
21e3b9b9 8688 if (writebuf != NULL)
b2182ed2 8689 xfered = remote_write_bytes (offset, writebuf, len);
21e3b9b9 8690 else
b2182ed2 8691 xfered = remote_read_bytes (offset, readbuf, len);
21e3b9b9
DJ
8692
8693 if (xfered > 0)
8694 return xfered;
8695 else if (xfered == 0 && errno == 0)
8696 return 0;
8697 else
8698 return -1;
8699 }
8700
0df8b418 8701 /* Handle SPU memory using qxfer packets. */
0e7f50da
UW
8702 if (object == TARGET_OBJECT_SPU)
8703 {
8704 if (readbuf)
8705 return remote_read_qxfer (ops, "spu", annex, readbuf, offset, len,
8706 &remote_protocol_packets
8707 [PACKET_qXfer_spu_read]);
8708 else
8709 return remote_write_qxfer (ops, "spu", annex, writebuf, offset, len,
8710 &remote_protocol_packets
8711 [PACKET_qXfer_spu_write]);
8712 }
8713
4aa995e1
PA
8714 /* Handle extra signal info using qxfer packets. */
8715 if (object == TARGET_OBJECT_SIGNAL_INFO)
8716 {
8717 if (readbuf)
8718 return remote_read_qxfer (ops, "siginfo", annex, readbuf, offset, len,
8719 &remote_protocol_packets
8720 [PACKET_qXfer_siginfo_read]);
8721 else
3e43a32a
MS
8722 return remote_write_qxfer (ops, "siginfo", annex,
8723 writebuf, offset, len,
4aa995e1
PA
8724 &remote_protocol_packets
8725 [PACKET_qXfer_siginfo_write]);
8726 }
8727
0fb4aa4b
PA
8728 if (object == TARGET_OBJECT_STATIC_TRACE_DATA)
8729 {
8730 if (readbuf)
3e43a32a
MS
8731 return remote_read_qxfer (ops, "statictrace", annex,
8732 readbuf, offset, len,
0fb4aa4b
PA
8733 &remote_protocol_packets
8734 [PACKET_qXfer_statictrace_read]);
8735 else
8736 return -1;
8737 }
8738
a76d924d
DJ
8739 /* Only handle flash writes. */
8740 if (writebuf != NULL)
8741 {
8742 LONGEST xfered;
8743
8744 switch (object)
8745 {
8746 case TARGET_OBJECT_FLASH:
8747 xfered = remote_flash_write (ops, offset, len, writebuf);
8748
8749 if (xfered > 0)
8750 return xfered;
8751 else if (xfered == 0 && errno == 0)
8752 return 0;
8753 else
8754 return -1;
8755
8756 default:
8757 return -1;
8758 }
8759 }
4b8a223f 8760
1e3ff5ad
AC
8761 /* Map pre-existing objects onto letters. DO NOT do this for new
8762 objects!!! Instead specify new query packets. */
8763 switch (object)
c906108c 8764 {
1e3ff5ad
AC
8765 case TARGET_OBJECT_AVR:
8766 query_type = 'R';
8767 break;
802188a7
RM
8768
8769 case TARGET_OBJECT_AUXV:
0876f84a
DJ
8770 gdb_assert (annex == NULL);
8771 return remote_read_qxfer (ops, "auxv", annex, readbuf, offset, len,
8772 &remote_protocol_packets[PACKET_qXfer_auxv]);
802188a7 8773
23181151
DJ
8774 case TARGET_OBJECT_AVAILABLE_FEATURES:
8775 return remote_read_qxfer
8776 (ops, "features", annex, readbuf, offset, len,
8777 &remote_protocol_packets[PACKET_qXfer_features]);
8778
cfa9d6d9
DJ
8779 case TARGET_OBJECT_LIBRARIES:
8780 return remote_read_qxfer
8781 (ops, "libraries", annex, readbuf, offset, len,
8782 &remote_protocol_packets[PACKET_qXfer_libraries]);
8783
2268b414
JK
8784 case TARGET_OBJECT_LIBRARIES_SVR4:
8785 return remote_read_qxfer
8786 (ops, "libraries-svr4", annex, readbuf, offset, len,
8787 &remote_protocol_packets[PACKET_qXfer_libraries_svr4]);
8788
fd79ecee
DJ
8789 case TARGET_OBJECT_MEMORY_MAP:
8790 gdb_assert (annex == NULL);
8791 return remote_read_qxfer (ops, "memory-map", annex, readbuf, offset, len,
8792 &remote_protocol_packets[PACKET_qXfer_memory_map]);
8793
07e059b5
VP
8794 case TARGET_OBJECT_OSDATA:
8795 /* Should only get here if we're connected. */
8796 gdb_assert (remote_desc);
8797 return remote_read_qxfer
8798 (ops, "osdata", annex, readbuf, offset, len,
8799 &remote_protocol_packets[PACKET_qXfer_osdata]);
8800
dc146f7c
VP
8801 case TARGET_OBJECT_THREADS:
8802 gdb_assert (annex == NULL);
8803 return remote_read_qxfer (ops, "threads", annex, readbuf, offset, len,
8804 &remote_protocol_packets[PACKET_qXfer_threads]);
8805
b3b9301e
PA
8806 case TARGET_OBJECT_TRACEFRAME_INFO:
8807 gdb_assert (annex == NULL);
8808 return remote_read_qxfer
8809 (ops, "traceframe-info", annex, readbuf, offset, len,
8810 &remote_protocol_packets[PACKET_qXfer_traceframe_info]);
78d85199
YQ
8811
8812 case TARGET_OBJECT_FDPIC:
8813 return remote_read_qxfer (ops, "fdpic", annex, readbuf, offset, len,
8814 &remote_protocol_packets[PACKET_qXfer_fdpic]);
169081d0
TG
8815
8816 case TARGET_OBJECT_OPENVMS_UIB:
8817 return remote_read_qxfer (ops, "uib", annex, readbuf, offset, len,
8818 &remote_protocol_packets[PACKET_qXfer_uib]);
8819
9accd112
MM
8820 case TARGET_OBJECT_BTRACE:
8821 return remote_read_qxfer (ops, "btrace", annex, readbuf, offset, len,
8822 &remote_protocol_packets[PACKET_qXfer_btrace]);
8823
1e3ff5ad 8824 default:
c906108c
SS
8825 return -1;
8826 }
8827
4b8a223f 8828 /* Note: a zero OFFSET and LEN can be used to query the minimum
1e3ff5ad 8829 buffer size. */
4b8a223f 8830 if (offset == 0 && len == 0)
ea9c271d 8831 return (get_remote_packet_size ());
0df8b418 8832 /* Minimum outbuf size is get_remote_packet_size (). If LEN is not
24b06219 8833 large enough let the caller deal with it. */
ea9c271d 8834 if (len < get_remote_packet_size ())
1e3ff5ad 8835 return -1;
ea9c271d 8836 len = get_remote_packet_size ();
1e3ff5ad 8837
23860348 8838 /* Except for querying the minimum buffer size, target must be open. */
c5aa993b 8839 if (!remote_desc)
8a3fe4f8 8840 error (_("remote query is only available after target open"));
c906108c 8841
1e3ff5ad 8842 gdb_assert (annex != NULL);
4b8a223f 8843 gdb_assert (readbuf != NULL);
c906108c 8844
6d820c5c 8845 p2 = rs->buf;
c906108c
SS
8846 *p2++ = 'q';
8847 *p2++ = query_type;
8848
23860348
MS
8849 /* We used one buffer char for the remote protocol q command and
8850 another for the query type. As the remote protocol encapsulation
8851 uses 4 chars plus one extra in case we are debugging
8852 (remote_debug), we have PBUFZIZ - 7 left to pack the query
8853 string. */
c906108c 8854 i = 0;
ea9c271d 8855 while (annex[i] && (i < (get_remote_packet_size () - 8)))
c906108c 8856 {
1e3ff5ad
AC
8857 /* Bad caller may have sent forbidden characters. */
8858 gdb_assert (isprint (annex[i]) && annex[i] != '$' && annex[i] != '#');
8859 *p2++ = annex[i];
c906108c
SS
8860 i++;
8861 }
1e3ff5ad
AC
8862 *p2 = '\0';
8863 gdb_assert (annex[i] == '\0');
c906108c 8864
6d820c5c 8865 i = putpkt (rs->buf);
c5aa993b
JM
8866 if (i < 0)
8867 return i;
c906108c 8868
6d820c5c
DJ
8869 getpkt (&rs->buf, &rs->buf_size, 0);
8870 strcpy ((char *) readbuf, rs->buf);
c906108c 8871
cfd77fa1 8872 return strlen ((char *) readbuf);
c906108c
SS
8873}
8874
08388c79
DE
8875static int
8876remote_search_memory (struct target_ops* ops,
8877 CORE_ADDR start_addr, ULONGEST search_space_len,
8878 const gdb_byte *pattern, ULONGEST pattern_len,
8879 CORE_ADDR *found_addrp)
8880{
f5656ead 8881 int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
08388c79
DE
8882 struct remote_state *rs = get_remote_state ();
8883 int max_size = get_memory_write_packet_size ();
8884 struct packet_config *packet =
8885 &remote_protocol_packets[PACKET_qSearch_memory];
0df8b418
MS
8886 /* Number of packet bytes used to encode the pattern;
8887 this could be more than PATTERN_LEN due to escape characters. */
08388c79 8888 int escaped_pattern_len;
0df8b418 8889 /* Amount of pattern that was encodable in the packet. */
08388c79
DE
8890 int used_pattern_len;
8891 int i;
8892 int found;
8893 ULONGEST found_addr;
8894
8895 /* Don't go to the target if we don't have to.
8896 This is done before checking packet->support to avoid the possibility that
8897 a success for this edge case means the facility works in general. */
8898 if (pattern_len > search_space_len)
8899 return 0;
8900 if (pattern_len == 0)
8901 {
8902 *found_addrp = start_addr;
8903 return 1;
8904 }
8905
8906 /* If we already know the packet isn't supported, fall back to the simple
8907 way of searching memory. */
8908
8909 if (packet->support == PACKET_DISABLE)
8910 {
8911 /* Target doesn't provided special support, fall back and use the
8912 standard support (copy memory and do the search here). */
8913 return simple_search_memory (ops, start_addr, search_space_len,
8914 pattern, pattern_len, found_addrp);
8915 }
8916
8917 /* Insert header. */
8918 i = snprintf (rs->buf, max_size,
8919 "qSearch:memory:%s;%s;",
5af949e3 8920 phex_nz (start_addr, addr_size),
08388c79
DE
8921 phex_nz (search_space_len, sizeof (search_space_len)));
8922 max_size -= (i + 1);
8923
8924 /* Escape as much data as fits into rs->buf. */
8925 escaped_pattern_len =
8926 remote_escape_output (pattern, pattern_len, (rs->buf + i),
8927 &used_pattern_len, max_size);
8928
8929 /* Bail if the pattern is too large. */
8930 if (used_pattern_len != pattern_len)
9b20d036 8931 error (_("Pattern is too large to transmit to remote target."));
08388c79
DE
8932
8933 if (putpkt_binary (rs->buf, i + escaped_pattern_len) < 0
8934 || getpkt_sane (&rs->buf, &rs->buf_size, 0) < 0
8935 || packet_ok (rs->buf, packet) != PACKET_OK)
8936 {
8937 /* The request may not have worked because the command is not
8938 supported. If so, fall back to the simple way. */
8939 if (packet->support == PACKET_DISABLE)
8940 {
8941 return simple_search_memory (ops, start_addr, search_space_len,
8942 pattern, pattern_len, found_addrp);
8943 }
8944 return -1;
8945 }
8946
8947 if (rs->buf[0] == '0')
8948 found = 0;
8949 else if (rs->buf[0] == '1')
8950 {
8951 found = 1;
8952 if (rs->buf[1] != ',')
10e0fa18 8953 error (_("Unknown qSearch:memory reply: %s"), rs->buf);
08388c79
DE
8954 unpack_varlen_hex (rs->buf + 2, &found_addr);
8955 *found_addrp = found_addr;
8956 }
8957 else
10e0fa18 8958 error (_("Unknown qSearch:memory reply: %s"), rs->buf);
08388c79
DE
8959
8960 return found;
8961}
8962
96baa820
JM
8963static void
8964remote_rcmd (char *command,
d9fcf2fb 8965 struct ui_file *outbuf)
96baa820 8966{
d01949b6 8967 struct remote_state *rs = get_remote_state ();
2e9f7625 8968 char *p = rs->buf;
96baa820
JM
8969
8970 if (!remote_desc)
8a3fe4f8 8971 error (_("remote rcmd is only available after target open"));
96baa820 8972
23860348 8973 /* Send a NULL command across as an empty command. */
7be570e7
JM
8974 if (command == NULL)
8975 command = "";
8976
23860348 8977 /* The query prefix. */
2e9f7625
DJ
8978 strcpy (rs->buf, "qRcmd,");
8979 p = strchr (rs->buf, '\0');
96baa820 8980
3e43a32a
MS
8981 if ((strlen (rs->buf) + strlen (command) * 2 + 8/*misc*/)
8982 > get_remote_packet_size ())
8a3fe4f8 8983 error (_("\"monitor\" command ``%s'' is too long."), command);
96baa820 8984
23860348 8985 /* Encode the actual command. */
cfd77fa1 8986 bin2hex ((gdb_byte *) command, p, 0);
96baa820 8987
6d820c5c 8988 if (putpkt (rs->buf) < 0)
8a3fe4f8 8989 error (_("Communication problem with target."));
96baa820
JM
8990
8991 /* get/display the response */
8992 while (1)
8993 {
2e9f7625
DJ
8994 char *buf;
8995
00bf0b85 8996 /* XXX - see also remote_get_noisy_reply(). */
5b37825d 8997 QUIT; /* Allow user to bail out with ^C. */
2e9f7625 8998 rs->buf[0] = '\0';
5b37825d
PW
8999 if (getpkt_sane (&rs->buf, &rs->buf_size, 0) == -1)
9000 {
9001 /* Timeout. Continue to (try to) read responses.
9002 This is better than stopping with an error, assuming the stub
9003 is still executing the (long) monitor command.
9004 If needed, the user can interrupt gdb using C-c, obtaining
9005 an effect similar to stop on timeout. */
9006 continue;
9007 }
2e9f7625 9008 buf = rs->buf;
96baa820 9009 if (buf[0] == '\0')
8a3fe4f8 9010 error (_("Target does not support this command."));
96baa820
JM
9011 if (buf[0] == 'O' && buf[1] != 'K')
9012 {
23860348 9013 remote_console_output (buf + 1); /* 'O' message from stub. */
96baa820
JM
9014 continue;
9015 }
9016 if (strcmp (buf, "OK") == 0)
9017 break;
7be570e7
JM
9018 if (strlen (buf) == 3 && buf[0] == 'E'
9019 && isdigit (buf[1]) && isdigit (buf[2]))
9020 {
8a3fe4f8 9021 error (_("Protocol error with Rcmd"));
7be570e7 9022 }
96baa820
JM
9023 for (p = buf; p[0] != '\0' && p[1] != '\0'; p += 2)
9024 {
9025 char c = (fromhex (p[0]) << 4) + fromhex (p[1]);
a744cf53 9026
96baa820
JM
9027 fputc_unfiltered (c, outbuf);
9028 }
9029 break;
9030 }
9031}
9032
fd79ecee
DJ
9033static VEC(mem_region_s) *
9034remote_memory_map (struct target_ops *ops)
9035{
9036 VEC(mem_region_s) *result = NULL;
9037 char *text = target_read_stralloc (&current_target,
9038 TARGET_OBJECT_MEMORY_MAP, NULL);
9039
9040 if (text)
9041 {
9042 struct cleanup *back_to = make_cleanup (xfree, text);
a744cf53 9043
fd79ecee
DJ
9044 result = parse_memory_map (text);
9045 do_cleanups (back_to);
9046 }
9047
9048 return result;
9049}
9050
c906108c 9051static void
fba45db2 9052packet_command (char *args, int from_tty)
c906108c 9053{
d01949b6 9054 struct remote_state *rs = get_remote_state ();
c906108c 9055
c5aa993b 9056 if (!remote_desc)
8a3fe4f8 9057 error (_("command can only be used with remote target"));
c906108c 9058
c5aa993b 9059 if (!args)
8a3fe4f8 9060 error (_("remote-packet command requires packet text as argument"));
c906108c
SS
9061
9062 puts_filtered ("sending: ");
9063 print_packet (args);
9064 puts_filtered ("\n");
9065 putpkt (args);
9066
6d820c5c 9067 getpkt (&rs->buf, &rs->buf_size, 0);
c906108c 9068 puts_filtered ("received: ");
6d820c5c 9069 print_packet (rs->buf);
c906108c
SS
9070 puts_filtered ("\n");
9071}
9072
9073#if 0
23860348 9074/* --------- UNIT_TEST for THREAD oriented PACKETS ------------------- */
c906108c 9075
a14ed312 9076static void display_thread_info (struct gdb_ext_thread_info *info);
c906108c 9077
a14ed312 9078static void threadset_test_cmd (char *cmd, int tty);
c906108c 9079
a14ed312 9080static void threadalive_test (char *cmd, int tty);
c906108c 9081
a14ed312 9082static void threadlist_test_cmd (char *cmd, int tty);
c906108c 9083
23860348 9084int get_and_display_threadinfo (threadref *ref);
c906108c 9085
a14ed312 9086static void threadinfo_test_cmd (char *cmd, int tty);
c906108c 9087
23860348 9088static int thread_display_step (threadref *ref, void *context);
c906108c 9089
a14ed312 9090static void threadlist_update_test_cmd (char *cmd, int tty);
c906108c 9091
a14ed312 9092static void init_remote_threadtests (void);
c906108c 9093
23860348 9094#define SAMPLE_THREAD 0x05060708 /* Truncated 64 bit threadid. */
c906108c
SS
9095
9096static void
fba45db2 9097threadset_test_cmd (char *cmd, int tty)
c906108c
SS
9098{
9099 int sample_thread = SAMPLE_THREAD;
9100
a3f17187 9101 printf_filtered (_("Remote threadset test\n"));
79d7f229 9102 set_general_thread (sample_thread);
c906108c
SS
9103}
9104
9105
9106static void
fba45db2 9107threadalive_test (char *cmd, int tty)
c906108c
SS
9108{
9109 int sample_thread = SAMPLE_THREAD;
79d7f229
PA
9110 int pid = ptid_get_pid (inferior_ptid);
9111 ptid_t ptid = ptid_build (pid, 0, sample_thread);
c906108c 9112
79d7f229 9113 if (remote_thread_alive (ptid))
c906108c
SS
9114 printf_filtered ("PASS: Thread alive test\n");
9115 else
9116 printf_filtered ("FAIL: Thread alive test\n");
9117}
9118
23860348 9119void output_threadid (char *title, threadref *ref);
c906108c
SS
9120
9121void
fba45db2 9122output_threadid (char *title, threadref *ref)
c906108c
SS
9123{
9124 char hexid[20];
9125
23860348 9126 pack_threadid (&hexid[0], ref); /* Convert threead id into hex. */
c906108c
SS
9127 hexid[16] = 0;
9128 printf_filtered ("%s %s\n", title, (&hexid[0]));
9129}
9130
9131static void
fba45db2 9132threadlist_test_cmd (char *cmd, int tty)
c906108c
SS
9133{
9134 int startflag = 1;
9135 threadref nextthread;
9136 int done, result_count;
9137 threadref threadlist[3];
9138
9139 printf_filtered ("Remote Threadlist test\n");
9140 if (!remote_get_threadlist (startflag, &nextthread, 3, &done,
9141 &result_count, &threadlist[0]))
9142 printf_filtered ("FAIL: threadlist test\n");
9143 else
9144 {
9145 threadref *scan = threadlist;
9146 threadref *limit = scan + result_count;
9147
9148 while (scan < limit)
9149 output_threadid (" thread ", scan++);
9150 }
9151}
9152
9153void
fba45db2 9154display_thread_info (struct gdb_ext_thread_info *info)
c906108c
SS
9155{
9156 output_threadid ("Threadid: ", &info->threadid);
9157 printf_filtered ("Name: %s\n ", info->shortname);
9158 printf_filtered ("State: %s\n", info->display);
9159 printf_filtered ("other: %s\n\n", info->more_display);
9160}
9161
9162int
fba45db2 9163get_and_display_threadinfo (threadref *ref)
c906108c
SS
9164{
9165 int result;
9166 int set;
9167 struct gdb_ext_thread_info threadinfo;
9168
9169 set = TAG_THREADID | TAG_EXISTS | TAG_THREADNAME
9170 | TAG_MOREDISPLAY | TAG_DISPLAY;
9171 if (0 != (result = remote_get_threadinfo (ref, set, &threadinfo)))
9172 display_thread_info (&threadinfo);
9173 return result;
9174}
9175
9176static void
fba45db2 9177threadinfo_test_cmd (char *cmd, int tty)
c906108c
SS
9178{
9179 int athread = SAMPLE_THREAD;
9180 threadref thread;
9181 int set;
9182
9183 int_to_threadref (&thread, athread);
9184 printf_filtered ("Remote Threadinfo test\n");
9185 if (!get_and_display_threadinfo (&thread))
9186 printf_filtered ("FAIL cannot get thread info\n");
9187}
9188
9189static int
fba45db2 9190thread_display_step (threadref *ref, void *context)
c906108c
SS
9191{
9192 /* output_threadid(" threadstep ",ref); *//* simple test */
9193 return get_and_display_threadinfo (ref);
9194}
9195
9196static void
fba45db2 9197threadlist_update_test_cmd (char *cmd, int tty)
c906108c
SS
9198{
9199 printf_filtered ("Remote Threadlist update test\n");
9200 remote_threadlist_iterator (thread_display_step, 0, CRAZY_MAX_THREADS);
9201}
9202
9203static void
9204init_remote_threadtests (void)
9205{
3e43a32a
MS
9206 add_com ("tlist", class_obscure, threadlist_test_cmd,
9207 _("Fetch and print the remote list of "
9208 "thread identifiers, one pkt only"));
c906108c 9209 add_com ("tinfo", class_obscure, threadinfo_test_cmd,
1bedd215 9210 _("Fetch and display info about one thread"));
c906108c 9211 add_com ("tset", class_obscure, threadset_test_cmd,
1bedd215 9212 _("Test setting to a different thread"));
c906108c 9213 add_com ("tupd", class_obscure, threadlist_update_test_cmd,
1bedd215 9214 _("Iterate through updating all remote thread info"));
c906108c 9215 add_com ("talive", class_obscure, threadalive_test,
1bedd215 9216 _(" Remote thread alive test "));
c906108c
SS
9217}
9218
9219#endif /* 0 */
9220
f3fb8c85
MS
9221/* Convert a thread ID to a string. Returns the string in a static
9222 buffer. */
9223
9224static char *
117de6a9 9225remote_pid_to_str (struct target_ops *ops, ptid_t ptid)
f3fb8c85 9226{
79d7f229 9227 static char buf[64];
82f73884 9228 struct remote_state *rs = get_remote_state ();
f3fb8c85 9229
7cee1e54
PA
9230 if (ptid_equal (ptid, null_ptid))
9231 return normal_pid_to_str (ptid);
9232 else if (ptid_is_pid (ptid))
ecd0ada5
PA
9233 {
9234 /* Printing an inferior target id. */
9235
9236 /* When multi-process extensions are off, there's no way in the
9237 remote protocol to know the remote process id, if there's any
9238 at all. There's one exception --- when we're connected with
9239 target extended-remote, and we manually attached to a process
9240 with "attach PID". We don't record anywhere a flag that
9241 allows us to distinguish that case from the case of
9242 connecting with extended-remote and the stub already being
9243 attached to a process, and reporting yes to qAttached, hence
9244 no smart special casing here. */
9245 if (!remote_multi_process_p (rs))
9246 {
9247 xsnprintf (buf, sizeof buf, "Remote target");
9248 return buf;
9249 }
9250
9251 return normal_pid_to_str (ptid);
82f73884 9252 }
ecd0ada5 9253 else
79d7f229 9254 {
ecd0ada5
PA
9255 if (ptid_equal (magic_null_ptid, ptid))
9256 xsnprintf (buf, sizeof buf, "Thread <main>");
901f9912 9257 else if (rs->extended && remote_multi_process_p (rs))
ecd0ada5
PA
9258 xsnprintf (buf, sizeof buf, "Thread %d.%ld",
9259 ptid_get_pid (ptid), ptid_get_tid (ptid));
9260 else
9261 xsnprintf (buf, sizeof buf, "Thread %ld",
9262 ptid_get_tid (ptid));
79d7f229
PA
9263 return buf;
9264 }
f3fb8c85
MS
9265}
9266
38691318
KB
9267/* Get the address of the thread local variable in OBJFILE which is
9268 stored at OFFSET within the thread local storage for thread PTID. */
9269
9270static CORE_ADDR
117de6a9
PA
9271remote_get_thread_local_address (struct target_ops *ops,
9272 ptid_t ptid, CORE_ADDR lm, CORE_ADDR offset)
38691318 9273{
444abaca 9274 if (remote_protocol_packets[PACKET_qGetTLSAddr].support != PACKET_DISABLE)
38691318
KB
9275 {
9276 struct remote_state *rs = get_remote_state ();
6d820c5c 9277 char *p = rs->buf;
82f73884 9278 char *endp = rs->buf + get_remote_packet_size ();
571dd617 9279 enum packet_result result;
38691318
KB
9280
9281 strcpy (p, "qGetTLSAddr:");
9282 p += strlen (p);
82f73884 9283 p = write_ptid (p, endp, ptid);
38691318
KB
9284 *p++ = ',';
9285 p += hexnumstr (p, offset);
9286 *p++ = ',';
9287 p += hexnumstr (p, lm);
9288 *p++ = '\0';
9289
6d820c5c
DJ
9290 putpkt (rs->buf);
9291 getpkt (&rs->buf, &rs->buf_size, 0);
3e43a32a
MS
9292 result = packet_ok (rs->buf,
9293 &remote_protocol_packets[PACKET_qGetTLSAddr]);
571dd617 9294 if (result == PACKET_OK)
38691318
KB
9295 {
9296 ULONGEST result;
9297
6d820c5c 9298 unpack_varlen_hex (rs->buf, &result);
38691318
KB
9299 return result;
9300 }
571dd617 9301 else if (result == PACKET_UNKNOWN)
109c3e39
AC
9302 throw_error (TLS_GENERIC_ERROR,
9303 _("Remote target doesn't support qGetTLSAddr packet"));
38691318 9304 else
109c3e39
AC
9305 throw_error (TLS_GENERIC_ERROR,
9306 _("Remote target failed to process qGetTLSAddr request"));
38691318
KB
9307 }
9308 else
109c3e39
AC
9309 throw_error (TLS_GENERIC_ERROR,
9310 _("TLS not supported or disabled on this target"));
38691318
KB
9311 /* Not reached. */
9312 return 0;
9313}
9314
711e434b
PM
9315/* Provide thread local base, i.e. Thread Information Block address.
9316 Returns 1 if ptid is found and thread_local_base is non zero. */
9317
70221824 9318static int
711e434b
PM
9319remote_get_tib_address (ptid_t ptid, CORE_ADDR *addr)
9320{
9321 if (remote_protocol_packets[PACKET_qGetTIBAddr].support != PACKET_DISABLE)
9322 {
9323 struct remote_state *rs = get_remote_state ();
9324 char *p = rs->buf;
9325 char *endp = rs->buf + get_remote_packet_size ();
9326 enum packet_result result;
9327
9328 strcpy (p, "qGetTIBAddr:");
9329 p += strlen (p);
9330 p = write_ptid (p, endp, ptid);
9331 *p++ = '\0';
9332
9333 putpkt (rs->buf);
9334 getpkt (&rs->buf, &rs->buf_size, 0);
9335 result = packet_ok (rs->buf,
9336 &remote_protocol_packets[PACKET_qGetTIBAddr]);
9337 if (result == PACKET_OK)
9338 {
9339 ULONGEST result;
9340
9341 unpack_varlen_hex (rs->buf, &result);
9342 if (addr)
9343 *addr = (CORE_ADDR) result;
9344 return 1;
9345 }
9346 else if (result == PACKET_UNKNOWN)
9347 error (_("Remote target doesn't support qGetTIBAddr packet"));
9348 else
9349 error (_("Remote target failed to process qGetTIBAddr request"));
9350 }
9351 else
9352 error (_("qGetTIBAddr not supported or disabled on this target"));
9353 /* Not reached. */
9354 return 0;
9355}
9356
29709017
DJ
9357/* Support for inferring a target description based on the current
9358 architecture and the size of a 'g' packet. While the 'g' packet
9359 can have any size (since optional registers can be left off the
9360 end), some sizes are easily recognizable given knowledge of the
9361 approximate architecture. */
9362
9363struct remote_g_packet_guess
9364{
9365 int bytes;
9366 const struct target_desc *tdesc;
9367};
9368typedef struct remote_g_packet_guess remote_g_packet_guess_s;
9369DEF_VEC_O(remote_g_packet_guess_s);
9370
9371struct remote_g_packet_data
9372{
9373 VEC(remote_g_packet_guess_s) *guesses;
9374};
9375
9376static struct gdbarch_data *remote_g_packet_data_handle;
9377
9378static void *
9379remote_g_packet_data_init (struct obstack *obstack)
9380{
9381 return OBSTACK_ZALLOC (obstack, struct remote_g_packet_data);
9382}
9383
9384void
9385register_remote_g_packet_guess (struct gdbarch *gdbarch, int bytes,
9386 const struct target_desc *tdesc)
9387{
9388 struct remote_g_packet_data *data
9389 = gdbarch_data (gdbarch, remote_g_packet_data_handle);
9390 struct remote_g_packet_guess new_guess, *guess;
9391 int ix;
9392
9393 gdb_assert (tdesc != NULL);
9394
9395 for (ix = 0;
9396 VEC_iterate (remote_g_packet_guess_s, data->guesses, ix, guess);
9397 ix++)
9398 if (guess->bytes == bytes)
9399 internal_error (__FILE__, __LINE__,
9b20d036 9400 _("Duplicate g packet description added for size %d"),
29709017
DJ
9401 bytes);
9402
9403 new_guess.bytes = bytes;
9404 new_guess.tdesc = tdesc;
9405 VEC_safe_push (remote_g_packet_guess_s, data->guesses, &new_guess);
9406}
9407
d962ef82
DJ
9408/* Return 1 if remote_read_description would do anything on this target
9409 and architecture, 0 otherwise. */
9410
9411static int
9412remote_read_description_p (struct target_ops *target)
9413{
9414 struct remote_g_packet_data *data
f5656ead 9415 = gdbarch_data (target_gdbarch (), remote_g_packet_data_handle);
d962ef82
DJ
9416
9417 if (!VEC_empty (remote_g_packet_guess_s, data->guesses))
9418 return 1;
9419
9420 return 0;
9421}
9422
29709017
DJ
9423static const struct target_desc *
9424remote_read_description (struct target_ops *target)
9425{
9426 struct remote_g_packet_data *data
f5656ead 9427 = gdbarch_data (target_gdbarch (), remote_g_packet_data_handle);
29709017 9428
d962ef82
DJ
9429 /* Do not try this during initial connection, when we do not know
9430 whether there is a running but stopped thread. */
9431 if (!target_has_execution || ptid_equal (inferior_ptid, null_ptid))
9432 return NULL;
9433
29709017
DJ
9434 if (!VEC_empty (remote_g_packet_guess_s, data->guesses))
9435 {
9436 struct remote_g_packet_guess *guess;
9437 int ix;
9438 int bytes = send_g_packet ();
9439
9440 for (ix = 0;
9441 VEC_iterate (remote_g_packet_guess_s, data->guesses, ix, guess);
9442 ix++)
9443 if (guess->bytes == bytes)
9444 return guess->tdesc;
9445
9446 /* We discard the g packet. A minor optimization would be to
9447 hold on to it, and fill the register cache once we have selected
9448 an architecture, but it's too tricky to do safely. */
9449 }
9450
9451 return NULL;
9452}
9453
a6b151f1
DJ
9454/* Remote file transfer support. This is host-initiated I/O, not
9455 target-initiated; for target-initiated, see remote-fileio.c. */
9456
9457/* If *LEFT is at least the length of STRING, copy STRING to
9458 *BUFFER, update *BUFFER to point to the new end of the buffer, and
9459 decrease *LEFT. Otherwise raise an error. */
9460
9461static void
9462remote_buffer_add_string (char **buffer, int *left, char *string)
9463{
9464 int len = strlen (string);
9465
9466 if (len > *left)
9467 error (_("Packet too long for target."));
9468
9469 memcpy (*buffer, string, len);
9470 *buffer += len;
9471 *left -= len;
9472
9473 /* NUL-terminate the buffer as a convenience, if there is
9474 room. */
9475 if (*left)
9476 **buffer = '\0';
9477}
9478
9479/* If *LEFT is large enough, hex encode LEN bytes from BYTES into
9480 *BUFFER, update *BUFFER to point to the new end of the buffer, and
9481 decrease *LEFT. Otherwise raise an error. */
9482
9483static void
9484remote_buffer_add_bytes (char **buffer, int *left, const gdb_byte *bytes,
9485 int len)
9486{
9487 if (2 * len > *left)
9488 error (_("Packet too long for target."));
9489
9490 bin2hex (bytes, *buffer, len);
9491 *buffer += 2 * len;
9492 *left -= 2 * len;
9493
9494 /* NUL-terminate the buffer as a convenience, if there is
9495 room. */
9496 if (*left)
9497 **buffer = '\0';
9498}
9499
9500/* If *LEFT is large enough, convert VALUE to hex and add it to
9501 *BUFFER, update *BUFFER to point to the new end of the buffer, and
9502 decrease *LEFT. Otherwise raise an error. */
9503
9504static void
9505remote_buffer_add_int (char **buffer, int *left, ULONGEST value)
9506{
9507 int len = hexnumlen (value);
9508
9509 if (len > *left)
9510 error (_("Packet too long for target."));
9511
9512 hexnumstr (*buffer, value);
9513 *buffer += len;
9514 *left -= len;
9515
9516 /* NUL-terminate the buffer as a convenience, if there is
9517 room. */
9518 if (*left)
9519 **buffer = '\0';
9520}
9521
9522/* Parse an I/O result packet from BUFFER. Set RETCODE to the return
9523 value, *REMOTE_ERRNO to the remote error number or zero if none
9524 was included, and *ATTACHMENT to point to the start of the annex
9525 if any. The length of the packet isn't needed here; there may
9526 be NUL bytes in BUFFER, but they will be after *ATTACHMENT.
9527
9528 Return 0 if the packet could be parsed, -1 if it could not. If
9529 -1 is returned, the other variables may not be initialized. */
9530
9531static int
9532remote_hostio_parse_result (char *buffer, int *retcode,
9533 int *remote_errno, char **attachment)
9534{
9535 char *p, *p2;
9536
9537 *remote_errno = 0;
9538 *attachment = NULL;
9539
9540 if (buffer[0] != 'F')
9541 return -1;
9542
9543 errno = 0;
9544 *retcode = strtol (&buffer[1], &p, 16);
9545 if (errno != 0 || p == &buffer[1])
9546 return -1;
9547
9548 /* Check for ",errno". */
9549 if (*p == ',')
9550 {
9551 errno = 0;
9552 *remote_errno = strtol (p + 1, &p2, 16);
9553 if (errno != 0 || p + 1 == p2)
9554 return -1;
9555 p = p2;
9556 }
9557
9558 /* Check for ";attachment". If there is no attachment, the
9559 packet should end here. */
9560 if (*p == ';')
9561 {
9562 *attachment = p + 1;
9563 return 0;
9564 }
9565 else if (*p == '\0')
9566 return 0;
9567 else
9568 return -1;
9569}
9570
9571/* Send a prepared I/O packet to the target and read its response.
9572 The prepared packet is in the global RS->BUF before this function
9573 is called, and the answer is there when we return.
9574
9575 COMMAND_BYTES is the length of the request to send, which may include
9576 binary data. WHICH_PACKET is the packet configuration to check
9577 before attempting a packet. If an error occurs, *REMOTE_ERRNO
9578 is set to the error number and -1 is returned. Otherwise the value
9579 returned by the function is returned.
9580
9581 ATTACHMENT and ATTACHMENT_LEN should be non-NULL if and only if an
9582 attachment is expected; an error will be reported if there's a
9583 mismatch. If one is found, *ATTACHMENT will be set to point into
9584 the packet buffer and *ATTACHMENT_LEN will be set to the
9585 attachment's length. */
9586
9587static int
9588remote_hostio_send_command (int command_bytes, int which_packet,
9589 int *remote_errno, char **attachment,
9590 int *attachment_len)
9591{
9592 struct remote_state *rs = get_remote_state ();
9593 int ret, bytes_read;
9594 char *attachment_tmp;
9595
f1838a98
UW
9596 if (!remote_desc
9597 || remote_protocol_packets[which_packet].support == PACKET_DISABLE)
a6b151f1
DJ
9598 {
9599 *remote_errno = FILEIO_ENOSYS;
9600 return -1;
9601 }
9602
9603 putpkt_binary (rs->buf, command_bytes);
9604 bytes_read = getpkt_sane (&rs->buf, &rs->buf_size, 0);
9605
9606 /* If it timed out, something is wrong. Don't try to parse the
9607 buffer. */
9608 if (bytes_read < 0)
9609 {
9610 *remote_errno = FILEIO_EINVAL;
9611 return -1;
9612 }
9613
9614 switch (packet_ok (rs->buf, &remote_protocol_packets[which_packet]))
9615 {
9616 case PACKET_ERROR:
9617 *remote_errno = FILEIO_EINVAL;
9618 return -1;
9619 case PACKET_UNKNOWN:
9620 *remote_errno = FILEIO_ENOSYS;
9621 return -1;
9622 case PACKET_OK:
9623 break;
9624 }
9625
9626 if (remote_hostio_parse_result (rs->buf, &ret, remote_errno,
9627 &attachment_tmp))
9628 {
9629 *remote_errno = FILEIO_EINVAL;
9630 return -1;
9631 }
9632
9633 /* Make sure we saw an attachment if and only if we expected one. */
9634 if ((attachment_tmp == NULL && attachment != NULL)
9635 || (attachment_tmp != NULL && attachment == NULL))
9636 {
9637 *remote_errno = FILEIO_EINVAL;
9638 return -1;
9639 }
9640
9641 /* If an attachment was found, it must point into the packet buffer;
9642 work out how many bytes there were. */
9643 if (attachment_tmp != NULL)
9644 {
9645 *attachment = attachment_tmp;
9646 *attachment_len = bytes_read - (*attachment - rs->buf);
9647 }
9648
9649 return ret;
9650}
9651
9652/* Open FILENAME on the remote target, using FLAGS and MODE. Return a
9653 remote file descriptor, or -1 if an error occurs (and set
9654 *REMOTE_ERRNO). */
9655
9656static int
9657remote_hostio_open (const char *filename, int flags, int mode,
9658 int *remote_errno)
9659{
9660 struct remote_state *rs = get_remote_state ();
9661 char *p = rs->buf;
9662 int left = get_remote_packet_size () - 1;
9663
9664 remote_buffer_add_string (&p, &left, "vFile:open:");
9665
9666 remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
9667 strlen (filename));
9668 remote_buffer_add_string (&p, &left, ",");
9669
9670 remote_buffer_add_int (&p, &left, flags);
9671 remote_buffer_add_string (&p, &left, ",");
9672
9673 remote_buffer_add_int (&p, &left, mode);
9674
9675 return remote_hostio_send_command (p - rs->buf, PACKET_vFile_open,
9676 remote_errno, NULL, NULL);
9677}
9678
9679/* Write up to LEN bytes from WRITE_BUF to FD on the remote target.
9680 Return the number of bytes written, or -1 if an error occurs (and
9681 set *REMOTE_ERRNO). */
9682
9683static int
9684remote_hostio_pwrite (int fd, const gdb_byte *write_buf, int len,
9685 ULONGEST offset, int *remote_errno)
9686{
9687 struct remote_state *rs = get_remote_state ();
9688 char *p = rs->buf;
9689 int left = get_remote_packet_size ();
9690 int out_len;
9691
9692 remote_buffer_add_string (&p, &left, "vFile:pwrite:");
9693
9694 remote_buffer_add_int (&p, &left, fd);
9695 remote_buffer_add_string (&p, &left, ",");
9696
9697 remote_buffer_add_int (&p, &left, offset);
9698 remote_buffer_add_string (&p, &left, ",");
9699
9700 p += remote_escape_output (write_buf, len, p, &out_len,
9701 get_remote_packet_size () - (p - rs->buf));
9702
9703 return remote_hostio_send_command (p - rs->buf, PACKET_vFile_pwrite,
9704 remote_errno, NULL, NULL);
9705}
9706
9707/* Read up to LEN bytes FD on the remote target into READ_BUF
9708 Return the number of bytes read, or -1 if an error occurs (and
9709 set *REMOTE_ERRNO). */
9710
9711static int
9712remote_hostio_pread (int fd, gdb_byte *read_buf, int len,
9713 ULONGEST offset, int *remote_errno)
9714{
9715 struct remote_state *rs = get_remote_state ();
9716 char *p = rs->buf;
9717 char *attachment;
9718 int left = get_remote_packet_size ();
9719 int ret, attachment_len;
9720 int read_len;
9721
9722 remote_buffer_add_string (&p, &left, "vFile:pread:");
9723
9724 remote_buffer_add_int (&p, &left, fd);
9725 remote_buffer_add_string (&p, &left, ",");
9726
9727 remote_buffer_add_int (&p, &left, len);
9728 remote_buffer_add_string (&p, &left, ",");
9729
9730 remote_buffer_add_int (&p, &left, offset);
9731
9732 ret = remote_hostio_send_command (p - rs->buf, PACKET_vFile_pread,
9733 remote_errno, &attachment,
9734 &attachment_len);
9735
9736 if (ret < 0)
9737 return ret;
9738
9739 read_len = remote_unescape_input (attachment, attachment_len,
9740 read_buf, len);
9741 if (read_len != ret)
9742 error (_("Read returned %d, but %d bytes."), ret, (int) read_len);
9743
9744 return ret;
9745}
9746
9747/* Close FD on the remote target. Return 0, or -1 if an error occurs
9748 (and set *REMOTE_ERRNO). */
9749
9750static int
9751remote_hostio_close (int fd, int *remote_errno)
9752{
9753 struct remote_state *rs = get_remote_state ();
9754 char *p = rs->buf;
9755 int left = get_remote_packet_size () - 1;
9756
9757 remote_buffer_add_string (&p, &left, "vFile:close:");
9758
9759 remote_buffer_add_int (&p, &left, fd);
9760
9761 return remote_hostio_send_command (p - rs->buf, PACKET_vFile_close,
9762 remote_errno, NULL, NULL);
9763}
9764
9765/* Unlink FILENAME on the remote target. Return 0, or -1 if an error
9766 occurs (and set *REMOTE_ERRNO). */
9767
9768static int
9769remote_hostio_unlink (const char *filename, int *remote_errno)
9770{
9771 struct remote_state *rs = get_remote_state ();
9772 char *p = rs->buf;
9773 int left = get_remote_packet_size () - 1;
9774
9775 remote_buffer_add_string (&p, &left, "vFile:unlink:");
9776
9777 remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
9778 strlen (filename));
9779
9780 return remote_hostio_send_command (p - rs->buf, PACKET_vFile_unlink,
9781 remote_errno, NULL, NULL);
9782}
9783
b9e7b9c3
UW
9784/* Read value of symbolic link FILENAME on the remote target. Return
9785 a null-terminated string allocated via xmalloc, or NULL if an error
9786 occurs (and set *REMOTE_ERRNO). */
9787
9788static char *
9789remote_hostio_readlink (const char *filename, int *remote_errno)
9790{
9791 struct remote_state *rs = get_remote_state ();
9792 char *p = rs->buf;
9793 char *attachment;
9794 int left = get_remote_packet_size ();
9795 int len, attachment_len;
9796 int read_len;
9797 char *ret;
9798
9799 remote_buffer_add_string (&p, &left, "vFile:readlink:");
9800
9801 remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
9802 strlen (filename));
9803
9804 len = remote_hostio_send_command (p - rs->buf, PACKET_vFile_readlink,
9805 remote_errno, &attachment,
9806 &attachment_len);
9807
9808 if (len < 0)
9809 return NULL;
9810
9811 ret = xmalloc (len + 1);
9812
9813 read_len = remote_unescape_input (attachment, attachment_len,
9814 ret, len);
9815 if (read_len != len)
9816 error (_("Readlink returned %d, but %d bytes."), len, read_len);
9817
9818 ret[len] = '\0';
9819 return ret;
9820}
9821
a6b151f1
DJ
9822static int
9823remote_fileio_errno_to_host (int errnum)
9824{
9825 switch (errnum)
9826 {
9827 case FILEIO_EPERM:
9828 return EPERM;
9829 case FILEIO_ENOENT:
9830 return ENOENT;
9831 case FILEIO_EINTR:
9832 return EINTR;
9833 case FILEIO_EIO:
9834 return EIO;
9835 case FILEIO_EBADF:
9836 return EBADF;
9837 case FILEIO_EACCES:
9838 return EACCES;
9839 case FILEIO_EFAULT:
9840 return EFAULT;
9841 case FILEIO_EBUSY:
9842 return EBUSY;
9843 case FILEIO_EEXIST:
9844 return EEXIST;
9845 case FILEIO_ENODEV:
9846 return ENODEV;
9847 case FILEIO_ENOTDIR:
9848 return ENOTDIR;
9849 case FILEIO_EISDIR:
9850 return EISDIR;
9851 case FILEIO_EINVAL:
9852 return EINVAL;
9853 case FILEIO_ENFILE:
9854 return ENFILE;
9855 case FILEIO_EMFILE:
9856 return EMFILE;
9857 case FILEIO_EFBIG:
9858 return EFBIG;
9859 case FILEIO_ENOSPC:
9860 return ENOSPC;
9861 case FILEIO_ESPIPE:
9862 return ESPIPE;
9863 case FILEIO_EROFS:
9864 return EROFS;
9865 case FILEIO_ENOSYS:
9866 return ENOSYS;
9867 case FILEIO_ENAMETOOLONG:
9868 return ENAMETOOLONG;
9869 }
9870 return -1;
9871}
9872
9873static char *
9874remote_hostio_error (int errnum)
9875{
9876 int host_error = remote_fileio_errno_to_host (errnum);
9877
9878 if (host_error == -1)
9879 error (_("Unknown remote I/O error %d"), errnum);
9880 else
9881 error (_("Remote I/O error: %s"), safe_strerror (host_error));
9882}
9883
a6b151f1
DJ
9884static void
9885remote_hostio_close_cleanup (void *opaque)
9886{
9887 int fd = *(int *) opaque;
9888 int remote_errno;
9889
9890 remote_hostio_close (fd, &remote_errno);
9891}
9892
f1838a98
UW
9893
9894static void *
9895remote_bfd_iovec_open (struct bfd *abfd, void *open_closure)
9896{
9897 const char *filename = bfd_get_filename (abfd);
9898 int fd, remote_errno;
9899 int *stream;
9900
9901 gdb_assert (remote_filename_p (filename));
9902
9903 fd = remote_hostio_open (filename + 7, FILEIO_O_RDONLY, 0, &remote_errno);
9904 if (fd == -1)
9905 {
9906 errno = remote_fileio_errno_to_host (remote_errno);
9907 bfd_set_error (bfd_error_system_call);
9908 return NULL;
9909 }
9910
9911 stream = xmalloc (sizeof (int));
9912 *stream = fd;
9913 return stream;
9914}
9915
9916static int
9917remote_bfd_iovec_close (struct bfd *abfd, void *stream)
9918{
9919 int fd = *(int *)stream;
9920 int remote_errno;
9921
9922 xfree (stream);
9923
9924 /* Ignore errors on close; these may happen if the remote
9925 connection was already torn down. */
9926 remote_hostio_close (fd, &remote_errno);
9927
9928 return 1;
9929}
9930
9931static file_ptr
9932remote_bfd_iovec_pread (struct bfd *abfd, void *stream, void *buf,
9933 file_ptr nbytes, file_ptr offset)
9934{
9935 int fd = *(int *)stream;
9936 int remote_errno;
9937 file_ptr pos, bytes;
9938
9939 pos = 0;
9940 while (nbytes > pos)
9941 {
9942 bytes = remote_hostio_pread (fd, (char *)buf + pos, nbytes - pos,
9943 offset + pos, &remote_errno);
9944 if (bytes == 0)
9945 /* Success, but no bytes, means end-of-file. */
9946 break;
9947 if (bytes == -1)
9948 {
9949 errno = remote_fileio_errno_to_host (remote_errno);
9950 bfd_set_error (bfd_error_system_call);
9951 return -1;
9952 }
9953
9954 pos += bytes;
9955 }
9956
9957 return pos;
9958}
9959
9960static int
9961remote_bfd_iovec_stat (struct bfd *abfd, void *stream, struct stat *sb)
9962{
9963 /* FIXME: We should probably implement remote_hostio_stat. */
9964 sb->st_size = INT_MAX;
9965 return 0;
9966}
9967
9968int
9969remote_filename_p (const char *filename)
9970{
9971 return strncmp (filename, "remote:", 7) == 0;
9972}
9973
9974bfd *
9975remote_bfd_open (const char *remote_file, const char *target)
9976{
64c31149
TT
9977 bfd *abfd = gdb_bfd_openr_iovec (remote_file, target,
9978 remote_bfd_iovec_open, NULL,
9979 remote_bfd_iovec_pread,
9980 remote_bfd_iovec_close,
9981 remote_bfd_iovec_stat);
9982
a4453b7e 9983 return abfd;
f1838a98
UW
9984}
9985
a6b151f1
DJ
9986void
9987remote_file_put (const char *local_file, const char *remote_file, int from_tty)
9988{
9989 struct cleanup *back_to, *close_cleanup;
9990 int retcode, fd, remote_errno, bytes, io_size;
9991 FILE *file;
9992 gdb_byte *buffer;
9993 int bytes_in_buffer;
9994 int saw_eof;
9995 ULONGEST offset;
9996
9997 if (!remote_desc)
9998 error (_("command can only be used with remote target"));
9999
10000 file = fopen (local_file, "rb");
10001 if (file == NULL)
10002 perror_with_name (local_file);
7c8a8b04 10003 back_to = make_cleanup_fclose (file);
a6b151f1
DJ
10004
10005 fd = remote_hostio_open (remote_file, (FILEIO_O_WRONLY | FILEIO_O_CREAT
10006 | FILEIO_O_TRUNC),
10007 0700, &remote_errno);
10008 if (fd == -1)
10009 remote_hostio_error (remote_errno);
10010
10011 /* Send up to this many bytes at once. They won't all fit in the
10012 remote packet limit, so we'll transfer slightly fewer. */
10013 io_size = get_remote_packet_size ();
10014 buffer = xmalloc (io_size);
10015 make_cleanup (xfree, buffer);
10016
10017 close_cleanup = make_cleanup (remote_hostio_close_cleanup, &fd);
10018
10019 bytes_in_buffer = 0;
10020 saw_eof = 0;
10021 offset = 0;
10022 while (bytes_in_buffer || !saw_eof)
10023 {
10024 if (!saw_eof)
10025 {
3e43a32a
MS
10026 bytes = fread (buffer + bytes_in_buffer, 1,
10027 io_size - bytes_in_buffer,
a6b151f1
DJ
10028 file);
10029 if (bytes == 0)
10030 {
10031 if (ferror (file))
10032 error (_("Error reading %s."), local_file);
10033 else
10034 {
10035 /* EOF. Unless there is something still in the
10036 buffer from the last iteration, we are done. */
10037 saw_eof = 1;
10038 if (bytes_in_buffer == 0)
10039 break;
10040 }
10041 }
10042 }
10043 else
10044 bytes = 0;
10045
10046 bytes += bytes_in_buffer;
10047 bytes_in_buffer = 0;
10048
3e43a32a
MS
10049 retcode = remote_hostio_pwrite (fd, buffer, bytes,
10050 offset, &remote_errno);
a6b151f1
DJ
10051
10052 if (retcode < 0)
10053 remote_hostio_error (remote_errno);
10054 else if (retcode == 0)
10055 error (_("Remote write of %d bytes returned 0!"), bytes);
10056 else if (retcode < bytes)
10057 {
10058 /* Short write. Save the rest of the read data for the next
10059 write. */
10060 bytes_in_buffer = bytes - retcode;
10061 memmove (buffer, buffer + retcode, bytes_in_buffer);
10062 }
10063
10064 offset += retcode;
10065 }
10066
10067 discard_cleanups (close_cleanup);
10068 if (remote_hostio_close (fd, &remote_errno))
10069 remote_hostio_error (remote_errno);
10070
10071 if (from_tty)
10072 printf_filtered (_("Successfully sent file \"%s\".\n"), local_file);
10073 do_cleanups (back_to);
10074}
10075
10076void
10077remote_file_get (const char *remote_file, const char *local_file, int from_tty)
10078{
10079 struct cleanup *back_to, *close_cleanup;
cea39f65 10080 int fd, remote_errno, bytes, io_size;
a6b151f1
DJ
10081 FILE *file;
10082 gdb_byte *buffer;
10083 ULONGEST offset;
10084
10085 if (!remote_desc)
10086 error (_("command can only be used with remote target"));
10087
10088 fd = remote_hostio_open (remote_file, FILEIO_O_RDONLY, 0, &remote_errno);
10089 if (fd == -1)
10090 remote_hostio_error (remote_errno);
10091
10092 file = fopen (local_file, "wb");
10093 if (file == NULL)
10094 perror_with_name (local_file);
7c8a8b04 10095 back_to = make_cleanup_fclose (file);
a6b151f1
DJ
10096
10097 /* Send up to this many bytes at once. They won't all fit in the
10098 remote packet limit, so we'll transfer slightly fewer. */
10099 io_size = get_remote_packet_size ();
10100 buffer = xmalloc (io_size);
10101 make_cleanup (xfree, buffer);
10102
10103 close_cleanup = make_cleanup (remote_hostio_close_cleanup, &fd);
10104
10105 offset = 0;
10106 while (1)
10107 {
10108 bytes = remote_hostio_pread (fd, buffer, io_size, offset, &remote_errno);
10109 if (bytes == 0)
10110 /* Success, but no bytes, means end-of-file. */
10111 break;
10112 if (bytes == -1)
10113 remote_hostio_error (remote_errno);
10114
10115 offset += bytes;
10116
10117 bytes = fwrite (buffer, 1, bytes, file);
10118 if (bytes == 0)
10119 perror_with_name (local_file);
10120 }
10121
10122 discard_cleanups (close_cleanup);
10123 if (remote_hostio_close (fd, &remote_errno))
10124 remote_hostio_error (remote_errno);
10125
10126 if (from_tty)
10127 printf_filtered (_("Successfully fetched file \"%s\".\n"), remote_file);
10128 do_cleanups (back_to);
10129}
10130
10131void
10132remote_file_delete (const char *remote_file, int from_tty)
10133{
10134 int retcode, remote_errno;
10135
10136 if (!remote_desc)
10137 error (_("command can only be used with remote target"));
10138
10139 retcode = remote_hostio_unlink (remote_file, &remote_errno);
10140 if (retcode == -1)
10141 remote_hostio_error (remote_errno);
10142
10143 if (from_tty)
10144 printf_filtered (_("Successfully deleted file \"%s\".\n"), remote_file);
10145}
10146
10147static void
10148remote_put_command (char *args, int from_tty)
10149{
10150 struct cleanup *back_to;
10151 char **argv;
10152
d1a41061
PP
10153 if (args == NULL)
10154 error_no_arg (_("file to put"));
10155
10156 argv = gdb_buildargv (args);
a6b151f1
DJ
10157 back_to = make_cleanup_freeargv (argv);
10158 if (argv[0] == NULL || argv[1] == NULL || argv[2] != NULL)
10159 error (_("Invalid parameters to remote put"));
10160
10161 remote_file_put (argv[0], argv[1], from_tty);
10162
10163 do_cleanups (back_to);
10164}
10165
10166static void
10167remote_get_command (char *args, int from_tty)
10168{
10169 struct cleanup *back_to;
10170 char **argv;
10171
d1a41061
PP
10172 if (args == NULL)
10173 error_no_arg (_("file to get"));
10174
10175 argv = gdb_buildargv (args);
a6b151f1
DJ
10176 back_to = make_cleanup_freeargv (argv);
10177 if (argv[0] == NULL || argv[1] == NULL || argv[2] != NULL)
10178 error (_("Invalid parameters to remote get"));
10179
10180 remote_file_get (argv[0], argv[1], from_tty);
10181
10182 do_cleanups (back_to);
10183}
10184
10185static void
10186remote_delete_command (char *args, int from_tty)
10187{
10188 struct cleanup *back_to;
10189 char **argv;
10190
d1a41061
PP
10191 if (args == NULL)
10192 error_no_arg (_("file to delete"));
10193
10194 argv = gdb_buildargv (args);
a6b151f1
DJ
10195 back_to = make_cleanup_freeargv (argv);
10196 if (argv[0] == NULL || argv[1] != NULL)
10197 error (_("Invalid parameters to remote delete"));
10198
10199 remote_file_delete (argv[0], from_tty);
10200
10201 do_cleanups (back_to);
10202}
10203
10204static void
10205remote_command (char *args, int from_tty)
10206{
10207 help_list (remote_cmdlist, "remote ", -1, gdb_stdout);
10208}
10209
b2175913
MS
10210static int
10211remote_can_execute_reverse (void)
10212{
40ab02ce
MS
10213 if (remote_protocol_packets[PACKET_bs].support == PACKET_ENABLE
10214 || remote_protocol_packets[PACKET_bc].support == PACKET_ENABLE)
10215 return 1;
10216 else
10217 return 0;
b2175913
MS
10218}
10219
74531fed
PA
10220static int
10221remote_supports_non_stop (void)
10222{
10223 return 1;
10224}
10225
03583c20
UW
10226static int
10227remote_supports_disable_randomization (void)
10228{
10229 /* Only supported in extended mode. */
10230 return 0;
10231}
10232
8a305172
PA
10233static int
10234remote_supports_multi_process (void)
10235{
10236 struct remote_state *rs = get_remote_state ();
a744cf53 10237
901f9912
UW
10238 /* Only extended-remote handles being attached to multiple
10239 processes, even though plain remote can use the multi-process
10240 thread id extensions, so that GDB knows the target process's
10241 PID. */
10242 return rs->extended && remote_multi_process_p (rs);
8a305172
PA
10243}
10244
70221824 10245static int
782b2b07
SS
10246remote_supports_cond_tracepoints (void)
10247{
10248 struct remote_state *rs = get_remote_state ();
a744cf53 10249
782b2b07
SS
10250 return rs->cond_tracepoints;
10251}
10252
3788aec7
LM
10253static int
10254remote_supports_cond_breakpoints (void)
10255{
10256 struct remote_state *rs = get_remote_state ();
10257
10258 return rs->cond_breakpoints;
10259}
10260
70221824 10261static int
7a697b8d
SS
10262remote_supports_fast_tracepoints (void)
10263{
10264 struct remote_state *rs = get_remote_state ();
a744cf53 10265
7a697b8d
SS
10266 return rs->fast_tracepoints;
10267}
10268
0fb4aa4b
PA
10269static int
10270remote_supports_static_tracepoints (void)
10271{
10272 struct remote_state *rs = get_remote_state ();
10273
10274 return rs->static_tracepoints;
10275}
10276
1e4d1764
YQ
10277static int
10278remote_supports_install_in_trace (void)
10279{
10280 struct remote_state *rs = get_remote_state ();
10281
10282 return rs->install_in_trace;
10283}
10284
d248b706
KY
10285static int
10286remote_supports_enable_disable_tracepoint (void)
10287{
10288 struct remote_state *rs = get_remote_state ();
10289
10290 return rs->enable_disable_tracepoints;
10291}
10292
3065dfb6
SS
10293static int
10294remote_supports_string_tracing (void)
10295{
10296 struct remote_state *rs = get_remote_state ();
10297
10298 return rs->string_tracing;
10299}
10300
d3ce09f5
SS
10301static int
10302remote_can_run_breakpoint_commands (void)
10303{
10304 struct remote_state *rs = get_remote_state ();
10305
10306 return rs->breakpoint_commands;
10307}
10308
35b1e5cc 10309static void
ad91cd99 10310remote_trace_init (void)
35b1e5cc
SS
10311{
10312 putpkt ("QTinit");
10313 remote_get_noisy_reply (&target_buf, &target_buf_size);
ad91cd99 10314 if (strcmp (target_buf, "OK") != 0)
35b1e5cc
SS
10315 error (_("Target does not support this command."));
10316}
10317
10318static void free_actions_list (char **actions_list);
10319static void free_actions_list_cleanup_wrapper (void *);
10320static void
10321free_actions_list_cleanup_wrapper (void *al)
10322{
10323 free_actions_list (al);
10324}
10325
10326static void
10327free_actions_list (char **actions_list)
10328{
10329 int ndx;
10330
10331 if (actions_list == 0)
10332 return;
10333
10334 for (ndx = 0; actions_list[ndx]; ndx++)
10335 xfree (actions_list[ndx]);
10336
10337 xfree (actions_list);
10338}
10339
409873ef
SS
10340/* Recursive routine to walk through command list including loops, and
10341 download packets for each command. */
10342
10343static void
10344remote_download_command_source (int num, ULONGEST addr,
10345 struct command_line *cmds)
10346{
10347 struct remote_state *rs = get_remote_state ();
10348 struct command_line *cmd;
10349
10350 for (cmd = cmds; cmd; cmd = cmd->next)
10351 {
0df8b418 10352 QUIT; /* Allow user to bail out with ^C. */
409873ef
SS
10353 strcpy (rs->buf, "QTDPsrc:");
10354 encode_source_string (num, addr, "cmd", cmd->line,
10355 rs->buf + strlen (rs->buf),
10356 rs->buf_size - strlen (rs->buf));
10357 putpkt (rs->buf);
10358 remote_get_noisy_reply (&target_buf, &target_buf_size);
10359 if (strcmp (target_buf, "OK"))
10360 warning (_("Target does not support source download."));
10361
10362 if (cmd->control_type == while_control
10363 || cmd->control_type == while_stepping_control)
10364 {
10365 remote_download_command_source (num, addr, *cmd->body_list);
10366
0df8b418 10367 QUIT; /* Allow user to bail out with ^C. */
409873ef
SS
10368 strcpy (rs->buf, "QTDPsrc:");
10369 encode_source_string (num, addr, "cmd", "end",
10370 rs->buf + strlen (rs->buf),
10371 rs->buf_size - strlen (rs->buf));
10372 putpkt (rs->buf);
10373 remote_get_noisy_reply (&target_buf, &target_buf_size);
10374 if (strcmp (target_buf, "OK"))
10375 warning (_("Target does not support source download."));
10376 }
10377 }
10378}
10379
35b1e5cc 10380static void
e8ba3115 10381remote_download_tracepoint (struct bp_location *loc)
35b1e5cc 10382{
bba74b36 10383#define BUF_SIZE 2048
e8ba3115 10384
35b1e5cc 10385 CORE_ADDR tpaddr;
409873ef 10386 char addrbuf[40];
bba74b36 10387 char buf[BUF_SIZE];
35b1e5cc
SS
10388 char **tdp_actions;
10389 char **stepping_actions;
10390 int ndx;
10391 struct cleanup *old_chain = NULL;
10392 struct agent_expr *aexpr;
10393 struct cleanup *aexpr_chain = NULL;
10394 char *pkt;
e8ba3115 10395 struct breakpoint *b = loc->owner;
d9b3f62e 10396 struct tracepoint *t = (struct tracepoint *) b;
35b1e5cc 10397
e8ba3115
YQ
10398 encode_actions (loc->owner, loc, &tdp_actions, &stepping_actions);
10399 old_chain = make_cleanup (free_actions_list_cleanup_wrapper,
10400 tdp_actions);
10401 (void) make_cleanup (free_actions_list_cleanup_wrapper,
10402 stepping_actions);
10403
10404 tpaddr = loc->address;
10405 sprintf_vma (addrbuf, tpaddr);
bba74b36
YQ
10406 xsnprintf (buf, BUF_SIZE, "QTDP:%x:%s:%c:%lx:%x", b->number,
10407 addrbuf, /* address */
10408 (b->enable_state == bp_enabled ? 'E' : 'D'),
10409 t->step_count, t->pass_count);
e8ba3115
YQ
10410 /* Fast tracepoints are mostly handled by the target, but we can
10411 tell the target how big of an instruction block should be moved
10412 around. */
10413 if (b->type == bp_fast_tracepoint)
10414 {
10415 /* Only test for support at download time; we may not know
10416 target capabilities at definition time. */
10417 if (remote_supports_fast_tracepoints ())
35b1e5cc 10418 {
e8ba3115 10419 int isize;
35b1e5cc 10420
f5656ead 10421 if (gdbarch_fast_tracepoint_valid_at (target_gdbarch (),
e8ba3115 10422 tpaddr, &isize, NULL))
bba74b36
YQ
10423 xsnprintf (buf + strlen (buf), BUF_SIZE - strlen (buf), ":F%x",
10424 isize);
35b1e5cc 10425 else
e8ba3115
YQ
10426 /* If it passed validation at definition but fails now,
10427 something is very wrong. */
10428 internal_error (__FILE__, __LINE__,
10429 _("Fast tracepoint not "
10430 "valid during download"));
35b1e5cc 10431 }
e8ba3115
YQ
10432 else
10433 /* Fast tracepoints are functionally identical to regular
10434 tracepoints, so don't take lack of support as a reason to
10435 give up on the trace run. */
10436 warning (_("Target does not support fast tracepoints, "
10437 "downloading %d as regular tracepoint"), b->number);
10438 }
10439 else if (b->type == bp_static_tracepoint)
10440 {
10441 /* Only test for support at download time; we may not know
10442 target capabilities at definition time. */
10443 if (remote_supports_static_tracepoints ())
0fb4aa4b 10444 {
e8ba3115 10445 struct static_tracepoint_marker marker;
0fb4aa4b 10446
e8ba3115
YQ
10447 if (target_static_tracepoint_marker_at (tpaddr, &marker))
10448 strcat (buf, ":S");
0fb4aa4b 10449 else
e8ba3115 10450 error (_("Static tracepoint not valid during download"));
0fb4aa4b 10451 }
e8ba3115
YQ
10452 else
10453 /* Fast tracepoints are functionally identical to regular
10454 tracepoints, so don't take lack of support as a reason
10455 to give up on the trace run. */
10456 error (_("Target does not support static tracepoints"));
10457 }
10458 /* If the tracepoint has a conditional, make it into an agent
10459 expression and append to the definition. */
10460 if (loc->cond)
10461 {
10462 /* Only test support at download time, we may not know target
10463 capabilities at definition time. */
10464 if (remote_supports_cond_tracepoints ())
35b1e5cc 10465 {
e8ba3115
YQ
10466 aexpr = gen_eval_for_expr (tpaddr, loc->cond);
10467 aexpr_chain = make_cleanup_free_agent_expr (aexpr);
bba74b36
YQ
10468 xsnprintf (buf + strlen (buf), BUF_SIZE - strlen (buf), ":X%x,",
10469 aexpr->len);
e8ba3115
YQ
10470 pkt = buf + strlen (buf);
10471 for (ndx = 0; ndx < aexpr->len; ++ndx)
10472 pkt = pack_hex_byte (pkt, aexpr->buf[ndx]);
10473 *pkt = '\0';
10474 do_cleanups (aexpr_chain);
35b1e5cc 10475 }
e8ba3115
YQ
10476 else
10477 warning (_("Target does not support conditional tracepoints, "
10478 "ignoring tp %d cond"), b->number);
10479 }
35b1e5cc 10480
d9b3f62e 10481 if (b->commands || *default_collect)
e8ba3115
YQ
10482 strcat (buf, "-");
10483 putpkt (buf);
10484 remote_get_noisy_reply (&target_buf, &target_buf_size);
10485 if (strcmp (target_buf, "OK"))
10486 error (_("Target does not support tracepoints."));
35b1e5cc 10487
e8ba3115
YQ
10488 /* do_single_steps (t); */
10489 if (tdp_actions)
10490 {
10491 for (ndx = 0; tdp_actions[ndx]; ndx++)
35b1e5cc 10492 {
e8ba3115 10493 QUIT; /* Allow user to bail out with ^C. */
bba74b36
YQ
10494 xsnprintf (buf, BUF_SIZE, "QTDP:-%x:%s:%s%c",
10495 b->number, addrbuf, /* address */
10496 tdp_actions[ndx],
10497 ((tdp_actions[ndx + 1] || stepping_actions)
10498 ? '-' : 0));
e8ba3115
YQ
10499 putpkt (buf);
10500 remote_get_noisy_reply (&target_buf,
10501 &target_buf_size);
10502 if (strcmp (target_buf, "OK"))
10503 error (_("Error on target while setting tracepoints."));
35b1e5cc 10504 }
e8ba3115
YQ
10505 }
10506 if (stepping_actions)
10507 {
10508 for (ndx = 0; stepping_actions[ndx]; ndx++)
35b1e5cc 10509 {
e8ba3115 10510 QUIT; /* Allow user to bail out with ^C. */
bba74b36
YQ
10511 xsnprintf (buf, BUF_SIZE, "QTDP:-%x:%s:%s%s%s",
10512 b->number, addrbuf, /* address */
10513 ((ndx == 0) ? "S" : ""),
10514 stepping_actions[ndx],
10515 (stepping_actions[ndx + 1] ? "-" : ""));
e8ba3115
YQ
10516 putpkt (buf);
10517 remote_get_noisy_reply (&target_buf,
10518 &target_buf_size);
10519 if (strcmp (target_buf, "OK"))
10520 error (_("Error on target while setting tracepoints."));
35b1e5cc 10521 }
e8ba3115 10522 }
409873ef 10523
e8ba3115
YQ
10524 if (remote_protocol_packets[PACKET_TracepointSource].support
10525 == PACKET_ENABLE)
10526 {
10527 if (b->addr_string)
409873ef 10528 {
e8ba3115
YQ
10529 strcpy (buf, "QTDPsrc:");
10530 encode_source_string (b->number, loc->address,
10531 "at", b->addr_string, buf + strlen (buf),
10532 2048 - strlen (buf));
409873ef 10533
e8ba3115
YQ
10534 putpkt (buf);
10535 remote_get_noisy_reply (&target_buf, &target_buf_size);
10536 if (strcmp (target_buf, "OK"))
10537 warning (_("Target does not support source download."));
409873ef 10538 }
e8ba3115
YQ
10539 if (b->cond_string)
10540 {
10541 strcpy (buf, "QTDPsrc:");
10542 encode_source_string (b->number, loc->address,
10543 "cond", b->cond_string, buf + strlen (buf),
10544 2048 - strlen (buf));
10545 putpkt (buf);
10546 remote_get_noisy_reply (&target_buf, &target_buf_size);
10547 if (strcmp (target_buf, "OK"))
10548 warning (_("Target does not support source download."));
10549 }
10550 remote_download_command_source (b->number, loc->address,
10551 breakpoint_commands (b));
35b1e5cc 10552 }
e8ba3115
YQ
10553
10554 do_cleanups (old_chain);
35b1e5cc
SS
10555}
10556
1e4d1764
YQ
10557static int
10558remote_can_download_tracepoint (void)
10559{
1e51243a
PA
10560 struct remote_state *rs = get_remote_state ();
10561 struct trace_status *ts;
10562 int status;
10563
10564 /* Don't try to install tracepoints until we've relocated our
10565 symbols, and fetched and merged the target's tracepoint list with
10566 ours. */
10567 if (rs->starting_up)
10568 return 0;
10569
10570 ts = current_trace_status ();
10571 status = remote_get_trace_status (ts);
1e4d1764
YQ
10572
10573 if (status == -1 || !ts->running_known || !ts->running)
10574 return 0;
10575
10576 /* If we are in a tracing experiment, but remote stub doesn't support
10577 installing tracepoint in trace, we have to return. */
10578 if (!remote_supports_install_in_trace ())
10579 return 0;
10580
10581 return 1;
10582}
10583
10584
35b1e5cc
SS
10585static void
10586remote_download_trace_state_variable (struct trace_state_variable *tsv)
10587{
10588 struct remote_state *rs = get_remote_state ();
00bf0b85 10589 char *p;
35b1e5cc 10590
bba74b36
YQ
10591 xsnprintf (rs->buf, get_remote_packet_size (), "QTDV:%x:%s:%x:",
10592 tsv->number, phex ((ULONGEST) tsv->initial_value, 8),
10593 tsv->builtin);
00bf0b85
SS
10594 p = rs->buf + strlen (rs->buf);
10595 if ((p - rs->buf) + strlen (tsv->name) * 2 >= get_remote_packet_size ())
10596 error (_("Trace state variable name too long for tsv definition packet"));
10597 p += 2 * bin2hex ((gdb_byte *) (tsv->name), p, 0);
10598 *p++ = '\0';
35b1e5cc
SS
10599 putpkt (rs->buf);
10600 remote_get_noisy_reply (&target_buf, &target_buf_size);
ad91cd99
PA
10601 if (*target_buf == '\0')
10602 error (_("Target does not support this command."));
10603 if (strcmp (target_buf, "OK") != 0)
10604 error (_("Error on target while downloading trace state variable."));
35b1e5cc
SS
10605}
10606
d248b706
KY
10607static void
10608remote_enable_tracepoint (struct bp_location *location)
10609{
10610 struct remote_state *rs = get_remote_state ();
10611 char addr_buf[40];
10612
10613 sprintf_vma (addr_buf, location->address);
bba74b36
YQ
10614 xsnprintf (rs->buf, get_remote_packet_size (), "QTEnable:%x:%s",
10615 location->owner->number, addr_buf);
d248b706
KY
10616 putpkt (rs->buf);
10617 remote_get_noisy_reply (&rs->buf, &rs->buf_size);
10618 if (*rs->buf == '\0')
10619 error (_("Target does not support enabling tracepoints while a trace run is ongoing."));
10620 if (strcmp (rs->buf, "OK") != 0)
10621 error (_("Error on target while enabling tracepoint."));
10622}
10623
10624static void
10625remote_disable_tracepoint (struct bp_location *location)
10626{
10627 struct remote_state *rs = get_remote_state ();
10628 char addr_buf[40];
10629
10630 sprintf_vma (addr_buf, location->address);
bba74b36
YQ
10631 xsnprintf (rs->buf, get_remote_packet_size (), "QTDisable:%x:%s",
10632 location->owner->number, addr_buf);
d248b706
KY
10633 putpkt (rs->buf);
10634 remote_get_noisy_reply (&rs->buf, &rs->buf_size);
10635 if (*rs->buf == '\0')
10636 error (_("Target does not support disabling tracepoints while a trace run is ongoing."));
10637 if (strcmp (rs->buf, "OK") != 0)
10638 error (_("Error on target while disabling tracepoint."));
10639}
10640
35b1e5cc 10641static void
ad91cd99 10642remote_trace_set_readonly_regions (void)
35b1e5cc
SS
10643{
10644 asection *s;
81b9b86e 10645 bfd *abfd = NULL;
35b1e5cc 10646 bfd_size_type size;
608bcef2 10647 bfd_vma vma;
35b1e5cc 10648 int anysecs = 0;
c2fa21f1 10649 int offset = 0;
35b1e5cc
SS
10650
10651 if (!exec_bfd)
10652 return; /* No information to give. */
10653
10654 strcpy (target_buf, "QTro");
10655 for (s = exec_bfd->sections; s; s = s->next)
10656 {
10657 char tmp1[40], tmp2[40];
c2fa21f1 10658 int sec_length;
35b1e5cc
SS
10659
10660 if ((s->flags & SEC_LOAD) == 0 ||
0df8b418 10661 /* (s->flags & SEC_CODE) == 0 || */
35b1e5cc
SS
10662 (s->flags & SEC_READONLY) == 0)
10663 continue;
10664
10665 anysecs = 1;
81b9b86e 10666 vma = bfd_get_section_vma (abfd, s);
35b1e5cc 10667 size = bfd_get_section_size (s);
608bcef2
HZ
10668 sprintf_vma (tmp1, vma);
10669 sprintf_vma (tmp2, vma + size);
c2fa21f1
HZ
10670 sec_length = 1 + strlen (tmp1) + 1 + strlen (tmp2);
10671 if (offset + sec_length + 1 > target_buf_size)
10672 {
864ac8a7
HZ
10673 if (remote_protocol_packets[PACKET_qXfer_traceframe_info].support
10674 != PACKET_ENABLE)
10675 warning (_("\
c2fa21f1
HZ
10676Too many sections for read-only sections definition packet."));
10677 break;
10678 }
bba74b36
YQ
10679 xsnprintf (target_buf + offset, target_buf_size - offset, ":%s,%s",
10680 tmp1, tmp2);
c2fa21f1 10681 offset += sec_length;
35b1e5cc
SS
10682 }
10683 if (anysecs)
10684 {
10685 putpkt (target_buf);
10686 getpkt (&target_buf, &target_buf_size, 0);
10687 }
10688}
10689
10690static void
ad91cd99 10691remote_trace_start (void)
35b1e5cc
SS
10692{
10693 putpkt ("QTStart");
10694 remote_get_noisy_reply (&target_buf, &target_buf_size);
ad91cd99
PA
10695 if (*target_buf == '\0')
10696 error (_("Target does not support this command."));
10697 if (strcmp (target_buf, "OK") != 0)
35b1e5cc
SS
10698 error (_("Bogus reply from target: %s"), target_buf);
10699}
10700
10701static int
00bf0b85 10702remote_get_trace_status (struct trace_status *ts)
35b1e5cc 10703{
953b98d1 10704 /* Initialize it just to avoid a GCC false warning. */
f652de6f 10705 char *p = NULL;
0df8b418 10706 /* FIXME we need to get register block size some other way. */
00bf0b85 10707 extern int trace_regblock_size;
67f41397 10708 volatile struct gdb_exception ex;
bd3eecc3
PA
10709 enum packet_result result;
10710
10711 if (remote_protocol_packets[PACKET_qTStatus].support == PACKET_DISABLE)
10712 return -1;
a744cf53 10713
00bf0b85
SS
10714 trace_regblock_size = get_remote_arch_state ()->sizeof_g_packet;
10715
049dc89b
JK
10716 putpkt ("qTStatus");
10717
67f41397
JK
10718 TRY_CATCH (ex, RETURN_MASK_ERROR)
10719 {
10720 p = remote_get_noisy_reply (&target_buf, &target_buf_size);
10721 }
10722 if (ex.reason < 0)
10723 {
598d3636
JK
10724 if (ex.error != TARGET_CLOSE_ERROR)
10725 {
10726 exception_fprintf (gdb_stderr, ex, "qTStatus: ");
10727 return -1;
10728 }
10729 throw_exception (ex);
67f41397 10730 }
00bf0b85 10731
bd3eecc3
PA
10732 result = packet_ok (p, &remote_protocol_packets[PACKET_qTStatus]);
10733
00bf0b85 10734 /* If the remote target doesn't do tracing, flag it. */
bd3eecc3 10735 if (result == PACKET_UNKNOWN)
00bf0b85 10736 return -1;
35b1e5cc 10737
00bf0b85 10738 /* We're working with a live target. */
f5911ea1 10739 ts->filename = NULL;
00bf0b85 10740
00bf0b85 10741 if (*p++ != 'T')
35b1e5cc
SS
10742 error (_("Bogus trace status reply from target: %s"), target_buf);
10743
84cebc4a
YQ
10744 /* Function 'parse_trace_status' sets default value of each field of
10745 'ts' at first, so we don't have to do it here. */
00bf0b85
SS
10746 parse_trace_status (p, ts);
10747
10748 return ts->running;
35b1e5cc
SS
10749}
10750
70221824 10751static void
f196051f
SS
10752remote_get_tracepoint_status (struct breakpoint *bp,
10753 struct uploaded_tp *utp)
10754{
10755 struct remote_state *rs = get_remote_state ();
f196051f
SS
10756 char *reply;
10757 struct bp_location *loc;
10758 struct tracepoint *tp = (struct tracepoint *) bp;
bba74b36 10759 size_t size = get_remote_packet_size ();
f196051f
SS
10760
10761 if (tp)
10762 {
10763 tp->base.hit_count = 0;
10764 tp->traceframe_usage = 0;
10765 for (loc = tp->base.loc; loc; loc = loc->next)
10766 {
10767 /* If the tracepoint was never downloaded, don't go asking for
10768 any status. */
10769 if (tp->number_on_target == 0)
10770 continue;
bba74b36
YQ
10771 xsnprintf (rs->buf, size, "qTP:%x:%s", tp->number_on_target,
10772 phex_nz (loc->address, 0));
f196051f
SS
10773 putpkt (rs->buf);
10774 reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
10775 if (reply && *reply)
10776 {
10777 if (*reply == 'V')
10778 parse_tracepoint_status (reply + 1, bp, utp);
10779 }
10780 }
10781 }
10782 else if (utp)
10783 {
10784 utp->hit_count = 0;
10785 utp->traceframe_usage = 0;
bba74b36
YQ
10786 xsnprintf (rs->buf, size, "qTP:%x:%s", utp->number,
10787 phex_nz (utp->addr, 0));
f196051f
SS
10788 putpkt (rs->buf);
10789 reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
10790 if (reply && *reply)
10791 {
10792 if (*reply == 'V')
10793 parse_tracepoint_status (reply + 1, bp, utp);
10794 }
10795 }
10796}
10797
35b1e5cc 10798static void
ad91cd99 10799remote_trace_stop (void)
35b1e5cc
SS
10800{
10801 putpkt ("QTStop");
10802 remote_get_noisy_reply (&target_buf, &target_buf_size);
ad91cd99
PA
10803 if (*target_buf == '\0')
10804 error (_("Target does not support this command."));
10805 if (strcmp (target_buf, "OK") != 0)
35b1e5cc
SS
10806 error (_("Bogus reply from target: %s"), target_buf);
10807}
10808
10809static int
10810remote_trace_find (enum trace_find_type type, int num,
cc5925ad 10811 CORE_ADDR addr1, CORE_ADDR addr2,
35b1e5cc
SS
10812 int *tpp)
10813{
10814 struct remote_state *rs = get_remote_state ();
bba74b36 10815 char *endbuf = rs->buf + get_remote_packet_size ();
35b1e5cc
SS
10816 char *p, *reply;
10817 int target_frameno = -1, target_tracept = -1;
10818
e6e4e701
PA
10819 /* Lookups other than by absolute frame number depend on the current
10820 trace selected, so make sure it is correct on the remote end
10821 first. */
10822 if (type != tfind_number)
10823 set_remote_traceframe ();
10824
35b1e5cc
SS
10825 p = rs->buf;
10826 strcpy (p, "QTFrame:");
10827 p = strchr (p, '\0');
10828 switch (type)
10829 {
10830 case tfind_number:
bba74b36 10831 xsnprintf (p, endbuf - p, "%x", num);
35b1e5cc
SS
10832 break;
10833 case tfind_pc:
bba74b36 10834 xsnprintf (p, endbuf - p, "pc:%s", phex_nz (addr1, 0));
35b1e5cc
SS
10835 break;
10836 case tfind_tp:
bba74b36 10837 xsnprintf (p, endbuf - p, "tdp:%x", num);
35b1e5cc
SS
10838 break;
10839 case tfind_range:
bba74b36
YQ
10840 xsnprintf (p, endbuf - p, "range:%s:%s", phex_nz (addr1, 0),
10841 phex_nz (addr2, 0));
35b1e5cc
SS
10842 break;
10843 case tfind_outside:
bba74b36
YQ
10844 xsnprintf (p, endbuf - p, "outside:%s:%s", phex_nz (addr1, 0),
10845 phex_nz (addr2, 0));
35b1e5cc
SS
10846 break;
10847 default:
9b20d036 10848 error (_("Unknown trace find type %d"), type);
35b1e5cc
SS
10849 }
10850
10851 putpkt (rs->buf);
10852 reply = remote_get_noisy_reply (&(rs->buf), &sizeof_pkt);
ad91cd99
PA
10853 if (*reply == '\0')
10854 error (_("Target does not support this command."));
35b1e5cc
SS
10855
10856 while (reply && *reply)
10857 switch (*reply)
10858 {
10859 case 'F':
f197e0f1
VP
10860 p = ++reply;
10861 target_frameno = (int) strtol (p, &reply, 16);
10862 if (reply == p)
10863 error (_("Unable to parse trace frame number"));
e6e4e701
PA
10864 /* Don't update our remote traceframe number cache on failure
10865 to select a remote traceframe. */
f197e0f1
VP
10866 if (target_frameno == -1)
10867 return -1;
35b1e5cc
SS
10868 break;
10869 case 'T':
f197e0f1
VP
10870 p = ++reply;
10871 target_tracept = (int) strtol (p, &reply, 16);
10872 if (reply == p)
10873 error (_("Unable to parse tracepoint number"));
35b1e5cc
SS
10874 break;
10875 case 'O': /* "OK"? */
10876 if (reply[1] == 'K' && reply[2] == '\0')
10877 reply += 2;
10878 else
10879 error (_("Bogus reply from target: %s"), reply);
10880 break;
10881 default:
10882 error (_("Bogus reply from target: %s"), reply);
10883 }
10884 if (tpp)
10885 *tpp = target_tracept;
e6e4e701
PA
10886
10887 remote_traceframe_number = target_frameno;
35b1e5cc
SS
10888 return target_frameno;
10889}
10890
10891static int
10892remote_get_trace_state_variable_value (int tsvnum, LONGEST *val)
10893{
10894 struct remote_state *rs = get_remote_state ();
10895 char *reply;
10896 ULONGEST uval;
10897
e6e4e701
PA
10898 set_remote_traceframe ();
10899
bba74b36 10900 xsnprintf (rs->buf, get_remote_packet_size (), "qTV:%x", tsvnum);
35b1e5cc
SS
10901 putpkt (rs->buf);
10902 reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
10903 if (reply && *reply)
10904 {
10905 if (*reply == 'V')
10906 {
10907 unpack_varlen_hex (reply + 1, &uval);
10908 *val = (LONGEST) uval;
10909 return 1;
10910 }
10911 }
10912 return 0;
10913}
10914
00bf0b85 10915static int
011aacb0 10916remote_save_trace_data (const char *filename)
00bf0b85
SS
10917{
10918 struct remote_state *rs = get_remote_state ();
10919 char *p, *reply;
10920
10921 p = rs->buf;
10922 strcpy (p, "QTSave:");
10923 p += strlen (p);
10924 if ((p - rs->buf) + strlen (filename) * 2 >= get_remote_packet_size ())
10925 error (_("Remote file name too long for trace save packet"));
10926 p += 2 * bin2hex ((gdb_byte *) filename, p, 0);
10927 *p++ = '\0';
10928 putpkt (rs->buf);
ad91cd99 10929 reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
d6c5869f 10930 if (*reply == '\0')
ad91cd99
PA
10931 error (_("Target does not support this command."));
10932 if (strcmp (reply, "OK") != 0)
10933 error (_("Bogus reply from target: %s"), reply);
00bf0b85
SS
10934 return 0;
10935}
10936
10937/* This is basically a memory transfer, but needs to be its own packet
10938 because we don't know how the target actually organizes its trace
10939 memory, plus we want to be able to ask for as much as possible, but
10940 not be unhappy if we don't get as much as we ask for. */
10941
10942static LONGEST
10943remote_get_raw_trace_data (gdb_byte *buf, ULONGEST offset, LONGEST len)
10944{
10945 struct remote_state *rs = get_remote_state ();
10946 char *reply;
10947 char *p;
10948 int rslt;
10949
10950 p = rs->buf;
10951 strcpy (p, "qTBuffer:");
10952 p += strlen (p);
10953 p += hexnumstr (p, offset);
10954 *p++ = ',';
10955 p += hexnumstr (p, len);
10956 *p++ = '\0';
10957
10958 putpkt (rs->buf);
10959 reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
10960 if (reply && *reply)
10961 {
10962 /* 'l' by itself means we're at the end of the buffer and
10963 there is nothing more to get. */
10964 if (*reply == 'l')
10965 return 0;
10966
10967 /* Convert the reply into binary. Limit the number of bytes to
10968 convert according to our passed-in buffer size, rather than
10969 what was returned in the packet; if the target is
10970 unexpectedly generous and gives us a bigger reply than we
10971 asked for, we don't want to crash. */
10972 rslt = hex2bin (target_buf, buf, len);
10973 return rslt;
10974 }
10975
10976 /* Something went wrong, flag as an error. */
10977 return -1;
10978}
10979
35b1e5cc
SS
10980static void
10981remote_set_disconnected_tracing (int val)
10982{
10983 struct remote_state *rs = get_remote_state ();
10984
33da3f1c
SS
10985 if (rs->disconnected_tracing)
10986 {
ad91cd99
PA
10987 char *reply;
10988
bba74b36 10989 xsnprintf (rs->buf, get_remote_packet_size (), "QTDisconnected:%x", val);
33da3f1c 10990 putpkt (rs->buf);
ad91cd99
PA
10991 reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
10992 if (*reply == '\0')
33da3f1c 10993 error (_("Target does not support this command."));
ad91cd99
PA
10994 if (strcmp (reply, "OK") != 0)
10995 error (_("Bogus reply from target: %s"), reply);
33da3f1c
SS
10996 }
10997 else if (val)
10998 warning (_("Target does not support disconnected tracing."));
35b1e5cc
SS
10999}
11000
dc146f7c
VP
11001static int
11002remote_core_of_thread (struct target_ops *ops, ptid_t ptid)
11003{
11004 struct thread_info *info = find_thread_ptid (ptid);
a744cf53 11005
dc146f7c
VP
11006 if (info && info->private)
11007 return info->private->core;
11008 return -1;
11009}
11010
4daf5ac0
SS
11011static void
11012remote_set_circular_trace_buffer (int val)
11013{
11014 struct remote_state *rs = get_remote_state ();
ad91cd99 11015 char *reply;
4daf5ac0 11016
bba74b36 11017 xsnprintf (rs->buf, get_remote_packet_size (), "QTBuffer:circular:%x", val);
4daf5ac0 11018 putpkt (rs->buf);
ad91cd99
PA
11019 reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
11020 if (*reply == '\0')
4daf5ac0 11021 error (_("Target does not support this command."));
ad91cd99
PA
11022 if (strcmp (reply, "OK") != 0)
11023 error (_("Bogus reply from target: %s"), reply);
4daf5ac0
SS
11024}
11025
b3b9301e
PA
11026static struct traceframe_info *
11027remote_traceframe_info (void)
11028{
11029 char *text;
11030
11031 text = target_read_stralloc (&current_target,
11032 TARGET_OBJECT_TRACEFRAME_INFO, NULL);
11033 if (text != NULL)
11034 {
11035 struct traceframe_info *info;
11036 struct cleanup *back_to = make_cleanup (xfree, text);
11037
11038 info = parse_traceframe_info (text);
11039 do_cleanups (back_to);
11040 return info;
11041 }
11042
11043 return NULL;
11044}
11045
405f8e94
SS
11046/* Handle the qTMinFTPILen packet. Returns the minimum length of
11047 instruction on which a fast tracepoint may be placed. Returns -1
11048 if the packet is not supported, and 0 if the minimum instruction
11049 length is unknown. */
11050
11051static int
11052remote_get_min_fast_tracepoint_insn_len (void)
11053{
11054 struct remote_state *rs = get_remote_state ();
11055 char *reply;
11056
e886a173
PA
11057 /* If we're not debugging a process yet, the IPA can't be
11058 loaded. */
11059 if (!target_has_execution)
11060 return 0;
11061
11062 /* Make sure the remote is pointing at the right process. */
11063 set_general_process ();
11064
bba74b36 11065 xsnprintf (rs->buf, get_remote_packet_size (), "qTMinFTPILen");
405f8e94
SS
11066 putpkt (rs->buf);
11067 reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
11068 if (*reply == '\0')
11069 return -1;
11070 else
11071 {
11072 ULONGEST min_insn_len;
11073
11074 unpack_varlen_hex (reply, &min_insn_len);
11075
11076 return (int) min_insn_len;
11077 }
11078}
11079
f6f899bf
HAQ
11080static void
11081remote_set_trace_buffer_size (LONGEST val)
11082{
90585175
HAQ
11083 if (remote_protocol_packets[PACKET_QTBuffer_size].support
11084 != PACKET_DISABLE)
f6f899bf
HAQ
11085 {
11086 struct remote_state *rs = get_remote_state ();
11087 char *buf = rs->buf;
11088 char *endbuf = rs->buf + get_remote_packet_size ();
11089 enum packet_result result;
11090
11091 gdb_assert (val >= 0 || val == -1);
11092 buf += xsnprintf (buf, endbuf - buf, "QTBuffer:size:");
11093 /* Send -1 as literal "-1" to avoid host size dependency. */
11094 if (val < 0)
11095 {
11096 *buf++ = '-';
11097 buf += hexnumstr (buf, (ULONGEST) -val);
11098 }
11099 else
11100 buf += hexnumstr (buf, (ULONGEST) val);
11101
11102 putpkt (rs->buf);
11103 remote_get_noisy_reply (&rs->buf, &rs->buf_size);
11104 result = packet_ok (rs->buf,
11105 &remote_protocol_packets[PACKET_QTBuffer_size]);
11106
11107 if (result != PACKET_OK)
11108 warning (_("Bogus reply from target: %s"), rs->buf);
11109 }
11110}
11111
f196051f
SS
11112static int
11113remote_set_trace_notes (char *user, char *notes, char *stop_notes)
11114{
11115 struct remote_state *rs = get_remote_state ();
11116 char *reply;
11117 char *buf = rs->buf;
11118 char *endbuf = rs->buf + get_remote_packet_size ();
11119 int nbytes;
11120
11121 buf += xsnprintf (buf, endbuf - buf, "QTNotes:");
11122 if (user)
11123 {
11124 buf += xsnprintf (buf, endbuf - buf, "user:");
11125 nbytes = bin2hex (user, buf, 0);
11126 buf += 2 * nbytes;
11127 *buf++ = ';';
11128 }
11129 if (notes)
11130 {
11131 buf += xsnprintf (buf, endbuf - buf, "notes:");
11132 nbytes = bin2hex (notes, buf, 0);
11133 buf += 2 * nbytes;
11134 *buf++ = ';';
11135 }
11136 if (stop_notes)
11137 {
11138 buf += xsnprintf (buf, endbuf - buf, "tstop:");
11139 nbytes = bin2hex (stop_notes, buf, 0);
11140 buf += 2 * nbytes;
11141 *buf++ = ';';
11142 }
11143 /* Ensure the buffer is terminated. */
11144 *buf = '\0';
11145
11146 putpkt (rs->buf);
11147 reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
11148 if (*reply == '\0')
11149 return 0;
11150
11151 if (strcmp (reply, "OK") != 0)
11152 error (_("Bogus reply from target: %s"), reply);
11153
11154 return 1;
11155}
11156
d1feda86
YQ
11157static int
11158remote_use_agent (int use)
11159{
11160 if (remote_protocol_packets[PACKET_QAgent].support != PACKET_DISABLE)
11161 {
11162 struct remote_state *rs = get_remote_state ();
11163
11164 /* If the stub supports QAgent. */
bba74b36 11165 xsnprintf (rs->buf, get_remote_packet_size (), "QAgent:%d", use);
d1feda86
YQ
11166 putpkt (rs->buf);
11167 getpkt (&rs->buf, &rs->buf_size, 0);
11168
11169 if (strcmp (rs->buf, "OK") == 0)
11170 {
11171 use_agent = use;
11172 return 1;
11173 }
11174 }
11175
11176 return 0;
11177}
11178
11179static int
11180remote_can_use_agent (void)
11181{
11182 return (remote_protocol_packets[PACKET_QAgent].support != PACKET_DISABLE);
11183}
11184
9accd112
MM
11185struct btrace_target_info
11186{
11187 /* The ptid of the traced thread. */
11188 ptid_t ptid;
11189};
11190
11191/* Check whether the target supports branch tracing. */
11192
11193static int
11194remote_supports_btrace (void)
11195{
11196 if (remote_protocol_packets[PACKET_Qbtrace_off].support != PACKET_ENABLE)
11197 return 0;
11198 if (remote_protocol_packets[PACKET_Qbtrace_bts].support != PACKET_ENABLE)
11199 return 0;
11200 if (remote_protocol_packets[PACKET_qXfer_btrace].support != PACKET_ENABLE)
11201 return 0;
11202
11203 return 1;
11204}
11205
11206/* Enable branch tracing. */
11207
11208static struct btrace_target_info *
11209remote_enable_btrace (ptid_t ptid)
11210{
11211 struct btrace_target_info *tinfo = NULL;
11212 struct packet_config *packet = &remote_protocol_packets[PACKET_Qbtrace_bts];
11213 struct remote_state *rs = get_remote_state ();
11214 char *buf = rs->buf;
11215 char *endbuf = rs->buf + get_remote_packet_size ();
11216
11217 if (packet->support != PACKET_ENABLE)
11218 error (_("Target does not support branch tracing."));
11219
11220 set_general_thread (ptid);
11221
11222 buf += xsnprintf (buf, endbuf - buf, "%s", packet->name);
11223 putpkt (rs->buf);
11224 getpkt (&rs->buf, &rs->buf_size, 0);
11225
11226 if (packet_ok (rs->buf, packet) == PACKET_ERROR)
11227 {
11228 if (rs->buf[0] == 'E' && rs->buf[1] == '.')
11229 error (_("Could not enable branch tracing for %s: %s"),
11230 target_pid_to_str (ptid), rs->buf + 2);
11231 else
11232 error (_("Could not enable branch tracing for %s."),
11233 target_pid_to_str (ptid));
11234 }
11235
11236 tinfo = xzalloc (sizeof (*tinfo));
11237 tinfo->ptid = ptid;
11238
11239 return tinfo;
11240}
11241
11242/* Disable branch tracing. */
11243
11244static void
11245remote_disable_btrace (struct btrace_target_info *tinfo)
11246{
11247 struct packet_config *packet = &remote_protocol_packets[PACKET_Qbtrace_off];
11248 struct remote_state *rs = get_remote_state ();
11249 char *buf = rs->buf;
11250 char *endbuf = rs->buf + get_remote_packet_size ();
11251
11252 if (packet->support != PACKET_ENABLE)
11253 error (_("Target does not support branch tracing."));
11254
11255 set_general_thread (tinfo->ptid);
11256
11257 buf += xsnprintf (buf, endbuf - buf, "%s", packet->name);
11258 putpkt (rs->buf);
11259 getpkt (&rs->buf, &rs->buf_size, 0);
11260
11261 if (packet_ok (rs->buf, packet) == PACKET_ERROR)
11262 {
11263 if (rs->buf[0] == 'E' && rs->buf[1] == '.')
11264 error (_("Could not disable branch tracing for %s: %s"),
11265 target_pid_to_str (tinfo->ptid), rs->buf + 2);
11266 else
11267 error (_("Could not disable branch tracing for %s."),
11268 target_pid_to_str (tinfo->ptid));
11269 }
11270
11271 xfree (tinfo);
11272}
11273
11274/* Teardown branch tracing. */
11275
11276static void
11277remote_teardown_btrace (struct btrace_target_info *tinfo)
11278{
11279 /* We must not talk to the target during teardown. */
11280 xfree (tinfo);
11281}
11282
11283/* Read the branch trace. */
11284
11285static VEC (btrace_block_s) *
11286remote_read_btrace (struct btrace_target_info *tinfo,
11287 enum btrace_read_type type)
11288{
11289 struct packet_config *packet = &remote_protocol_packets[PACKET_qXfer_btrace];
11290 struct remote_state *rs = get_remote_state ();
11291 VEC (btrace_block_s) *btrace = NULL;
11292 const char *annex;
11293 char *xml;
11294
11295 if (packet->support != PACKET_ENABLE)
11296 error (_("Target does not support branch tracing."));
11297
11298#if !defined(HAVE_LIBEXPAT)
11299 error (_("Cannot process branch tracing result. XML parsing not supported."));
11300#endif
11301
11302 switch (type)
11303 {
11304 case btrace_read_all:
11305 annex = "all";
11306 break;
11307 case btrace_read_new:
11308 annex = "new";
11309 break;
11310 default:
11311 internal_error (__FILE__, __LINE__,
11312 _("Bad branch tracing read type: %u."),
11313 (unsigned int) type);
11314 }
11315
11316 xml = target_read_stralloc (&current_target,
11317 TARGET_OBJECT_BTRACE, annex);
11318 if (xml != NULL)
11319 {
11320 struct cleanup *cleanup = make_cleanup (xfree, xml);
11321
11322 btrace = parse_xml_btrace (xml);
11323 do_cleanups (cleanup);
11324 }
11325
11326 return btrace;
11327}
11328
c906108c 11329static void
fba45db2 11330init_remote_ops (void)
c906108c 11331{
c5aa993b 11332 remote_ops.to_shortname = "remote";
c906108c 11333 remote_ops.to_longname = "Remote serial target in gdb-specific protocol";
c5aa993b 11334 remote_ops.to_doc =
c906108c 11335 "Use a remote computer via a serial line, using a gdb-specific protocol.\n\
0d06e24b
JM
11336Specify the serial device it is connected to\n\
11337(e.g. /dev/ttyS0, /dev/ttya, COM1, etc.).";
c5aa993b
JM
11338 remote_ops.to_open = remote_open;
11339 remote_ops.to_close = remote_close;
c906108c 11340 remote_ops.to_detach = remote_detach;
6ad8ae5c 11341 remote_ops.to_disconnect = remote_disconnect;
c5aa993b 11342 remote_ops.to_resume = remote_resume;
c906108c
SS
11343 remote_ops.to_wait = remote_wait;
11344 remote_ops.to_fetch_registers = remote_fetch_registers;
11345 remote_ops.to_store_registers = remote_store_registers;
11346 remote_ops.to_prepare_to_store = remote_prepare_to_store;
c8e73a31 11347 remote_ops.deprecated_xfer_memory = remote_xfer_memory;
c5aa993b 11348 remote_ops.to_files_info = remote_files_info;
c906108c
SS
11349 remote_ops.to_insert_breakpoint = remote_insert_breakpoint;
11350 remote_ops.to_remove_breakpoint = remote_remove_breakpoint;
3c3bea1c
GS
11351 remote_ops.to_stopped_by_watchpoint = remote_stopped_by_watchpoint;
11352 remote_ops.to_stopped_data_address = remote_stopped_data_address;
283002cf
MR
11353 remote_ops.to_watchpoint_addr_within_range =
11354 remote_watchpoint_addr_within_range;
3c3bea1c
GS
11355 remote_ops.to_can_use_hw_breakpoint = remote_check_watch_resources;
11356 remote_ops.to_insert_hw_breakpoint = remote_insert_hw_breakpoint;
11357 remote_ops.to_remove_hw_breakpoint = remote_remove_hw_breakpoint;
480a3f21
PW
11358 remote_ops.to_region_ok_for_hw_watchpoint
11359 = remote_region_ok_for_hw_watchpoint;
3c3bea1c
GS
11360 remote_ops.to_insert_watchpoint = remote_insert_watchpoint;
11361 remote_ops.to_remove_watchpoint = remote_remove_watchpoint;
c5aa993b
JM
11362 remote_ops.to_kill = remote_kill;
11363 remote_ops.to_load = generic_load;
c906108c 11364 remote_ops.to_mourn_inferior = remote_mourn;
2455069d 11365 remote_ops.to_pass_signals = remote_pass_signals;
9b224c5e 11366 remote_ops.to_program_signals = remote_program_signals;
c906108c 11367 remote_ops.to_thread_alive = remote_thread_alive;
0f71a2f6 11368 remote_ops.to_find_new_threads = remote_threads_info;
0caabb7e 11369 remote_ops.to_pid_to_str = remote_pid_to_str;
cf759d3b 11370 remote_ops.to_extra_thread_info = remote_threads_extra_info;
10760264 11371 remote_ops.to_get_ada_task_ptid = remote_get_ada_task_ptid;
c906108c 11372 remote_ops.to_stop = remote_stop;
4b8a223f 11373 remote_ops.to_xfer_partial = remote_xfer_partial;
96baa820 11374 remote_ops.to_rcmd = remote_rcmd;
49d03eab 11375 remote_ops.to_log_command = serial_log_command;
38691318 11376 remote_ops.to_get_thread_local_address = remote_get_thread_local_address;
c906108c 11377 remote_ops.to_stratum = process_stratum;
c35b1492
PA
11378 remote_ops.to_has_all_memory = default_child_has_all_memory;
11379 remote_ops.to_has_memory = default_child_has_memory;
11380 remote_ops.to_has_stack = default_child_has_stack;
11381 remote_ops.to_has_registers = default_child_has_registers;
11382 remote_ops.to_has_execution = default_child_has_execution;
3e43a32a 11383 remote_ops.to_has_thread_control = tc_schedlock; /* can lock scheduler */
b2175913 11384 remote_ops.to_can_execute_reverse = remote_can_execute_reverse;
c5aa993b 11385 remote_ops.to_magic = OPS_MAGIC;
fd79ecee 11386 remote_ops.to_memory_map = remote_memory_map;
a76d924d
DJ
11387 remote_ops.to_flash_erase = remote_flash_erase;
11388 remote_ops.to_flash_done = remote_flash_done;
29709017 11389 remote_ops.to_read_description = remote_read_description;
08388c79 11390 remote_ops.to_search_memory = remote_search_memory;
75c99385
PA
11391 remote_ops.to_can_async_p = remote_can_async_p;
11392 remote_ops.to_is_async_p = remote_is_async_p;
11393 remote_ops.to_async = remote_async;
75c99385
PA
11394 remote_ops.to_terminal_inferior = remote_terminal_inferior;
11395 remote_ops.to_terminal_ours = remote_terminal_ours;
74531fed 11396 remote_ops.to_supports_non_stop = remote_supports_non_stop;
8a305172 11397 remote_ops.to_supports_multi_process = remote_supports_multi_process;
03583c20
UW
11398 remote_ops.to_supports_disable_randomization
11399 = remote_supports_disable_randomization;
7313baad
UW
11400 remote_ops.to_fileio_open = remote_hostio_open;
11401 remote_ops.to_fileio_pwrite = remote_hostio_pwrite;
11402 remote_ops.to_fileio_pread = remote_hostio_pread;
11403 remote_ops.to_fileio_close = remote_hostio_close;
11404 remote_ops.to_fileio_unlink = remote_hostio_unlink;
b9e7b9c3 11405 remote_ops.to_fileio_readlink = remote_hostio_readlink;
d248b706 11406 remote_ops.to_supports_enable_disable_tracepoint = remote_supports_enable_disable_tracepoint;
3065dfb6 11407 remote_ops.to_supports_string_tracing = remote_supports_string_tracing;
b775012e 11408 remote_ops.to_supports_evaluation_of_breakpoint_conditions = remote_supports_cond_breakpoints;
d3ce09f5 11409 remote_ops.to_can_run_breakpoint_commands = remote_can_run_breakpoint_commands;
35b1e5cc
SS
11410 remote_ops.to_trace_init = remote_trace_init;
11411 remote_ops.to_download_tracepoint = remote_download_tracepoint;
1e4d1764 11412 remote_ops.to_can_download_tracepoint = remote_can_download_tracepoint;
3e43a32a
MS
11413 remote_ops.to_download_trace_state_variable
11414 = remote_download_trace_state_variable;
d248b706
KY
11415 remote_ops.to_enable_tracepoint = remote_enable_tracepoint;
11416 remote_ops.to_disable_tracepoint = remote_disable_tracepoint;
35b1e5cc
SS
11417 remote_ops.to_trace_set_readonly_regions = remote_trace_set_readonly_regions;
11418 remote_ops.to_trace_start = remote_trace_start;
11419 remote_ops.to_get_trace_status = remote_get_trace_status;
f196051f 11420 remote_ops.to_get_tracepoint_status = remote_get_tracepoint_status;
35b1e5cc
SS
11421 remote_ops.to_trace_stop = remote_trace_stop;
11422 remote_ops.to_trace_find = remote_trace_find;
3e43a32a
MS
11423 remote_ops.to_get_trace_state_variable_value
11424 = remote_get_trace_state_variable_value;
00bf0b85
SS
11425 remote_ops.to_save_trace_data = remote_save_trace_data;
11426 remote_ops.to_upload_tracepoints = remote_upload_tracepoints;
3e43a32a
MS
11427 remote_ops.to_upload_trace_state_variables
11428 = remote_upload_trace_state_variables;
00bf0b85 11429 remote_ops.to_get_raw_trace_data = remote_get_raw_trace_data;
405f8e94 11430 remote_ops.to_get_min_fast_tracepoint_insn_len = remote_get_min_fast_tracepoint_insn_len;
35b1e5cc 11431 remote_ops.to_set_disconnected_tracing = remote_set_disconnected_tracing;
4daf5ac0 11432 remote_ops.to_set_circular_trace_buffer = remote_set_circular_trace_buffer;
f6f899bf 11433 remote_ops.to_set_trace_buffer_size = remote_set_trace_buffer_size;
f196051f 11434 remote_ops.to_set_trace_notes = remote_set_trace_notes;
dc146f7c 11435 remote_ops.to_core_of_thread = remote_core_of_thread;
4a5e7a5b 11436 remote_ops.to_verify_memory = remote_verify_memory;
711e434b 11437 remote_ops.to_get_tib_address = remote_get_tib_address;
d914c394 11438 remote_ops.to_set_permissions = remote_set_permissions;
0fb4aa4b
PA
11439 remote_ops.to_static_tracepoint_marker_at
11440 = remote_static_tracepoint_marker_at;
11441 remote_ops.to_static_tracepoint_markers_by_strid
11442 = remote_static_tracepoint_markers_by_strid;
b3b9301e 11443 remote_ops.to_traceframe_info = remote_traceframe_info;
d1feda86
YQ
11444 remote_ops.to_use_agent = remote_use_agent;
11445 remote_ops.to_can_use_agent = remote_can_use_agent;
9accd112
MM
11446 remote_ops.to_supports_btrace = remote_supports_btrace;
11447 remote_ops.to_enable_btrace = remote_enable_btrace;
11448 remote_ops.to_disable_btrace = remote_disable_btrace;
11449 remote_ops.to_teardown_btrace = remote_teardown_btrace;
11450 remote_ops.to_read_btrace = remote_read_btrace;
c906108c
SS
11451}
11452
11453/* Set up the extended remote vector by making a copy of the standard
11454 remote vector and adding to it. */
11455
11456static void
fba45db2 11457init_extended_remote_ops (void)
c906108c
SS
11458{
11459 extended_remote_ops = remote_ops;
11460
0f71a2f6 11461 extended_remote_ops.to_shortname = "extended-remote";
c5aa993b 11462 extended_remote_ops.to_longname =
c906108c 11463 "Extended remote serial target in gdb-specific protocol";
c5aa993b 11464 extended_remote_ops.to_doc =
c906108c 11465 "Use a remote computer via a serial line, using a gdb-specific protocol.\n\
39237dd1
PA
11466Specify the serial device it is connected to (e.g. /dev/ttya).";
11467 extended_remote_ops.to_open = extended_remote_open;
c906108c
SS
11468 extended_remote_ops.to_create_inferior = extended_remote_create_inferior;
11469 extended_remote_ops.to_mourn_inferior = extended_remote_mourn;
2d717e4f
DJ
11470 extended_remote_ops.to_detach = extended_remote_detach;
11471 extended_remote_ops.to_attach = extended_remote_attach;
82f73884 11472 extended_remote_ops.to_kill = extended_remote_kill;
03583c20
UW
11473 extended_remote_ops.to_supports_disable_randomization
11474 = extended_remote_supports_disable_randomization;
0f71a2f6
JM
11475}
11476
6426a772
JM
11477static int
11478remote_can_async_p (void)
11479{
c6ebd6cf 11480 if (!target_async_permitted)
75c99385
PA
11481 /* We only enable async when the user specifically asks for it. */
11482 return 0;
11483
23860348 11484 /* We're async whenever the serial device is. */
3dd5b83d 11485 return serial_can_async_p (remote_desc);
6426a772
JM
11486}
11487
11488static int
11489remote_is_async_p (void)
11490{
c6ebd6cf 11491 if (!target_async_permitted)
75c99385
PA
11492 /* We only enable async when the user specifically asks for it. */
11493 return 0;
11494
23860348 11495 /* We're async whenever the serial device is. */
3dd5b83d 11496 return serial_is_async_p (remote_desc);
6426a772
JM
11497}
11498
2acceee2
JM
11499/* Pass the SERIAL event on and up to the client. One day this code
11500 will be able to delay notifying the client of an event until the
23860348 11501 point where an entire packet has been received. */
2acceee2 11502
2bc416ba 11503static void (*async_client_callback) (enum inferior_event_type event_type,
23860348 11504 void *context);
2acceee2
JM
11505static void *async_client_context;
11506static serial_event_ftype remote_async_serial_handler;
11507
6426a772 11508static void
819cc324 11509remote_async_serial_handler (struct serial *scb, void *context)
6426a772 11510{
2acceee2
JM
11511 /* Don't propogate error information up to the client. Instead let
11512 the client find out about the error by querying the target. */
11513 async_client_callback (INF_REG_EVENT, async_client_context);
11514}
11515
74531fed
PA
11516static void
11517remote_async_inferior_event_handler (gdb_client_data data)
11518{
11519 inferior_event_handler (INF_REG_EVENT, NULL);
11520}
11521
2acceee2 11522static void
2bc416ba 11523remote_async (void (*callback) (enum inferior_event_type event_type,
23860348 11524 void *context), void *context)
2acceee2
JM
11525{
11526 if (callback != NULL)
11527 {
2cd58942 11528 serial_async (remote_desc, remote_async_serial_handler, NULL);
2acceee2
JM
11529 async_client_callback = callback;
11530 async_client_context = context;
11531 }
11532 else
2cd58942 11533 serial_async (remote_desc, NULL, NULL);
6426a772
JM
11534}
11535
5a2468f5 11536static void
c2d11a7d 11537set_remote_cmd (char *args, int from_tty)
5a2468f5 11538{
427c3a89 11539 help_list (remote_set_cmdlist, "set remote ", -1, gdb_stdout);
5a2468f5
JM
11540}
11541
d471ea57
AC
11542static void
11543show_remote_cmd (char *args, int from_tty)
11544{
37a105a1 11545 /* We can't just use cmd_show_list here, because we want to skip
427c3a89 11546 the redundant "show remote Z-packet" and the legacy aliases. */
37a105a1
DJ
11547 struct cleanup *showlist_chain;
11548 struct cmd_list_element *list = remote_show_cmdlist;
79a45e25 11549 struct ui_out *uiout = current_uiout;
37a105a1
DJ
11550
11551 showlist_chain = make_cleanup_ui_out_tuple_begin_end (uiout, "showlist");
11552 for (; list != NULL; list = list->next)
11553 if (strcmp (list->name, "Z-packet") == 0)
11554 continue;
427c3a89
DJ
11555 else if (list->type == not_set_cmd)
11556 /* Alias commands are exactly like the original, except they
11557 don't have the normal type. */
11558 continue;
11559 else
37a105a1
DJ
11560 {
11561 struct cleanup *option_chain
11562 = make_cleanup_ui_out_tuple_begin_end (uiout, "option");
a744cf53 11563
37a105a1
DJ
11564 ui_out_field_string (uiout, "name", list->name);
11565 ui_out_text (uiout, ": ");
427c3a89 11566 if (list->type == show_cmd)
5b9afe8a 11567 do_show_command ((char *) NULL, from_tty, list);
427c3a89
DJ
11568 else
11569 cmd_func (list, NULL, from_tty);
37a105a1
DJ
11570 /* Close the tuple. */
11571 do_cleanups (option_chain);
11572 }
427c3a89
DJ
11573
11574 /* Close the tuple. */
11575 do_cleanups (showlist_chain);
d471ea57 11576}
5a2468f5 11577
0f71a2f6 11578
23860348 11579/* Function to be called whenever a new objfile (shlib) is detected. */
dc8acb97
MS
11580static void
11581remote_new_objfile (struct objfile *objfile)
11582{
23860348 11583 if (remote_desc != 0) /* Have a remote connection. */
06d3b283 11584 remote_check_symbols (objfile);
dc8acb97
MS
11585}
11586
00bf0b85
SS
11587/* Pull all the tracepoints defined on the target and create local
11588 data structures representing them. We don't want to create real
11589 tracepoints yet, we don't want to mess up the user's existing
11590 collection. */
11591
11592static int
11593remote_upload_tracepoints (struct uploaded_tp **utpp)
d5551862 11594{
00bf0b85
SS
11595 struct remote_state *rs = get_remote_state ();
11596 char *p;
d5551862 11597
00bf0b85
SS
11598 /* Ask for a first packet of tracepoint definition. */
11599 putpkt ("qTfP");
11600 getpkt (&rs->buf, &rs->buf_size, 0);
11601 p = rs->buf;
11602 while (*p && *p != 'l')
d5551862 11603 {
00bf0b85
SS
11604 parse_tracepoint_definition (p, utpp);
11605 /* Ask for another packet of tracepoint definition. */
11606 putpkt ("qTsP");
11607 getpkt (&rs->buf, &rs->buf_size, 0);
11608 p = rs->buf;
d5551862 11609 }
00bf0b85 11610 return 0;
d5551862
SS
11611}
11612
00bf0b85
SS
11613static int
11614remote_upload_trace_state_variables (struct uploaded_tsv **utsvp)
d5551862 11615{
00bf0b85 11616 struct remote_state *rs = get_remote_state ();
d5551862 11617 char *p;
d5551862 11618
00bf0b85
SS
11619 /* Ask for a first packet of variable definition. */
11620 putpkt ("qTfV");
d5551862
SS
11621 getpkt (&rs->buf, &rs->buf_size, 0);
11622 p = rs->buf;
00bf0b85 11623 while (*p && *p != 'l')
d5551862 11624 {
00bf0b85
SS
11625 parse_tsv_definition (p, utsvp);
11626 /* Ask for another packet of variable definition. */
11627 putpkt ("qTsV");
d5551862
SS
11628 getpkt (&rs->buf, &rs->buf_size, 0);
11629 p = rs->buf;
11630 }
00bf0b85 11631 return 0;
d5551862
SS
11632}
11633
c906108c 11634void
fba45db2 11635_initialize_remote (void)
c906108c 11636{
ea9c271d 11637 struct remote_state *rs;
9a7071a8 11638 struct cmd_list_element *cmd;
6f937416 11639 const char *cmd_name;
ea9c271d 11640
0f71a2f6 11641 /* architecture specific data */
2bc416ba 11642 remote_gdbarch_data_handle =
23860348 11643 gdbarch_data_register_post_init (init_remote_state);
29709017
DJ
11644 remote_g_packet_data_handle =
11645 gdbarch_data_register_pre_init (remote_g_packet_data_init);
d01949b6 11646
ea9c271d
DJ
11647 /* Initialize the per-target state. At the moment there is only one
11648 of these, not one per target. Only one target is active at a
11649 time. The default buffer size is unimportant; it will be expanded
11650 whenever a larger buffer is needed. */
0b83947e 11651 rs = get_remote_state_raw ();
ea9c271d
DJ
11652 rs->buf_size = 400;
11653 rs->buf = xmalloc (rs->buf_size);
11654
c906108c
SS
11655 init_remote_ops ();
11656 add_target (&remote_ops);
11657
11658 init_extended_remote_ops ();
11659 add_target (&extended_remote_ops);
cce74817 11660
dc8acb97 11661 /* Hook into new objfile notification. */
06d3b283 11662 observer_attach_new_objfile (remote_new_objfile);
5f4cf0bb
YQ
11663 /* We're no longer interested in notification events of an inferior
11664 when it exits. */
11665 observer_attach_inferior_exit (discard_pending_stop_replies);
dc8acb97 11666
b803fb0f
DJ
11667 /* Set up signal handlers. */
11668 sigint_remote_token =
11669 create_async_signal_handler (async_remote_interrupt, NULL);
11670 sigint_remote_twice_token =
6d549500 11671 create_async_signal_handler (async_remote_interrupt_twice, NULL);
b803fb0f 11672
c906108c
SS
11673#if 0
11674 init_remote_threadtests ();
11675#endif
11676
722247f1 11677 stop_reply_queue = QUEUE_alloc (stop_reply_p, stop_reply_xfree);
23860348 11678 /* set/show remote ... */
d471ea57 11679
1bedd215 11680 add_prefix_cmd ("remote", class_maintenance, set_remote_cmd, _("\
5a2468f5
JM
11681Remote protocol specific variables\n\
11682Configure various remote-protocol specific variables such as\n\
1bedd215 11683the packets being used"),
cff3e48b 11684 &remote_set_cmdlist, "set remote ",
23860348 11685 0 /* allow-unknown */, &setlist);
1bedd215 11686 add_prefix_cmd ("remote", class_maintenance, show_remote_cmd, _("\
5a2468f5
JM
11687Remote protocol specific variables\n\
11688Configure various remote-protocol specific variables such as\n\
1bedd215 11689the packets being used"),
cff3e48b 11690 &remote_show_cmdlist, "show remote ",
23860348 11691 0 /* allow-unknown */, &showlist);
5a2468f5 11692
1a966eab
AC
11693 add_cmd ("compare-sections", class_obscure, compare_sections_command, _("\
11694Compare section data on target to the exec file.\n\
11695Argument is a single section name (default: all loaded sections)."),
c906108c
SS
11696 &cmdlist);
11697
1a966eab
AC
11698 add_cmd ("packet", class_maintenance, packet_command, _("\
11699Send an arbitrary packet to a remote target.\n\
c906108c
SS
11700 maintenance packet TEXT\n\
11701If GDB is talking to an inferior via the GDB serial protocol, then\n\
11702this command sends the string TEXT to the inferior, and displays the\n\
11703response packet. GDB supplies the initial `$' character, and the\n\
1a966eab 11704terminating `#' character and checksum."),
c906108c
SS
11705 &maintenancelist);
11706
7915a72c
AC
11707 add_setshow_boolean_cmd ("remotebreak", no_class, &remote_break, _("\
11708Set whether to send break if interrupted."), _("\
11709Show whether to send break if interrupted."), _("\
11710If set, a break, instead of a cntrl-c, is sent to the remote target."),
9a7071a8 11711 set_remotebreak, show_remotebreak,
e707bbc2 11712 &setlist, &showlist);
9a7071a8
JB
11713 cmd_name = "remotebreak";
11714 cmd = lookup_cmd (&cmd_name, setlist, "", -1, 1);
11715 deprecate_cmd (cmd, "set remote interrupt-sequence");
11716 cmd_name = "remotebreak"; /* needed because lookup_cmd updates the pointer */
11717 cmd = lookup_cmd (&cmd_name, showlist, "", -1, 1);
11718 deprecate_cmd (cmd, "show remote interrupt-sequence");
11719
11720 add_setshow_enum_cmd ("interrupt-sequence", class_support,
3e43a32a
MS
11721 interrupt_sequence_modes, &interrupt_sequence_mode,
11722 _("\
9a7071a8
JB
11723Set interrupt sequence to remote target."), _("\
11724Show interrupt sequence to remote target."), _("\
11725Valid value is \"Ctrl-C\", \"BREAK\" or \"BREAK-g\". The default is \"Ctrl-C\"."),
11726 NULL, show_interrupt_sequence,
11727 &remote_set_cmdlist,
11728 &remote_show_cmdlist);
11729
11730 add_setshow_boolean_cmd ("interrupt-on-connect", class_support,
11731 &interrupt_on_connect, _("\
11732Set whether interrupt-sequence is sent to remote target when gdb connects to."), _(" \
11733Show whether interrupt-sequence is sent to remote target when gdb connects to."), _(" \
11734If set, interrupt sequence is sent to remote target."),
11735 NULL, NULL,
11736 &remote_set_cmdlist, &remote_show_cmdlist);
c906108c 11737
23860348 11738 /* Install commands for configuring memory read/write packets. */
11cf8741 11739
1a966eab
AC
11740 add_cmd ("remotewritesize", no_class, set_memory_write_packet_size, _("\
11741Set the maximum number of bytes per memory write packet (deprecated)."),
11cf8741 11742 &setlist);
1a966eab
AC
11743 add_cmd ("remotewritesize", no_class, show_memory_write_packet_size, _("\
11744Show the maximum number of bytes per memory write packet (deprecated)."),
11cf8741
JM
11745 &showlist);
11746 add_cmd ("memory-write-packet-size", no_class,
1a966eab
AC
11747 set_memory_write_packet_size, _("\
11748Set the maximum number of bytes per memory-write packet.\n\
11749Specify the number of bytes in a packet or 0 (zero) for the\n\
11750default packet size. The actual limit is further reduced\n\
11751dependent on the target. Specify ``fixed'' to disable the\n\
11752further restriction and ``limit'' to enable that restriction."),
11cf8741
JM
11753 &remote_set_cmdlist);
11754 add_cmd ("memory-read-packet-size", no_class,
1a966eab
AC
11755 set_memory_read_packet_size, _("\
11756Set the maximum number of bytes per memory-read packet.\n\
11757Specify the number of bytes in a packet or 0 (zero) for the\n\
11758default packet size. The actual limit is further reduced\n\
11759dependent on the target. Specify ``fixed'' to disable the\n\
11760further restriction and ``limit'' to enable that restriction."),
11cf8741
JM
11761 &remote_set_cmdlist);
11762 add_cmd ("memory-write-packet-size", no_class,
11763 show_memory_write_packet_size,
1a966eab 11764 _("Show the maximum number of bytes per memory-write packet."),
11cf8741
JM
11765 &remote_show_cmdlist);
11766 add_cmd ("memory-read-packet-size", no_class,
11767 show_memory_read_packet_size,
1a966eab 11768 _("Show the maximum number of bytes per memory-read packet."),
11cf8741 11769 &remote_show_cmdlist);
c906108c 11770
b3f42336 11771 add_setshow_zinteger_cmd ("hardware-watchpoint-limit", no_class,
7915a72c
AC
11772 &remote_hw_watchpoint_limit, _("\
11773Set the maximum number of target hardware watchpoints."), _("\
11774Show the maximum number of target hardware watchpoints."), _("\
11775Specify a negative limit for unlimited."),
3e43a32a
MS
11776 NULL, NULL, /* FIXME: i18n: The maximum
11777 number of target hardware
11778 watchpoints is %s. */
b3f42336 11779 &remote_set_cmdlist, &remote_show_cmdlist);
480a3f21
PW
11780 add_setshow_zinteger_cmd ("hardware-watchpoint-length-limit", no_class,
11781 &remote_hw_watchpoint_length_limit, _("\
11782Set the maximum length (in bytes) of a target hardware watchpoint."), _("\
11783Show the maximum length (in bytes) of a target hardware watchpoint."), _("\
11784Specify a negative limit for unlimited."),
11785 NULL, NULL, /* FIXME: i18n: The maximum
11786 length (in bytes) of a target
11787 hardware watchpoint is %s. */
11788 &remote_set_cmdlist, &remote_show_cmdlist);
b3f42336 11789 add_setshow_zinteger_cmd ("hardware-breakpoint-limit", no_class,
7915a72c
AC
11790 &remote_hw_breakpoint_limit, _("\
11791Set the maximum number of target hardware breakpoints."), _("\
11792Show the maximum number of target hardware breakpoints."), _("\
11793Specify a negative limit for unlimited."),
3e43a32a
MS
11794 NULL, NULL, /* FIXME: i18n: The maximum
11795 number of target hardware
11796 breakpoints is %s. */
b3f42336 11797 &remote_set_cmdlist, &remote_show_cmdlist);
501eef12 11798
1b493192
PA
11799 add_setshow_zuinteger_cmd ("remoteaddresssize", class_obscure,
11800 &remote_address_size, _("\
4d28ad1e
AC
11801Set the maximum size of the address (in bits) in a memory packet."), _("\
11802Show the maximum size of the address (in bits) in a memory packet."), NULL,
1b493192
PA
11803 NULL,
11804 NULL, /* FIXME: i18n: */
11805 &setlist, &showlist);
c906108c 11806
444abaca 11807 add_packet_config_cmd (&remote_protocol_packets[PACKET_X],
bb572ddd 11808 "X", "binary-download", 1);
0f71a2f6 11809
444abaca 11810 add_packet_config_cmd (&remote_protocol_packets[PACKET_vCont],
bb572ddd 11811 "vCont", "verbose-resume", 0);
506fb367 11812
89be2091
DJ
11813 add_packet_config_cmd (&remote_protocol_packets[PACKET_QPassSignals],
11814 "QPassSignals", "pass-signals", 0);
11815
9b224c5e
PA
11816 add_packet_config_cmd (&remote_protocol_packets[PACKET_QProgramSignals],
11817 "QProgramSignals", "program-signals", 0);
11818
444abaca 11819 add_packet_config_cmd (&remote_protocol_packets[PACKET_qSymbol],
bb572ddd 11820 "qSymbol", "symbol-lookup", 0);
dc8acb97 11821
444abaca 11822 add_packet_config_cmd (&remote_protocol_packets[PACKET_P],
bb572ddd 11823 "P", "set-register", 1);
d471ea57 11824
444abaca 11825 add_packet_config_cmd (&remote_protocol_packets[PACKET_p],
bb572ddd 11826 "p", "fetch-register", 1);
b96ec7ac 11827
444abaca 11828 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z0],
bb572ddd 11829 "Z0", "software-breakpoint", 0);
d471ea57 11830
444abaca 11831 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z1],
bb572ddd 11832 "Z1", "hardware-breakpoint", 0);
d471ea57 11833
444abaca 11834 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z2],
bb572ddd 11835 "Z2", "write-watchpoint", 0);
d471ea57 11836
444abaca 11837 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z3],
bb572ddd 11838 "Z3", "read-watchpoint", 0);
d471ea57 11839
444abaca 11840 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z4],
bb572ddd 11841 "Z4", "access-watchpoint", 0);
d471ea57 11842
0876f84a
DJ
11843 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_auxv],
11844 "qXfer:auxv:read", "read-aux-vector", 0);
802188a7 11845
23181151
DJ
11846 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_features],
11847 "qXfer:features:read", "target-features", 0);
11848
cfa9d6d9
DJ
11849 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_libraries],
11850 "qXfer:libraries:read", "library-info", 0);
11851
2268b414
JK
11852 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_libraries_svr4],
11853 "qXfer:libraries-svr4:read", "library-info-svr4", 0);
11854
fd79ecee
DJ
11855 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_memory_map],
11856 "qXfer:memory-map:read", "memory-map", 0);
11857
0e7f50da
UW
11858 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_spu_read],
11859 "qXfer:spu:read", "read-spu-object", 0);
11860
11861 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_spu_write],
11862 "qXfer:spu:write", "write-spu-object", 0);
11863
07e059b5
VP
11864 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_osdata],
11865 "qXfer:osdata:read", "osdata", 0);
11866
dc146f7c
VP
11867 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_threads],
11868 "qXfer:threads:read", "threads", 0);
11869
4aa995e1
PA
11870 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_siginfo_read],
11871 "qXfer:siginfo:read", "read-siginfo-object", 0);
11872
11873 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_siginfo_write],
11874 "qXfer:siginfo:write", "write-siginfo-object", 0);
11875
b3b9301e
PA
11876 add_packet_config_cmd
11877 (&remote_protocol_packets[PACKET_qXfer_traceframe_info],
11878 "qXfer:trace-frame-info:read", "traceframe-info", 0);
11879
169081d0
TG
11880 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_uib],
11881 "qXfer:uib:read", "unwind-info-block", 0);
11882
444abaca 11883 add_packet_config_cmd (&remote_protocol_packets[PACKET_qGetTLSAddr],
38691318 11884 "qGetTLSAddr", "get-thread-local-storage-address",
38691318
KB
11885 0);
11886
711e434b
PM
11887 add_packet_config_cmd (&remote_protocol_packets[PACKET_qGetTIBAddr],
11888 "qGetTIBAddr", "get-thread-information-block-address",
11889 0);
11890
40ab02ce
MS
11891 add_packet_config_cmd (&remote_protocol_packets[PACKET_bc],
11892 "bc", "reverse-continue", 0);
11893
11894 add_packet_config_cmd (&remote_protocol_packets[PACKET_bs],
11895 "bs", "reverse-step", 0);
11896
be2a5f71
DJ
11897 add_packet_config_cmd (&remote_protocol_packets[PACKET_qSupported],
11898 "qSupported", "supported-packets", 0);
11899
08388c79
DE
11900 add_packet_config_cmd (&remote_protocol_packets[PACKET_qSearch_memory],
11901 "qSearch:memory", "search-memory", 0);
11902
bd3eecc3
PA
11903 add_packet_config_cmd (&remote_protocol_packets[PACKET_qTStatus],
11904 "qTStatus", "trace-status", 0);
11905
a6b151f1
DJ
11906 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_open],
11907 "vFile:open", "hostio-open", 0);
11908
11909 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_pread],
11910 "vFile:pread", "hostio-pread", 0);
11911
11912 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_pwrite],
11913 "vFile:pwrite", "hostio-pwrite", 0);
11914
11915 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_close],
11916 "vFile:close", "hostio-close", 0);
11917
11918 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_unlink],
11919 "vFile:unlink", "hostio-unlink", 0);
11920
b9e7b9c3
UW
11921 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_readlink],
11922 "vFile:readlink", "hostio-readlink", 0);
11923
2d717e4f
DJ
11924 add_packet_config_cmd (&remote_protocol_packets[PACKET_vAttach],
11925 "vAttach", "attach", 0);
11926
11927 add_packet_config_cmd (&remote_protocol_packets[PACKET_vRun],
11928 "vRun", "run", 0);
11929
a6f3e723
SL
11930 add_packet_config_cmd (&remote_protocol_packets[PACKET_QStartNoAckMode],
11931 "QStartNoAckMode", "noack", 0);
11932
82f73884
PA
11933 add_packet_config_cmd (&remote_protocol_packets[PACKET_vKill],
11934 "vKill", "kill", 0);
11935
0b16c5cf
PA
11936 add_packet_config_cmd (&remote_protocol_packets[PACKET_qAttached],
11937 "qAttached", "query-attached", 0);
11938
782b2b07 11939 add_packet_config_cmd (&remote_protocol_packets[PACKET_ConditionalTracepoints],
3e43a32a
MS
11940 "ConditionalTracepoints",
11941 "conditional-tracepoints", 0);
3788aec7
LM
11942
11943 add_packet_config_cmd (&remote_protocol_packets[PACKET_ConditionalBreakpoints],
11944 "ConditionalBreakpoints",
11945 "conditional-breakpoints", 0);
11946
d3ce09f5
SS
11947 add_packet_config_cmd (&remote_protocol_packets[PACKET_BreakpointCommands],
11948 "BreakpointCommands",
11949 "breakpoint-commands", 0);
11950
7a697b8d
SS
11951 add_packet_config_cmd (&remote_protocol_packets[PACKET_FastTracepoints],
11952 "FastTracepoints", "fast-tracepoints", 0);
782b2b07 11953
409873ef
SS
11954 add_packet_config_cmd (&remote_protocol_packets[PACKET_TracepointSource],
11955 "TracepointSource", "TracepointSource", 0);
11956
d914c394
SS
11957 add_packet_config_cmd (&remote_protocol_packets[PACKET_QAllow],
11958 "QAllow", "allow", 0);
11959
0fb4aa4b
PA
11960 add_packet_config_cmd (&remote_protocol_packets[PACKET_StaticTracepoints],
11961 "StaticTracepoints", "static-tracepoints", 0);
11962
1e4d1764
YQ
11963 add_packet_config_cmd (&remote_protocol_packets[PACKET_InstallInTrace],
11964 "InstallInTrace", "install-in-trace", 0);
11965
0fb4aa4b
PA
11966 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_statictrace_read],
11967 "qXfer:statictrace:read", "read-sdata-object", 0);
11968
78d85199
YQ
11969 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_fdpic],
11970 "qXfer:fdpic:read", "read-fdpic-loadmap", 0);
11971
03583c20
UW
11972 add_packet_config_cmd (&remote_protocol_packets[PACKET_QDisableRandomization],
11973 "QDisableRandomization", "disable-randomization", 0);
11974
d1feda86
YQ
11975 add_packet_config_cmd (&remote_protocol_packets[PACKET_QAgent],
11976 "QAgent", "agent", 0);
11977
f6f899bf
HAQ
11978 add_packet_config_cmd (&remote_protocol_packets[PACKET_QTBuffer_size],
11979 "QTBuffer:size", "trace-buffer-size", 0);
11980
9accd112
MM
11981 add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_off],
11982 "Qbtrace:off", "disable-btrace", 0);
11983
11984 add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_bts],
11985 "Qbtrace:bts", "enable-btrace", 0);
11986
11987 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_btrace],
11988 "qXfer:btrace", "read-btrace", 0);
11989
37a105a1
DJ
11990 /* Keep the old ``set remote Z-packet ...'' working. Each individual
11991 Z sub-packet has its own set and show commands, but users may
11992 have sets to this variable in their .gdbinit files (or in their
11993 documentation). */
e9e68a56 11994 add_setshow_auto_boolean_cmd ("Z-packet", class_obscure,
7915a72c
AC
11995 &remote_Z_packet_detect, _("\
11996Set use of remote protocol `Z' packets"), _("\
11997Show use of remote protocol `Z' packets "), _("\
3b64bf98 11998When set, GDB will attempt to use the remote breakpoint and watchpoint\n\
7915a72c 11999packets."),
e9e68a56 12000 set_remote_protocol_Z_packet_cmd,
3e43a32a
MS
12001 show_remote_protocol_Z_packet_cmd,
12002 /* FIXME: i18n: Use of remote protocol
12003 `Z' packets is %s. */
e9e68a56 12004 &remote_set_cmdlist, &remote_show_cmdlist);
449092f6 12005
a6b151f1
DJ
12006 add_prefix_cmd ("remote", class_files, remote_command, _("\
12007Manipulate files on the remote system\n\
12008Transfer files to and from the remote target system."),
12009 &remote_cmdlist, "remote ",
12010 0 /* allow-unknown */, &cmdlist);
12011
12012 add_cmd ("put", class_files, remote_put_command,
12013 _("Copy a local file to the remote system."),
12014 &remote_cmdlist);
12015
12016 add_cmd ("get", class_files, remote_get_command,
12017 _("Copy a remote file to the local system."),
12018 &remote_cmdlist);
12019
12020 add_cmd ("delete", class_files, remote_delete_command,
12021 _("Delete a remote file."),
12022 &remote_cmdlist);
12023
2d717e4f
DJ
12024 remote_exec_file = xstrdup ("");
12025 add_setshow_string_noescape_cmd ("exec-file", class_files,
12026 &remote_exec_file, _("\
12027Set the remote pathname for \"run\""), _("\
12028Show the remote pathname for \"run\""), NULL, NULL, NULL,
12029 &remote_set_cmdlist, &remote_show_cmdlist);
12030
449092f6
CV
12031 /* Eventually initialize fileio. See fileio.c */
12032 initialize_remote_fileio (remote_set_cmdlist, remote_show_cmdlist);
79d7f229
PA
12033
12034 /* Take advantage of the fact that the LWP field is not used, to tag
12035 special ptids with it set to != 0. */
82f73884
PA
12036 magic_null_ptid = ptid_build (42000, 1, -1);
12037 not_sent_ptid = ptid_build (42000, 1, -2);
12038 any_thread_ptid = ptid_build (42000, 1, 0);
35b1e5cc
SS
12039
12040 target_buf_size = 2048;
12041 target_buf = xmalloc (target_buf_size);
c906108c 12042}
10760264 12043
This page took 2.274363 seconds and 4 git commands to generate.