* disasm.h (gdb_disassembly): Add GDBARCH parameter.
[deliverable/binutils-gdb.git] / gdb / remote.c
CommitLineData
c906108c 1/* Remote target communications for serial-line targets in custom GDB protocol
8926118c 2
6aba47ca 3 Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
0fb0cc75 4 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
29182b13 5 Free Software Foundation, Inc.
c906108c 6
c5aa993b
JM
7 This file is part of GDB.
8
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
a9762ec7 11 the Free Software Foundation; either version 3 of the License, or
c5aa993b
JM
12 (at your option) any later version.
13
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
18
19 You should have received a copy of the GNU General Public License
a9762ec7 20 along with this program. If not, see <http://www.gnu.org/licenses/>. */
c5aa993b 21
23860348 22/* See the GDB User Guide for details of the GDB remote protocol. */
c5aa993b 23
c906108c
SS
24#include "defs.h"
25#include "gdb_string.h"
26#include <ctype.h>
27#include <fcntl.h>
c906108c
SS
28#include "inferior.h"
29#include "bfd.h"
30#include "symfile.h"
60250e8b 31#include "exceptions.h"
c906108c 32#include "target.h"
c5aa993b 33/*#include "terminal.h" */
c906108c
SS
34#include "gdbcmd.h"
35#include "objfiles.h"
36#include "gdb-stabs.h"
37#include "gdbthread.h"
c2c6d25f 38#include "remote.h"
4e052eda 39#include "regcache.h"
fd0407d6 40#include "value.h"
1ff9c3d6 41#include "gdb_assert.h"
6867ae3e 42#include "observer.h"
a77053c2 43#include "solib.h"
37a105a1
DJ
44#include "cli/cli-decode.h"
45#include "cli/cli-setshow.h"
424163ea 46#include "target-descriptions.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"
449092f6 63
fd79ecee
DJ
64#include "memory-map.h"
65
6765f3e5
DJ
66/* The size to align memory write packets, when practical. The protocol
67 does not guarantee any alignment, and gdb will generate short
68 writes and unaligned writes, but even as a best-effort attempt this
69 can improve bulk transfers. For instance, if a write is misaligned
70 relative to the target's data bus, the stub may need to make an extra
71 round trip fetching data from the target. This doesn't make a
72 huge difference, but it's easy to do, so we try to be helpful.
73
74 The alignment chosen is arbitrary; usually data bus width is
75 important here, not the possibly larger cache line size. */
76enum { REMOTE_ALIGN_WRITES = 16 };
77
23860348 78/* Prototypes for local functions. */
6426a772
JM
79static void cleanup_sigint_signal_handler (void *dummy);
80static void initialize_sigint_signal_handler (void);
6d820c5c 81static int getpkt_sane (char **buf, long *sizeof_buf, int forever);
74531fed
PA
82static int getpkt_or_notif_sane (char **buf, long *sizeof_buf,
83 int forever);
6426a772 84
a14ed312
KB
85static void handle_remote_sigint (int);
86static void handle_remote_sigint_twice (int);
87static void async_remote_interrupt (gdb_client_data);
88void async_remote_interrupt_twice (gdb_client_data);
43ff13b4 89
a14ed312 90static void remote_files_info (struct target_ops *ignore);
c906108c 91
316f2060 92static void remote_prepare_to_store (struct regcache *regcache);
c906108c 93
a14ed312 94static void remote_open (char *name, int from_tty);
c906108c 95
a14ed312 96static void extended_remote_open (char *name, int from_tty);
c906108c 97
75c99385 98static void remote_open_1 (char *, int, struct target_ops *, int extended_p);
c906108c 99
a14ed312 100static void remote_close (int quitting);
c906108c 101
136d6dae 102static void remote_mourn (struct target_ops *ops);
c906108c 103
a14ed312 104static void extended_remote_restart (void);
c906108c 105
136d6dae 106static void extended_remote_mourn (struct target_ops *);
c906108c 107
a14ed312 108static void remote_mourn_1 (struct target_ops *);
c906108c 109
6d820c5c 110static void remote_send (char **buf, long *sizeof_buf_p);
c906108c 111
a14ed312 112static int readchar (int timeout);
c906108c 113
7d85a9c0 114static void remote_kill (struct target_ops *ops);
c906108c 115
a14ed312 116static int tohex (int nib);
c906108c 117
75c99385
PA
118static int remote_can_async_p (void);
119
120static int remote_is_async_p (void);
121
122static void remote_async (void (*callback) (enum inferior_event_type event_type,
123 void *context), void *context);
124
125static int remote_async_mask (int new_mask);
126
136d6dae 127static void remote_detach (struct target_ops *ops, char *args, int from_tty);
c906108c 128
a14ed312 129static void remote_interrupt (int signo);
c906108c 130
a14ed312 131static void remote_interrupt_twice (int signo);
7a292a7a 132
a14ed312 133static void interrupt_query (void);
c906108c 134
79d7f229
PA
135static void set_general_thread (struct ptid ptid);
136static void set_continue_thread (struct ptid ptid);
c906108c 137
a14ed312 138static void get_offsets (void);
c906108c 139
6d820c5c
DJ
140static void skip_frame (void);
141
142static long read_frame (char **buf_p, long *sizeof_buf);
c906108c 143
a14ed312 144static int hexnumlen (ULONGEST num);
c906108c 145
a14ed312 146static void init_remote_ops (void);
c906108c 147
a14ed312 148static void init_extended_remote_ops (void);
c906108c 149
94cc34af 150static void remote_stop (ptid_t);
c906108c 151
a14ed312 152static int ishex (int ch, int *val);
c906108c 153
a14ed312 154static int stubhex (int ch);
c906108c 155
a14ed312 156static int hexnumstr (char *, ULONGEST);
c906108c 157
a14ed312 158static int hexnumnstr (char *, ULONGEST, int);
2df3850c 159
a14ed312 160static CORE_ADDR remote_address_masked (CORE_ADDR);
c906108c 161
a14ed312 162static void print_packet (char *);
c906108c 163
a14ed312 164static unsigned long crc32 (unsigned char *, int, unsigned int);
c906108c 165
a14ed312 166static void compare_sections_command (char *, int);
c906108c 167
a14ed312 168static void packet_command (char *, int);
c906108c 169
a14ed312 170static int stub_unpack_int (char *buff, int fieldlength);
c906108c 171
39f77062 172static ptid_t remote_current_thread (ptid_t oldptid);
c906108c 173
a14ed312 174static void remote_find_new_threads (void);
c906108c 175
79d7f229 176static void record_currthread (ptid_t currthread);
c906108c 177
30559e10 178static int fromhex (int a);
c906108c 179
cfd77fa1 180static int hex2bin (const char *hex, gdb_byte *bin, int count);
c906108c 181
cfd77fa1 182static int bin2hex (const gdb_byte *bin, char *hex, int count);
234fa6d1 183
a14ed312 184static int putpkt_binary (char *buf, int cnt);
c906108c 185
a14ed312 186static void check_binary_download (CORE_ADDR addr);
c906108c 187
5a2468f5 188struct packet_config;
5a2468f5 189
a14ed312 190static void show_packet_config_cmd (struct packet_config *config);
5a2468f5 191
d471ea57 192static void update_packet_config (struct packet_config *config);
5a2468f5 193
bb572ddd
DJ
194static void set_remote_protocol_packet_cmd (char *args, int from_tty,
195 struct cmd_list_element *c);
196
197static void show_remote_protocol_packet_cmd (struct ui_file *file,
198 int from_tty,
199 struct cmd_list_element *c,
200 const char *value);
201
82f73884
PA
202static char *write_ptid (char *buf, const char *endbuf, ptid_t ptid);
203static ptid_t read_ptid (char *buf, char **obuf);
204
c8d104ad
PA
205static void remote_query_supported (void);
206
207static void remote_check_symbols (struct objfile *objfile);
208
a14ed312 209void _initialize_remote (void);
c906108c 210
74531fed
PA
211struct stop_reply;
212static struct stop_reply *stop_reply_xmalloc (void);
213static void stop_reply_xfree (struct stop_reply *);
214static void do_stop_reply_xfree (void *arg);
215static void remote_parse_stop_reply (char *buf, struct stop_reply *);
216static void push_stop_reply (struct stop_reply *);
217static void remote_get_pending_stop_replies (void);
218static void discard_pending_stop_replies (int pid);
219static int peek_stop_reply (ptid_t ptid);
220
221static void remote_async_inferior_event_handler (gdb_client_data);
222static void remote_async_get_pending_events_handler (gdb_client_data);
223
d3fd5342
PA
224static void remote_terminal_ours (void);
225
d962ef82
DJ
226static int remote_read_description_p (struct target_ops *target);
227
74531fed
PA
228/* The non-stop remote protocol provisions for one pending stop reply.
229 This is where we keep it until it is acknowledged. */
230
231static struct stop_reply *pending_stop_reply = NULL;
232
a6b151f1
DJ
233/* For "remote". */
234
235static struct cmd_list_element *remote_cmdlist;
236
bb572ddd
DJ
237/* For "set remote" and "show remote". */
238
239static struct cmd_list_element *remote_set_cmdlist;
240static struct cmd_list_element *remote_show_cmdlist;
241
ea9c271d
DJ
242/* Description of the remote protocol state for the currently
243 connected target. This is per-target state, and independent of the
244 selected architecture. */
245
246struct remote_state
247{
248 /* A buffer to use for incoming packets, and its current size. The
249 buffer is grown dynamically for larger incoming packets.
250 Outgoing packets may also be constructed in this buffer.
251 BUF_SIZE is always at least REMOTE_PACKET_SIZE;
252 REMOTE_PACKET_SIZE should be used to limit the length of outgoing
253 packets. */
254 char *buf;
255 long buf_size;
be2a5f71
DJ
256
257 /* If we negotiated packet size explicitly (and thus can bypass
258 heuristics for the largest packet size that will not overflow
259 a buffer in the stub), this will be set to that packet size.
260 Otherwise zero, meaning to use the guessed size. */
261 long explicit_packet_size;
2d717e4f
DJ
262
263 /* remote_wait is normally called when the target is running and
264 waits for a stop reply packet. But sometimes we need to call it
265 when the target is already stopped. We can send a "?" packet
266 and have remote_wait read the response. Or, if we already have
267 the response, we can stash it in BUF and tell remote_wait to
268 skip calling getpkt. This flag is set when BUF contains a
269 stop reply packet and the target is not waiting. */
270 int cached_wait_status;
a6f3e723
SL
271
272 /* True, if in no ack mode. That is, neither GDB nor the stub will
273 expect acks from each other. The connection is assumed to be
274 reliable. */
275 int noack_mode;
82f73884
PA
276
277 /* True if we're connected in extended remote mode. */
278 int extended;
279
280 /* True if the stub reported support for multi-process
281 extensions. */
282 int multi_process_aware;
e24a49d8
PA
283
284 /* True if we resumed the target and we're waiting for the target to
285 stop. In the mean time, we can't start another command/query.
286 The remote server wouldn't be ready to process it, so we'd
287 timeout waiting for a reply that would never come and eventually
288 we'd close the connection. This can happen in asynchronous mode
289 because we allow GDB commands while the target is running. */
290 int waiting_for_stop_reply;
74531fed
PA
291
292 /* True if the stub reports support for non-stop mode. */
293 int non_stop_aware;
294
295 /* True if the stub reports support for vCont;t. */
296 int support_vCont_t;
ea9c271d
DJ
297};
298
82f73884
PA
299/* Returns true if the multi-process extensions are in effect. */
300static int
301remote_multi_process_p (struct remote_state *rs)
302{
303 return rs->extended && rs->multi_process_aware;
304}
305
ea9c271d
DJ
306/* This data could be associated with a target, but we do not always
307 have access to the current target when we need it, so for now it is
308 static. This will be fine for as long as only one target is in use
309 at a time. */
310static struct remote_state remote_state;
311
312static struct remote_state *
0b83947e 313get_remote_state_raw (void)
ea9c271d
DJ
314{
315 return &remote_state;
316}
317
318/* Description of the remote protocol for a given architecture. */
d01949b6 319
ad10f812
AC
320struct packet_reg
321{
322 long offset; /* Offset into G packet. */
323 long regnum; /* GDB's internal register number. */
324 LONGEST pnum; /* Remote protocol register number. */
b323314b 325 int in_g_packet; /* Always part of G packet. */
1cf3db46 326 /* long size in bytes; == register_size (target_gdbarch, regnum);
23860348 327 at present. */
1cf3db46 328 /* char *name; == gdbarch_register_name (target_gdbarch, regnum);
c9f4d572 329 at present. */
ad10f812
AC
330};
331
ea9c271d 332struct remote_arch_state
d01949b6 333{
ad10f812
AC
334 /* Description of the remote protocol registers. */
335 long sizeof_g_packet;
b323314b
AC
336
337 /* Description of the remote protocol registers indexed by REGNUM
f57d151a 338 (making an array gdbarch_num_regs in size). */
b323314b 339 struct packet_reg *regs;
ad10f812 340
d01949b6
AC
341 /* This is the size (in chars) of the first response to the ``g''
342 packet. It is used as a heuristic when determining the maximum
343 size of memory-read and memory-write packets. A target will
344 typically only reserve a buffer large enough to hold the ``g''
345 packet. The size does not include packet overhead (headers and
23860348 346 trailers). */
d01949b6
AC
347 long actual_register_packet_size;
348
349 /* This is the maximum size (in chars) of a non read/write packet.
23860348 350 It is also used as a cap on the size of read/write packets. */
d01949b6
AC
351 long remote_packet_size;
352};
353
3c3bea1c 354
d01949b6
AC
355/* Handle for retreving the remote protocol data from gdbarch. */
356static struct gdbarch_data *remote_gdbarch_data_handle;
357
ea9c271d
DJ
358static struct remote_arch_state *
359get_remote_arch_state (void)
d01949b6 360{
1cf3db46 361 return gdbarch_data (target_gdbarch, remote_gdbarch_data_handle);
d01949b6
AC
362}
363
0b83947e
DJ
364/* Fetch the global remote target state. */
365
366static struct remote_state *
367get_remote_state (void)
368{
369 /* Make sure that the remote architecture state has been
370 initialized, because doing so might reallocate rs->buf. Any
371 function which calls getpkt also needs to be mindful of changes
372 to rs->buf, but this call limits the number of places which run
373 into trouble. */
374 get_remote_arch_state ();
375
376 return get_remote_state_raw ();
377}
378
74ca34ce
DJ
379static int
380compare_pnums (const void *lhs_, const void *rhs_)
381{
382 const struct packet_reg * const *lhs = lhs_;
383 const struct packet_reg * const *rhs = rhs_;
384
385 if ((*lhs)->pnum < (*rhs)->pnum)
386 return -1;
387 else if ((*lhs)->pnum == (*rhs)->pnum)
388 return 0;
389 else
390 return 1;
391}
392
d01949b6
AC
393static void *
394init_remote_state (struct gdbarch *gdbarch)
395{
74ca34ce 396 int regnum, num_remote_regs, offset;
0b83947e 397 struct remote_state *rs = get_remote_state_raw ();
ea9c271d 398 struct remote_arch_state *rsa;
74ca34ce 399 struct packet_reg **remote_regs;
ea9c271d
DJ
400
401 rsa = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct remote_arch_state);
d01949b6 402
123dc839
DJ
403 /* Use the architecture to build a regnum<->pnum table, which will be
404 1:1 unless a feature set specifies otherwise. */
f57d151a 405 rsa->regs = GDBARCH_OBSTACK_CALLOC (gdbarch,
4a22f64d 406 gdbarch_num_regs (gdbarch),
f57d151a 407 struct packet_reg);
4a22f64d 408 for (regnum = 0; regnum < gdbarch_num_regs (gdbarch); regnum++)
ad10f812 409 {
ea9c271d 410 struct packet_reg *r = &rsa->regs[regnum];
baef701f 411
4a22f64d 412 if (register_size (gdbarch, regnum) == 0)
baef701f
DJ
413 /* Do not try to fetch zero-sized (placeholder) registers. */
414 r->pnum = -1;
415 else
416 r->pnum = gdbarch_remote_register_number (gdbarch, regnum);
417
b323314b 418 r->regnum = regnum;
74ca34ce
DJ
419 }
420
421 /* Define the g/G packet format as the contents of each register
422 with a remote protocol number, in order of ascending protocol
423 number. */
424
4a22f64d
UW
425 remote_regs = alloca (gdbarch_num_regs (gdbarch)
426 * sizeof (struct packet_reg *));
f57d151a 427 for (num_remote_regs = 0, regnum = 0;
4a22f64d 428 regnum < gdbarch_num_regs (gdbarch);
f57d151a 429 regnum++)
74ca34ce
DJ
430 if (rsa->regs[regnum].pnum != -1)
431 remote_regs[num_remote_regs++] = &rsa->regs[regnum];
7d58c67d 432
74ca34ce
DJ
433 qsort (remote_regs, num_remote_regs, sizeof (struct packet_reg *),
434 compare_pnums);
435
436 for (regnum = 0, offset = 0; regnum < num_remote_regs; regnum++)
437 {
438 remote_regs[regnum]->in_g_packet = 1;
439 remote_regs[regnum]->offset = offset;
4a22f64d 440 offset += register_size (gdbarch, remote_regs[regnum]->regnum);
ad10f812
AC
441 }
442
74ca34ce
DJ
443 /* Record the maximum possible size of the g packet - it may turn out
444 to be smaller. */
445 rsa->sizeof_g_packet = offset;
446
d01949b6
AC
447 /* Default maximum number of characters in a packet body. Many
448 remote stubs have a hardwired buffer size of 400 bytes
449 (c.f. BUFMAX in m68k-stub.c and i386-stub.c). BUFMAX-1 is used
450 as the maximum packet-size to ensure that the packet and an extra
451 NUL character can always fit in the buffer. This stops GDB
452 trashing stubs that try to squeeze an extra NUL into what is
ea9c271d
DJ
453 already a full buffer (As of 1999-12-04 that was most stubs). */
454 rsa->remote_packet_size = 400 - 1;
d01949b6 455
ea9c271d
DJ
456 /* This one is filled in when a ``g'' packet is received. */
457 rsa->actual_register_packet_size = 0;
458
459 /* Should rsa->sizeof_g_packet needs more space than the
ad10f812
AC
460 default, adjust the size accordingly. Remember that each byte is
461 encoded as two characters. 32 is the overhead for the packet
462 header / footer. NOTE: cagney/1999-10-26: I suspect that 8
d01949b6 463 (``$NN:G...#NN'') is a better guess, the below has been padded a
23860348 464 little. */
ea9c271d
DJ
465 if (rsa->sizeof_g_packet > ((rsa->remote_packet_size - 32) / 2))
466 rsa->remote_packet_size = (rsa->sizeof_g_packet * 2 + 32);
802188a7 467
ea9c271d
DJ
468 /* Make sure that the packet buffer is plenty big enough for
469 this architecture. */
470 if (rs->buf_size < rsa->remote_packet_size)
471 {
472 rs->buf_size = 2 * rsa->remote_packet_size;
7fca722e 473 rs->buf = xrealloc (rs->buf, rs->buf_size);
ea9c271d 474 }
6d820c5c 475
ea9c271d
DJ
476 return rsa;
477}
478
479/* Return the current allowed size of a remote packet. This is
480 inferred from the current architecture, and should be used to
481 limit the length of outgoing packets. */
482static long
483get_remote_packet_size (void)
484{
be2a5f71 485 struct remote_state *rs = get_remote_state ();
ea9c271d
DJ
486 struct remote_arch_state *rsa = get_remote_arch_state ();
487
be2a5f71
DJ
488 if (rs->explicit_packet_size)
489 return rs->explicit_packet_size;
490
ea9c271d 491 return rsa->remote_packet_size;
d01949b6
AC
492}
493
ad10f812 494static struct packet_reg *
ea9c271d 495packet_reg_from_regnum (struct remote_arch_state *rsa, long regnum)
ad10f812 496{
1cf3db46 497 if (regnum < 0 && regnum >= gdbarch_num_regs (target_gdbarch))
b323314b
AC
498 return NULL;
499 else
ad10f812 500 {
ea9c271d 501 struct packet_reg *r = &rsa->regs[regnum];
b323314b
AC
502 gdb_assert (r->regnum == regnum);
503 return r;
ad10f812 504 }
ad10f812
AC
505}
506
507static struct packet_reg *
ea9c271d 508packet_reg_from_pnum (struct remote_arch_state *rsa, LONGEST pnum)
ad10f812 509{
b323314b 510 int i;
1cf3db46 511 for (i = 0; i < gdbarch_num_regs (target_gdbarch); i++)
ad10f812 512 {
ea9c271d 513 struct packet_reg *r = &rsa->regs[i];
b323314b
AC
514 if (r->pnum == pnum)
515 return r;
ad10f812
AC
516 }
517 return NULL;
d01949b6
AC
518}
519
3c3bea1c
GS
520/* FIXME: graces/2002-08-08: These variables should eventually be
521 bound to an instance of the target object (as in gdbarch-tdep()),
522 when such a thing exists. */
523
524/* This is set to the data address of the access causing the target
525 to stop for a watchpoint. */
526static CORE_ADDR remote_watch_data_address;
527
94e08568 528/* This is non-zero if target stopped for a watchpoint. */
3c3bea1c
GS
529static int remote_stopped_by_watchpoint_p;
530
c906108c
SS
531static struct target_ops remote_ops;
532
533static struct target_ops extended_remote_ops;
534
b84876c2
PA
535static int remote_async_mask_value = 1;
536
6426a772
JM
537/* FIXME: cagney/1999-09-23: Even though getpkt was called with
538 ``forever'' still use the normal timeout mechanism. This is
539 currently used by the ASYNC code to guarentee that target reads
540 during the initial connect always time-out. Once getpkt has been
541 modified to return a timeout indication and, in turn
542 remote_wait()/wait_for_inferior() have gained a timeout parameter
23860348 543 this can go away. */
6426a772
JM
544static int wait_forever_enabled_p = 1;
545
546
c906108c
SS
547/* This variable chooses whether to send a ^C or a break when the user
548 requests program interruption. Although ^C is usually what remote
549 systems expect, and that is the default here, sometimes a break is
550 preferable instead. */
551
552static int remote_break;
553
c906108c
SS
554/* Descriptor for I/O to remote machine. Initialize it to NULL so that
555 remote_open knows that we don't have a file open when the program
556 starts. */
819cc324 557static struct serial *remote_desc = NULL;
c906108c 558
c906108c
SS
559/* This variable sets the number of bits in an address that are to be
560 sent in a memory ("M" or "m") packet. Normally, after stripping
561 leading zeros, the entire address would be sent. This variable
562 restricts the address to REMOTE_ADDRESS_SIZE bits. HISTORY: The
563 initial implementation of remote.c restricted the address sent in
564 memory packets to ``host::sizeof long'' bytes - (typically 32
565 bits). Consequently, for 64 bit targets, the upper 32 bits of an
566 address was never sent. Since fixing this bug may cause a break in
567 some remote targets this variable is principly provided to
23860348 568 facilitate backward compatibility. */
c906108c
SS
569
570static int remote_address_size;
571
75c99385
PA
572/* Temporary to track who currently owns the terminal. See
573 remote_terminal_* for more details. */
6426a772
JM
574
575static int remote_async_terminal_ours_p;
576
2d717e4f
DJ
577/* The executable file to use for "run" on the remote side. */
578
579static char *remote_exec_file = "";
580
11cf8741 581\f
11cf8741 582/* User configurable variables for the number of characters in a
ea9c271d
DJ
583 memory read/write packet. MIN (rsa->remote_packet_size,
584 rsa->sizeof_g_packet) is the default. Some targets need smaller
24b06219 585 values (fifo overruns, et.al.) and some users need larger values
ad10f812
AC
586 (speed up transfers). The variables ``preferred_*'' (the user
587 request), ``current_*'' (what was actually set) and ``forced_*''
23860348 588 (Positive - a soft limit, negative - a hard limit). */
11cf8741
JM
589
590struct memory_packet_config
591{
592 char *name;
593 long size;
594 int fixed_p;
595};
596
597/* Compute the current size of a read/write packet. Since this makes
598 use of ``actual_register_packet_size'' the computation is dynamic. */
599
600static long
601get_memory_packet_size (struct memory_packet_config *config)
602{
d01949b6 603 struct remote_state *rs = get_remote_state ();
ea9c271d
DJ
604 struct remote_arch_state *rsa = get_remote_arch_state ();
605
11cf8741
JM
606 /* NOTE: The somewhat arbitrary 16k comes from the knowledge (folk
607 law?) that some hosts don't cope very well with large alloca()
608 calls. Eventually the alloca() code will be replaced by calls to
609 xmalloc() and make_cleanups() allowing this restriction to either
23860348 610 be lifted or removed. */
11cf8741
JM
611#ifndef MAX_REMOTE_PACKET_SIZE
612#define MAX_REMOTE_PACKET_SIZE 16384
613#endif
3de11b2e 614 /* NOTE: 20 ensures we can write at least one byte. */
11cf8741 615#ifndef MIN_REMOTE_PACKET_SIZE
3de11b2e 616#define MIN_REMOTE_PACKET_SIZE 20
11cf8741
JM
617#endif
618 long what_they_get;
619 if (config->fixed_p)
620 {
621 if (config->size <= 0)
622 what_they_get = MAX_REMOTE_PACKET_SIZE;
623 else
624 what_they_get = config->size;
625 }
626 else
627 {
ea9c271d 628 what_they_get = get_remote_packet_size ();
23860348 629 /* Limit the packet to the size specified by the user. */
11cf8741
JM
630 if (config->size > 0
631 && what_they_get > config->size)
632 what_they_get = config->size;
be2a5f71
DJ
633
634 /* Limit it to the size of the targets ``g'' response unless we have
635 permission from the stub to use a larger packet size. */
636 if (rs->explicit_packet_size == 0
637 && rsa->actual_register_packet_size > 0
638 && what_they_get > rsa->actual_register_packet_size)
639 what_they_get = rsa->actual_register_packet_size;
11cf8741
JM
640 }
641 if (what_they_get > MAX_REMOTE_PACKET_SIZE)
642 what_they_get = MAX_REMOTE_PACKET_SIZE;
643 if (what_they_get < MIN_REMOTE_PACKET_SIZE)
644 what_they_get = MIN_REMOTE_PACKET_SIZE;
6d820c5c
DJ
645
646 /* Make sure there is room in the global buffer for this packet
647 (including its trailing NUL byte). */
648 if (rs->buf_size < what_they_get + 1)
649 {
650 rs->buf_size = 2 * what_they_get;
651 rs->buf = xrealloc (rs->buf, 2 * what_they_get);
652 }
653
11cf8741
JM
654 return what_they_get;
655}
656
657/* Update the size of a read/write packet. If they user wants
23860348 658 something really big then do a sanity check. */
11cf8741
JM
659
660static void
661set_memory_packet_size (char *args, struct memory_packet_config *config)
662{
663 int fixed_p = config->fixed_p;
664 long size = config->size;
665 if (args == NULL)
8a3fe4f8 666 error (_("Argument required (integer, `fixed' or `limited')."));
11cf8741
JM
667 else if (strcmp (args, "hard") == 0
668 || strcmp (args, "fixed") == 0)
669 fixed_p = 1;
670 else if (strcmp (args, "soft") == 0
671 || strcmp (args, "limit") == 0)
672 fixed_p = 0;
673 else
674 {
675 char *end;
676 size = strtoul (args, &end, 0);
677 if (args == end)
8a3fe4f8 678 error (_("Invalid %s (bad syntax)."), config->name);
11cf8741
JM
679#if 0
680 /* Instead of explicitly capping the size of a packet to
681 MAX_REMOTE_PACKET_SIZE or dissallowing it, the user is
682 instead allowed to set the size to something arbitrarily
23860348 683 large. */
11cf8741 684 if (size > MAX_REMOTE_PACKET_SIZE)
8a3fe4f8 685 error (_("Invalid %s (too large)."), config->name);
11cf8741
JM
686#endif
687 }
23860348 688 /* Extra checks? */
11cf8741
JM
689 if (fixed_p && !config->fixed_p)
690 {
e2e0b3e5
AC
691 if (! query (_("The target may not be able to correctly handle a %s\n"
692 "of %ld bytes. Change the packet size? "),
11cf8741 693 config->name, size))
8a3fe4f8 694 error (_("Packet size not changed."));
11cf8741 695 }
23860348 696 /* Update the config. */
11cf8741
JM
697 config->fixed_p = fixed_p;
698 config->size = size;
699}
700
701static void
702show_memory_packet_size (struct memory_packet_config *config)
703{
a3f17187 704 printf_filtered (_("The %s is %ld. "), config->name, config->size);
11cf8741 705 if (config->fixed_p)
a3f17187 706 printf_filtered (_("Packets are fixed at %ld bytes.\n"),
11cf8741
JM
707 get_memory_packet_size (config));
708 else
a3f17187 709 printf_filtered (_("Packets are limited to %ld bytes.\n"),
11cf8741
JM
710 get_memory_packet_size (config));
711}
712
713static struct memory_packet_config memory_write_packet_config =
714{
715 "memory-write-packet-size",
716};
717
718static void
719set_memory_write_packet_size (char *args, int from_tty)
720{
721 set_memory_packet_size (args, &memory_write_packet_config);
722}
723
724static void
725show_memory_write_packet_size (char *args, int from_tty)
726{
727 show_memory_packet_size (&memory_write_packet_config);
728}
729
730static long
731get_memory_write_packet_size (void)
732{
733 return get_memory_packet_size (&memory_write_packet_config);
734}
735
736static struct memory_packet_config memory_read_packet_config =
737{
738 "memory-read-packet-size",
739};
740
741static void
742set_memory_read_packet_size (char *args, int from_tty)
743{
744 set_memory_packet_size (args, &memory_read_packet_config);
745}
746
747static void
748show_memory_read_packet_size (char *args, int from_tty)
749{
750 show_memory_packet_size (&memory_read_packet_config);
751}
752
753static long
754get_memory_read_packet_size (void)
755{
756 long size = get_memory_packet_size (&memory_read_packet_config);
757 /* FIXME: cagney/1999-11-07: Functions like getpkt() need to get an
758 extra buffer size argument before the memory read size can be
ea9c271d
DJ
759 increased beyond this. */
760 if (size > get_remote_packet_size ())
761 size = get_remote_packet_size ();
11cf8741
JM
762 return size;
763}
764
11cf8741 765\f
5a2468f5
JM
766/* Generic configuration support for packets the stub optionally
767 supports. Allows the user to specify the use of the packet as well
23860348 768 as allowing GDB to auto-detect support in the remote stub. */
5a2468f5
JM
769
770enum packet_support
771 {
772 PACKET_SUPPORT_UNKNOWN = 0,
773 PACKET_ENABLE,
774 PACKET_DISABLE
775 };
776
5a2468f5
JM
777struct packet_config
778 {
bb572ddd
DJ
779 const char *name;
780 const char *title;
7f19b9a2 781 enum auto_boolean detect;
5a2468f5
JM
782 enum packet_support support;
783 };
784
d471ea57 785/* Analyze a packet's return value and update the packet config
23860348 786 accordingly. */
d471ea57
AC
787
788enum packet_result
789{
790 PACKET_ERROR,
791 PACKET_OK,
792 PACKET_UNKNOWN
793};
794
5a2468f5 795static void
d471ea57 796update_packet_config (struct packet_config *config)
5a2468f5 797{
d471ea57
AC
798 switch (config->detect)
799 {
7f19b9a2 800 case AUTO_BOOLEAN_TRUE:
d471ea57
AC
801 config->support = PACKET_ENABLE;
802 break;
7f19b9a2 803 case AUTO_BOOLEAN_FALSE:
d471ea57
AC
804 config->support = PACKET_DISABLE;
805 break;
7f19b9a2 806 case AUTO_BOOLEAN_AUTO:
d471ea57
AC
807 config->support = PACKET_SUPPORT_UNKNOWN;
808 break;
809 }
5a2468f5
JM
810}
811
812static void
fba45db2 813show_packet_config_cmd (struct packet_config *config)
5a2468f5
JM
814{
815 char *support = "internal-error";
816 switch (config->support)
817 {
818 case PACKET_ENABLE:
819 support = "enabled";
820 break;
821 case PACKET_DISABLE:
822 support = "disabled";
823 break;
824 case PACKET_SUPPORT_UNKNOWN:
825 support = "unknown";
826 break;
827 }
828 switch (config->detect)
829 {
7f19b9a2 830 case AUTO_BOOLEAN_AUTO:
37a105a1
DJ
831 printf_filtered (_("Support for the `%s' packet is auto-detected, currently %s.\n"),
832 config->name, support);
5a2468f5 833 break;
7f19b9a2
AC
834 case AUTO_BOOLEAN_TRUE:
835 case AUTO_BOOLEAN_FALSE:
37a105a1
DJ
836 printf_filtered (_("Support for the `%s' packet is currently %s.\n"),
837 config->name, support);
8e248173 838 break;
5a2468f5
JM
839 }
840}
841
842static void
bb572ddd
DJ
843add_packet_config_cmd (struct packet_config *config, const char *name,
844 const char *title, int legacy)
d471ea57 845{
5a2468f5
JM
846 char *set_doc;
847 char *show_doc;
d471ea57 848 char *cmd_name;
3ed07be4 849
5a2468f5
JM
850 config->name = name;
851 config->title = title;
7f19b9a2 852 config->detect = AUTO_BOOLEAN_AUTO;
8e248173 853 config->support = PACKET_SUPPORT_UNKNOWN;
b435e160
AC
854 set_doc = xstrprintf ("Set use of remote protocol `%s' (%s) packet",
855 name, title);
856 show_doc = xstrprintf ("Show current use of remote protocol `%s' (%s) packet",
857 name, title);
d471ea57 858 /* set/show TITLE-packet {auto,on,off} */
b435e160 859 cmd_name = xstrprintf ("%s-packet", title);
e9e68a56 860 add_setshow_auto_boolean_cmd (cmd_name, class_obscure,
2c5b56ce 861 &config->detect, set_doc, show_doc, NULL, /* help_doc */
bb572ddd
DJ
862 set_remote_protocol_packet_cmd,
863 show_remote_protocol_packet_cmd,
864 &remote_set_cmdlist, &remote_show_cmdlist);
23860348 865 /* set/show remote NAME-packet {auto,on,off} -- legacy. */
d471ea57
AC
866 if (legacy)
867 {
868 char *legacy_name;
b435e160 869 legacy_name = xstrprintf ("%s-packet", name);
d471ea57 870 add_alias_cmd (legacy_name, cmd_name, class_obscure, 0,
bb572ddd 871 &remote_set_cmdlist);
d471ea57 872 add_alias_cmd (legacy_name, cmd_name, class_obscure, 0,
bb572ddd 873 &remote_show_cmdlist);
d471ea57 874 }
5a2468f5
JM
875}
876
d471ea57 877static enum packet_result
a76d924d 878packet_check_result (const char *buf)
5a2468f5 879{
d471ea57 880 if (buf[0] != '\0')
5a2468f5 881 {
d471ea57 882 /* The stub recognized the packet request. Check that the
23860348 883 operation succeeded. */
a76d924d
DJ
884 if (buf[0] == 'E'
885 && isxdigit (buf[1]) && isxdigit (buf[2])
886 && buf[3] == '\0')
887 /* "Enn" - definitly an error. */
888 return PACKET_ERROR;
889
890 /* Always treat "E." as an error. This will be used for
891 more verbose error messages, such as E.memtypes. */
892 if (buf[0] == 'E' && buf[1] == '.')
893 return PACKET_ERROR;
894
895 /* The packet may or may not be OK. Just assume it is. */
896 return PACKET_OK;
897 }
898 else
899 /* The stub does not support the packet. */
900 return PACKET_UNKNOWN;
901}
902
903static enum packet_result
904packet_ok (const char *buf, struct packet_config *config)
905{
906 enum packet_result result;
907
908 result = packet_check_result (buf);
909 switch (result)
910 {
911 case PACKET_OK:
912 case PACKET_ERROR:
913 /* The stub recognized the packet request. */
d471ea57
AC
914 switch (config->support)
915 {
916 case PACKET_SUPPORT_UNKNOWN:
917 if (remote_debug)
918 fprintf_unfiltered (gdb_stdlog,
919 "Packet %s (%s) is supported\n",
920 config->name, config->title);
921 config->support = PACKET_ENABLE;
922 break;
923 case PACKET_DISABLE:
8e65ff28 924 internal_error (__FILE__, __LINE__,
e2e0b3e5 925 _("packet_ok: attempt to use a disabled packet"));
d471ea57
AC
926 break;
927 case PACKET_ENABLE:
928 break;
929 }
a76d924d
DJ
930 break;
931 case PACKET_UNKNOWN:
23860348 932 /* The stub does not support the packet. */
d471ea57
AC
933 switch (config->support)
934 {
935 case PACKET_ENABLE:
7f19b9a2 936 if (config->detect == AUTO_BOOLEAN_AUTO)
d471ea57 937 /* If the stub previously indicated that the packet was
23860348 938 supported then there is a protocol error.. */
8a3fe4f8 939 error (_("Protocol error: %s (%s) conflicting enabled responses."),
d471ea57
AC
940 config->name, config->title);
941 else
23860348 942 /* The user set it wrong. */
8a3fe4f8 943 error (_("Enabled packet %s (%s) not recognized by stub"),
d471ea57
AC
944 config->name, config->title);
945 break;
946 case PACKET_SUPPORT_UNKNOWN:
947 if (remote_debug)
948 fprintf_unfiltered (gdb_stdlog,
949 "Packet %s (%s) is NOT supported\n",
950 config->name, config->title);
951 config->support = PACKET_DISABLE;
952 break;
953 case PACKET_DISABLE:
954 break;
955 }
a76d924d 956 break;
5a2468f5 957 }
a76d924d
DJ
958
959 return result;
5a2468f5
JM
960}
961
444abaca
DJ
962enum {
963 PACKET_vCont = 0,
964 PACKET_X,
965 PACKET_qSymbol,
966 PACKET_P,
967 PACKET_p,
968 PACKET_Z0,
969 PACKET_Z1,
970 PACKET_Z2,
971 PACKET_Z3,
972 PACKET_Z4,
a6b151f1
DJ
973 PACKET_vFile_open,
974 PACKET_vFile_pread,
975 PACKET_vFile_pwrite,
976 PACKET_vFile_close,
977 PACKET_vFile_unlink,
0876f84a 978 PACKET_qXfer_auxv,
23181151 979 PACKET_qXfer_features,
cfa9d6d9 980 PACKET_qXfer_libraries,
fd79ecee 981 PACKET_qXfer_memory_map,
0e7f50da
UW
982 PACKET_qXfer_spu_read,
983 PACKET_qXfer_spu_write,
07e059b5 984 PACKET_qXfer_osdata,
444abaca 985 PACKET_qGetTLSAddr,
be2a5f71 986 PACKET_qSupported,
89be2091 987 PACKET_QPassSignals,
08388c79 988 PACKET_qSearch_memory,
2d717e4f
DJ
989 PACKET_vAttach,
990 PACKET_vRun,
a6f3e723 991 PACKET_QStartNoAckMode,
82f73884 992 PACKET_vKill,
4aa995e1
PA
993 PACKET_qXfer_siginfo_read,
994 PACKET_qXfer_siginfo_write,
0b16c5cf 995 PACKET_qAttached,
444abaca
DJ
996 PACKET_MAX
997};
506fb367 998
444abaca 999static struct packet_config remote_protocol_packets[PACKET_MAX];
dc8acb97
MS
1000
1001static void
444abaca
DJ
1002set_remote_protocol_packet_cmd (char *args, int from_tty,
1003 struct cmd_list_element *c)
dc8acb97 1004{
444abaca 1005 struct packet_config *packet;
dc8acb97 1006
444abaca
DJ
1007 for (packet = remote_protocol_packets;
1008 packet < &remote_protocol_packets[PACKET_MAX];
1009 packet++)
1010 {
1011 if (&packet->detect == c->var)
1012 {
1013 update_packet_config (packet);
1014 return;
1015 }
1016 }
1017 internal_error (__FILE__, __LINE__, "Could not find config for %s",
1018 c->name);
dc8acb97
MS
1019}
1020
5a2468f5 1021static void
444abaca
DJ
1022show_remote_protocol_packet_cmd (struct ui_file *file, int from_tty,
1023 struct cmd_list_element *c,
1024 const char *value)
5a2468f5 1025{
444abaca 1026 struct packet_config *packet;
5a2468f5 1027
444abaca
DJ
1028 for (packet = remote_protocol_packets;
1029 packet < &remote_protocol_packets[PACKET_MAX];
1030 packet++)
1031 {
1032 if (&packet->detect == c->var)
1033 {
1034 show_packet_config_cmd (packet);
1035 return;
1036 }
1037 }
1038 internal_error (__FILE__, __LINE__, "Could not find config for %s",
1039 c->name);
5a2468f5
JM
1040}
1041
d471ea57
AC
1042/* Should we try one of the 'Z' requests? */
1043
1044enum Z_packet_type
1045{
1046 Z_PACKET_SOFTWARE_BP,
1047 Z_PACKET_HARDWARE_BP,
1048 Z_PACKET_WRITE_WP,
1049 Z_PACKET_READ_WP,
1050 Z_PACKET_ACCESS_WP,
1051 NR_Z_PACKET_TYPES
1052};
96baa820 1053
d471ea57 1054/* For compatibility with older distributions. Provide a ``set remote
23860348 1055 Z-packet ...'' command that updates all the Z packet types. */
d471ea57 1056
7f19b9a2 1057static enum auto_boolean remote_Z_packet_detect;
96baa820
JM
1058
1059static void
fba45db2
KB
1060set_remote_protocol_Z_packet_cmd (char *args, int from_tty,
1061 struct cmd_list_element *c)
96baa820 1062{
d471ea57
AC
1063 int i;
1064 for (i = 0; i < NR_Z_PACKET_TYPES; i++)
1065 {
444abaca
DJ
1066 remote_protocol_packets[PACKET_Z0 + i].detect = remote_Z_packet_detect;
1067 update_packet_config (&remote_protocol_packets[PACKET_Z0 + i]);
d471ea57 1068 }
96baa820
JM
1069}
1070
1071static void
08546159
AC
1072show_remote_protocol_Z_packet_cmd (struct ui_file *file, int from_tty,
1073 struct cmd_list_element *c,
1074 const char *value)
96baa820 1075{
d471ea57
AC
1076 int i;
1077 for (i = 0; i < NR_Z_PACKET_TYPES; i++)
1078 {
444abaca 1079 show_packet_config_cmd (&remote_protocol_packets[PACKET_Z0 + i]);
d471ea57 1080 }
96baa820
JM
1081}
1082
9d1f7ab2
MS
1083/* Should we try the 'ThreadInfo' query packet?
1084
1085 This variable (NOT available to the user: auto-detect only!)
1086 determines whether GDB will use the new, simpler "ThreadInfo"
1087 query or the older, more complex syntax for thread queries.
802188a7 1088 This is an auto-detect variable (set to true at each connect,
9d1f7ab2
MS
1089 and set to false when the target fails to recognize it). */
1090
1091static int use_threadinfo_query;
1092static int use_threadextra_query;
1093
23860348 1094/* Tokens for use by the asynchronous signal handlers for SIGINT. */
d5d6fca5
DJ
1095static struct async_signal_handler *sigint_remote_twice_token;
1096static struct async_signal_handler *sigint_remote_token;
43ff13b4 1097
74531fed
PA
1098\f
1099/* Asynchronous signal handle registered as event loop source for
1100 when we have pending events ready to be passed to the core. */
1101
1102static struct async_event_handler *remote_async_inferior_event_token;
1103
1104/* Asynchronous signal handle registered as event loop source for when
1105 the remote sent us a %Stop notification. The registered callback
1106 will do a vStopped sequence to pull the rest of the events out of
1107 the remote side into our event queue. */
1108
1109static struct async_event_handler *remote_async_get_pending_events_token;
c906108c
SS
1110\f
1111
79d7f229
PA
1112static ptid_t magic_null_ptid;
1113static ptid_t not_sent_ptid;
1114static ptid_t any_thread_ptid;
1115
1116/* These are the threads which we last sent to the remote system. The
1117 TID member will be -1 for all or -2 for not sent yet. */
1118
1119static ptid_t general_thread;
1120static ptid_t continue_thread;
c5aa993b 1121
0b16c5cf
PA
1122/* Find out if the stub attached to PID (and hence GDB should offer to
1123 detach instead of killing it when bailing out). */
1124
1125static int
1126remote_query_attached (int pid)
1127{
1128 struct remote_state *rs = get_remote_state ();
1129
1130 if (remote_protocol_packets[PACKET_qAttached].support == PACKET_DISABLE)
1131 return 0;
1132
1133 if (remote_multi_process_p (rs))
1134 sprintf (rs->buf, "qAttached:%x", pid);
1135 else
1136 sprintf (rs->buf, "qAttached");
1137
1138 putpkt (rs->buf);
1139 getpkt (&rs->buf, &rs->buf_size, 0);
1140
1141 switch (packet_ok (rs->buf,
1554e9be 1142 &remote_protocol_packets[PACKET_qAttached]))
0b16c5cf
PA
1143 {
1144 case PACKET_OK:
1145 if (strcmp (rs->buf, "1") == 0)
1146 return 1;
1147 break;
1148 case PACKET_ERROR:
1149 warning (_("Remote failure reply: %s"), rs->buf);
1150 break;
1151 case PACKET_UNKNOWN:
1152 break;
1153 }
1154
1155 return 0;
1156}
1157
1941c569
PA
1158/* Add PID to GDB's inferior table. Since we can be connected to a
1159 remote system before before knowing about any inferior, mark the
0b16c5cf
PA
1160 target with execution when we find the first inferior. If ATTACHED
1161 is 1, then we had just attached to this inferior. If it is 0, then
1162 we just created this inferior. If it is -1, then try querying the
1163 remote stub to find out if it had attached to the inferior or
1164 not. */
1941c569
PA
1165
1166static struct inferior *
0b16c5cf 1167remote_add_inferior (int pid, int attached)
1941c569
PA
1168{
1169 struct remote_state *rs = get_remote_state ();
1170 struct inferior *inf;
1171
0b16c5cf
PA
1172 /* Check whether this process we're learning about is to be
1173 considered attached, or if is to be considered to have been
1174 spawned by the stub. */
1175 if (attached == -1)
1176 attached = remote_query_attached (pid);
1177
1941c569
PA
1178 inf = add_inferior (pid);
1179
0b16c5cf
PA
1180 inf->attach_flag = attached;
1181
1941c569
PA
1182 return inf;
1183}
1184
1185/* Add thread PTID to GDB's thread list. Tag it as executing/running
1186 according to RUNNING. */
1187
c906108c 1188static void
1941c569 1189remote_add_thread (ptid_t ptid, int running)
c906108c 1190{
1941c569
PA
1191 add_thread (ptid);
1192
1193 set_executing (ptid, running);
1194 set_running (ptid, running);
1195}
1196
1197/* Come here when we learn about a thread id from the remote target.
1198 It may be the first time we hear about such thread, so take the
1199 opportunity to add it to GDB's thread list. In case this is the
1200 first time we're noticing its corresponding inferior, add it to
1201 GDB's inferior list as well. */
1202
1203static void
1204remote_notice_new_inferior (ptid_t currthread, int running)
1205{
1206 struct remote_state *rs = get_remote_state ();
1207
c906108c
SS
1208 /* If this is a new thread, add it to GDB's thread list.
1209 If we leave it up to WFI to do this, bad things will happen. */
82f73884
PA
1210
1211 if (in_thread_list (currthread) && is_exited (currthread))
1212 {
1213 /* We're seeing an event on a thread id we knew had exited.
1214 This has to be a new thread reusing the old id. Add it. */
1941c569 1215 remote_add_thread (currthread, running);
82f73884
PA
1216 return;
1217 }
1218
79d7f229 1219 if (!in_thread_list (currthread))
c0a2216e 1220 {
1941c569 1221 struct inferior *inf = NULL;
bad34192 1222 int pid = ptid_get_pid (currthread);
1941c569 1223
bad34192
PA
1224 if (ptid_is_pid (inferior_ptid)
1225 && pid == ptid_get_pid (inferior_ptid))
c0a2216e
PA
1226 {
1227 /* inferior_ptid has no thread member yet. This can happen
1228 with the vAttach -> remote_wait,"TAAthread:" path if the
1229 stub doesn't support qC. This is the first stop reported
1230 after an attach, so this is the main thread. Update the
1231 ptid in the thread list. */
bad34192
PA
1232 if (in_thread_list (pid_to_ptid (pid)))
1233 thread_change_ptid (inferior_ptid, currthread);
1234 else
1235 {
1236 remote_add_thread (currthread, running);
1237 inferior_ptid = currthread;
1238 }
82f73884 1239 return;
c0a2216e 1240 }
82f73884
PA
1241
1242 if (ptid_equal (magic_null_ptid, inferior_ptid))
c0a2216e
PA
1243 {
1244 /* inferior_ptid is not set yet. This can happen with the
1245 vRun -> remote_wait,"TAAthread:" path if the stub
1246 doesn't support qC. This is the first stop reported
1247 after an attach, so this is the main thread. Update the
1248 ptid in the thread list. */
82f73884
PA
1249 thread_change_ptid (inferior_ptid, currthread);
1250 return;
c0a2216e 1251 }
82f73884 1252
29c87f7f
PA
1253 /* When connecting to a target remote, or to a target
1254 extended-remote which already was debugging an inferior, we
1255 may not know about it yet. Add it before adding its child
1256 thread, so notifications are emitted in a sensible order. */
1257 if (!in_inferior_list (ptid_get_pid (currthread)))
0b16c5cf 1258 inf = remote_add_inferior (ptid_get_pid (currthread), -1);
29c87f7f 1259
82f73884 1260 /* This is really a new thread. Add it. */
1941c569
PA
1261 remote_add_thread (currthread, running);
1262
1263 /* If we found a new inferior, let the common code do whatever
1264 it needs to with it (e.g., read shared libraries, insert
1265 breakpoints). */
1266 if (inf != NULL)
1267 notice_new_inferior (currthread, running, 0);
c0a2216e 1268 }
c906108c
SS
1269}
1270
74531fed
PA
1271/* Call this function as a result of
1272 1) A halt indication (T packet) containing a thread id
1273 2) A direct query of currthread
1274 3) Successful execution of set thread
1275 */
1276
1277static void
1278record_currthread (ptid_t currthread)
1279{
1280 general_thread = currthread;
1281
1282 if (ptid_equal (currthread, minus_one_ptid))
1283 /* We're just invalidating the local thread mirror. */
1284 return;
1285
1941c569 1286 remote_notice_new_inferior (currthread, 0);
74531fed
PA
1287}
1288
89be2091
DJ
1289static char *last_pass_packet;
1290
1291/* If 'QPassSignals' is supported, tell the remote stub what signals
1292 it can simply pass through to the inferior without reporting. */
1293
1294static void
1295remote_pass_signals (void)
1296{
1297 if (remote_protocol_packets[PACKET_QPassSignals].support != PACKET_DISABLE)
1298 {
1299 char *pass_packet, *p;
1300 int numsigs = (int) TARGET_SIGNAL_LAST;
1301 int count = 0, i;
1302
1303 gdb_assert (numsigs < 256);
1304 for (i = 0; i < numsigs; i++)
1305 {
1306 if (signal_stop_state (i) == 0
1307 && signal_print_state (i) == 0
1308 && signal_pass_state (i) == 1)
1309 count++;
1310 }
1311 pass_packet = xmalloc (count * 3 + strlen ("QPassSignals:") + 1);
1312 strcpy (pass_packet, "QPassSignals:");
1313 p = pass_packet + strlen (pass_packet);
1314 for (i = 0; i < numsigs; i++)
1315 {
1316 if (signal_stop_state (i) == 0
1317 && signal_print_state (i) == 0
1318 && signal_pass_state (i) == 1)
1319 {
1320 if (i >= 16)
1321 *p++ = tohex (i >> 4);
1322 *p++ = tohex (i & 15);
1323 if (count)
1324 *p++ = ';';
1325 else
1326 break;
1327 count--;
1328 }
1329 }
1330 *p = 0;
1331 if (!last_pass_packet || strcmp (last_pass_packet, pass_packet))
1332 {
1333 struct remote_state *rs = get_remote_state ();
1334 char *buf = rs->buf;
1335
1336 putpkt (pass_packet);
1337 getpkt (&rs->buf, &rs->buf_size, 0);
1338 packet_ok (buf, &remote_protocol_packets[PACKET_QPassSignals]);
1339 if (last_pass_packet)
1340 xfree (last_pass_packet);
1341 last_pass_packet = pass_packet;
1342 }
1343 else
1344 xfree (pass_packet);
1345 }
1346}
1347
79d7f229
PA
1348/* If PTID is MAGIC_NULL_PTID, don't set any thread. If PTID is
1349 MINUS_ONE_PTID, set the thread to -1, so the stub returns the
1350 thread. If GEN is set, set the general thread, if not, then set
1351 the step/continue thread. */
c906108c 1352static void
79d7f229 1353set_thread (struct ptid ptid, int gen)
c906108c 1354{
d01949b6 1355 struct remote_state *rs = get_remote_state ();
79d7f229 1356 ptid_t state = gen ? general_thread : continue_thread;
6d820c5c 1357 char *buf = rs->buf;
79d7f229 1358 char *endbuf = rs->buf + get_remote_packet_size ();
c906108c 1359
79d7f229 1360 if (ptid_equal (state, ptid))
c906108c
SS
1361 return;
1362
79d7f229
PA
1363 *buf++ = 'H';
1364 *buf++ = gen ? 'g' : 'c';
1365 if (ptid_equal (ptid, magic_null_ptid))
1366 xsnprintf (buf, endbuf - buf, "0");
1367 else if (ptid_equal (ptid, any_thread_ptid))
1368 xsnprintf (buf, endbuf - buf, "0");
1369 else if (ptid_equal (ptid, minus_one_ptid))
1370 xsnprintf (buf, endbuf - buf, "-1");
1371 else
82f73884 1372 write_ptid (buf, endbuf, ptid);
79d7f229 1373 putpkt (rs->buf);
6d820c5c 1374 getpkt (&rs->buf, &rs->buf_size, 0);
c906108c 1375 if (gen)
79d7f229 1376 general_thread = ptid;
c906108c 1377 else
79d7f229 1378 continue_thread = ptid;
c906108c 1379}
79d7f229
PA
1380
1381static void
1382set_general_thread (struct ptid ptid)
1383{
1384 set_thread (ptid, 1);
1385}
1386
1387static void
1388set_continue_thread (struct ptid ptid)
1389{
1390 set_thread (ptid, 0);
1391}
1392
3c9c4b83
PA
1393/* Change the remote current process. Which thread within the process
1394 ends up selected isn't important, as long as it is the same process
1395 as what INFERIOR_PTID points to.
1396
1397 This comes from that fact that there is no explicit notion of
1398 "selected process" in the protocol. The selected process for
1399 general operations is the process the selected general thread
1400 belongs to. */
1401
1402static void
1403set_general_process (void)
1404{
1405 struct remote_state *rs = get_remote_state ();
1406
1407 /* If the remote can't handle multiple processes, don't bother. */
1408 if (!remote_multi_process_p (rs))
1409 return;
1410
1411 /* We only need to change the remote current thread if it's pointing
1412 at some other process. */
1413 if (ptid_get_pid (general_thread) != ptid_get_pid (inferior_ptid))
1414 set_general_thread (inferior_ptid);
1415}
1416
c906108c 1417\f
79d7f229
PA
1418/* Return nonzero if the thread PTID is still alive on the remote
1419 system. */
c906108c
SS
1420
1421static int
28439f5e 1422remote_thread_alive (struct target_ops *ops, ptid_t ptid)
c906108c 1423{
6d820c5c 1424 struct remote_state *rs = get_remote_state ();
79d7f229 1425 int tid = ptid_get_tid (ptid);
82f73884 1426 char *p, *endp;
c906108c 1427
c0a2216e
PA
1428 if (ptid_equal (ptid, magic_null_ptid))
1429 /* The main thread is always alive. */
1430 return 1;
1431
1432 if (ptid_get_pid (ptid) != 0 && ptid_get_tid (ptid) == 0)
1433 /* The main thread is always alive. This can happen after a
1434 vAttach, if the remote side doesn't support
1435 multi-threading. */
1436 return 1;
1437
82f73884
PA
1438 p = rs->buf;
1439 endp = rs->buf + get_remote_packet_size ();
1440
1441 *p++ = 'T';
1442 write_ptid (p, endp, ptid);
1443
2e9f7625 1444 putpkt (rs->buf);
6d820c5c 1445 getpkt (&rs->buf, &rs->buf_size, 0);
2e9f7625 1446 return (rs->buf[0] == 'O' && rs->buf[1] == 'K');
c906108c
SS
1447}
1448
1449/* About these extended threadlist and threadinfo packets. They are
1450 variable length packets but, the fields within them are often fixed
1451 length. They are redundent enough to send over UDP as is the
1452 remote protocol in general. There is a matching unit test module
1453 in libstub. */
1454
cce74817
JM
1455#define OPAQUETHREADBYTES 8
1456
1457/* a 64 bit opaque identifier */
1458typedef unsigned char threadref[OPAQUETHREADBYTES];
1459
23860348
MS
1460/* WARNING: This threadref data structure comes from the remote O.S.,
1461 libstub protocol encoding, and remote.c. it is not particularly
1462 changable. */
cce74817
JM
1463
1464/* Right now, the internal structure is int. We want it to be bigger.
1465 Plan to fix this.
c5aa993b 1466 */
cce74817 1467
23860348 1468typedef int gdb_threadref; /* Internal GDB thread reference. */
cce74817 1469
9d1f7ab2 1470/* gdb_ext_thread_info is an internal GDB data structure which is
cfde0993 1471 equivalent to the reply of the remote threadinfo packet. */
cce74817
JM
1472
1473struct gdb_ext_thread_info
c5aa993b 1474 {
23860348 1475 threadref threadid; /* External form of thread reference. */
2bc416ba 1476 int active; /* Has state interesting to GDB?
23860348 1477 regs, stack. */
2bc416ba 1478 char display[256]; /* Brief state display, name,
cedea757 1479 blocked/suspended. */
23860348 1480 char shortname[32]; /* To be used to name threads. */
2bc416ba 1481 char more_display[256]; /* Long info, statistics, queue depth,
23860348 1482 whatever. */
c5aa993b 1483 };
cce74817
JM
1484
1485/* The volume of remote transfers can be limited by submitting
1486 a mask containing bits specifying the desired information.
1487 Use a union of these values as the 'selection' parameter to
1488 get_thread_info. FIXME: Make these TAG names more thread specific.
c5aa993b 1489 */
cce74817
JM
1490
1491#define TAG_THREADID 1
1492#define TAG_EXISTS 2
1493#define TAG_DISPLAY 4
1494#define TAG_THREADNAME 8
c5aa993b 1495#define TAG_MOREDISPLAY 16
cce74817 1496
23860348 1497#define BUF_THREAD_ID_SIZE (OPAQUETHREADBYTES * 2)
c906108c 1498
b2dd6311 1499char *unpack_varlen_hex (char *buff, ULONGEST *result);
cce74817 1500
a14ed312 1501static char *unpack_nibble (char *buf, int *val);
cce74817 1502
a14ed312 1503static char *pack_nibble (char *buf, int nibble);
cce74817 1504
23860348 1505static char *pack_hex_byte (char *pkt, int /* unsigned char */ byte);
cce74817 1506
a14ed312 1507static char *unpack_byte (char *buf, int *value);
cce74817 1508
a14ed312 1509static char *pack_int (char *buf, int value);
cce74817 1510
a14ed312 1511static char *unpack_int (char *buf, int *value);
cce74817 1512
a14ed312 1513static char *unpack_string (char *src, char *dest, int length);
cce74817 1514
23860348 1515static char *pack_threadid (char *pkt, threadref *id);
cce74817 1516
23860348 1517static char *unpack_threadid (char *inbuf, threadref *id);
cce74817 1518
23860348 1519void int_to_threadref (threadref *id, int value);
cce74817 1520
23860348 1521static int threadref_to_int (threadref *ref);
cce74817 1522
23860348 1523static void copy_threadref (threadref *dest, threadref *src);
cce74817 1524
23860348 1525static int threadmatch (threadref *dest, threadref *src);
cce74817 1526
2bc416ba 1527static char *pack_threadinfo_request (char *pkt, int mode,
23860348 1528 threadref *id);
cce74817 1529
a14ed312 1530static int remote_unpack_thread_info_response (char *pkt,
23860348 1531 threadref *expectedref,
a14ed312
KB
1532 struct gdb_ext_thread_info
1533 *info);
cce74817
JM
1534
1535
2bc416ba 1536static int remote_get_threadinfo (threadref *threadid,
23860348 1537 int fieldset, /*TAG mask */
a14ed312 1538 struct gdb_ext_thread_info *info);
cce74817 1539
a14ed312
KB
1540static char *pack_threadlist_request (char *pkt, int startflag,
1541 int threadcount,
23860348 1542 threadref *nextthread);
cce74817 1543
a14ed312
KB
1544static int parse_threadlist_response (char *pkt,
1545 int result_limit,
23860348 1546 threadref *original_echo,
2bc416ba 1547 threadref *resultlist,
23860348 1548 int *doneflag);
cce74817 1549
a14ed312 1550static int remote_get_threadlist (int startflag,
23860348 1551 threadref *nextthread,
a14ed312
KB
1552 int result_limit,
1553 int *done,
2bc416ba 1554 int *result_count,
23860348 1555 threadref *threadlist);
cce74817 1556
23860348 1557typedef int (*rmt_thread_action) (threadref *ref, void *context);
cce74817 1558
a14ed312
KB
1559static int remote_threadlist_iterator (rmt_thread_action stepfunction,
1560 void *context, int looplimit);
cce74817 1561
23860348 1562static int remote_newthread_step (threadref *ref, void *context);
cce74817 1563
82f73884
PA
1564
1565/* Write a PTID to BUF. ENDBUF points to one-passed-the-end of the
1566 buffer we're allowed to write to. Returns
1567 BUF+CHARACTERS_WRITTEN. */
1568
1569static char *
1570write_ptid (char *buf, const char *endbuf, ptid_t ptid)
1571{
1572 int pid, tid;
1573 struct remote_state *rs = get_remote_state ();
1574
1575 if (remote_multi_process_p (rs))
1576 {
1577 pid = ptid_get_pid (ptid);
1578 if (pid < 0)
1579 buf += xsnprintf (buf, endbuf - buf, "p-%x.", -pid);
1580 else
1581 buf += xsnprintf (buf, endbuf - buf, "p%x.", pid);
1582 }
1583 tid = ptid_get_tid (ptid);
1584 if (tid < 0)
1585 buf += xsnprintf (buf, endbuf - buf, "-%x", -tid);
1586 else
1587 buf += xsnprintf (buf, endbuf - buf, "%x", tid);
1588
1589 return buf;
1590}
1591
1592/* Extract a PTID from BUF. If non-null, OBUF is set to the to one
1593 passed the last parsed char. Returns null_ptid on error. */
1594
1595static ptid_t
1596read_ptid (char *buf, char **obuf)
1597{
1598 char *p = buf;
1599 char *pp;
1600 ULONGEST pid = 0, tid = 0;
1601 ptid_t ptid;
1602
1603 if (*p == 'p')
1604 {
1605 /* Multi-process ptid. */
1606 pp = unpack_varlen_hex (p + 1, &pid);
1607 if (*pp != '.')
1608 error (_("invalid remote ptid: %s\n"), p);
1609
1610 p = pp;
1611 pp = unpack_varlen_hex (p + 1, &tid);
1612 if (obuf)
1613 *obuf = pp;
1614 return ptid_build (pid, 0, tid);
1615 }
1616
1617 /* No multi-process. Just a tid. */
1618 pp = unpack_varlen_hex (p, &tid);
1619
1620 /* Since the stub is not sending a process id, then default to
ca19bf23
PA
1621 what's in inferior_ptid, unless it's null at this point. If so,
1622 then since there's no way to know the pid of the reported
1623 threads, use the magic number. */
1624 if (ptid_equal (inferior_ptid, null_ptid))
1625 pid = ptid_get_pid (magic_null_ptid);
1626 else
1627 pid = ptid_get_pid (inferior_ptid);
82f73884
PA
1628
1629 if (obuf)
1630 *obuf = pp;
1631 return ptid_build (pid, 0, tid);
1632}
1633
23860348 1634/* Encode 64 bits in 16 chars of hex. */
c906108c
SS
1635
1636static const char hexchars[] = "0123456789abcdef";
1637
1638static int
fba45db2 1639ishex (int ch, int *val)
c906108c
SS
1640{
1641 if ((ch >= 'a') && (ch <= 'f'))
1642 {
1643 *val = ch - 'a' + 10;
1644 return 1;
1645 }
1646 if ((ch >= 'A') && (ch <= 'F'))
1647 {
1648 *val = ch - 'A' + 10;
1649 return 1;
1650 }
1651 if ((ch >= '0') && (ch <= '9'))
1652 {
1653 *val = ch - '0';
1654 return 1;
1655 }
1656 return 0;
1657}
1658
1659static int
fba45db2 1660stubhex (int ch)
c906108c
SS
1661{
1662 if (ch >= 'a' && ch <= 'f')
1663 return ch - 'a' + 10;
1664 if (ch >= '0' && ch <= '9')
1665 return ch - '0';
1666 if (ch >= 'A' && ch <= 'F')
1667 return ch - 'A' + 10;
1668 return -1;
1669}
1670
1671static int
fba45db2 1672stub_unpack_int (char *buff, int fieldlength)
c906108c
SS
1673{
1674 int nibble;
1675 int retval = 0;
1676
1677 while (fieldlength)
1678 {
1679 nibble = stubhex (*buff++);
1680 retval |= nibble;
1681 fieldlength--;
1682 if (fieldlength)
1683 retval = retval << 4;
1684 }
1685 return retval;
1686}
1687
1688char *
fba45db2 1689unpack_varlen_hex (char *buff, /* packet to parse */
b2dd6311 1690 ULONGEST *result)
c906108c
SS
1691{
1692 int nibble;
d49c44d5 1693 ULONGEST retval = 0;
c906108c
SS
1694
1695 while (ishex (*buff, &nibble))
1696 {
1697 buff++;
1698 retval = retval << 4;
1699 retval |= nibble & 0x0f;
1700 }
1701 *result = retval;
1702 return buff;
1703}
1704
1705static char *
fba45db2 1706unpack_nibble (char *buf, int *val)
c906108c 1707{
b7589f7d 1708 *val = fromhex (*buf++);
c906108c
SS
1709 return buf;
1710}
1711
1712static char *
fba45db2 1713pack_nibble (char *buf, int nibble)
c906108c
SS
1714{
1715 *buf++ = hexchars[(nibble & 0x0f)];
1716 return buf;
1717}
1718
1719static char *
fba45db2 1720pack_hex_byte (char *pkt, int byte)
c906108c
SS
1721{
1722 *pkt++ = hexchars[(byte >> 4) & 0xf];
1723 *pkt++ = hexchars[(byte & 0xf)];
1724 return pkt;
1725}
1726
1727static char *
fba45db2 1728unpack_byte (char *buf, int *value)
c906108c
SS
1729{
1730 *value = stub_unpack_int (buf, 2);
1731 return buf + 2;
1732}
1733
1734static char *
fba45db2 1735pack_int (char *buf, int value)
c906108c
SS
1736{
1737 buf = pack_hex_byte (buf, (value >> 24) & 0xff);
1738 buf = pack_hex_byte (buf, (value >> 16) & 0xff);
1739 buf = pack_hex_byte (buf, (value >> 8) & 0x0ff);
1740 buf = pack_hex_byte (buf, (value & 0xff));
1741 return buf;
1742}
1743
1744static char *
fba45db2 1745unpack_int (char *buf, int *value)
c906108c
SS
1746{
1747 *value = stub_unpack_int (buf, 8);
1748 return buf + 8;
1749}
1750
23860348 1751#if 0 /* Currently unused, uncomment when needed. */
a14ed312 1752static char *pack_string (char *pkt, char *string);
c906108c
SS
1753
1754static char *
fba45db2 1755pack_string (char *pkt, char *string)
c906108c
SS
1756{
1757 char ch;
1758 int len;
1759
1760 len = strlen (string);
1761 if (len > 200)
23860348 1762 len = 200; /* Bigger than most GDB packets, junk??? */
c906108c
SS
1763 pkt = pack_hex_byte (pkt, len);
1764 while (len-- > 0)
1765 {
1766 ch = *string++;
1767 if ((ch == '\0') || (ch == '#'))
23860348 1768 ch = '*'; /* Protect encapsulation. */
c906108c
SS
1769 *pkt++ = ch;
1770 }
1771 return pkt;
1772}
1773#endif /* 0 (unused) */
1774
1775static char *
fba45db2 1776unpack_string (char *src, char *dest, int length)
c906108c
SS
1777{
1778 while (length--)
1779 *dest++ = *src++;
1780 *dest = '\0';
1781 return src;
1782}
1783
1784static char *
fba45db2 1785pack_threadid (char *pkt, threadref *id)
c906108c
SS
1786{
1787 char *limit;
1788 unsigned char *altid;
1789
1790 altid = (unsigned char *) id;
1791 limit = pkt + BUF_THREAD_ID_SIZE;
1792 while (pkt < limit)
1793 pkt = pack_hex_byte (pkt, *altid++);
1794 return pkt;
1795}
1796
1797
1798static char *
fba45db2 1799unpack_threadid (char *inbuf, threadref *id)
c906108c
SS
1800{
1801 char *altref;
1802 char *limit = inbuf + BUF_THREAD_ID_SIZE;
1803 int x, y;
1804
1805 altref = (char *) id;
1806
1807 while (inbuf < limit)
1808 {
1809 x = stubhex (*inbuf++);
1810 y = stubhex (*inbuf++);
1811 *altref++ = (x << 4) | y;
1812 }
1813 return inbuf;
1814}
1815
1816/* Externally, threadrefs are 64 bits but internally, they are still
1817 ints. This is due to a mismatch of specifications. We would like
1818 to use 64bit thread references internally. This is an adapter
1819 function. */
1820
1821void
fba45db2 1822int_to_threadref (threadref *id, int value)
c906108c
SS
1823{
1824 unsigned char *scan;
1825
1826 scan = (unsigned char *) id;
1827 {
1828 int i = 4;
1829 while (i--)
1830 *scan++ = 0;
1831 }
1832 *scan++ = (value >> 24) & 0xff;
1833 *scan++ = (value >> 16) & 0xff;
1834 *scan++ = (value >> 8) & 0xff;
1835 *scan++ = (value & 0xff);
1836}
1837
1838static int
fba45db2 1839threadref_to_int (threadref *ref)
c906108c
SS
1840{
1841 int i, value = 0;
1842 unsigned char *scan;
1843
cfd77fa1 1844 scan = *ref;
c906108c
SS
1845 scan += 4;
1846 i = 4;
1847 while (i-- > 0)
1848 value = (value << 8) | ((*scan++) & 0xff);
1849 return value;
1850}
1851
1852static void
fba45db2 1853copy_threadref (threadref *dest, threadref *src)
c906108c
SS
1854{
1855 int i;
1856 unsigned char *csrc, *cdest;
1857
1858 csrc = (unsigned char *) src;
1859 cdest = (unsigned char *) dest;
1860 i = 8;
1861 while (i--)
1862 *cdest++ = *csrc++;
1863}
1864
1865static int
fba45db2 1866threadmatch (threadref *dest, threadref *src)
c906108c 1867{
23860348 1868 /* Things are broken right now, so just assume we got a match. */
c906108c
SS
1869#if 0
1870 unsigned char *srcp, *destp;
1871 int i, result;
1872 srcp = (char *) src;
1873 destp = (char *) dest;
1874
1875 result = 1;
1876 while (i-- > 0)
1877 result &= (*srcp++ == *destp++) ? 1 : 0;
1878 return result;
1879#endif
1880 return 1;
1881}
1882
1883/*
c5aa993b
JM
1884 threadid:1, # always request threadid
1885 context_exists:2,
1886 display:4,
1887 unique_name:8,
1888 more_display:16
1889 */
c906108c
SS
1890
1891/* Encoding: 'Q':8,'P':8,mask:32,threadid:64 */
1892
1893static char *
fba45db2 1894pack_threadinfo_request (char *pkt, int mode, threadref *id)
c906108c 1895{
23860348
MS
1896 *pkt++ = 'q'; /* Info Query */
1897 *pkt++ = 'P'; /* process or thread info */
1898 pkt = pack_int (pkt, mode); /* mode */
c906108c 1899 pkt = pack_threadid (pkt, id); /* threadid */
23860348 1900 *pkt = '\0'; /* terminate */
c906108c
SS
1901 return pkt;
1902}
1903
23860348 1904/* These values tag the fields in a thread info response packet. */
c906108c 1905/* Tagging the fields allows us to request specific fields and to
23860348 1906 add more fields as time goes by. */
c906108c 1907
23860348 1908#define TAG_THREADID 1 /* Echo the thread identifier. */
c5aa993b 1909#define TAG_EXISTS 2 /* Is this process defined enough to
23860348 1910 fetch registers and its stack? */
c5aa993b 1911#define TAG_DISPLAY 4 /* A short thing maybe to put on a window */
23860348 1912#define TAG_THREADNAME 8 /* string, maps 1-to-1 with a thread is. */
802188a7 1913#define TAG_MOREDISPLAY 16 /* Whatever the kernel wants to say about
23860348 1914 the process. */
c906108c
SS
1915
1916static int
fba45db2
KB
1917remote_unpack_thread_info_response (char *pkt, threadref *expectedref,
1918 struct gdb_ext_thread_info *info)
c906108c 1919{
d01949b6 1920 struct remote_state *rs = get_remote_state ();
c906108c 1921 int mask, length;
cfd77fa1 1922 int tag;
c906108c 1923 threadref ref;
6d820c5c 1924 char *limit = pkt + rs->buf_size; /* Plausible parsing limit. */
c906108c
SS
1925 int retval = 1;
1926
23860348 1927 /* info->threadid = 0; FIXME: implement zero_threadref. */
c906108c
SS
1928 info->active = 0;
1929 info->display[0] = '\0';
1930 info->shortname[0] = '\0';
1931 info->more_display[0] = '\0';
1932
23860348
MS
1933 /* Assume the characters indicating the packet type have been
1934 stripped. */
c906108c
SS
1935 pkt = unpack_int (pkt, &mask); /* arg mask */
1936 pkt = unpack_threadid (pkt, &ref);
1937
1938 if (mask == 0)
8a3fe4f8 1939 warning (_("Incomplete response to threadinfo request."));
c906108c 1940 if (!threadmatch (&ref, expectedref))
23860348 1941 { /* This is an answer to a different request. */
8a3fe4f8 1942 warning (_("ERROR RMT Thread info mismatch."));
c906108c
SS
1943 return 0;
1944 }
1945 copy_threadref (&info->threadid, &ref);
1946
23860348 1947 /* Loop on tagged fields , try to bail if somthing goes wrong. */
c906108c 1948
23860348
MS
1949 /* Packets are terminated with nulls. */
1950 while ((pkt < limit) && mask && *pkt)
c906108c
SS
1951 {
1952 pkt = unpack_int (pkt, &tag); /* tag */
23860348
MS
1953 pkt = unpack_byte (pkt, &length); /* length */
1954 if (!(tag & mask)) /* Tags out of synch with mask. */
c906108c 1955 {
8a3fe4f8 1956 warning (_("ERROR RMT: threadinfo tag mismatch."));
c906108c
SS
1957 retval = 0;
1958 break;
1959 }
1960 if (tag == TAG_THREADID)
1961 {
1962 if (length != 16)
1963 {
8a3fe4f8 1964 warning (_("ERROR RMT: length of threadid is not 16."));
c906108c
SS
1965 retval = 0;
1966 break;
1967 }
1968 pkt = unpack_threadid (pkt, &ref);
1969 mask = mask & ~TAG_THREADID;
1970 continue;
1971 }
1972 if (tag == TAG_EXISTS)
1973 {
1974 info->active = stub_unpack_int (pkt, length);
1975 pkt += length;
1976 mask = mask & ~(TAG_EXISTS);
1977 if (length > 8)
1978 {
8a3fe4f8 1979 warning (_("ERROR RMT: 'exists' length too long."));
c906108c
SS
1980 retval = 0;
1981 break;
1982 }
1983 continue;
1984 }
1985 if (tag == TAG_THREADNAME)
1986 {
1987 pkt = unpack_string (pkt, &info->shortname[0], length);
1988 mask = mask & ~TAG_THREADNAME;
1989 continue;
1990 }
1991 if (tag == TAG_DISPLAY)
1992 {
1993 pkt = unpack_string (pkt, &info->display[0], length);
1994 mask = mask & ~TAG_DISPLAY;
1995 continue;
1996 }
1997 if (tag == TAG_MOREDISPLAY)
1998 {
1999 pkt = unpack_string (pkt, &info->more_display[0], length);
2000 mask = mask & ~TAG_MOREDISPLAY;
2001 continue;
2002 }
8a3fe4f8 2003 warning (_("ERROR RMT: unknown thread info tag."));
23860348 2004 break; /* Not a tag we know about. */
c906108c
SS
2005 }
2006 return retval;
2007}
2008
2009static int
fba45db2
KB
2010remote_get_threadinfo (threadref *threadid, int fieldset, /* TAG mask */
2011 struct gdb_ext_thread_info *info)
c906108c 2012{
d01949b6 2013 struct remote_state *rs = get_remote_state ();
c906108c 2014 int result;
c906108c 2015
2e9f7625
DJ
2016 pack_threadinfo_request (rs->buf, fieldset, threadid);
2017 putpkt (rs->buf);
6d820c5c 2018 getpkt (&rs->buf, &rs->buf_size, 0);
3084dd77
PA
2019
2020 if (rs->buf[0] == '\0')
2021 return 0;
2022
2e9f7625 2023 result = remote_unpack_thread_info_response (rs->buf + 2,
23860348 2024 threadid, info);
c906108c
SS
2025 return result;
2026}
2027
c906108c
SS
2028/* Format: i'Q':8,i"L":8,initflag:8,batchsize:16,lastthreadid:32 */
2029
2030static char *
fba45db2
KB
2031pack_threadlist_request (char *pkt, int startflag, int threadcount,
2032 threadref *nextthread)
c906108c
SS
2033{
2034 *pkt++ = 'q'; /* info query packet */
2035 *pkt++ = 'L'; /* Process LIST or threadLIST request */
23860348 2036 pkt = pack_nibble (pkt, startflag); /* initflag 1 bytes */
c906108c
SS
2037 pkt = pack_hex_byte (pkt, threadcount); /* threadcount 2 bytes */
2038 pkt = pack_threadid (pkt, nextthread); /* 64 bit thread identifier */
2039 *pkt = '\0';
2040 return pkt;
2041}
2042
2043/* Encoding: 'q':8,'M':8,count:16,done:8,argthreadid:64,(threadid:64)* */
2044
2045static int
fba45db2
KB
2046parse_threadlist_response (char *pkt, int result_limit,
2047 threadref *original_echo, threadref *resultlist,
2048 int *doneflag)
c906108c 2049{
d01949b6 2050 struct remote_state *rs = get_remote_state ();
c906108c
SS
2051 char *limit;
2052 int count, resultcount, done;
2053
2054 resultcount = 0;
2055 /* Assume the 'q' and 'M chars have been stripped. */
6d820c5c 2056 limit = pkt + (rs->buf_size - BUF_THREAD_ID_SIZE);
23860348 2057 /* done parse past here */
c906108c
SS
2058 pkt = unpack_byte (pkt, &count); /* count field */
2059 pkt = unpack_nibble (pkt, &done);
2060 /* The first threadid is the argument threadid. */
2061 pkt = unpack_threadid (pkt, original_echo); /* should match query packet */
2062 while ((count-- > 0) && (pkt < limit))
2063 {
2064 pkt = unpack_threadid (pkt, resultlist++);
2065 if (resultcount++ >= result_limit)
2066 break;
2067 }
2068 if (doneflag)
2069 *doneflag = done;
2070 return resultcount;
2071}
2072
2073static int
fba45db2
KB
2074remote_get_threadlist (int startflag, threadref *nextthread, int result_limit,
2075 int *done, int *result_count, threadref *threadlist)
c906108c 2076{
d01949b6 2077 struct remote_state *rs = get_remote_state ();
c906108c 2078 static threadref echo_nextthread;
c906108c
SS
2079 int result = 1;
2080
23860348 2081 /* Trancate result limit to be smaller than the packet size. */
ea9c271d
DJ
2082 if ((((result_limit + 1) * BUF_THREAD_ID_SIZE) + 10) >= get_remote_packet_size ())
2083 result_limit = (get_remote_packet_size () / BUF_THREAD_ID_SIZE) - 2;
c906108c 2084
6d820c5c
DJ
2085 pack_threadlist_request (rs->buf, startflag, result_limit, nextthread);
2086 putpkt (rs->buf);
2087 getpkt (&rs->buf, &rs->buf_size, 0);
c906108c 2088
d8f2712d
VP
2089 if (*rs->buf == '\0')
2090 *result_count = 0;
2091 else
2092 *result_count =
2093 parse_threadlist_response (rs->buf + 2, result_limit, &echo_nextthread,
2094 threadlist, done);
c906108c
SS
2095
2096 if (!threadmatch (&echo_nextthread, nextthread))
2097 {
23860348
MS
2098 /* FIXME: This is a good reason to drop the packet. */
2099 /* Possably, there is a duplicate response. */
c906108c
SS
2100 /* Possabilities :
2101 retransmit immediatly - race conditions
2102 retransmit after timeout - yes
2103 exit
2104 wait for packet, then exit
2105 */
8a3fe4f8 2106 warning (_("HMM: threadlist did not echo arg thread, dropping it."));
23860348 2107 return 0; /* I choose simply exiting. */
c906108c
SS
2108 }
2109 if (*result_count <= 0)
2110 {
2111 if (*done != 1)
2112 {
8a3fe4f8 2113 warning (_("RMT ERROR : failed to get remote thread list."));
c906108c
SS
2114 result = 0;
2115 }
2116 return result; /* break; */
2117 }
2118 if (*result_count > result_limit)
2119 {
2120 *result_count = 0;
8a3fe4f8 2121 warning (_("RMT ERROR: threadlist response longer than requested."));
c906108c
SS
2122 return 0;
2123 }
2124 return result;
2125}
2126
23860348
MS
2127/* This is the interface between remote and threads, remotes upper
2128 interface. */
c906108c
SS
2129
2130/* remote_find_new_threads retrieves the thread list and for each
2131 thread in the list, looks up the thread in GDB's internal list,
79d7f229 2132 adding the thread if it does not already exist. This involves
c906108c
SS
2133 getting partial thread lists from the remote target so, polling the
2134 quit_flag is required. */
2135
2136
23860348 2137/* About this many threadisds fit in a packet. */
c906108c
SS
2138
2139#define MAXTHREADLISTRESULTS 32
2140
2141static int
fba45db2
KB
2142remote_threadlist_iterator (rmt_thread_action stepfunction, void *context,
2143 int looplimit)
c906108c
SS
2144{
2145 int done, i, result_count;
2146 int startflag = 1;
2147 int result = 1;
2148 int loopcount = 0;
2149 static threadref nextthread;
2150 static threadref resultthreadlist[MAXTHREADLISTRESULTS];
2151
2152 done = 0;
2153 while (!done)
2154 {
2155 if (loopcount++ > looplimit)
2156 {
2157 result = 0;
8a3fe4f8 2158 warning (_("Remote fetch threadlist -infinite loop-."));
c906108c
SS
2159 break;
2160 }
2161 if (!remote_get_threadlist (startflag, &nextthread, MAXTHREADLISTRESULTS,
2162 &done, &result_count, resultthreadlist))
2163 {
2164 result = 0;
2165 break;
2166 }
23860348 2167 /* Clear for later iterations. */
c906108c
SS
2168 startflag = 0;
2169 /* Setup to resume next batch of thread references, set nextthread. */
2170 if (result_count >= 1)
2171 copy_threadref (&nextthread, &resultthreadlist[result_count - 1]);
2172 i = 0;
2173 while (result_count--)
2174 if (!(result = (*stepfunction) (&resultthreadlist[i++], context)))
2175 break;
2176 }
2177 return result;
2178}
2179
2180static int
fba45db2 2181remote_newthread_step (threadref *ref, void *context)
c906108c 2182{
79d7f229
PA
2183 int pid = ptid_get_pid (inferior_ptid);
2184 ptid_t ptid = ptid_build (pid, 0, threadref_to_int (ref));
39f77062
KB
2185
2186 if (!in_thread_list (ptid))
2187 add_thread (ptid);
c906108c
SS
2188 return 1; /* continue iterator */
2189}
2190
2191#define CRAZY_MAX_THREADS 1000
2192
39f77062
KB
2193static ptid_t
2194remote_current_thread (ptid_t oldpid)
c906108c 2195{
d01949b6 2196 struct remote_state *rs = get_remote_state ();
79d7f229
PA
2197 char *p = rs->buf;
2198 int tid;
2199 int pid;
c906108c
SS
2200
2201 putpkt ("qC");
6d820c5c 2202 getpkt (&rs->buf, &rs->buf_size, 0);
2e9f7625 2203 if (rs->buf[0] == 'Q' && rs->buf[1] == 'C')
82f73884 2204 return read_ptid (&rs->buf[2], NULL);
c906108c
SS
2205 else
2206 return oldpid;
2207}
2208
802188a7
RM
2209/* Find new threads for info threads command.
2210 * Original version, using John Metzler's thread protocol.
9d1f7ab2 2211 */
cce74817
JM
2212
2213static void
fba45db2 2214remote_find_new_threads (void)
c906108c 2215{
c5aa993b
JM
2216 remote_threadlist_iterator (remote_newthread_step, 0,
2217 CRAZY_MAX_THREADS);
c906108c
SS
2218}
2219
9d1f7ab2
MS
2220/*
2221 * Find all threads for info threads command.
2222 * Uses new thread protocol contributed by Cisco.
2223 * Falls back and attempts to use the older method (above)
2224 * if the target doesn't respond to the new method.
2225 */
2226
0f71a2f6 2227static void
28439f5e 2228remote_threads_info (struct target_ops *ops)
0f71a2f6 2229{
d01949b6 2230 struct remote_state *rs = get_remote_state ();
085dd6e6 2231 char *bufp;
79d7f229 2232 ptid_t new_thread;
0f71a2f6
JM
2233
2234 if (remote_desc == 0) /* paranoia */
8a3fe4f8 2235 error (_("Command can only be used when connected to the remote target."));
0f71a2f6 2236
9d1f7ab2
MS
2237 if (use_threadinfo_query)
2238 {
2239 putpkt ("qfThreadInfo");
6d820c5c 2240 getpkt (&rs->buf, &rs->buf_size, 0);
2e9f7625 2241 bufp = rs->buf;
9d1f7ab2 2242 if (bufp[0] != '\0') /* q packet recognized */
802188a7 2243 {
9d1f7ab2
MS
2244 while (*bufp++ == 'm') /* reply contains one or more TID */
2245 {
2246 do
2247 {
82f73884 2248 new_thread = read_ptid (bufp, &bufp);
1941c569 2249 if (!ptid_equal (new_thread, null_ptid))
82f73884 2250 {
74531fed 2251 /* In non-stop mode, we assume new found threads
1941c569 2252 are running until proven otherwise with a
74531fed
PA
2253 stop reply. In all-stop, we can only get
2254 here if all threads are stopped. */
1941c569
PA
2255 int running = non_stop ? 1 : 0;
2256
2257 remote_notice_new_inferior (new_thread, running);
82f73884 2258 }
9d1f7ab2
MS
2259 }
2260 while (*bufp++ == ','); /* comma-separated list */
2261 putpkt ("qsThreadInfo");
6d820c5c 2262 getpkt (&rs->buf, &rs->buf_size, 0);
2e9f7625 2263 bufp = rs->buf;
9d1f7ab2
MS
2264 }
2265 return; /* done */
2266 }
2267 }
2268
74531fed
PA
2269 /* Only qfThreadInfo is supported in non-stop mode. */
2270 if (non_stop)
2271 return;
2272
23860348 2273 /* Else fall back to old method based on jmetzler protocol. */
9d1f7ab2
MS
2274 use_threadinfo_query = 0;
2275 remote_find_new_threads ();
2276 return;
2277}
2278
802188a7 2279/*
9d1f7ab2
MS
2280 * Collect a descriptive string about the given thread.
2281 * The target may say anything it wants to about the thread
2282 * (typically info about its blocked / runnable state, name, etc.).
2283 * This string will appear in the info threads display.
802188a7 2284 *
9d1f7ab2
MS
2285 * Optional: targets are not required to implement this function.
2286 */
2287
2288static char *
2289remote_threads_extra_info (struct thread_info *tp)
2290{
d01949b6 2291 struct remote_state *rs = get_remote_state ();
9d1f7ab2
MS
2292 int result;
2293 int set;
2294 threadref id;
2295 struct gdb_ext_thread_info threadinfo;
23860348 2296 static char display_buf[100]; /* arbitrary... */
9d1f7ab2
MS
2297 int n = 0; /* position in display_buf */
2298
2299 if (remote_desc == 0) /* paranoia */
8e65ff28 2300 internal_error (__FILE__, __LINE__,
e2e0b3e5 2301 _("remote_threads_extra_info"));
9d1f7ab2 2302
60e569b9
PA
2303 if (ptid_equal (tp->ptid, magic_null_ptid)
2304 || (ptid_get_pid (tp->ptid) != 0 && ptid_get_tid (tp->ptid) == 0))
2305 /* This is the main thread which was added by GDB. The remote
2306 server doesn't know about it. */
2307 return NULL;
2308
9d1f7ab2
MS
2309 if (use_threadextra_query)
2310 {
82f73884
PA
2311 char *b = rs->buf;
2312 char *endb = rs->buf + get_remote_packet_size ();
2313
2314 xsnprintf (b, endb - b, "qThreadExtraInfo,");
2315 b += strlen (b);
2316 write_ptid (b, endb, tp->ptid);
2317
2e9f7625 2318 putpkt (rs->buf);
6d820c5c 2319 getpkt (&rs->buf, &rs->buf_size, 0);
2e9f7625 2320 if (rs->buf[0] != 0)
9d1f7ab2 2321 {
2e9f7625
DJ
2322 n = min (strlen (rs->buf) / 2, sizeof (display_buf));
2323 result = hex2bin (rs->buf, (gdb_byte *) display_buf, n);
30559e10 2324 display_buf [result] = '\0';
9d1f7ab2
MS
2325 return display_buf;
2326 }
0f71a2f6 2327 }
9d1f7ab2
MS
2328
2329 /* If the above query fails, fall back to the old method. */
2330 use_threadextra_query = 0;
2331 set = TAG_THREADID | TAG_EXISTS | TAG_THREADNAME
2332 | TAG_MOREDISPLAY | TAG_DISPLAY;
79d7f229 2333 int_to_threadref (&id, ptid_get_tid (tp->ptid));
9d1f7ab2
MS
2334 if (remote_get_threadinfo (&id, set, &threadinfo))
2335 if (threadinfo.active)
0f71a2f6 2336 {
9d1f7ab2 2337 if (*threadinfo.shortname)
2bc416ba 2338 n += xsnprintf (&display_buf[0], sizeof (display_buf) - n,
ecbc58df 2339 " Name: %s,", threadinfo.shortname);
9d1f7ab2 2340 if (*threadinfo.display)
2bc416ba 2341 n += xsnprintf (&display_buf[n], sizeof (display_buf) - n,
ecbc58df 2342 " State: %s,", threadinfo.display);
9d1f7ab2 2343 if (*threadinfo.more_display)
2bc416ba 2344 n += xsnprintf (&display_buf[n], sizeof (display_buf) - n,
ecbc58df 2345 " Priority: %s", threadinfo.more_display);
9d1f7ab2
MS
2346
2347 if (n > 0)
c5aa993b 2348 {
23860348 2349 /* For purely cosmetic reasons, clear up trailing commas. */
9d1f7ab2
MS
2350 if (',' == display_buf[n-1])
2351 display_buf[n-1] = ' ';
2352 return display_buf;
c5aa993b 2353 }
0f71a2f6 2354 }
9d1f7ab2 2355 return NULL;
0f71a2f6 2356}
c906108c 2357\f
c5aa993b 2358
24b06219 2359/* Restart the remote side; this is an extended protocol operation. */
c906108c
SS
2360
2361static void
fba45db2 2362extended_remote_restart (void)
c906108c 2363{
d01949b6 2364 struct remote_state *rs = get_remote_state ();
c906108c
SS
2365
2366 /* Send the restart command; for reasons I don't understand the
2367 remote side really expects a number after the "R". */
ea9c271d 2368 xsnprintf (rs->buf, get_remote_packet_size (), "R%x", 0);
6d820c5c 2369 putpkt (rs->buf);
c906108c 2370
ad9a8f3f 2371 remote_fileio_reset ();
c906108c
SS
2372}
2373\f
2374/* Clean up connection to a remote debugger. */
2375
c906108c 2376static void
fba45db2 2377remote_close (int quitting)
c906108c 2378{
d3fd5342
PA
2379 if (remote_desc == NULL)
2380 return; /* already closed */
2381
2382 /* Make sure we leave stdin registered in the event loop, and we
2383 don't leave the async SIGINT signal handler installed. */
2384 remote_terminal_ours ();
ce5ce7ed 2385
d3fd5342
PA
2386 serial_close (remote_desc);
2387 remote_desc = NULL;
ce5ce7ed
PA
2388
2389 /* We don't have a connection to the remote stub anymore. Get rid
2390 of all the inferiors and their threads we were controlling. */
2391 discard_all_inferiors ();
2392
74531fed
PA
2393 /* We're no longer interested in any of these events. */
2394 discard_pending_stop_replies (-1);
2395
2396 if (remote_async_inferior_event_token)
2397 delete_async_event_handler (&remote_async_inferior_event_token);
2398 if (remote_async_get_pending_events_token)
2399 delete_async_event_handler (&remote_async_get_pending_events_token);
c906108c
SS
2400}
2401
23860348 2402/* Query the remote side for the text, data and bss offsets. */
c906108c
SS
2403
2404static void
fba45db2 2405get_offsets (void)
c906108c 2406{
d01949b6 2407 struct remote_state *rs = get_remote_state ();
2e9f7625 2408 char *buf;
085dd6e6 2409 char *ptr;
31d99776
DJ
2410 int lose, num_segments = 0, do_sections, do_segments;
2411 CORE_ADDR text_addr, data_addr, bss_addr, segments[2];
c906108c 2412 struct section_offsets *offs;
31d99776
DJ
2413 struct symfile_segment_data *data;
2414
2415 if (symfile_objfile == NULL)
2416 return;
c906108c
SS
2417
2418 putpkt ("qOffsets");
6d820c5c 2419 getpkt (&rs->buf, &rs->buf_size, 0);
2e9f7625 2420 buf = rs->buf;
c906108c
SS
2421
2422 if (buf[0] == '\000')
2423 return; /* Return silently. Stub doesn't support
23860348 2424 this command. */
c906108c
SS
2425 if (buf[0] == 'E')
2426 {
8a3fe4f8 2427 warning (_("Remote failure reply: %s"), buf);
c906108c
SS
2428 return;
2429 }
2430
2431 /* Pick up each field in turn. This used to be done with scanf, but
2432 scanf will make trouble if CORE_ADDR size doesn't match
2433 conversion directives correctly. The following code will work
2434 with any size of CORE_ADDR. */
2435 text_addr = data_addr = bss_addr = 0;
2436 ptr = buf;
2437 lose = 0;
2438
2439 if (strncmp (ptr, "Text=", 5) == 0)
2440 {
2441 ptr += 5;
2442 /* Don't use strtol, could lose on big values. */
2443 while (*ptr && *ptr != ';')
2444 text_addr = (text_addr << 4) + fromhex (*ptr++);
c906108c 2445
31d99776
DJ
2446 if (strncmp (ptr, ";Data=", 6) == 0)
2447 {
2448 ptr += 6;
2449 while (*ptr && *ptr != ';')
2450 data_addr = (data_addr << 4) + fromhex (*ptr++);
2451 }
2452 else
2453 lose = 1;
2454
2455 if (!lose && strncmp (ptr, ";Bss=", 5) == 0)
2456 {
2457 ptr += 5;
2458 while (*ptr && *ptr != ';')
2459 bss_addr = (bss_addr << 4) + fromhex (*ptr++);
c906108c 2460
31d99776
DJ
2461 if (bss_addr != data_addr)
2462 warning (_("Target reported unsupported offsets: %s"), buf);
2463 }
2464 else
2465 lose = 1;
2466 }
2467 else if (strncmp (ptr, "TextSeg=", 8) == 0)
c906108c 2468 {
31d99776
DJ
2469 ptr += 8;
2470 /* Don't use strtol, could lose on big values. */
c906108c 2471 while (*ptr && *ptr != ';')
31d99776
DJ
2472 text_addr = (text_addr << 4) + fromhex (*ptr++);
2473 num_segments = 1;
2474
2475 if (strncmp (ptr, ";DataSeg=", 9) == 0)
2476 {
2477 ptr += 9;
2478 while (*ptr && *ptr != ';')
2479 data_addr = (data_addr << 4) + fromhex (*ptr++);
2480 num_segments++;
2481 }
c906108c
SS
2482 }
2483 else
2484 lose = 1;
2485
2486 if (lose)
8a3fe4f8 2487 error (_("Malformed response to offset query, %s"), buf);
31d99776
DJ
2488 else if (*ptr != '\0')
2489 warning (_("Target reported unsupported offsets: %s"), buf);
c906108c 2490
802188a7 2491 offs = ((struct section_offsets *)
a39a16c4 2492 alloca (SIZEOF_N_SECTION_OFFSETS (symfile_objfile->num_sections)));
802188a7 2493 memcpy (offs, symfile_objfile->section_offsets,
a39a16c4 2494 SIZEOF_N_SECTION_OFFSETS (symfile_objfile->num_sections));
c906108c 2495
31d99776
DJ
2496 data = get_symfile_segment_data (symfile_objfile->obfd);
2497 do_segments = (data != NULL);
2498 do_sections = num_segments == 0;
c906108c 2499
28c32713 2500 if (num_segments > 0)
31d99776 2501 {
31d99776
DJ
2502 segments[0] = text_addr;
2503 segments[1] = data_addr;
2504 }
28c32713
JB
2505 /* If we have two segments, we can still try to relocate everything
2506 by assuming that the .text and .data offsets apply to the whole
2507 text and data segments. Convert the offsets given in the packet
2508 to base addresses for symfile_map_offsets_to_segments. */
2509 else if (data && data->num_segments == 2)
2510 {
2511 segments[0] = data->segment_bases[0] + text_addr;
2512 segments[1] = data->segment_bases[1] + data_addr;
2513 num_segments = 2;
2514 }
8d385431
DJ
2515 /* If the object file has only one segment, assume that it is text
2516 rather than data; main programs with no writable data are rare,
2517 but programs with no code are useless. Of course the code might
2518 have ended up in the data segment... to detect that we would need
2519 the permissions here. */
2520 else if (data && data->num_segments == 1)
2521 {
2522 segments[0] = data->segment_bases[0] + text_addr;
2523 num_segments = 1;
2524 }
28c32713
JB
2525 /* There's no way to relocate by segment. */
2526 else
2527 do_segments = 0;
31d99776
DJ
2528
2529 if (do_segments)
2530 {
2531 int ret = symfile_map_offsets_to_segments (symfile_objfile->obfd, data,
2532 offs, num_segments, segments);
2533
2534 if (ret == 0 && !do_sections)
2535 error (_("Can not handle qOffsets TextSeg response with this symbol file"));
2536
2537 if (ret > 0)
2538 do_sections = 0;
2539 }
c906108c 2540
9ef895d6
DJ
2541 if (data)
2542 free_symfile_segment_data (data);
31d99776
DJ
2543
2544 if (do_sections)
2545 {
2546 offs->offsets[SECT_OFF_TEXT (symfile_objfile)] = text_addr;
2547
2548 /* This is a temporary kludge to force data and bss to use the same offsets
2549 because that's what nlmconv does now. The real solution requires changes
2550 to the stub and remote.c that I don't have time to do right now. */
2551
2552 offs->offsets[SECT_OFF_DATA (symfile_objfile)] = data_addr;
2553 offs->offsets[SECT_OFF_BSS (symfile_objfile)] = data_addr;
2554 }
c906108c
SS
2555
2556 objfile_relocate (symfile_objfile, offs);
2557}
2558
74531fed
PA
2559/* Callback for iterate_over_threads. Set the STOP_REQUESTED flags in
2560 threads we know are stopped already. This is used during the
2561 initial remote connection in non-stop mode --- threads that are
2562 reported as already being stopped are left stopped. */
2563
2564static int
2565set_stop_requested_callback (struct thread_info *thread, void *data)
2566{
2567 /* If we have a stop reply for this thread, it must be stopped. */
2568 if (peek_stop_reply (thread->ptid))
2569 set_stop_requested (thread->ptid, 1);
2570
2571 return 0;
2572}
2573
8621d6a9 2574/* Stub for catch_exception. */
0f71a2f6 2575
2d717e4f
DJ
2576struct start_remote_args
2577{
2578 int from_tty;
2579
2580 /* The current target. */
2581 struct target_ops *target;
2582
2583 /* Non-zero if this is an extended-remote target. */
2584 int extended_p;
2585};
2586
9cbc821d 2587static void
2d717e4f 2588remote_start_remote (struct ui_out *uiout, void *opaque)
c906108c 2589{
2d717e4f 2590 struct start_remote_args *args = opaque;
c8d104ad
PA
2591 struct remote_state *rs = get_remote_state ();
2592 struct packet_config *noack_config;
2d717e4f 2593 char *wait_status = NULL;
8621d6a9 2594
23860348 2595 immediate_quit++; /* Allow user to interrupt it. */
c906108c 2596
c8d104ad
PA
2597 /* Ack any packet which the remote side has already sent. */
2598 serial_write (remote_desc, "+", 1);
2599
2600 /* The first packet we send to the target is the optional "supported
2601 packets" request. If the target can answer this, it will tell us
2602 which later probes to skip. */
2603 remote_query_supported ();
2604
2605 /* Next, we possibly activate noack mode.
2606
2607 If the QStartNoAckMode packet configuration is set to AUTO,
2608 enable noack mode if the stub reported a wish for it with
2609 qSupported.
2610
2611 If set to TRUE, then enable noack mode even if the stub didn't
2612 report it in qSupported. If the stub doesn't reply OK, the
2613 session ends with an error.
2614
2615 If FALSE, then don't activate noack mode, regardless of what the
2616 stub claimed should be the default with qSupported. */
2617
2618 noack_config = &remote_protocol_packets[PACKET_QStartNoAckMode];
2619
2620 if (noack_config->detect == AUTO_BOOLEAN_TRUE
2621 || (noack_config->detect == AUTO_BOOLEAN_AUTO
2622 && noack_config->support == PACKET_ENABLE))
2623 {
2624 putpkt ("QStartNoAckMode");
2625 getpkt (&rs->buf, &rs->buf_size, 0);
2626 if (packet_ok (rs->buf, noack_config) == PACKET_OK)
2627 rs->noack_mode = 1;
2628 }
2629
5fe04517
PA
2630 if (args->extended_p)
2631 {
2632 /* Tell the remote that we are using the extended protocol. */
2633 putpkt ("!");
2634 getpkt (&rs->buf, &rs->buf_size, 0);
2635 }
2636
d962ef82
DJ
2637 /* Next, if the target can specify a description, read it. We do
2638 this before anything involving memory or registers. */
2639 target_find_description ();
2640
50c71eaf
PA
2641 /* On OSs where the list of libraries is global to all
2642 processes, we fetch them early. */
2643 if (gdbarch_has_global_solist (target_gdbarch))
2644 solib_add (NULL, args->from_tty, args->target, auto_solib_add);
2645
74531fed
PA
2646 if (non_stop)
2647 {
2648 if (!rs->non_stop_aware)
2649 error (_("Non-stop mode requested, but remote does not support non-stop"));
2650
2651 putpkt ("QNonStop:1");
2652 getpkt (&rs->buf, &rs->buf_size, 0);
2653
2654 if (strcmp (rs->buf, "OK") != 0)
2655 error ("Remote refused setting non-stop mode with: %s", rs->buf);
2656
2657 /* Find about threads and processes the stub is already
2658 controlling. We default to adding them in the running state.
2659 The '?' query below will then tell us about which threads are
2660 stopped. */
28439f5e 2661 remote_threads_info (args->target);
74531fed
PA
2662 }
2663 else if (rs->non_stop_aware)
2664 {
2665 /* Don't assume that the stub can operate in all-stop mode.
2666 Request it explicitely. */
2667 putpkt ("QNonStop:0");
2668 getpkt (&rs->buf, &rs->buf_size, 0);
2669
2670 if (strcmp (rs->buf, "OK") != 0)
2671 error ("Remote refused setting all-stop mode with: %s", rs->buf);
2672 }
2673
2d717e4f
DJ
2674 /* Check whether the target is running now. */
2675 putpkt ("?");
2676 getpkt (&rs->buf, &rs->buf_size, 0);
2677
74531fed 2678 if (!non_stop)
2d717e4f 2679 {
74531fed 2680 if (rs->buf[0] == 'W' || rs->buf[0] == 'X')
2d717e4f 2681 {
c35b1492 2682 if (!args->extended_p)
74531fed 2683 error (_("The target is not running (try extended-remote?)"));
c35b1492
PA
2684
2685 /* We're connected, but not running. Drop out before we
2686 call start_remote. */
2687 return;
2d717e4f
DJ
2688 }
2689 else
74531fed 2690 {
74531fed
PA
2691 /* Save the reply for later. */
2692 wait_status = alloca (strlen (rs->buf) + 1);
2693 strcpy (wait_status, rs->buf);
2694 }
2695
2696 /* Let the stub know that we want it to return the thread. */
2697 set_continue_thread (minus_one_ptid);
2698
2699 /* Without this, some commands which require an active target
2700 (such as kill) won't work. This variable serves (at least)
2701 double duty as both the pid of the target process (if it has
2702 such), and as a flag indicating that a target is active.
2703 These functions should be split out into seperate variables,
2704 especially since GDB will someday have a notion of debugging
2705 several processes. */
2706 inferior_ptid = magic_null_ptid;
2707
2708 /* Now, if we have thread information, update inferior_ptid. */
2709 inferior_ptid = remote_current_thread (inferior_ptid);
2710
0b16c5cf 2711 remote_add_inferior (ptid_get_pid (inferior_ptid), -1);
74531fed
PA
2712
2713 /* Always add the main thread. */
2714 add_thread_silent (inferior_ptid);
2715
2716 get_offsets (); /* Get text, data & bss offsets. */
2717
d962ef82
DJ
2718 /* If we could not find a description using qXfer, and we know
2719 how to do it some other way, try again. This is not
2720 supported for non-stop; it could be, but it is tricky if
2721 there are no stopped threads when we connect. */
2722 if (remote_read_description_p (args->target)
2723 && gdbarch_target_desc (target_gdbarch) == NULL)
2724 {
2725 target_clear_description ();
2726 target_find_description ();
2727 }
2728
74531fed
PA
2729 /* Use the previously fetched status. */
2730 gdb_assert (wait_status != NULL);
2731 strcpy (rs->buf, wait_status);
2732 rs->cached_wait_status = 1;
2733
2734 immediate_quit--;
2735 start_remote (args->from_tty); /* Initialize gdb process mechanisms. */
2d717e4f
DJ
2736 }
2737 else
2738 {
68c97600
PA
2739 /* Clear WFI global state. Do this before finding about new
2740 threads and inferiors, and setting the current inferior.
2741 Otherwise we would clear the proceed status of the current
2742 inferior when we want its stop_soon state to be preserved
2743 (see notice_new_inferior). */
2744 init_wait_for_inferior ();
2745
74531fed
PA
2746 /* In non-stop, we will either get an "OK", meaning that there
2747 are no stopped threads at this time; or, a regular stop
2748 reply. In the latter case, there may be more than one thread
2749 stopped --- we pull them all out using the vStopped
2750 mechanism. */
2751 if (strcmp (rs->buf, "OK") != 0)
2752 {
2753 struct stop_reply *stop_reply;
2754 struct cleanup *old_chain;
2d717e4f 2755
74531fed
PA
2756 stop_reply = stop_reply_xmalloc ();
2757 old_chain = make_cleanup (do_stop_reply_xfree, stop_reply);
2d717e4f 2758
74531fed
PA
2759 remote_parse_stop_reply (rs->buf, stop_reply);
2760 discard_cleanups (old_chain);
c0a2216e 2761
74531fed
PA
2762 /* get_pending_stop_replies acks this one, and gets the rest
2763 out. */
2764 pending_stop_reply = stop_reply;
2765 remote_get_pending_stop_replies ();
c906108c 2766
74531fed
PA
2767 /* Make sure that threads that were stopped remain
2768 stopped. */
2769 iterate_over_threads (set_stop_requested_callback, NULL);
2770 }
2d717e4f 2771
74531fed
PA
2772 if (target_can_async_p ())
2773 target_async (inferior_event_handler, 0);
c906108c 2774
74531fed
PA
2775 if (thread_count () == 0)
2776 {
c35b1492 2777 if (!args->extended_p)
74531fed 2778 error (_("The target is not running (try extended-remote?)"));
82f73884 2779
c35b1492
PA
2780 /* We're connected, but not running. Drop out before we
2781 call start_remote. */
2782 return;
2783 }
74531fed
PA
2784
2785 /* Let the stub know that we want it to return the thread. */
c0a2216e 2786
74531fed
PA
2787 /* Force the stub to choose a thread. */
2788 set_general_thread (null_ptid);
c906108c 2789
74531fed
PA
2790 /* Query it. */
2791 inferior_ptid = remote_current_thread (minus_one_ptid);
2792 if (ptid_equal (inferior_ptid, minus_one_ptid))
2793 error (_("remote didn't report the current thread in non-stop mode"));
c906108c 2794
74531fed
PA
2795 get_offsets (); /* Get text, data & bss offsets. */
2796
2797 /* In non-stop mode, any cached wait status will be stored in
2798 the stop reply queue. */
2799 gdb_assert (wait_status == NULL);
2800 }
c8d104ad 2801
c8d104ad
PA
2802 /* If we connected to a live target, do some additional setup. */
2803 if (target_has_execution)
2804 {
2805 if (exec_bfd) /* No use without an exec file. */
2806 remote_check_symbols (symfile_objfile);
2807 }
50c71eaf 2808
2567c7d9
PA
2809 /* If breakpoints are global, insert them now. */
2810 if (gdbarch_has_global_breakpoints (target_gdbarch)
50c71eaf
PA
2811 && breakpoints_always_inserted_mode ())
2812 insert_breakpoints ();
c906108c
SS
2813}
2814
2815/* Open a connection to a remote debugger.
2816 NAME is the filename used for communication. */
2817
2818static void
fba45db2 2819remote_open (char *name, int from_tty)
c906108c 2820{
75c99385 2821 remote_open_1 (name, from_tty, &remote_ops, 0);
43ff13b4
JM
2822}
2823
c906108c
SS
2824/* Open a connection to a remote debugger using the extended
2825 remote gdb protocol. NAME is the filename used for communication. */
2826
2827static void
fba45db2 2828extended_remote_open (char *name, int from_tty)
c906108c 2829{
75c99385 2830 remote_open_1 (name, from_tty, &extended_remote_ops, 1 /*extended_p */);
43ff13b4
JM
2831}
2832
c906108c
SS
2833/* Generic code for opening a connection to a remote target. */
2834
d471ea57
AC
2835static void
2836init_all_packet_configs (void)
2837{
2838 int i;
444abaca
DJ
2839 for (i = 0; i < PACKET_MAX; i++)
2840 update_packet_config (&remote_protocol_packets[i]);
d471ea57
AC
2841}
2842
23860348 2843/* Symbol look-up. */
dc8acb97
MS
2844
2845static void
2846remote_check_symbols (struct objfile *objfile)
2847{
d01949b6 2848 struct remote_state *rs = get_remote_state ();
dc8acb97
MS
2849 char *msg, *reply, *tmp;
2850 struct minimal_symbol *sym;
2851 int end;
2852
444abaca 2853 if (remote_protocol_packets[PACKET_qSymbol].support == PACKET_DISABLE)
dc8acb97
MS
2854 return;
2855
3c9c4b83
PA
2856 /* Make sure the remote is pointing at the right process. */
2857 set_general_process ();
2858
6d820c5c
DJ
2859 /* Allocate a message buffer. We can't reuse the input buffer in RS,
2860 because we need both at the same time. */
ea9c271d 2861 msg = alloca (get_remote_packet_size ());
6d820c5c 2862
23860348 2863 /* Invite target to request symbol lookups. */
dc8acb97
MS
2864
2865 putpkt ("qSymbol::");
6d820c5c
DJ
2866 getpkt (&rs->buf, &rs->buf_size, 0);
2867 packet_ok (rs->buf, &remote_protocol_packets[PACKET_qSymbol]);
2e9f7625 2868 reply = rs->buf;
dc8acb97
MS
2869
2870 while (strncmp (reply, "qSymbol:", 8) == 0)
2871 {
2872 tmp = &reply[8];
cfd77fa1 2873 end = hex2bin (tmp, (gdb_byte *) msg, strlen (tmp) / 2);
dc8acb97
MS
2874 msg[end] = '\0';
2875 sym = lookup_minimal_symbol (msg, NULL, NULL);
2876 if (sym == NULL)
ea9c271d 2877 xsnprintf (msg, get_remote_packet_size (), "qSymbol::%s", &reply[8]);
dc8acb97 2878 else
2bbe3cc1
DJ
2879 {
2880 CORE_ADDR sym_addr = SYMBOL_VALUE_ADDRESS (sym);
2881
2882 /* If this is a function address, return the start of code
2883 instead of any data function descriptor. */
1cf3db46 2884 sym_addr = gdbarch_convert_from_func_ptr_addr (target_gdbarch,
2bbe3cc1
DJ
2885 sym_addr,
2886 &current_target);
2887
2888 xsnprintf (msg, get_remote_packet_size (), "qSymbol:%s:%s",
2889 paddr_nz (sym_addr), &reply[8]);
2890 }
2891
dc8acb97 2892 putpkt (msg);
6d820c5c 2893 getpkt (&rs->buf, &rs->buf_size, 0);
2e9f7625 2894 reply = rs->buf;
dc8acb97
MS
2895 }
2896}
2897
9db8d71f
DJ
2898static struct serial *
2899remote_serial_open (char *name)
2900{
2901 static int udp_warning = 0;
2902
2903 /* FIXME: Parsing NAME here is a hack. But we want to warn here instead
2904 of in ser-tcp.c, because it is the remote protocol assuming that the
2905 serial connection is reliable and not the serial connection promising
2906 to be. */
2907 if (!udp_warning && strncmp (name, "udp:", 4) == 0)
2908 {
8a3fe4f8
AC
2909 warning (_("\
2910The remote protocol may be unreliable over UDP.\n\
2911Some events may be lost, rendering further debugging impossible."));
9db8d71f
DJ
2912 udp_warning = 1;
2913 }
2914
2915 return serial_open (name);
2916}
2917
be2a5f71
DJ
2918/* This type describes each known response to the qSupported
2919 packet. */
2920struct protocol_feature
2921{
2922 /* The name of this protocol feature. */
2923 const char *name;
2924
2925 /* The default for this protocol feature. */
2926 enum packet_support default_support;
2927
2928 /* The function to call when this feature is reported, or after
2929 qSupported processing if the feature is not supported.
2930 The first argument points to this structure. The second
2931 argument indicates whether the packet requested support be
2932 enabled, disabled, or probed (or the default, if this function
2933 is being called at the end of processing and this feature was
2934 not reported). The third argument may be NULL; if not NULL, it
2935 is a NUL-terminated string taken from the packet following
2936 this feature's name and an equals sign. */
2937 void (*func) (const struct protocol_feature *, enum packet_support,
2938 const char *);
2939
2940 /* The corresponding packet for this feature. Only used if
2941 FUNC is remote_supported_packet. */
2942 int packet;
2943};
2944
be2a5f71
DJ
2945static void
2946remote_supported_packet (const struct protocol_feature *feature,
2947 enum packet_support support,
2948 const char *argument)
2949{
2950 if (argument)
2951 {
2952 warning (_("Remote qSupported response supplied an unexpected value for"
2953 " \"%s\"."), feature->name);
2954 return;
2955 }
2956
2957 if (remote_protocol_packets[feature->packet].support
2958 == PACKET_SUPPORT_UNKNOWN)
2959 remote_protocol_packets[feature->packet].support = support;
2960}
be2a5f71
DJ
2961
2962static void
2963remote_packet_size (const struct protocol_feature *feature,
2964 enum packet_support support, const char *value)
2965{
2966 struct remote_state *rs = get_remote_state ();
2967
2968 int packet_size;
2969 char *value_end;
2970
2971 if (support != PACKET_ENABLE)
2972 return;
2973
2974 if (value == NULL || *value == '\0')
2975 {
2976 warning (_("Remote target reported \"%s\" without a size."),
2977 feature->name);
2978 return;
2979 }
2980
2981 errno = 0;
2982 packet_size = strtol (value, &value_end, 16);
2983 if (errno != 0 || *value_end != '\0' || packet_size < 0)
2984 {
2985 warning (_("Remote target reported \"%s\" with a bad size: \"%s\"."),
2986 feature->name, value);
2987 return;
2988 }
2989
2990 if (packet_size > MAX_REMOTE_PACKET_SIZE)
2991 {
2992 warning (_("limiting remote suggested packet size (%d bytes) to %d"),
2993 packet_size, MAX_REMOTE_PACKET_SIZE);
2994 packet_size = MAX_REMOTE_PACKET_SIZE;
2995 }
2996
2997 /* Record the new maximum packet size. */
2998 rs->explicit_packet_size = packet_size;
2999}
3000
82f73884
PA
3001static void
3002remote_multi_process_feature (const struct protocol_feature *feature,
3003 enum packet_support support, const char *value)
3004{
3005 struct remote_state *rs = get_remote_state ();
3006 rs->multi_process_aware = (support == PACKET_ENABLE);
3007}
3008
74531fed
PA
3009static void
3010remote_non_stop_feature (const struct protocol_feature *feature,
3011 enum packet_support support, const char *value)
3012{
3013 struct remote_state *rs = get_remote_state ();
3014 rs->non_stop_aware = (support == PACKET_ENABLE);
3015}
3016
be2a5f71 3017static struct protocol_feature remote_protocol_features[] = {
0876f84a 3018 { "PacketSize", PACKET_DISABLE, remote_packet_size, -1 },
40e57cf2 3019 { "qXfer:auxv:read", PACKET_DISABLE, remote_supported_packet,
fd79ecee 3020 PACKET_qXfer_auxv },
23181151
DJ
3021 { "qXfer:features:read", PACKET_DISABLE, remote_supported_packet,
3022 PACKET_qXfer_features },
cfa9d6d9
DJ
3023 { "qXfer:libraries:read", PACKET_DISABLE, remote_supported_packet,
3024 PACKET_qXfer_libraries },
fd79ecee 3025 { "qXfer:memory-map:read", PACKET_DISABLE, remote_supported_packet,
89be2091 3026 PACKET_qXfer_memory_map },
4de6483e
UW
3027 { "qXfer:spu:read", PACKET_DISABLE, remote_supported_packet,
3028 PACKET_qXfer_spu_read },
3029 { "qXfer:spu:write", PACKET_DISABLE, remote_supported_packet,
3030 PACKET_qXfer_spu_write },
07e059b5
VP
3031 { "qXfer:osdata:read", PACKET_DISABLE, remote_supported_packet,
3032 PACKET_qXfer_osdata },
89be2091
DJ
3033 { "QPassSignals", PACKET_DISABLE, remote_supported_packet,
3034 PACKET_QPassSignals },
a6f3e723
SL
3035 { "QStartNoAckMode", PACKET_DISABLE, remote_supported_packet,
3036 PACKET_QStartNoAckMode },
82f73884 3037 { "multiprocess", PACKET_DISABLE, remote_multi_process_feature, -1 },
74531fed 3038 { "QNonStop", PACKET_DISABLE, remote_non_stop_feature, -1 },
4aa995e1
PA
3039 { "qXfer:siginfo:read", PACKET_DISABLE, remote_supported_packet,
3040 PACKET_qXfer_siginfo_read },
3041 { "qXfer:siginfo:write", PACKET_DISABLE, remote_supported_packet,
3042 PACKET_qXfer_siginfo_write },
be2a5f71
DJ
3043};
3044
3045static void
3046remote_query_supported (void)
3047{
3048 struct remote_state *rs = get_remote_state ();
3049 char *next;
3050 int i;
3051 unsigned char seen [ARRAY_SIZE (remote_protocol_features)];
3052
3053 /* The packet support flags are handled differently for this packet
3054 than for most others. We treat an error, a disabled packet, and
3055 an empty response identically: any features which must be reported
3056 to be used will be automatically disabled. An empty buffer
3057 accomplishes this, since that is also the representation for a list
3058 containing no features. */
3059
3060 rs->buf[0] = 0;
3061 if (remote_protocol_packets[PACKET_qSupported].support != PACKET_DISABLE)
3062 {
82f73884
PA
3063 if (rs->extended)
3064 putpkt ("qSupported:multiprocess+");
3065 else
3066 putpkt ("qSupported");
3067
be2a5f71
DJ
3068 getpkt (&rs->buf, &rs->buf_size, 0);
3069
3070 /* If an error occured, warn, but do not return - just reset the
3071 buffer to empty and go on to disable features. */
3072 if (packet_ok (rs->buf, &remote_protocol_packets[PACKET_qSupported])
3073 == PACKET_ERROR)
3074 {
3075 warning (_("Remote failure reply: %s"), rs->buf);
3076 rs->buf[0] = 0;
3077 }
3078 }
3079
3080 memset (seen, 0, sizeof (seen));
3081
3082 next = rs->buf;
3083 while (*next)
3084 {
3085 enum packet_support is_supported;
3086 char *p, *end, *name_end, *value;
3087
3088 /* First separate out this item from the rest of the packet. If
3089 there's another item after this, we overwrite the separator
3090 (terminated strings are much easier to work with). */
3091 p = next;
3092 end = strchr (p, ';');
3093 if (end == NULL)
3094 {
3095 end = p + strlen (p);
3096 next = end;
3097 }
3098 else
3099 {
89be2091
DJ
3100 *end = '\0';
3101 next = end + 1;
3102
be2a5f71
DJ
3103 if (end == p)
3104 {
3105 warning (_("empty item in \"qSupported\" response"));
3106 continue;
3107 }
be2a5f71
DJ
3108 }
3109
3110 name_end = strchr (p, '=');
3111 if (name_end)
3112 {
3113 /* This is a name=value entry. */
3114 is_supported = PACKET_ENABLE;
3115 value = name_end + 1;
3116 *name_end = '\0';
3117 }
3118 else
3119 {
3120 value = NULL;
3121 switch (end[-1])
3122 {
3123 case '+':
3124 is_supported = PACKET_ENABLE;
3125 break;
3126
3127 case '-':
3128 is_supported = PACKET_DISABLE;
3129 break;
3130
3131 case '?':
3132 is_supported = PACKET_SUPPORT_UNKNOWN;
3133 break;
3134
3135 default:
3136 warning (_("unrecognized item \"%s\" in \"qSupported\" response"), p);
3137 continue;
3138 }
3139 end[-1] = '\0';
3140 }
3141
3142 for (i = 0; i < ARRAY_SIZE (remote_protocol_features); i++)
3143 if (strcmp (remote_protocol_features[i].name, p) == 0)
3144 {
3145 const struct protocol_feature *feature;
3146
3147 seen[i] = 1;
3148 feature = &remote_protocol_features[i];
3149 feature->func (feature, is_supported, value);
3150 break;
3151 }
3152 }
3153
3154 /* If we increased the packet size, make sure to increase the global
3155 buffer size also. We delay this until after parsing the entire
3156 qSupported packet, because this is the same buffer we were
3157 parsing. */
3158 if (rs->buf_size < rs->explicit_packet_size)
3159 {
3160 rs->buf_size = rs->explicit_packet_size;
3161 rs->buf = xrealloc (rs->buf, rs->buf_size);
3162 }
3163
3164 /* Handle the defaults for unmentioned features. */
3165 for (i = 0; i < ARRAY_SIZE (remote_protocol_features); i++)
3166 if (!seen[i])
3167 {
3168 const struct protocol_feature *feature;
3169
3170 feature = &remote_protocol_features[i];
3171 feature->func (feature, feature->default_support, NULL);
3172 }
3173}
3174
3175
c906108c 3176static void
75c99385 3177remote_open_1 (char *name, int from_tty, struct target_ops *target, int extended_p)
c906108c 3178{
d01949b6 3179 struct remote_state *rs = get_remote_state ();
a6f3e723 3180
c906108c 3181 if (name == 0)
8a3fe4f8 3182 error (_("To open a remote debug connection, you need to specify what\n"
22e04375 3183 "serial device is attached to the remote system\n"
8a3fe4f8 3184 "(e.g. /dev/ttyS0, /dev/ttya, COM1, etc.)."));
c906108c 3185
23860348 3186 /* See FIXME above. */
c6ebd6cf 3187 if (!target_async_permitted)
92d1e331 3188 wait_forever_enabled_p = 1;
6426a772 3189
2d717e4f
DJ
3190 /* If we're connected to a running target, target_preopen will kill it.
3191 But if we're connected to a target system with no running process,
3192 then we will still be connected when it returns. Ask this question
3193 first, before target_preopen has a chance to kill anything. */
c35b1492 3194 if (remote_desc != NULL && !have_inferiors ())
2d717e4f
DJ
3195 {
3196 if (!from_tty
3197 || query (_("Already connected to a remote target. Disconnect? ")))
3198 pop_target ();
3199 else
3200 error (_("Still connected."));
3201 }
3202
c906108c
SS
3203 target_preopen (from_tty);
3204
3205 unpush_target (target);
3206
2d717e4f
DJ
3207 /* This time without a query. If we were connected to an
3208 extended-remote target and target_preopen killed the running
3209 process, we may still be connected. If we are starting "target
3210 remote" now, the extended-remote target will not have been
3211 removed by unpush_target. */
c35b1492 3212 if (remote_desc != NULL && !have_inferiors ())
2d717e4f
DJ
3213 pop_target ();
3214
89be2091
DJ
3215 /* Make sure we send the passed signals list the next time we resume. */
3216 xfree (last_pass_packet);
3217 last_pass_packet = NULL;
3218
ad9a8f3f 3219 remote_fileio_reset ();
1dd41f16
NS
3220 reopen_exec_file ();
3221 reread_symbols ();
3222
9db8d71f 3223 remote_desc = remote_serial_open (name);
c906108c
SS
3224 if (!remote_desc)
3225 perror_with_name (name);
3226
3227 if (baud_rate != -1)
3228 {
2cd58942 3229 if (serial_setbaudrate (remote_desc, baud_rate))
c906108c 3230 {
9b74d5d3
KB
3231 /* The requested speed could not be set. Error out to
3232 top level after closing remote_desc. Take care to
3233 set remote_desc to NULL to avoid closing remote_desc
3234 more than once. */
2cd58942 3235 serial_close (remote_desc);
9b74d5d3 3236 remote_desc = NULL;
c906108c
SS
3237 perror_with_name (name);
3238 }
3239 }
3240
2cd58942 3241 serial_raw (remote_desc);
c906108c
SS
3242
3243 /* If there is something sitting in the buffer we might take it as a
3244 response to a command, which would be bad. */
2cd58942 3245 serial_flush_input (remote_desc);
c906108c
SS
3246
3247 if (from_tty)
3248 {
3249 puts_filtered ("Remote debugging using ");
3250 puts_filtered (name);
3251 puts_filtered ("\n");
3252 }
23860348 3253 push_target (target); /* Switch to using remote target now. */
c906108c 3254
74531fed
PA
3255 /* Register extra event sources in the event loop. */
3256 remote_async_inferior_event_token
3257 = create_async_event_handler (remote_async_inferior_event_handler,
3258 NULL);
3259 remote_async_get_pending_events_token
3260 = create_async_event_handler (remote_async_get_pending_events_handler,
3261 NULL);
3262
be2a5f71
DJ
3263 /* Reset the target state; these things will be queried either by
3264 remote_query_supported or as they are needed. */
d471ea57 3265 init_all_packet_configs ();
74531fed 3266 rs->cached_wait_status = 0;
be2a5f71 3267 rs->explicit_packet_size = 0;
a6f3e723 3268 rs->noack_mode = 0;
82f73884
PA
3269 rs->multi_process_aware = 0;
3270 rs->extended = extended_p;
74531fed 3271 rs->non_stop_aware = 0;
e24a49d8 3272 rs->waiting_for_stop_reply = 0;
802188a7 3273
79d7f229
PA
3274 general_thread = not_sent_ptid;
3275 continue_thread = not_sent_ptid;
c906108c 3276
9d1f7ab2
MS
3277 /* Probe for ability to use "ThreadInfo" query, as required. */
3278 use_threadinfo_query = 1;
3279 use_threadextra_query = 1;
3280
c6ebd6cf 3281 if (target_async_permitted)
92d1e331 3282 {
23860348 3283 /* With this target we start out by owning the terminal. */
92d1e331
DJ
3284 remote_async_terminal_ours_p = 1;
3285
3286 /* FIXME: cagney/1999-09-23: During the initial connection it is
3287 assumed that the target is already ready and able to respond to
3288 requests. Unfortunately remote_start_remote() eventually calls
3289 wait_for_inferior() with no timeout. wait_forever_enabled_p gets
3290 around this. Eventually a mechanism that allows
3291 wait_for_inferior() to expect/get timeouts will be
23860348 3292 implemented. */
92d1e331
DJ
3293 wait_forever_enabled_p = 0;
3294 }
3295
23860348 3296 /* First delete any symbols previously loaded from shared libraries. */
f78f6cf1 3297 no_shared_libraries (NULL, 0);
f78f6cf1 3298
74531fed
PA
3299 /* Start afresh. */
3300 init_thread_list ();
3301
36918e70 3302 /* Start the remote connection. If error() or QUIT, discard this
165b8e33
AC
3303 target (we'd otherwise be in an inconsistent state) and then
3304 propogate the error on up the exception chain. This ensures that
3305 the caller doesn't stumble along blindly assuming that the
3306 function succeeded. The CLI doesn't have this problem but other
3307 UI's, such as MI do.
36918e70
AC
3308
3309 FIXME: cagney/2002-05-19: Instead of re-throwing the exception,
3310 this function should return an error indication letting the
ce2826aa 3311 caller restore the previous state. Unfortunately the command
36918e70
AC
3312 ``target remote'' is directly wired to this function making that
3313 impossible. On a positive note, the CLI side of this problem has
3314 been fixed - the function set_cmd_context() makes it possible for
3315 all the ``target ....'' commands to share a common callback
3316 function. See cli-dump.c. */
109c3e39 3317 {
2d717e4f
DJ
3318 struct gdb_exception ex;
3319 struct start_remote_args args;
3320
3321 args.from_tty = from_tty;
3322 args.target = target;
3323 args.extended_p = extended_p;
3324
3325 ex = catch_exception (uiout, remote_start_remote, &args, RETURN_MASK_ALL);
109c3e39
AC
3326 if (ex.reason < 0)
3327 {
c8d104ad
PA
3328 /* Pop the partially set up target - unless something else did
3329 already before throwing the exception. */
3330 if (remote_desc != NULL)
3331 pop_target ();
c6ebd6cf 3332 if (target_async_permitted)
109c3e39
AC
3333 wait_forever_enabled_p = 1;
3334 throw_exception (ex);
3335 }
3336 }
c906108c 3337
c6ebd6cf 3338 if (target_async_permitted)
92d1e331 3339 wait_forever_enabled_p = 1;
43ff13b4
JM
3340}
3341
c906108c
SS
3342/* This takes a program previously attached to and detaches it. After
3343 this is done, GDB can be used to debug some other program. We
3344 better not have left any breakpoints in the target program or it'll
3345 die when it hits one. */
3346
3347static void
2d717e4f 3348remote_detach_1 (char *args, int from_tty, int extended)
c906108c 3349{
82f73884 3350 int pid = ptid_get_pid (inferior_ptid);
d01949b6 3351 struct remote_state *rs = get_remote_state ();
c906108c
SS
3352
3353 if (args)
8a3fe4f8 3354 error (_("Argument given to \"detach\" when remotely debugging."));
c906108c 3355
2d717e4f
DJ
3356 if (!target_has_execution)
3357 error (_("No process to detach from."));
3358
c906108c 3359 /* Tell the remote target to detach. */
82f73884
PA
3360 if (remote_multi_process_p (rs))
3361 sprintf (rs->buf, "D;%x", pid);
3362 else
3363 strcpy (rs->buf, "D");
3364
4ddda9b5
PA
3365 putpkt (rs->buf);
3366 getpkt (&rs->buf, &rs->buf_size, 0);
3367
82f73884
PA
3368 if (rs->buf[0] == 'O' && rs->buf[1] == 'K')
3369 ;
3370 else if (rs->buf[0] == '\0')
3371 error (_("Remote doesn't know how to detach"));
3372 else
4ddda9b5 3373 error (_("Can't detach process."));
c906108c 3374
c906108c 3375 if (from_tty)
2d717e4f 3376 {
82f73884
PA
3377 if (remote_multi_process_p (rs))
3378 printf_filtered (_("Detached from remote %s.\n"),
3379 target_pid_to_str (pid_to_ptid (pid)));
2d717e4f 3380 else
82f73884
PA
3381 {
3382 if (extended)
3383 puts_filtered (_("Detached from remote process.\n"));
3384 else
3385 puts_filtered (_("Ending remote debugging.\n"));
3386 }
2d717e4f 3387 }
82f73884 3388
74531fed 3389 discard_pending_stop_replies (pid);
82f73884 3390 target_mourn_inferior ();
2d717e4f
DJ
3391}
3392
3393static void
136d6dae 3394remote_detach (struct target_ops *ops, char *args, int from_tty)
2d717e4f
DJ
3395{
3396 remote_detach_1 (args, from_tty, 0);
3397}
3398
3399static void
136d6dae 3400extended_remote_detach (struct target_ops *ops, char *args, int from_tty)
2d717e4f
DJ
3401{
3402 remote_detach_1 (args, from_tty, 1);
c906108c
SS
3403}
3404
6ad8ae5c
DJ
3405/* Same as remote_detach, but don't send the "D" packet; just disconnect. */
3406
43ff13b4 3407static void
597320e7 3408remote_disconnect (struct target_ops *target, char *args, int from_tty)
43ff13b4 3409{
43ff13b4 3410 if (args)
2d717e4f 3411 error (_("Argument given to \"disconnect\" when remotely debugging."));
43ff13b4 3412
2d717e4f
DJ
3413 /* Make sure we unpush even the extended remote targets; mourn
3414 won't do it. So call remote_mourn_1 directly instead of
3415 target_mourn_inferior. */
3416 remote_mourn_1 (target);
3417
43ff13b4
JM
3418 if (from_tty)
3419 puts_filtered ("Ending remote debugging.\n");
3420}
3421
2d717e4f
DJ
3422/* Attach to the process specified by ARGS. If FROM_TTY is non-zero,
3423 be chatty about it. */
3424
3425static void
3426extended_remote_attach_1 (struct target_ops *target, char *args, int from_tty)
3427{
3428 struct remote_state *rs = get_remote_state ();
be86555c 3429 int pid;
2d717e4f 3430 char *dummy;
96ef3384 3431 char *wait_status = NULL;
2d717e4f
DJ
3432
3433 if (!args)
3434 error_no_arg (_("process-id to attach"));
3435
3436 dummy = args;
3437 pid = strtol (args, &dummy, 0);
3438 /* Some targets don't set errno on errors, grrr! */
3439 if (pid == 0 && args == dummy)
3440 error (_("Illegal process-id: %s."), args);
3441
3442 if (remote_protocol_packets[PACKET_vAttach].support == PACKET_DISABLE)
3443 error (_("This target does not support attaching to a process"));
3444
3445 sprintf (rs->buf, "vAttach;%x", pid);
3446 putpkt (rs->buf);
3447 getpkt (&rs->buf, &rs->buf_size, 0);
3448
3449 if (packet_ok (rs->buf, &remote_protocol_packets[PACKET_vAttach]) == PACKET_OK)
3450 {
3451 if (from_tty)
3452 printf_unfiltered (_("Attached to %s\n"),
3453 target_pid_to_str (pid_to_ptid (pid)));
3454
74531fed
PA
3455 if (!non_stop)
3456 {
3457 /* Save the reply for later. */
3458 wait_status = alloca (strlen (rs->buf) + 1);
3459 strcpy (wait_status, rs->buf);
3460 }
3461 else if (strcmp (rs->buf, "OK") != 0)
3462 error (_("Attaching to %s failed with: %s"),
3463 target_pid_to_str (pid_to_ptid (pid)),
3464 rs->buf);
2d717e4f
DJ
3465 }
3466 else if (remote_protocol_packets[PACKET_vAttach].support == PACKET_DISABLE)
3467 error (_("This target does not support attaching to a process"));
3468 else
3469 error (_("Attaching to %s failed"),
3470 target_pid_to_str (pid_to_ptid (pid)));
3471
bad34192
PA
3472 remote_add_inferior (pid, 1);
3473
2d717e4f 3474 inferior_ptid = pid_to_ptid (pid);
79d7f229 3475
bad34192
PA
3476 if (non_stop)
3477 {
3478 struct thread_info *thread;
79d7f229 3479
bad34192
PA
3480 /* Get list of threads. */
3481 remote_threads_info (target);
82f73884 3482
bad34192
PA
3483 thread = first_thread_of_process (pid);
3484 if (thread)
3485 inferior_ptid = thread->ptid;
3486 else
3487 inferior_ptid = pid_to_ptid (pid);
3488
3489 /* Invalidate our notion of the remote current thread. */
3490 record_currthread (minus_one_ptid);
3491 }
74531fed 3492 else
bad34192
PA
3493 {
3494 /* Now, if we have thread information, update inferior_ptid. */
3495 inferior_ptid = remote_current_thread (inferior_ptid);
3496
3497 /* Add the main thread to the thread list. */
3498 add_thread_silent (inferior_ptid);
3499 }
c0a2216e 3500
96ef3384
UW
3501 /* Next, if the target can specify a description, read it. We do
3502 this before anything involving memory or registers. */
3503 target_find_description ();
3504
74531fed
PA
3505 if (!non_stop)
3506 {
3507 /* Use the previously fetched status. */
3508 gdb_assert (wait_status != NULL);
3509
3510 if (target_can_async_p ())
3511 {
3512 struct stop_reply *stop_reply;
3513 struct cleanup *old_chain;
3514
3515 stop_reply = stop_reply_xmalloc ();
3516 old_chain = make_cleanup (do_stop_reply_xfree, stop_reply);
3517 remote_parse_stop_reply (wait_status, stop_reply);
3518 discard_cleanups (old_chain);
3519 push_stop_reply (stop_reply);
3520
3521 target_async (inferior_event_handler, 0);
3522 }
3523 else
3524 {
3525 gdb_assert (wait_status != NULL);
3526 strcpy (rs->buf, wait_status);
3527 rs->cached_wait_status = 1;
3528 }
3529 }
3530 else
3531 gdb_assert (wait_status == NULL);
2d717e4f
DJ
3532}
3533
3534static void
136d6dae 3535extended_remote_attach (struct target_ops *ops, char *args, int from_tty)
2d717e4f 3536{
136d6dae 3537 extended_remote_attach_1 (ops, args, from_tty);
2d717e4f
DJ
3538}
3539
c906108c
SS
3540/* Convert hex digit A to a number. */
3541
30559e10 3542static int
fba45db2 3543fromhex (int a)
c906108c
SS
3544{
3545 if (a >= '0' && a <= '9')
3546 return a - '0';
3547 else if (a >= 'a' && a <= 'f')
3548 return a - 'a' + 10;
3549 else if (a >= 'A' && a <= 'F')
3550 return a - 'A' + 10;
c5aa993b 3551 else
8a3fe4f8 3552 error (_("Reply contains invalid hex digit %d"), a);
c906108c
SS
3553}
3554
30559e10 3555static int
cfd77fa1 3556hex2bin (const char *hex, gdb_byte *bin, int count)
30559e10
MS
3557{
3558 int i;
3559
30559e10
MS
3560 for (i = 0; i < count; i++)
3561 {
3562 if (hex[0] == 0 || hex[1] == 0)
3563 {
3564 /* Hex string is short, or of uneven length.
23860348 3565 Return the count that has been converted so far. */
30559e10
MS
3566 return i;
3567 }
3568 *bin++ = fromhex (hex[0]) * 16 + fromhex (hex[1]);
3569 hex += 2;
3570 }
3571 return i;
3572}
3573
c906108c
SS
3574/* Convert number NIB to a hex digit. */
3575
3576static int
fba45db2 3577tohex (int nib)
c906108c
SS
3578{
3579 if (nib < 10)
c5aa993b 3580 return '0' + nib;
c906108c 3581 else
c5aa993b 3582 return 'a' + nib - 10;
c906108c 3583}
30559e10
MS
3584
3585static int
cfd77fa1 3586bin2hex (const gdb_byte *bin, char *hex, int count)
30559e10
MS
3587{
3588 int i;
23860348 3589 /* May use a length, or a nul-terminated string as input. */
30559e10 3590 if (count == 0)
cfd77fa1 3591 count = strlen ((char *) bin);
30559e10
MS
3592
3593 for (i = 0; i < count; i++)
3594 {
3595 *hex++ = tohex ((*bin >> 4) & 0xf);
3596 *hex++ = tohex (*bin++ & 0xf);
3597 }
3598 *hex = 0;
3599 return i;
3600}
c906108c 3601\f
506fb367
DJ
3602/* Check for the availability of vCont. This function should also check
3603 the response. */
c906108c
SS
3604
3605static void
6d820c5c 3606remote_vcont_probe (struct remote_state *rs)
c906108c 3607{
2e9f7625 3608 char *buf;
6d820c5c 3609
2e9f7625
DJ
3610 strcpy (rs->buf, "vCont?");
3611 putpkt (rs->buf);
6d820c5c 3612 getpkt (&rs->buf, &rs->buf_size, 0);
2e9f7625 3613 buf = rs->buf;
c906108c 3614
506fb367
DJ
3615 /* Make sure that the features we assume are supported. */
3616 if (strncmp (buf, "vCont", 5) == 0)
3617 {
3618 char *p = &buf[5];
3619 int support_s, support_S, support_c, support_C;
3620
3621 support_s = 0;
3622 support_S = 0;
3623 support_c = 0;
3624 support_C = 0;
74531fed 3625 rs->support_vCont_t = 0;
506fb367
DJ
3626 while (p && *p == ';')
3627 {
3628 p++;
3629 if (*p == 's' && (*(p + 1) == ';' || *(p + 1) == 0))
3630 support_s = 1;
3631 else if (*p == 'S' && (*(p + 1) == ';' || *(p + 1) == 0))
3632 support_S = 1;
3633 else if (*p == 'c' && (*(p + 1) == ';' || *(p + 1) == 0))
3634 support_c = 1;
3635 else if (*p == 'C' && (*(p + 1) == ';' || *(p + 1) == 0))
3636 support_C = 1;
74531fed
PA
3637 else if (*p == 't' && (*(p + 1) == ';' || *(p + 1) == 0))
3638 rs->support_vCont_t = 1;
506fb367
DJ
3639
3640 p = strchr (p, ';');
3641 }
c906108c 3642
506fb367
DJ
3643 /* If s, S, c, and C are not all supported, we can't use vCont. Clearing
3644 BUF will make packet_ok disable the packet. */
3645 if (!support_s || !support_S || !support_c || !support_C)
3646 buf[0] = 0;
3647 }
c906108c 3648
444abaca 3649 packet_ok (buf, &remote_protocol_packets[PACKET_vCont]);
506fb367 3650}
c906108c 3651
0d8f58ca
PA
3652/* Helper function for building "vCont" resumptions. Write a
3653 resumption to P. ENDP points to one-passed-the-end of the buffer
3654 we're allowed to write to. Returns BUF+CHARACTERS_WRITTEN. The
3655 thread to be resumed is PTID; STEP and SIGGNAL indicate whether the
3656 resumed thread should be single-stepped and/or signalled. If PTID
3657 equals minus_one_ptid, then all threads are resumed; if PTID
3658 represents a process, then all threads of the process are resumed;
3659 the thread to be stepped and/or signalled is given in the global
3660 INFERIOR_PTID. */
3661
3662static char *
3663append_resumption (char *p, char *endp,
3664 ptid_t ptid, int step, enum target_signal siggnal)
3665{
3666 struct remote_state *rs = get_remote_state ();
3667
3668 if (step && siggnal != TARGET_SIGNAL_0)
3669 p += xsnprintf (p, endp - p, ";S%02x", siggnal);
3670 else if (step)
3671 p += xsnprintf (p, endp - p, ";s");
3672 else if (siggnal != TARGET_SIGNAL_0)
3673 p += xsnprintf (p, endp - p, ";C%02x", siggnal);
3674 else
3675 p += xsnprintf (p, endp - p, ";c");
3676
3677 if (remote_multi_process_p (rs) && ptid_is_pid (ptid))
3678 {
3679 ptid_t nptid;
3680
3681 /* All (-1) threads of process. */
3682 nptid = ptid_build (ptid_get_pid (ptid), 0, -1);
3683
3684 p += xsnprintf (p, endp - p, ":");
3685 p = write_ptid (p, endp, nptid);
3686 }
3687 else if (!ptid_equal (ptid, minus_one_ptid))
3688 {
3689 p += xsnprintf (p, endp - p, ":");
3690 p = write_ptid (p, endp, ptid);
3691 }
3692
3693 return p;
3694}
3695
506fb367
DJ
3696/* Resume the remote inferior by using a "vCont" packet. The thread
3697 to be resumed is PTID; STEP and SIGGNAL indicate whether the
79d7f229
PA
3698 resumed thread should be single-stepped and/or signalled. If PTID
3699 equals minus_one_ptid, then all threads are resumed; the thread to
3700 be stepped and/or signalled is given in the global INFERIOR_PTID.
3701 This function returns non-zero iff it resumes the inferior.
44eaed12 3702
506fb367
DJ
3703 This function issues a strict subset of all possible vCont commands at the
3704 moment. */
44eaed12 3705
506fb367
DJ
3706static int
3707remote_vcont_resume (ptid_t ptid, int step, enum target_signal siggnal)
3708{
3709 struct remote_state *rs = get_remote_state ();
82f73884
PA
3710 char *p;
3711 char *endp;
44eaed12 3712
444abaca 3713 if (remote_protocol_packets[PACKET_vCont].support == PACKET_SUPPORT_UNKNOWN)
6d820c5c 3714 remote_vcont_probe (rs);
44eaed12 3715
444abaca 3716 if (remote_protocol_packets[PACKET_vCont].support == PACKET_DISABLE)
6d820c5c 3717 return 0;
44eaed12 3718
82f73884
PA
3719 p = rs->buf;
3720 endp = rs->buf + get_remote_packet_size ();
3721
506fb367
DJ
3722 /* If we could generate a wider range of packets, we'd have to worry
3723 about overflowing BUF. Should there be a generic
3724 "multi-part-packet" packet? */
3725
0d8f58ca
PA
3726 p += xsnprintf (p, endp - p, "vCont");
3727
79d7f229 3728 if (ptid_equal (ptid, magic_null_ptid))
c906108c 3729 {
79d7f229
PA
3730 /* MAGIC_NULL_PTID means that we don't have any active threads,
3731 so we don't have any TID numbers the inferior will
3732 understand. Make sure to only send forms that do not specify
3733 a TID. */
0d8f58ca 3734 p = append_resumption (p, endp, minus_one_ptid, step, siggnal);
506fb367 3735 }
0d8f58ca 3736 else if (ptid_equal (ptid, minus_one_ptid) || ptid_is_pid (ptid))
506fb367 3737 {
0d8f58ca
PA
3738 /* Resume all threads (of all processes, or of a single
3739 process), with preference for INFERIOR_PTID. This assumes
3740 inferior_ptid belongs to the set of all threads we are about
3741 to resume. */
3742 if (step || siggnal != TARGET_SIGNAL_0)
82f73884 3743 {
0d8f58ca
PA
3744 /* Step inferior_ptid, with or without signal. */
3745 p = append_resumption (p, endp, inferior_ptid, step, siggnal);
82f73884 3746 }
0d8f58ca
PA
3747
3748 /* And continue others without a signal. */
3749 p = append_resumption (p, endp, ptid, /*step=*/ 0, TARGET_SIGNAL_0);
c906108c
SS
3750 }
3751 else
506fb367
DJ
3752 {
3753 /* Scheduler locking; resume only PTID. */
0d8f58ca 3754 p = append_resumption (p, endp, ptid, step, siggnal);
506fb367 3755 }
c906108c 3756
82f73884
PA
3757 gdb_assert (strlen (rs->buf) < get_remote_packet_size ());
3758 putpkt (rs->buf);
506fb367 3759
74531fed
PA
3760 if (non_stop)
3761 {
3762 /* In non-stop, the stub replies to vCont with "OK". The stop
3763 reply will be reported asynchronously by means of a `%Stop'
3764 notification. */
3765 getpkt (&rs->buf, &rs->buf_size, 0);
3766 if (strcmp (rs->buf, "OK") != 0)
3767 error (_("Unexpected vCont reply in non-stop mode: %s"), rs->buf);
3768 }
3769
506fb367 3770 return 1;
c906108c 3771}
43ff13b4 3772
506fb367
DJ
3773/* Tell the remote machine to resume. */
3774
3775static enum target_signal last_sent_signal = TARGET_SIGNAL_0;
3776
3777static int last_sent_step;
3778
43ff13b4 3779static void
28439f5e
PA
3780remote_resume (struct target_ops *ops,
3781 ptid_t ptid, int step, enum target_signal siggnal)
43ff13b4 3782{
d01949b6 3783 struct remote_state *rs = get_remote_state ();
2e9f7625 3784 char *buf;
43ff13b4 3785
43ff13b4
JM
3786 last_sent_signal = siggnal;
3787 last_sent_step = step;
3788
89be2091
DJ
3789 /* Update the inferior on signals to silently pass, if they've changed. */
3790 remote_pass_signals ();
3791
506fb367
DJ
3792 /* The vCont packet doesn't need to specify threads via Hc. */
3793 if (remote_vcont_resume (ptid, step, siggnal))
75c99385 3794 goto done;
506fb367 3795
79d7f229
PA
3796 /* All other supported resume packets do use Hc, so set the continue
3797 thread. */
3798 if (ptid_equal (ptid, minus_one_ptid))
3799 set_continue_thread (any_thread_ptid);
506fb367 3800 else
79d7f229 3801 set_continue_thread (ptid);
506fb367 3802
2e9f7625 3803 buf = rs->buf;
b2175913
MS
3804 if (execution_direction == EXEC_REVERSE)
3805 {
3806 /* We don't pass signals to the target in reverse exec mode. */
3807 if (info_verbose && siggnal != TARGET_SIGNAL_0)
3808 warning (" - Can't pass signal %d to target in reverse: ignored.\n",
3809 siggnal);
3810 strcpy (buf, step ? "bs" : "bc");
3811 }
3812 else if (siggnal != TARGET_SIGNAL_0)
43ff13b4
JM
3813 {
3814 buf[0] = step ? 'S' : 'C';
c5aa993b 3815 buf[1] = tohex (((int) siggnal >> 4) & 0xf);
506fb367 3816 buf[2] = tohex (((int) siggnal) & 0xf);
43ff13b4
JM
3817 buf[3] = '\0';
3818 }
3819 else
c5aa993b 3820 strcpy (buf, step ? "s" : "c");
506fb367 3821
44eaed12 3822 putpkt (buf);
43ff13b4 3823
75c99385 3824 done:
2acceee2
JM
3825 /* We are about to start executing the inferior, let's register it
3826 with the event loop. NOTE: this is the one place where all the
3827 execution commands end up. We could alternatively do this in each
23860348 3828 of the execution commands in infcmd.c. */
2acceee2
JM
3829 /* FIXME: ezannoni 1999-09-28: We may need to move this out of here
3830 into infcmd.c in order to allow inferior function calls to work
23860348 3831 NOT asynchronously. */
362646f5 3832 if (target_can_async_p ())
2acceee2 3833 target_async (inferior_event_handler, 0);
e24a49d8
PA
3834
3835 /* We've just told the target to resume. The remote server will
3836 wait for the inferior to stop, and then send a stop reply. In
3837 the mean time, we can't start another command/query ourselves
74531fed
PA
3838 because the stub wouldn't be ready to process it. This applies
3839 only to the base all-stop protocol, however. In non-stop (which
3840 only supports vCont), the stub replies with an "OK", and is
3841 immediate able to process further serial input. */
3842 if (!non_stop)
3843 rs->waiting_for_stop_reply = 1;
43ff13b4 3844}
c906108c 3845\f
43ff13b4
JM
3846
3847/* Set up the signal handler for SIGINT, while the target is
23860348 3848 executing, ovewriting the 'regular' SIGINT signal handler. */
43ff13b4 3849static void
fba45db2 3850initialize_sigint_signal_handler (void)
43ff13b4 3851{
43ff13b4
JM
3852 signal (SIGINT, handle_remote_sigint);
3853}
3854
23860348 3855/* Signal handler for SIGINT, while the target is executing. */
43ff13b4 3856static void
fba45db2 3857handle_remote_sigint (int sig)
43ff13b4
JM
3858{
3859 signal (sig, handle_remote_sigint_twice);
43ff13b4
JM
3860 mark_async_signal_handler_wrapper (sigint_remote_token);
3861}
3862
3863/* Signal handler for SIGINT, installed after SIGINT has already been
3864 sent once. It will take effect the second time that the user sends
23860348 3865 a ^C. */
43ff13b4 3866static void
fba45db2 3867handle_remote_sigint_twice (int sig)
43ff13b4 3868{
b803fb0f 3869 signal (sig, handle_remote_sigint);
43ff13b4
JM
3870 mark_async_signal_handler_wrapper (sigint_remote_twice_token);
3871}
3872
6426a772 3873/* Perform the real interruption of the target execution, in response
23860348 3874 to a ^C. */
c5aa993b 3875static void
fba45db2 3876async_remote_interrupt (gdb_client_data arg)
43ff13b4
JM
3877{
3878 if (remote_debug)
3879 fprintf_unfiltered (gdb_stdlog, "remote_interrupt called\n");
3880
94cc34af 3881 target_stop (inferior_ptid);
43ff13b4
JM
3882}
3883
3884/* Perform interrupt, if the first attempt did not succeed. Just give
23860348 3885 up on the target alltogether. */
2df3850c 3886void
fba45db2 3887async_remote_interrupt_twice (gdb_client_data arg)
43ff13b4 3888{
2df3850c
JM
3889 if (remote_debug)
3890 fprintf_unfiltered (gdb_stdlog, "remote_interrupt_twice called\n");
b803fb0f
DJ
3891
3892 interrupt_query ();
43ff13b4
JM
3893}
3894
3895/* Reinstall the usual SIGINT handlers, after the target has
23860348 3896 stopped. */
6426a772
JM
3897static void
3898cleanup_sigint_signal_handler (void *dummy)
43ff13b4
JM
3899{
3900 signal (SIGINT, handle_sigint);
43ff13b4
JM
3901}
3902
c906108c
SS
3903/* Send ^C to target to halt it. Target will respond, and send us a
3904 packet. */
507f3c78 3905static void (*ofunc) (int);
c906108c 3906
7a292a7a
SS
3907/* The command line interface's stop routine. This function is installed
3908 as a signal handler for SIGINT. The first time a user requests a
3909 stop, we call remote_stop to send a break or ^C. If there is no
3910 response from the target (it didn't stop when the user requested it),
23860348 3911 we ask the user if he'd like to detach from the target. */
c906108c 3912static void
fba45db2 3913remote_interrupt (int signo)
c906108c 3914{
23860348 3915 /* If this doesn't work, try more severe steps. */
7a292a7a
SS
3916 signal (signo, remote_interrupt_twice);
3917
b803fb0f 3918 gdb_call_async_signal_handler (sigint_remote_token, 1);
7a292a7a
SS
3919}
3920
3921/* The user typed ^C twice. */
3922
3923static void
fba45db2 3924remote_interrupt_twice (int signo)
7a292a7a
SS
3925{
3926 signal (signo, ofunc);
b803fb0f 3927 gdb_call_async_signal_handler (sigint_remote_twice_token, 1);
c906108c
SS
3928 signal (signo, remote_interrupt);
3929}
7a292a7a 3930
74531fed
PA
3931/* Non-stop version of target_stop. Uses `vCont;t' to stop a remote
3932 thread, all threads of a remote process, or all threads of all
3933 processes. */
3934
3935static void
3936remote_stop_ns (ptid_t ptid)
3937{
3938 struct remote_state *rs = get_remote_state ();
3939 char *p = rs->buf;
3940 char *endp = rs->buf + get_remote_packet_size ();
3941 struct stop_reply *reply, *next;
3942
3943 if (remote_protocol_packets[PACKET_vCont].support == PACKET_SUPPORT_UNKNOWN)
3944 remote_vcont_probe (rs);
3945
3946 if (!rs->support_vCont_t)
3947 error (_("Remote server does not support stopping threads"));
3948
f91d3df5
PA
3949 if (ptid_equal (ptid, minus_one_ptid)
3950 || (!remote_multi_process_p (rs) && ptid_is_pid (ptid)))
74531fed
PA
3951 p += xsnprintf (p, endp - p, "vCont;t");
3952 else
3953 {
3954 ptid_t nptid;
3955
74531fed
PA
3956 p += xsnprintf (p, endp - p, "vCont;t:");
3957
3958 if (ptid_is_pid (ptid))
3959 /* All (-1) threads of process. */
3960 nptid = ptid_build (ptid_get_pid (ptid), 0, -1);
3961 else
3962 {
3963 /* Small optimization: if we already have a stop reply for
3964 this thread, no use in telling the stub we want this
3965 stopped. */
3966 if (peek_stop_reply (ptid))
3967 return;
3968
3969 nptid = ptid;
3970 }
3971
3972 p = write_ptid (p, endp, nptid);
3973 }
3974
3975 /* In non-stop, we get an immediate OK reply. The stop reply will
3976 come in asynchronously by notification. */
3977 putpkt (rs->buf);
3978 getpkt (&rs->buf, &rs->buf_size, 0);
3979 if (strcmp (rs->buf, "OK") != 0)
3980 error (_("Stopping %s failed: %s"), target_pid_to_str (ptid), rs->buf);
3981}
3982
3983/* All-stop version of target_stop. Sends a break or a ^C to stop the
3984 remote target. It is undefined which thread of which process
3985 reports the stop. */
3986
3987static void
3988remote_stop_as (ptid_t ptid)
3989{
3990 struct remote_state *rs = get_remote_state ();
3991
3992 /* If the inferior is stopped already, but the core didn't know
3993 about it yet, just ignore the request. The cached wait status
3994 will be collected in remote_wait. */
3995 if (rs->cached_wait_status)
3996 return;
3997
3998 /* Send a break or a ^C, depending on user preference. */
3999
4000 if (remote_break)
4001 serial_send_break (remote_desc);
4002 else
4003 serial_write (remote_desc, "\003", 1);
4004}
4005
7a292a7a
SS
4006/* This is the generic stop called via the target vector. When a target
4007 interrupt is requested, either by the command line or the GUI, we
23860348 4008 will eventually end up here. */
74531fed 4009
c906108c 4010static void
94cc34af 4011remote_stop (ptid_t ptid)
c906108c 4012{
7a292a7a 4013 if (remote_debug)
0f71a2f6 4014 fprintf_unfiltered (gdb_stdlog, "remote_stop called\n");
c906108c 4015
74531fed
PA
4016 if (non_stop)
4017 remote_stop_ns (ptid);
c906108c 4018 else
74531fed 4019 remote_stop_as (ptid);
c906108c
SS
4020}
4021
4022/* Ask the user what to do when an interrupt is received. */
4023
4024static void
fba45db2 4025interrupt_query (void)
c906108c
SS
4026{
4027 target_terminal_ours ();
4028
74531fed 4029 if (target_can_async_p ())
c906108c 4030 {
74531fed 4031 signal (SIGINT, handle_sigint);
315a522e 4032 deprecated_throw_reason (RETURN_QUIT);
c906108c 4033 }
74531fed
PA
4034 else
4035 {
9e2f0ad4
HZ
4036 if (query (_("Interrupted while waiting for the program.\n\
4037Give up (and stop debugging it)? ")))
74531fed
PA
4038 {
4039 pop_target ();
4040 deprecated_throw_reason (RETURN_QUIT);
4041 }
4042 }
c906108c
SS
4043
4044 target_terminal_inferior ();
4045}
4046
6426a772
JM
4047/* Enable/disable target terminal ownership. Most targets can use
4048 terminal groups to control terminal ownership. Remote targets are
4049 different in that explicit transfer of ownership to/from GDB/target
23860348 4050 is required. */
6426a772
JM
4051
4052static void
75c99385 4053remote_terminal_inferior (void)
6426a772 4054{
c6ebd6cf 4055 if (!target_async_permitted)
75c99385
PA
4056 /* Nothing to do. */
4057 return;
4058
d9d2d8b6
PA
4059 /* FIXME: cagney/1999-09-27: Make calls to target_terminal_*()
4060 idempotent. The event-loop GDB talking to an asynchronous target
4061 with a synchronous command calls this function from both
4062 event-top.c and infrun.c/infcmd.c. Once GDB stops trying to
4063 transfer the terminal to the target when it shouldn't this guard
4064 can go away. */
6426a772
JM
4065 if (!remote_async_terminal_ours_p)
4066 return;
4067 delete_file_handler (input_fd);
4068 remote_async_terminal_ours_p = 0;
4069 initialize_sigint_signal_handler ();
4070 /* NOTE: At this point we could also register our selves as the
4071 recipient of all input. Any characters typed could then be
23860348 4072 passed on down to the target. */
6426a772
JM
4073}
4074
4075static void
75c99385 4076remote_terminal_ours (void)
6426a772 4077{
c6ebd6cf 4078 if (!target_async_permitted)
75c99385
PA
4079 /* Nothing to do. */
4080 return;
4081
4082 /* See FIXME in remote_terminal_inferior. */
6426a772
JM
4083 if (remote_async_terminal_ours_p)
4084 return;
4085 cleanup_sigint_signal_handler (NULL);
4086 add_file_handler (input_fd, stdin_event_handler, 0);
4087 remote_async_terminal_ours_p = 1;
4088}
4089
c906108c 4090void
917317f4 4091remote_console_output (char *msg)
c906108c
SS
4092{
4093 char *p;
4094
c5aa993b 4095 for (p = msg; p[0] && p[1]; p += 2)
c906108c
SS
4096 {
4097 char tb[2];
4098 char c = fromhex (p[0]) * 16 + fromhex (p[1]);
4099 tb[0] = c;
4100 tb[1] = 0;
43ff13b4 4101 fputs_unfiltered (tb, gdb_stdtarg);
c906108c 4102 }
74531fed
PA
4103 gdb_flush (gdb_stdtarg);
4104 }
4105
4106typedef struct cached_reg
4107{
4108 int num;
4109 gdb_byte data[MAX_REGISTER_SIZE];
4110} cached_reg_t;
4111
4112DEF_VEC_O(cached_reg_t);
4113
4114struct stop_reply
4115{
4116 struct stop_reply *next;
4117
4118 ptid_t ptid;
4119
4120 struct target_waitstatus ws;
4121
4122 VEC(cached_reg_t) *regcache;
4123
4124 int stopped_by_watchpoint_p;
4125 CORE_ADDR watch_data_address;
4126
4127 int solibs_changed;
4128 int replay_event;
4129};
4130
4131/* The list of already fetched and acknowledged stop events. */
4132static struct stop_reply *stop_reply_queue;
4133
4134static struct stop_reply *
4135stop_reply_xmalloc (void)
4136{
4137 struct stop_reply *r = XMALLOC (struct stop_reply);
4138 r->next = NULL;
4139 return r;
4140}
4141
4142static void
4143stop_reply_xfree (struct stop_reply *r)
4144{
4145 if (r != NULL)
4146 {
4147 VEC_free (cached_reg_t, r->regcache);
4148 xfree (r);
4149 }
c906108c
SS
4150}
4151
74531fed
PA
4152/* Discard all pending stop replies of inferior PID. If PID is -1,
4153 discard everything. */
c906108c 4154
74531fed
PA
4155static void
4156discard_pending_stop_replies (int pid)
c906108c 4157{
74531fed 4158 struct stop_reply *prev = NULL, *reply, *next;
c906108c 4159
74531fed
PA
4160 /* Discard the in-flight notification. */
4161 if (pending_stop_reply != NULL
4162 && (pid == -1
4163 || ptid_get_pid (pending_stop_reply->ptid) == pid))
4164 {
4165 stop_reply_xfree (pending_stop_reply);
4166 pending_stop_reply = NULL;
4167 }
c906108c 4168
74531fed
PA
4169 /* Discard the stop replies we have already pulled with
4170 vStopped. */
4171 for (reply = stop_reply_queue; reply; reply = next)
43ff13b4 4172 {
74531fed
PA
4173 next = reply->next;
4174 if (pid == -1
4175 || ptid_get_pid (reply->ptid) == pid)
9fa2223d 4176 {
74531fed
PA
4177 if (reply == stop_reply_queue)
4178 stop_reply_queue = reply->next;
4179 else
4180 prev->next = reply->next;
4181
4182 stop_reply_xfree (reply);
9fa2223d 4183 }
74531fed
PA
4184 else
4185 prev = reply;
c8e38a49 4186 }
74531fed 4187}
43ff13b4 4188
74531fed 4189/* Cleanup wrapper. */
2e9f7625 4190
74531fed
PA
4191static void
4192do_stop_reply_xfree (void *arg)
4193{
4194 struct stop_reply *r = arg;
4195 stop_reply_xfree (r);
4196}
75c99385 4197
74531fed
PA
4198/* Look for a queued stop reply belonging to PTID. If one is found,
4199 remove it from the queue, and return it. Returns NULL if none is
4200 found. If there are still queued events left to process, tell the
4201 event loop to get back to target_wait soon. */
e24a49d8 4202
74531fed
PA
4203static struct stop_reply *
4204queued_stop_reply (ptid_t ptid)
4205{
4206 struct stop_reply *it, *prev;
4207 struct stop_reply head;
4208
4209 head.next = stop_reply_queue;
4210 prev = &head;
4211
4212 it = head.next;
4213
4214 if (!ptid_equal (ptid, minus_one_ptid))
4215 for (; it; prev = it, it = it->next)
4216 if (ptid_equal (ptid, it->ptid))
4217 break;
4218
4219 if (it)
c8e38a49 4220 {
74531fed
PA
4221 prev->next = it->next;
4222 it->next = NULL;
4223 }
e24a49d8 4224
74531fed
PA
4225 stop_reply_queue = head.next;
4226
4227 if (stop_reply_queue)
4228 /* There's still at least an event left. */
4229 mark_async_event_handler (remote_async_inferior_event_token);
4230
4231 return it;
4232}
4233
4234/* Push a fully parsed stop reply in the stop reply queue. Since we
4235 know that we now have at least one queued event left to pass to the
4236 core side, tell the event loop to get back to target_wait soon. */
4237
4238static void
4239push_stop_reply (struct stop_reply *new_event)
4240{
4241 struct stop_reply *event;
4242
4243 if (stop_reply_queue)
4244 {
4245 for (event = stop_reply_queue;
4246 event && event->next;
4247 event = event->next)
4248 ;
4249
4250 event->next = new_event;
4251 }
4252 else
4253 stop_reply_queue = new_event;
4254
4255 mark_async_event_handler (remote_async_inferior_event_token);
4256}
4257
4258/* Returns true if we have a stop reply for PTID. */
4259
4260static int
4261peek_stop_reply (ptid_t ptid)
4262{
4263 struct stop_reply *it;
4264
4265 for (it = stop_reply_queue; it; it = it->next)
4266 if (ptid_equal (ptid, it->ptid))
4267 {
4268 if (it->ws.kind == TARGET_WAITKIND_STOPPED)
4269 return 1;
4270 }
4271
4272 return 0;
4273}
4274
4275/* Parse the stop reply in BUF. Either the function succeeds, and the
4276 result is stored in EVENT, or throws an error. */
4277
4278static void
4279remote_parse_stop_reply (char *buf, struct stop_reply *event)
4280{
4281 struct remote_arch_state *rsa = get_remote_arch_state ();
4282 ULONGEST addr;
4283 char *p;
4284
4285 event->ptid = null_ptid;
4286 event->ws.kind = TARGET_WAITKIND_IGNORE;
4287 event->ws.value.integer = 0;
4288 event->solibs_changed = 0;
4289 event->replay_event = 0;
4290 event->stopped_by_watchpoint_p = 0;
4291 event->regcache = NULL;
4292
4293 switch (buf[0])
4294 {
4295 case 'T': /* Status with PC, SP, FP, ... */
c8e38a49
PA
4296 {
4297 gdb_byte regs[MAX_REGISTER_SIZE];
43ff13b4 4298
c8e38a49
PA
4299 /* Expedited reply, containing Signal, {regno, reg} repeat. */
4300 /* format is: 'Tssn...:r...;n...:r...;n...:r...;#cc', where
74531fed
PA
4301 ss = signal number
4302 n... = register number
4303 r... = register contents
c8e38a49 4304 */
43ff13b4 4305
74531fed 4306 p = &buf[3]; /* after Txx */
c8e38a49
PA
4307 while (*p)
4308 {
4309 char *p1;
4310 char *p_temp;
4311 int fieldsize;
4312 LONGEST pnum = 0;
43ff13b4 4313
c8e38a49
PA
4314 /* If the packet contains a register number, save it in
4315 pnum and set p1 to point to the character following it.
4316 Otherwise p1 points to p. */
3c3bea1c 4317
74531fed
PA
4318 /* If this packet is an awatch packet, don't parse the 'a'
4319 as a register number. */
c8e38a49
PA
4320
4321 if (strncmp (p, "awatch", strlen("awatch")) != 0)
4322 {
4323 /* Read the ``P'' register number. */
4324 pnum = strtol (p, &p_temp, 16);
4325 p1 = p_temp;
4326 }
4327 else
4328 p1 = p;
802188a7 4329
c8e38a49
PA
4330 if (p1 == p) /* No register number present here. */
4331 {
4332 p1 = strchr (p, ':');
4333 if (p1 == NULL)
4334 error (_("Malformed packet(a) (missing colon): %s\n\
4335Packet: '%s'\n"),
4336 p, buf);
4337 if (strncmp (p, "thread", p1 - p) == 0)
74531fed 4338 event->ptid = read_ptid (++p1, &p);
c8e38a49
PA
4339 else if ((strncmp (p, "watch", p1 - p) == 0)
4340 || (strncmp (p, "rwatch", p1 - p) == 0)
4341 || (strncmp (p, "awatch", p1 - p) == 0))
3c3bea1c 4342 {
74531fed 4343 event->stopped_by_watchpoint_p = 1;
c8e38a49 4344 p = unpack_varlen_hex (++p1, &addr);
74531fed 4345 event->watch_data_address = (CORE_ADDR) addr;
3c3bea1c 4346 }
c8e38a49 4347 else if (strncmp (p, "library", p1 - p) == 0)
43ff13b4 4348 {
c8e38a49
PA
4349 p1++;
4350 p_temp = p1;
4351 while (*p_temp && *p_temp != ';')
4352 p_temp++;
4353
74531fed 4354 event->solibs_changed = 1;
c8e38a49 4355 p = p_temp;
43ff13b4 4356 }
b2175913
MS
4357 else if (strncmp (p, "replaylog", p1 - p) == 0)
4358 {
4359 /* NO_HISTORY event.
4360 p1 will indicate "begin" or "end", but
4361 it makes no difference for now, so ignore it. */
74531fed 4362 event->replay_event = 1;
b2175913
MS
4363 p_temp = strchr (p1 + 1, ';');
4364 if (p_temp)
4365 p = p_temp;
4366 }
43ff13b4
JM
4367 else
4368 {
c8e38a49
PA
4369 /* Silently skip unknown optional info. */
4370 p_temp = strchr (p1 + 1, ';');
4371 if (p_temp)
4372 p = p_temp;
4373 }
4374 }
4375 else
4376 {
4377 struct packet_reg *reg = packet_reg_from_pnum (rsa, pnum);
74531fed
PA
4378 cached_reg_t cached_reg;
4379
c8e38a49 4380 p = p1;
75c99385 4381
c8e38a49
PA
4382 if (*p != ':')
4383 error (_("Malformed packet(b) (missing colon): %s\n\
8a3fe4f8 4384Packet: '%s'\n"),
c8e38a49
PA
4385 p, buf);
4386 ++p;
43ff13b4 4387
c8e38a49
PA
4388 if (reg == NULL)
4389 error (_("Remote sent bad register number %s: %s\n\
8a3fe4f8 4390Packet: '%s'\n"),
c8e38a49
PA
4391 phex_nz (pnum, 0), p, buf);
4392
4100683b
JK
4393 cached_reg.num = reg->regnum;
4394
74531fed 4395 fieldsize = hex2bin (p, cached_reg.data,
c8e38a49
PA
4396 register_size (target_gdbarch,
4397 reg->regnum));
4398 p += 2 * fieldsize;
4399 if (fieldsize < register_size (target_gdbarch,
4400 reg->regnum))
4401 warning (_("Remote reply is too short: %s"), buf);
74531fed
PA
4402
4403 VEC_safe_push (cached_reg_t, event->regcache, &cached_reg);
43ff13b4 4404 }
c8e38a49
PA
4405
4406 if (*p != ';')
4407 error (_("Remote register badly formatted: %s\nhere: %s"),
4408 buf, p);
4409 ++p;
43ff13b4 4410 }
c8e38a49
PA
4411 }
4412 /* fall through */
4413 case 'S': /* Old style status, just signal only. */
74531fed
PA
4414 if (event->solibs_changed)
4415 event->ws.kind = TARGET_WAITKIND_LOADED;
4416 else if (event->replay_event)
4417 event->ws.kind = TARGET_WAITKIND_NO_HISTORY;
c8e38a49
PA
4418 else
4419 {
74531fed
PA
4420 event->ws.kind = TARGET_WAITKIND_STOPPED;
4421 event->ws.value.sig = (enum target_signal)
c8e38a49
PA
4422 (((fromhex (buf[1])) << 4) + (fromhex (buf[2])));
4423 }
4424 break;
4425 case 'W': /* Target exited. */
4426 case 'X':
4427 {
4428 char *p;
4429 int pid;
4430 ULONGEST value;
82f73884 4431
c8e38a49
PA
4432 /* GDB used to accept only 2 hex chars here. Stubs should
4433 only send more if they detect GDB supports multi-process
4434 support. */
4435 p = unpack_varlen_hex (&buf[1], &value);
82f73884 4436
c8e38a49
PA
4437 if (buf[0] == 'W')
4438 {
4439 /* The remote process exited. */
74531fed
PA
4440 event->ws.kind = TARGET_WAITKIND_EXITED;
4441 event->ws.value.integer = value;
c8e38a49
PA
4442 }
4443 else
4444 {
4445 /* The remote process exited with a signal. */
74531fed
PA
4446 event->ws.kind = TARGET_WAITKIND_SIGNALLED;
4447 event->ws.value.sig = (enum target_signal) value;
c8e38a49 4448 }
82f73884 4449
c8e38a49
PA
4450 /* If no process is specified, assume inferior_ptid. */
4451 pid = ptid_get_pid (inferior_ptid);
4452 if (*p == '\0')
4453 ;
4454 else if (*p == ';')
4455 {
4456 p++;
4457
4458 if (p == '\0')
82f73884 4459 ;
c8e38a49
PA
4460 else if (strncmp (p,
4461 "process:", sizeof ("process:") - 1) == 0)
82f73884 4462 {
c8e38a49
PA
4463 ULONGEST upid;
4464 p += sizeof ("process:") - 1;
4465 unpack_varlen_hex (p, &upid);
4466 pid = upid;
82f73884
PA
4467 }
4468 else
4469 error (_("unknown stop reply packet: %s"), buf);
43ff13b4 4470 }
c8e38a49
PA
4471 else
4472 error (_("unknown stop reply packet: %s"), buf);
74531fed
PA
4473 event->ptid = pid_to_ptid (pid);
4474 }
4475 break;
4476 }
4477
4478 if (non_stop && ptid_equal (event->ptid, null_ptid))
4479 error (_("No process or thread specified in stop reply: %s"), buf);
4480}
4481
4482/* When the stub wants to tell GDB about a new stop reply, it sends a
4483 stop notification (%Stop). Those can come it at any time, hence,
4484 we have to make sure that any pending putpkt/getpkt sequence we're
4485 making is finished, before querying the stub for more events with
4486 vStopped. E.g., if we started a vStopped sequence immediatelly
4487 upon receiving the %Stop notification, something like this could
4488 happen:
4489
4490 1.1) --> Hg 1
4491 1.2) <-- OK
4492 1.3) --> g
4493 1.4) <-- %Stop
4494 1.5) --> vStopped
4495 1.6) <-- (registers reply to step #1.3)
4496
4497 Obviously, the reply in step #1.6 would be unexpected to a vStopped
4498 query.
4499
4500 To solve this, whenever we parse a %Stop notification sucessfully,
4501 we mark the REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN, and carry on
4502 doing whatever we were doing:
4503
4504 2.1) --> Hg 1
4505 2.2) <-- OK
4506 2.3) --> g
4507 2.4) <-- %Stop
4508 <GDB marks the REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN>
4509 2.5) <-- (registers reply to step #2.3)
4510
4511 Eventualy after step #2.5, we return to the event loop, which
4512 notices there's an event on the
4513 REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN event and calls the
4514 associated callback --- the function below. At this point, we're
4515 always safe to start a vStopped sequence. :
4516
4517 2.6) --> vStopped
4518 2.7) <-- T05 thread:2
4519 2.8) --> vStopped
4520 2.9) --> OK
4521*/
4522
4523static void
4524remote_get_pending_stop_replies (void)
4525{
4526 struct remote_state *rs = get_remote_state ();
4527 int ret;
4528
4529 if (pending_stop_reply)
4530 {
4531 /* acknowledge */
4532 putpkt ("vStopped");
4533
4534 /* Now we can rely on it. */
4535 push_stop_reply (pending_stop_reply);
4536 pending_stop_reply = NULL;
4537
4538 while (1)
4539 {
4540 getpkt (&rs->buf, &rs->buf_size, 0);
4541 if (strcmp (rs->buf, "OK") == 0)
4542 break;
4543 else
4544 {
4545 struct cleanup *old_chain;
4546 struct stop_reply *stop_reply = stop_reply_xmalloc ();
4547
4548 old_chain = make_cleanup (do_stop_reply_xfree, stop_reply);
4549 remote_parse_stop_reply (rs->buf, stop_reply);
4550
4551 /* acknowledge */
4552 putpkt ("vStopped");
4553
4554 if (stop_reply->ws.kind != TARGET_WAITKIND_IGNORE)
4555 {
4556 /* Now we can rely on it. */
4557 discard_cleanups (old_chain);
4558 push_stop_reply (stop_reply);
4559 }
4560 else
4561 /* We got an unknown stop reply. */
4562 do_cleanups (old_chain);
4563 }
4564 }
4565 }
4566}
4567
4568
4569/* Called when it is decided that STOP_REPLY holds the info of the
4570 event that is to be returned to the core. This function always
4571 destroys STOP_REPLY. */
4572
4573static ptid_t
4574process_stop_reply (struct stop_reply *stop_reply,
4575 struct target_waitstatus *status)
4576{
4577 ptid_t ptid;
4578
4579 *status = stop_reply->ws;
4580 ptid = stop_reply->ptid;
4581
4582 /* If no thread/process was reported by the stub, assume the current
4583 inferior. */
4584 if (ptid_equal (ptid, null_ptid))
4585 ptid = inferior_ptid;
4586
5f3563ea
PA
4587 if (status->kind != TARGET_WAITKIND_EXITED
4588 && status->kind != TARGET_WAITKIND_SIGNALLED)
74531fed 4589 {
5f3563ea
PA
4590 /* Expedited registers. */
4591 if (stop_reply->regcache)
4592 {
4593 cached_reg_t *reg;
4594 int ix;
4595
4596 for (ix = 0;
4597 VEC_iterate(cached_reg_t, stop_reply->regcache, ix, reg);
4598 ix++)
4599 regcache_raw_supply (get_thread_regcache (ptid),
4600 reg->num, reg->data);
4601 VEC_free (cached_reg_t, stop_reply->regcache);
4602 }
74531fed 4603
5f3563ea
PA
4604 remote_stopped_by_watchpoint_p = stop_reply->stopped_by_watchpoint_p;
4605 remote_watch_data_address = stop_reply->watch_data_address;
1941c569
PA
4606
4607 remote_notice_new_inferior (ptid, 0);
74531fed
PA
4608 }
4609
74531fed
PA
4610 stop_reply_xfree (stop_reply);
4611 return ptid;
4612}
4613
4614/* The non-stop mode version of target_wait. */
4615
4616static ptid_t
47608cb1 4617remote_wait_ns (ptid_t ptid, struct target_waitstatus *status, int options)
74531fed
PA
4618{
4619 struct remote_state *rs = get_remote_state ();
4620 struct remote_arch_state *rsa = get_remote_arch_state ();
4621 ptid_t event_ptid = null_ptid;
4622 struct stop_reply *stop_reply;
4623 int ret;
4624
4625 /* If in non-stop mode, get out of getpkt even if a
4626 notification is received. */
4627
4628 ret = getpkt_or_notif_sane (&rs->buf, &rs->buf_size,
4629 0 /* forever */);
4630 while (1)
4631 {
4632 if (ret != -1)
4633 switch (rs->buf[0])
4634 {
4635 case 'E': /* Error of some sort. */
4636 /* We're out of sync with the target now. Did it continue
4637 or not? We can't tell which thread it was in non-stop,
4638 so just ignore this. */
4639 warning (_("Remote failure reply: %s"), rs->buf);
4640 break;
4641 case 'O': /* Console output. */
4642 remote_console_output (rs->buf + 1);
4643 break;
4644 default:
4645 warning (_("Invalid remote reply: %s"), rs->buf);
4646 break;
4647 }
4648
4649 /* Acknowledge a pending stop reply that may have arrived in the
4650 mean time. */
4651 if (pending_stop_reply != NULL)
4652 remote_get_pending_stop_replies ();
4653
4654 /* If indeed we noticed a stop reply, we're done. */
4655 stop_reply = queued_stop_reply (ptid);
4656 if (stop_reply != NULL)
4657 return process_stop_reply (stop_reply, status);
4658
47608cb1 4659 /* Still no event. If we're just polling for an event, then
74531fed 4660 return to the event loop. */
47608cb1 4661 if (options & TARGET_WNOHANG)
74531fed
PA
4662 {
4663 status->kind = TARGET_WAITKIND_IGNORE;
4664 return minus_one_ptid;
4665 }
4666
47608cb1 4667 /* Otherwise do a blocking wait. */
74531fed
PA
4668 ret = getpkt_or_notif_sane (&rs->buf, &rs->buf_size,
4669 1 /* forever */);
4670 }
4671}
4672
4673/* Wait until the remote machine stops, then return, storing status in
4674 STATUS just as `wait' would. */
4675
4676static ptid_t
47608cb1 4677remote_wait_as (ptid_t ptid, struct target_waitstatus *status, int options)
74531fed
PA
4678{
4679 struct remote_state *rs = get_remote_state ();
4680 struct remote_arch_state *rsa = get_remote_arch_state ();
4681 ptid_t event_ptid = null_ptid;
4682 ULONGEST addr;
4683 int solibs_changed = 0;
4684 char *buf, *p;
4685 struct stop_reply *stop_reply;
4686
47608cb1
PA
4687 again:
4688
74531fed
PA
4689 status->kind = TARGET_WAITKIND_IGNORE;
4690 status->value.integer = 0;
4691
4692 stop_reply = queued_stop_reply (ptid);
4693 if (stop_reply != NULL)
4694 return process_stop_reply (stop_reply, status);
4695
4696 if (rs->cached_wait_status)
4697 /* Use the cached wait status, but only once. */
4698 rs->cached_wait_status = 0;
4699 else
4700 {
4701 int ret;
4702
4703 if (!target_is_async_p ())
4704 {
4705 ofunc = signal (SIGINT, remote_interrupt);
4706 /* If the user hit C-c before this packet, or between packets,
4707 pretend that it was hit right here. */
4708 if (quit_flag)
4709 {
4710 quit_flag = 0;
4711 remote_interrupt (SIGINT);
4712 }
4713 }
4714
4715 /* FIXME: cagney/1999-09-27: If we're in async mode we should
4716 _never_ wait for ever -> test on target_is_async_p().
4717 However, before we do that we need to ensure that the caller
4718 knows how to take the target into/out of async mode. */
4719 ret = getpkt_sane (&rs->buf, &rs->buf_size, wait_forever_enabled_p);
4720 if (!target_is_async_p ())
4721 signal (SIGINT, ofunc);
4722 }
4723
4724 buf = rs->buf;
4725
4726 remote_stopped_by_watchpoint_p = 0;
4727
4728 /* We got something. */
4729 rs->waiting_for_stop_reply = 0;
4730
4731 switch (buf[0])
4732 {
4733 case 'E': /* Error of some sort. */
4734 /* We're out of sync with the target now. Did it continue or
4735 not? Not is more likely, so report a stop. */
4736 warning (_("Remote failure reply: %s"), buf);
4737 status->kind = TARGET_WAITKIND_STOPPED;
4738 status->value.sig = TARGET_SIGNAL_0;
4739 break;
4740 case 'F': /* File-I/O request. */
4741 remote_fileio_request (buf);
4742 break;
4743 case 'T': case 'S': case 'X': case 'W':
4744 {
4745 struct stop_reply *stop_reply;
4746 struct cleanup *old_chain;
4747
4748 stop_reply = stop_reply_xmalloc ();
4749 old_chain = make_cleanup (do_stop_reply_xfree, stop_reply);
4750 remote_parse_stop_reply (buf, stop_reply);
4751 discard_cleanups (old_chain);
4752 event_ptid = process_stop_reply (stop_reply, status);
c8e38a49
PA
4753 break;
4754 }
4755 case 'O': /* Console output. */
4756 remote_console_output (buf + 1);
e24a49d8 4757
c8e38a49
PA
4758 /* The target didn't really stop; keep waiting. */
4759 rs->waiting_for_stop_reply = 1;
e24a49d8 4760
c8e38a49
PA
4761 break;
4762 case '\0':
4763 if (last_sent_signal != TARGET_SIGNAL_0)
4764 {
4765 /* Zero length reply means that we tried 'S' or 'C' and the
4766 remote system doesn't support it. */
4767 target_terminal_ours_for_output ();
4768 printf_filtered
4769 ("Can't send signals to this remote system. %s not sent.\n",
4770 target_signal_to_name (last_sent_signal));
4771 last_sent_signal = TARGET_SIGNAL_0;
4772 target_terminal_inferior ();
4773
4774 strcpy ((char *) buf, last_sent_step ? "s" : "c");
4775 putpkt ((char *) buf);
4776
4777 /* We just told the target to resume, so a stop reply is in
4778 order. */
e24a49d8 4779 rs->waiting_for_stop_reply = 1;
c8e38a49 4780 break;
43ff13b4 4781 }
c8e38a49
PA
4782 /* else fallthrough */
4783 default:
4784 warning (_("Invalid remote reply: %s"), buf);
4785 /* Keep waiting. */
4786 rs->waiting_for_stop_reply = 1;
4787 break;
43ff13b4 4788 }
c8e38a49 4789
c8e38a49 4790 if (status->kind == TARGET_WAITKIND_IGNORE)
47608cb1
PA
4791 {
4792 /* Nothing interesting happened. If we're doing a non-blocking
4793 poll, we're done. Otherwise, go back to waiting. */
4794 if (options & TARGET_WNOHANG)
4795 return minus_one_ptid;
4796 else
4797 goto again;
4798 }
74531fed
PA
4799 else if (status->kind != TARGET_WAITKIND_EXITED
4800 && status->kind != TARGET_WAITKIND_SIGNALLED)
82f73884
PA
4801 {
4802 if (!ptid_equal (event_ptid, null_ptid))
4803 record_currthread (event_ptid);
4804 else
4805 event_ptid = inferior_ptid;
43ff13b4 4806 }
74531fed
PA
4807 else
4808 /* A process exit. Invalidate our notion of current thread. */
4809 record_currthread (minus_one_ptid);
79d7f229 4810
82f73884 4811 return event_ptid;
43ff13b4
JM
4812}
4813
74531fed
PA
4814/* Wait until the remote machine stops, then return, storing status in
4815 STATUS just as `wait' would. */
4816
c8e38a49 4817static ptid_t
117de6a9 4818remote_wait (struct target_ops *ops,
47608cb1 4819 ptid_t ptid, struct target_waitstatus *status, int options)
c8e38a49
PA
4820{
4821 ptid_t event_ptid;
4822
74531fed 4823 if (non_stop)
47608cb1 4824 event_ptid = remote_wait_ns (ptid, status, options);
74531fed 4825 else
47608cb1 4826 event_ptid = remote_wait_as (ptid, status, options);
c8e38a49 4827
74531fed 4828 if (target_can_async_p ())
c8e38a49 4829 {
74531fed
PA
4830 /* If there are are events left in the queue tell the event loop
4831 to return here. */
4832 if (stop_reply_queue)
4833 mark_async_event_handler (remote_async_inferior_event_token);
c8e38a49 4834 }
c8e38a49
PA
4835
4836 return event_ptid;
4837}
4838
74ca34ce 4839/* Fetch a single register using a 'p' packet. */
c906108c 4840
b96ec7ac 4841static int
56be3814 4842fetch_register_using_p (struct regcache *regcache, struct packet_reg *reg)
b96ec7ac
AC
4843{
4844 struct remote_state *rs = get_remote_state ();
2e9f7625 4845 char *buf, *p;
b96ec7ac
AC
4846 char regp[MAX_REGISTER_SIZE];
4847 int i;
4848
74ca34ce
DJ
4849 if (remote_protocol_packets[PACKET_p].support == PACKET_DISABLE)
4850 return 0;
4851
4852 if (reg->pnum == -1)
4853 return 0;
4854
2e9f7625 4855 p = rs->buf;
fcad0fa4 4856 *p++ = 'p';
74ca34ce 4857 p += hexnumstr (p, reg->pnum);
fcad0fa4 4858 *p++ = '\0';
6d820c5c 4859 remote_send (&rs->buf, &rs->buf_size);
3f9a994c 4860
2e9f7625
DJ
4861 buf = rs->buf;
4862
74ca34ce
DJ
4863 switch (packet_ok (buf, &remote_protocol_packets[PACKET_p]))
4864 {
4865 case PACKET_OK:
4866 break;
4867 case PACKET_UNKNOWN:
4868 return 0;
4869 case PACKET_ERROR:
4870 error (_("Could not fetch register \"%s\""),
4a22f64d 4871 gdbarch_register_name (get_regcache_arch (regcache), reg->regnum));
74ca34ce 4872 }
3f9a994c
JB
4873
4874 /* If this register is unfetchable, tell the regcache. */
4875 if (buf[0] == 'x')
8480adf2 4876 {
56be3814 4877 regcache_raw_supply (regcache, reg->regnum, NULL);
8480adf2 4878 return 1;
b96ec7ac 4879 }
b96ec7ac 4880
3f9a994c
JB
4881 /* Otherwise, parse and supply the value. */
4882 p = buf;
4883 i = 0;
4884 while (p[0] != 0)
4885 {
4886 if (p[1] == 0)
74ca34ce 4887 error (_("fetch_register_using_p: early buf termination"));
3f9a994c
JB
4888
4889 regp[i++] = fromhex (p[0]) * 16 + fromhex (p[1]);
4890 p += 2;
4891 }
56be3814 4892 regcache_raw_supply (regcache, reg->regnum, regp);
3f9a994c 4893 return 1;
b96ec7ac
AC
4894}
4895
74ca34ce
DJ
4896/* Fetch the registers included in the target's 'g' packet. */
4897
29709017
DJ
4898static int
4899send_g_packet (void)
c906108c 4900{
d01949b6 4901 struct remote_state *rs = get_remote_state ();
74ca34ce 4902 int i, buf_len;
c906108c 4903 char *p;
74ca34ce 4904 char *regs;
c906108c 4905
74ca34ce
DJ
4906 sprintf (rs->buf, "g");
4907 remote_send (&rs->buf, &rs->buf_size);
c906108c 4908
29709017
DJ
4909 /* We can get out of synch in various cases. If the first character
4910 in the buffer is not a hex character, assume that has happened
4911 and try to fetch another packet to read. */
4912 while ((rs->buf[0] < '0' || rs->buf[0] > '9')
4913 && (rs->buf[0] < 'A' || rs->buf[0] > 'F')
4914 && (rs->buf[0] < 'a' || rs->buf[0] > 'f')
4915 && rs->buf[0] != 'x') /* New: unavailable register value. */
4916 {
4917 if (remote_debug)
4918 fprintf_unfiltered (gdb_stdlog,
4919 "Bad register packet; fetching a new packet\n");
4920 getpkt (&rs->buf, &rs->buf_size, 0);
4921 }
4922
74ca34ce
DJ
4923 buf_len = strlen (rs->buf);
4924
4925 /* Sanity check the received packet. */
4926 if (buf_len % 2 != 0)
4927 error (_("Remote 'g' packet reply is of odd length: %s"), rs->buf);
29709017
DJ
4928
4929 return buf_len / 2;
4930}
4931
4932static void
56be3814 4933process_g_packet (struct regcache *regcache)
29709017 4934{
4a22f64d 4935 struct gdbarch *gdbarch = get_regcache_arch (regcache);
29709017
DJ
4936 struct remote_state *rs = get_remote_state ();
4937 struct remote_arch_state *rsa = get_remote_arch_state ();
4938 int i, buf_len;
4939 char *p;
4940 char *regs;
4941
4942 buf_len = strlen (rs->buf);
4943
4944 /* Further sanity checks, with knowledge of the architecture. */
74ca34ce
DJ
4945 if (buf_len > 2 * rsa->sizeof_g_packet)
4946 error (_("Remote 'g' packet reply is too long: %s"), rs->buf);
4947
4948 /* Save the size of the packet sent to us by the target. It is used
4949 as a heuristic when determining the max size of packets that the
4950 target can safely receive. */
4951 if (rsa->actual_register_packet_size == 0)
4952 rsa->actual_register_packet_size = buf_len;
4953
4954 /* If this is smaller than we guessed the 'g' packet would be,
4955 update our records. A 'g' reply that doesn't include a register's
4956 value implies either that the register is not available, or that
4957 the 'p' packet must be used. */
4958 if (buf_len < 2 * rsa->sizeof_g_packet)
b323314b 4959 {
74ca34ce
DJ
4960 rsa->sizeof_g_packet = buf_len / 2;
4961
4a22f64d 4962 for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
b96ec7ac 4963 {
74ca34ce
DJ
4964 if (rsa->regs[i].pnum == -1)
4965 continue;
4966
4967 if (rsa->regs[i].offset >= rsa->sizeof_g_packet)
4968 rsa->regs[i].in_g_packet = 0;
b96ec7ac 4969 else
74ca34ce 4970 rsa->regs[i].in_g_packet = 1;
b96ec7ac 4971 }
74ca34ce 4972 }
b323314b 4973
74ca34ce 4974 regs = alloca (rsa->sizeof_g_packet);
c906108c
SS
4975
4976 /* Unimplemented registers read as all bits zero. */
ea9c271d 4977 memset (regs, 0, rsa->sizeof_g_packet);
c906108c 4978
c906108c
SS
4979 /* Reply describes registers byte by byte, each byte encoded as two
4980 hex characters. Suck them all up, then supply them to the
4981 register cacheing/storage mechanism. */
4982
74ca34ce 4983 p = rs->buf;
ea9c271d 4984 for (i = 0; i < rsa->sizeof_g_packet; i++)
c906108c 4985 {
74ca34ce
DJ
4986 if (p[0] == 0 || p[1] == 0)
4987 /* This shouldn't happen - we adjusted sizeof_g_packet above. */
4988 internal_error (__FILE__, __LINE__,
4989 "unexpected end of 'g' packet reply");
4990
c906108c 4991 if (p[0] == 'x' && p[1] == 'x')
c5aa993b 4992 regs[i] = 0; /* 'x' */
c906108c
SS
4993 else
4994 regs[i] = fromhex (p[0]) * 16 + fromhex (p[1]);
4995 p += 2;
4996 }
4997
ad10f812 4998 {
b323314b 4999 int i;
4a22f64d 5000 for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
ad10f812 5001 {
ea9c271d 5002 struct packet_reg *r = &rsa->regs[i];
b323314b
AC
5003 if (r->in_g_packet)
5004 {
74ca34ce
DJ
5005 if (r->offset * 2 >= strlen (rs->buf))
5006 /* This shouldn't happen - we adjusted in_g_packet above. */
5007 internal_error (__FILE__, __LINE__,
5008 "unexpected end of 'g' packet reply");
5009 else if (rs->buf[r->offset * 2] == 'x')
8ccc1287 5010 {
74ca34ce 5011 gdb_assert (r->offset * 2 < strlen (rs->buf));
8ccc1287
AC
5012 /* The register isn't available, mark it as such (at
5013 the same time setting the value to zero). */
56be3814 5014 regcache_raw_supply (regcache, r->regnum, NULL);
8ccc1287
AC
5015 }
5016 else
56be3814 5017 regcache_raw_supply (regcache, r->regnum,
8ccc1287 5018 regs + r->offset);
b323314b 5019 }
ad10f812
AC
5020 }
5021 }
c906108c
SS
5022}
5023
29709017 5024static void
56be3814 5025fetch_registers_using_g (struct regcache *regcache)
29709017
DJ
5026{
5027 send_g_packet ();
56be3814 5028 process_g_packet (regcache);
29709017
DJ
5029}
5030
74ca34ce 5031static void
28439f5e
PA
5032remote_fetch_registers (struct target_ops *ops,
5033 struct regcache *regcache, int regnum)
74ca34ce
DJ
5034{
5035 struct remote_state *rs = get_remote_state ();
5036 struct remote_arch_state *rsa = get_remote_arch_state ();
5037 int i;
5038
79d7f229 5039 set_general_thread (inferior_ptid);
74ca34ce
DJ
5040
5041 if (regnum >= 0)
5042 {
5043 struct packet_reg *reg = packet_reg_from_regnum (rsa, regnum);
5044 gdb_assert (reg != NULL);
5045
5046 /* If this register might be in the 'g' packet, try that first -
5047 we are likely to read more than one register. If this is the
5048 first 'g' packet, we might be overly optimistic about its
5049 contents, so fall back to 'p'. */
5050 if (reg->in_g_packet)
5051 {
56be3814 5052 fetch_registers_using_g (regcache);
74ca34ce
DJ
5053 if (reg->in_g_packet)
5054 return;
5055 }
5056
56be3814 5057 if (fetch_register_using_p (regcache, reg))
74ca34ce
DJ
5058 return;
5059
5060 /* This register is not available. */
56be3814 5061 regcache_raw_supply (regcache, reg->regnum, NULL);
74ca34ce
DJ
5062
5063 return;
5064 }
5065
56be3814 5066 fetch_registers_using_g (regcache);
74ca34ce 5067
4a22f64d 5068 for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++)
74ca34ce 5069 if (!rsa->regs[i].in_g_packet)
56be3814 5070 if (!fetch_register_using_p (regcache, &rsa->regs[i]))
74ca34ce
DJ
5071 {
5072 /* This register is not available. */
56be3814 5073 regcache_raw_supply (regcache, i, NULL);
74ca34ce
DJ
5074 }
5075}
5076
c906108c
SS
5077/* Prepare to store registers. Since we may send them all (using a
5078 'G' request), we have to read out the ones we don't want to change
5079 first. */
5080
c5aa993b 5081static void
316f2060 5082remote_prepare_to_store (struct regcache *regcache)
c906108c 5083{
ea9c271d 5084 struct remote_arch_state *rsa = get_remote_arch_state ();
cf0e1e0d 5085 int i;
cfd77fa1 5086 gdb_byte buf[MAX_REGISTER_SIZE];
cf0e1e0d 5087
c906108c 5088 /* Make sure the entire registers array is valid. */
444abaca 5089 switch (remote_protocol_packets[PACKET_P].support)
5a2468f5
JM
5090 {
5091 case PACKET_DISABLE:
5092 case PACKET_SUPPORT_UNKNOWN:
cf0e1e0d 5093 /* Make sure all the necessary registers are cached. */
4a22f64d 5094 for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++)
ea9c271d 5095 if (rsa->regs[i].in_g_packet)
316f2060 5096 regcache_raw_read (regcache, rsa->regs[i].regnum, buf);
5a2468f5
JM
5097 break;
5098 case PACKET_ENABLE:
5099 break;
5100 }
5101}
5102
ad10f812 5103/* Helper: Attempt to store REGNUM using the P packet. Return fail IFF
23860348 5104 packet was not recognized. */
5a2468f5
JM
5105
5106static int
56be3814 5107store_register_using_P (const struct regcache *regcache, struct packet_reg *reg)
5a2468f5 5108{
4a22f64d 5109 struct gdbarch *gdbarch = get_regcache_arch (regcache);
d01949b6 5110 struct remote_state *rs = get_remote_state ();
ea9c271d 5111 struct remote_arch_state *rsa = get_remote_arch_state ();
5a2468f5 5112 /* Try storing a single register. */
6d820c5c 5113 char *buf = rs->buf;
cfd77fa1 5114 gdb_byte regp[MAX_REGISTER_SIZE];
5a2468f5 5115 char *p;
5a2468f5 5116
74ca34ce
DJ
5117 if (remote_protocol_packets[PACKET_P].support == PACKET_DISABLE)
5118 return 0;
5119
5120 if (reg->pnum == -1)
5121 return 0;
5122
ea9c271d 5123 xsnprintf (buf, get_remote_packet_size (), "P%s=", phex_nz (reg->pnum, 0));
5a2468f5 5124 p = buf + strlen (buf);
56be3814 5125 regcache_raw_collect (regcache, reg->regnum, regp);
4a22f64d 5126 bin2hex (regp, p, register_size (gdbarch, reg->regnum));
6d820c5c 5127 remote_send (&rs->buf, &rs->buf_size);
5a2468f5 5128
74ca34ce
DJ
5129 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_P]))
5130 {
5131 case PACKET_OK:
5132 return 1;
5133 case PACKET_ERROR:
5134 error (_("Could not write register \"%s\""),
4a22f64d 5135 gdbarch_register_name (gdbarch, reg->regnum));
74ca34ce
DJ
5136 case PACKET_UNKNOWN:
5137 return 0;
5138 default:
5139 internal_error (__FILE__, __LINE__, _("Bad result from packet_ok"));
5140 }
c906108c
SS
5141}
5142
23860348
MS
5143/* Store register REGNUM, or all registers if REGNUM == -1, from the
5144 contents of the register cache buffer. FIXME: ignores errors. */
c906108c
SS
5145
5146static void
56be3814 5147store_registers_using_G (const struct regcache *regcache)
c906108c 5148{
d01949b6 5149 struct remote_state *rs = get_remote_state ();
ea9c271d 5150 struct remote_arch_state *rsa = get_remote_arch_state ();
cfd77fa1 5151 gdb_byte *regs;
c906108c
SS
5152 char *p;
5153
193cb69f
AC
5154 /* Extract all the registers in the regcache copying them into a
5155 local buffer. */
5156 {
b323314b 5157 int i;
ea9c271d
DJ
5158 regs = alloca (rsa->sizeof_g_packet);
5159 memset (regs, 0, rsa->sizeof_g_packet);
4a22f64d 5160 for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++)
193cb69f 5161 {
ea9c271d 5162 struct packet_reg *r = &rsa->regs[i];
b323314b 5163 if (r->in_g_packet)
56be3814 5164 regcache_raw_collect (regcache, r->regnum, regs + r->offset);
193cb69f
AC
5165 }
5166 }
c906108c
SS
5167
5168 /* Command describes registers byte by byte,
5169 each byte encoded as two hex characters. */
6d820c5c 5170 p = rs->buf;
193cb69f 5171 *p++ = 'G';
74ca34ce
DJ
5172 /* remote_prepare_to_store insures that rsa->sizeof_g_packet gets
5173 updated. */
5174 bin2hex (regs, p, rsa->sizeof_g_packet);
6d820c5c 5175 remote_send (&rs->buf, &rs->buf_size);
c906108c 5176}
74ca34ce
DJ
5177
5178/* Store register REGNUM, or all registers if REGNUM == -1, from the contents
5179 of the register cache buffer. FIXME: ignores errors. */
5180
5181static void
28439f5e
PA
5182remote_store_registers (struct target_ops *ops,
5183 struct regcache *regcache, int regnum)
74ca34ce
DJ
5184{
5185 struct remote_state *rs = get_remote_state ();
5186 struct remote_arch_state *rsa = get_remote_arch_state ();
5187 int i;
5188
79d7f229 5189 set_general_thread (inferior_ptid);
74ca34ce
DJ
5190
5191 if (regnum >= 0)
5192 {
5193 struct packet_reg *reg = packet_reg_from_regnum (rsa, regnum);
5194 gdb_assert (reg != NULL);
5195
5196 /* Always prefer to store registers using the 'P' packet if
5197 possible; we often change only a small number of registers.
5198 Sometimes we change a larger number; we'd need help from a
5199 higher layer to know to use 'G'. */
56be3814 5200 if (store_register_using_P (regcache, reg))
74ca34ce
DJ
5201 return;
5202
5203 /* For now, don't complain if we have no way to write the
5204 register. GDB loses track of unavailable registers too
5205 easily. Some day, this may be an error. We don't have
5206 any way to read the register, either... */
5207 if (!reg->in_g_packet)
5208 return;
5209
56be3814 5210 store_registers_using_G (regcache);
74ca34ce
DJ
5211 return;
5212 }
5213
56be3814 5214 store_registers_using_G (regcache);
74ca34ce 5215
4a22f64d 5216 for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++)
74ca34ce 5217 if (!rsa->regs[i].in_g_packet)
56be3814 5218 if (!store_register_using_P (regcache, &rsa->regs[i]))
74ca34ce
DJ
5219 /* See above for why we do not issue an error here. */
5220 continue;
5221}
c906108c
SS
5222\f
5223
5224/* Return the number of hex digits in num. */
5225
5226static int
fba45db2 5227hexnumlen (ULONGEST num)
c906108c
SS
5228{
5229 int i;
5230
5231 for (i = 0; num != 0; i++)
5232 num >>= 4;
5233
5234 return max (i, 1);
5235}
5236
2df3850c 5237/* Set BUF to the minimum number of hex digits representing NUM. */
c906108c
SS
5238
5239static int
fba45db2 5240hexnumstr (char *buf, ULONGEST num)
c906108c 5241{
c906108c 5242 int len = hexnumlen (num);
2df3850c
JM
5243 return hexnumnstr (buf, num, len);
5244}
5245
c906108c 5246
2df3850c 5247/* Set BUF to the hex digits representing NUM, padded to WIDTH characters. */
c906108c 5248
2df3850c 5249static int
fba45db2 5250hexnumnstr (char *buf, ULONGEST num, int width)
2df3850c
JM
5251{
5252 int i;
5253
5254 buf[width] = '\0';
5255
5256 for (i = width - 1; i >= 0; i--)
c906108c 5257 {
c5aa993b 5258 buf[i] = "0123456789abcdef"[(num & 0xf)];
c906108c
SS
5259 num >>= 4;
5260 }
5261
2df3850c 5262 return width;
c906108c
SS
5263}
5264
23860348 5265/* Mask all but the least significant REMOTE_ADDRESS_SIZE bits. */
c906108c
SS
5266
5267static CORE_ADDR
fba45db2 5268remote_address_masked (CORE_ADDR addr)
c906108c 5269{
911c95a5
UW
5270 int address_size = remote_address_size;
5271 /* If "remoteaddresssize" was not set, default to target address size. */
5272 if (!address_size)
1cf3db46 5273 address_size = gdbarch_addr_bit (target_gdbarch);
911c95a5
UW
5274
5275 if (address_size > 0
5276 && address_size < (sizeof (ULONGEST) * 8))
c906108c
SS
5277 {
5278 /* Only create a mask when that mask can safely be constructed
23860348 5279 in a ULONGEST variable. */
c906108c 5280 ULONGEST mask = 1;
911c95a5 5281 mask = (mask << address_size) - 1;
c906108c
SS
5282 addr &= mask;
5283 }
5284 return addr;
5285}
5286
a31ea83d
DJ
5287/* Convert BUFFER, binary data at least LEN bytes long, into escaped
5288 binary data in OUT_BUF. Set *OUT_LEN to the length of the data
5289 encoded in OUT_BUF, and return the number of bytes in OUT_BUF
5290 (which may be more than *OUT_LEN due to escape characters). The
5291 total number of bytes in the output buffer will be at most
5292 OUT_MAXLEN. */
5293
5294static int
5295remote_escape_output (const gdb_byte *buffer, int len,
5296 gdb_byte *out_buf, int *out_len,
5297 int out_maxlen)
5298{
5299 int input_index, output_index;
5300
5301 output_index = 0;
5302 for (input_index = 0; input_index < len; input_index++)
5303 {
5304 gdb_byte b = buffer[input_index];
5305
5306 if (b == '$' || b == '#' || b == '}')
5307 {
5308 /* These must be escaped. */
5309 if (output_index + 2 > out_maxlen)
5310 break;
5311 out_buf[output_index++] = '}';
5312 out_buf[output_index++] = b ^ 0x20;
5313 }
5314 else
5315 {
5316 if (output_index + 1 > out_maxlen)
5317 break;
5318 out_buf[output_index++] = b;
5319 }
5320 }
5321
5322 *out_len = input_index;
5323 return output_index;
5324}
5325
0876f84a
DJ
5326/* Convert BUFFER, escaped data LEN bytes long, into binary data
5327 in OUT_BUF. Return the number of bytes written to OUT_BUF.
5328 Raise an error if the total number of bytes exceeds OUT_MAXLEN.
5329
5330 This function reverses remote_escape_output. It allows more
5331 escaped characters than that function does, in particular because
5332 '*' must be escaped to avoid the run-length encoding processing
5333 in reading packets. */
5334
5335static int
5336remote_unescape_input (const gdb_byte *buffer, int len,
5337 gdb_byte *out_buf, int out_maxlen)
5338{
5339 int input_index, output_index;
5340 int escaped;
5341
5342 output_index = 0;
5343 escaped = 0;
5344 for (input_index = 0; input_index < len; input_index++)
5345 {
5346 gdb_byte b = buffer[input_index];
5347
5348 if (output_index + 1 > out_maxlen)
5349 {
5350 warning (_("Received too much data from remote target;"
5351 " ignoring overflow."));
5352 return output_index;
5353 }
5354
5355 if (escaped)
5356 {
5357 out_buf[output_index++] = b ^ 0x20;
5358 escaped = 0;
5359 }
5360 else if (b == '}')
5361 escaped = 1;
5362 else
5363 out_buf[output_index++] = b;
5364 }
5365
5366 if (escaped)
5367 error (_("Unmatched escape character in target response."));
5368
5369 return output_index;
5370}
5371
c906108c
SS
5372/* Determine whether the remote target supports binary downloading.
5373 This is accomplished by sending a no-op memory write of zero length
5374 to the target at the specified address. It does not suffice to send
23860348
MS
5375 the whole packet, since many stubs strip the eighth bit and
5376 subsequently compute a wrong checksum, which causes real havoc with
5377 remote_write_bytes.
7a292a7a 5378
96baa820
JM
5379 NOTE: This can still lose if the serial line is not eight-bit
5380 clean. In cases like this, the user should clear "remote
23860348 5381 X-packet". */
96baa820 5382
c906108c 5383static void
fba45db2 5384check_binary_download (CORE_ADDR addr)
c906108c 5385{
d01949b6 5386 struct remote_state *rs = get_remote_state ();
24b06219 5387
444abaca 5388 switch (remote_protocol_packets[PACKET_X].support)
c906108c 5389 {
96baa820
JM
5390 case PACKET_DISABLE:
5391 break;
5392 case PACKET_ENABLE:
5393 break;
5394 case PACKET_SUPPORT_UNKNOWN:
5395 {
96baa820 5396 char *p;
802188a7 5397
2e9f7625 5398 p = rs->buf;
96baa820
JM
5399 *p++ = 'X';
5400 p += hexnumstr (p, (ULONGEST) addr);
5401 *p++ = ',';
5402 p += hexnumstr (p, (ULONGEST) 0);
5403 *p++ = ':';
5404 *p = '\0';
802188a7 5405
2e9f7625 5406 putpkt_binary (rs->buf, (int) (p - rs->buf));
6d820c5c 5407 getpkt (&rs->buf, &rs->buf_size, 0);
c906108c 5408
2e9f7625 5409 if (rs->buf[0] == '\0')
96baa820
JM
5410 {
5411 if (remote_debug)
5412 fprintf_unfiltered (gdb_stdlog,
5413 "binary downloading NOT suppported by target\n");
444abaca 5414 remote_protocol_packets[PACKET_X].support = PACKET_DISABLE;
96baa820
JM
5415 }
5416 else
5417 {
5418 if (remote_debug)
5419 fprintf_unfiltered (gdb_stdlog,
5420 "binary downloading suppported by target\n");
444abaca 5421 remote_protocol_packets[PACKET_X].support = PACKET_ENABLE;
96baa820
JM
5422 }
5423 break;
5424 }
c906108c
SS
5425 }
5426}
5427
5428/* Write memory data directly to the remote machine.
5429 This does not inform the data cache; the data cache uses this.
a76d924d 5430 HEADER is the starting part of the packet.
c906108c
SS
5431 MEMADDR is the address in the remote memory space.
5432 MYADDR is the address of the buffer in our space.
5433 LEN is the number of bytes.
a76d924d
DJ
5434 PACKET_FORMAT should be either 'X' or 'M', and indicates if we
5435 should send data as binary ('X'), or hex-encoded ('M').
5436
5437 The function creates packet of the form
5438 <HEADER><ADDRESS>,<LENGTH>:<DATA>
5439
5440 where encoding of <DATA> is termined by PACKET_FORMAT.
5441
5442 If USE_LENGTH is 0, then the <LENGTH> field and the preceding comma
5443 are omitted.
5444
5445 Returns the number of bytes transferred, or 0 (setting errno) for
23860348 5446 error. Only transfer a single packet. */
c906108c 5447
a76d924d
DJ
5448static int
5449remote_write_bytes_aux (const char *header, CORE_ADDR memaddr,
5450 const gdb_byte *myaddr, int len,
5451 char packet_format, int use_length)
c906108c 5452{
6d820c5c 5453 struct remote_state *rs = get_remote_state ();
cfd77fa1 5454 char *p;
a76d924d
DJ
5455 char *plen = NULL;
5456 int plenlen = 0;
917317f4
JM
5457 int todo;
5458 int nr_bytes;
a257b5bb 5459 int payload_size;
6765f3e5 5460 int payload_length;
a76d924d
DJ
5461 int header_length;
5462
5463 if (packet_format != 'X' && packet_format != 'M')
5464 internal_error (__FILE__, __LINE__,
5465 "remote_write_bytes_aux: bad packet format");
c906108c 5466
b2182ed2
DJ
5467 if (len <= 0)
5468 return 0;
5469
3de11b2e 5470 payload_size = get_memory_write_packet_size ();
2bc416ba 5471
6d820c5c
DJ
5472 /* The packet buffer will be large enough for the payload;
5473 get_memory_packet_size ensures this. */
a76d924d 5474 rs->buf[0] = '\0';
c906108c 5475
a257b5bb 5476 /* Compute the size of the actual payload by subtracting out the
3de11b2e
NS
5477 packet header and footer overhead: "$M<memaddr>,<len>:...#nn".
5478 */
a76d924d
DJ
5479 payload_size -= strlen ("$,:#NN");
5480 if (!use_length)
5481 /* The comma won't be used. */
5482 payload_size += 1;
5483 header_length = strlen (header);
5484 payload_size -= header_length;
3de11b2e 5485 payload_size -= hexnumlen (memaddr);
c906108c 5486
a76d924d 5487 /* Construct the packet excluding the data: "<header><memaddr>,<len>:". */
917317f4 5488
a76d924d
DJ
5489 strcat (rs->buf, header);
5490 p = rs->buf + strlen (header);
5491
5492 /* Compute a best guess of the number of bytes actually transfered. */
5493 if (packet_format == 'X')
c906108c 5494 {
23860348 5495 /* Best guess at number of bytes that will fit. */
a257b5bb 5496 todo = min (len, payload_size);
a76d924d
DJ
5497 if (use_length)
5498 payload_size -= hexnumlen (todo);
3de11b2e 5499 todo = min (todo, payload_size);
a76d924d
DJ
5500 }
5501 else
5502 {
23860348 5503 /* Num bytes that will fit. */
a257b5bb 5504 todo = min (len, payload_size / 2);
a76d924d
DJ
5505 if (use_length)
5506 payload_size -= hexnumlen (todo);
3de11b2e 5507 todo = min (todo, payload_size / 2);
917317f4 5508 }
a76d924d 5509
3de11b2e
NS
5510 if (todo <= 0)
5511 internal_error (__FILE__, __LINE__,
5512 _("minumum packet size too small to write data"));
802188a7 5513
6765f3e5
DJ
5514 /* If we already need another packet, then try to align the end
5515 of this packet to a useful boundary. */
5516 if (todo > 2 * REMOTE_ALIGN_WRITES && todo < len)
5517 todo = ((memaddr + todo) & ~(REMOTE_ALIGN_WRITES - 1)) - memaddr;
5518
a257b5bb 5519 /* Append "<memaddr>". */
917317f4
JM
5520 memaddr = remote_address_masked (memaddr);
5521 p += hexnumstr (p, (ULONGEST) memaddr);
a257b5bb 5522
a76d924d
DJ
5523 if (use_length)
5524 {
5525 /* Append ",". */
5526 *p++ = ',';
802188a7 5527
a76d924d
DJ
5528 /* Append <len>. Retain the location/size of <len>. It may need to
5529 be adjusted once the packet body has been created. */
5530 plen = p;
5531 plenlen = hexnumstr (p, (ULONGEST) todo);
5532 p += plenlen;
5533 }
a257b5bb
AC
5534
5535 /* Append ":". */
917317f4
JM
5536 *p++ = ':';
5537 *p = '\0';
802188a7 5538
a257b5bb 5539 /* Append the packet body. */
a76d924d 5540 if (packet_format == 'X')
917317f4 5541 {
917317f4
JM
5542 /* Binary mode. Send target system values byte by byte, in
5543 increasing byte addresses. Only escape certain critical
5544 characters. */
6765f3e5
DJ
5545 payload_length = remote_escape_output (myaddr, todo, p, &nr_bytes,
5546 payload_size);
5547
5548 /* If not all TODO bytes fit, then we'll need another packet. Make
9b7194bc
DJ
5549 a second try to keep the end of the packet aligned. Don't do
5550 this if the packet is tiny. */
5551 if (nr_bytes < todo && nr_bytes > 2 * REMOTE_ALIGN_WRITES)
6765f3e5
DJ
5552 {
5553 int new_nr_bytes;
5554
5555 new_nr_bytes = (((memaddr + nr_bytes) & ~(REMOTE_ALIGN_WRITES - 1))
5556 - memaddr);
5557 if (new_nr_bytes != nr_bytes)
5558 payload_length = remote_escape_output (myaddr, new_nr_bytes,
5559 p, &nr_bytes,
5560 payload_size);
5561 }
5562
5563 p += payload_length;
a76d924d 5564 if (use_length && nr_bytes < todo)
c906108c 5565 {
802188a7 5566 /* Escape chars have filled up the buffer prematurely,
917317f4
JM
5567 and we have actually sent fewer bytes than planned.
5568 Fix-up the length field of the packet. Use the same
5569 number of characters as before. */
917317f4
JM
5570 plen += hexnumnstr (plen, (ULONGEST) nr_bytes, plenlen);
5571 *plen = ':'; /* overwrite \0 from hexnumnstr() */
c906108c 5572 }
a76d924d
DJ
5573 }
5574 else
5575 {
917317f4
JM
5576 /* Normal mode: Send target system values byte by byte, in
5577 increasing byte addresses. Each byte is encoded as a two hex
5578 value. */
2644f393 5579 nr_bytes = bin2hex (myaddr, p, todo);
aa6c0017 5580 p += 2 * nr_bytes;
c906108c 5581 }
802188a7 5582
2e9f7625 5583 putpkt_binary (rs->buf, (int) (p - rs->buf));
6d820c5c 5584 getpkt (&rs->buf, &rs->buf_size, 0);
802188a7 5585
2e9f7625 5586 if (rs->buf[0] == 'E')
917317f4
JM
5587 {
5588 /* There is no correspondance between what the remote protocol
5589 uses for errors and errno codes. We would like a cleaner way
5590 of representing errors (big enough to include errno codes,
5591 bfd_error codes, and others). But for now just return EIO. */
5592 errno = EIO;
5593 return 0;
5594 }
802188a7 5595
23860348
MS
5596 /* Return NR_BYTES, not TODO, in case escape chars caused us to send
5597 fewer bytes than we'd planned. */
917317f4 5598 return nr_bytes;
c906108c
SS
5599}
5600
a76d924d
DJ
5601/* Write memory data directly to the remote machine.
5602 This does not inform the data cache; the data cache uses this.
5603 MEMADDR is the address in the remote memory space.
5604 MYADDR is the address of the buffer in our space.
5605 LEN is the number of bytes.
5606
5607 Returns number of bytes transferred, or 0 (setting errno) for
5608 error. Only transfer a single packet. */
5609
5610int
5611remote_write_bytes (CORE_ADDR memaddr, const gdb_byte *myaddr, int len)
5612{
5613 char *packet_format = 0;
5614
5615 /* Check whether the target supports binary download. */
5616 check_binary_download (memaddr);
5617
5618 switch (remote_protocol_packets[PACKET_X].support)
5619 {
5620 case PACKET_ENABLE:
5621 packet_format = "X";
5622 break;
5623 case PACKET_DISABLE:
5624 packet_format = "M";
5625 break;
5626 case PACKET_SUPPORT_UNKNOWN:
5627 internal_error (__FILE__, __LINE__,
5628 _("remote_write_bytes: bad internal state"));
5629 default:
5630 internal_error (__FILE__, __LINE__, _("bad switch"));
5631 }
5632
5633 return remote_write_bytes_aux (packet_format,
5634 memaddr, myaddr, len, packet_format[0], 1);
5635}
5636
c906108c
SS
5637/* Read memory data directly from the remote machine.
5638 This does not use the data cache; the data cache uses this.
5639 MEMADDR is the address in the remote memory space.
5640 MYADDR is the address of the buffer in our space.
5641 LEN is the number of bytes.
5642
5643 Returns number of bytes transferred, or 0 for error. */
5644
917317f4
JM
5645/* NOTE: cagney/1999-10-18: This function (and its siblings in other
5646 remote targets) shouldn't attempt to read the entire buffer.
5647 Instead it should read a single packet worth of data and then
5648 return the byte size of that packet to the caller. The caller (its
5649 caller and its callers caller ;-) already contains code for
23860348 5650 handling partial reads. */
917317f4 5651
449092f6 5652int
cfd77fa1 5653remote_read_bytes (CORE_ADDR memaddr, gdb_byte *myaddr, int len)
c906108c 5654{
6d820c5c 5655 struct remote_state *rs = get_remote_state ();
23860348 5656 int max_buf_size; /* Max size of packet output buffer. */
c906108c
SS
5657 int origlen;
5658
b2182ed2
DJ
5659 if (len <= 0)
5660 return 0;
5661
11cf8741 5662 max_buf_size = get_memory_read_packet_size ();
6d820c5c
DJ
5663 /* The packet buffer will be large enough for the payload;
5664 get_memory_packet_size ensures this. */
c906108c
SS
5665
5666 origlen = len;
5667 while (len > 0)
5668 {
c906108c
SS
5669 char *p;
5670 int todo;
5671 int i;
5672
c5aa993b 5673 todo = min (len, max_buf_size / 2); /* num bytes that will fit */
c906108c
SS
5674
5675 /* construct "m"<memaddr>","<len>" */
2e9f7625 5676 /* sprintf (rs->buf, "m%lx,%x", (unsigned long) memaddr, todo); */
c906108c 5677 memaddr = remote_address_masked (memaddr);
2e9f7625 5678 p = rs->buf;
c906108c
SS
5679 *p++ = 'm';
5680 p += hexnumstr (p, (ULONGEST) memaddr);
5681 *p++ = ',';
5682 p += hexnumstr (p, (ULONGEST) todo);
5683 *p = '\0';
5684
2e9f7625 5685 putpkt (rs->buf);
6d820c5c 5686 getpkt (&rs->buf, &rs->buf_size, 0);
c906108c 5687
2e9f7625
DJ
5688 if (rs->buf[0] == 'E'
5689 && isxdigit (rs->buf[1]) && isxdigit (rs->buf[2])
5690 && rs->buf[3] == '\0')
c906108c 5691 {
23860348
MS
5692 /* There is no correspondance between what the remote
5693 protocol uses for errors and errno codes. We would like
5694 a cleaner way of representing errors (big enough to
5695 include errno codes, bfd_error codes, and others). But
5696 for now just return EIO. */
c906108c
SS
5697 errno = EIO;
5698 return 0;
5699 }
5700
c5aa993b
JM
5701 /* Reply describes memory byte by byte,
5702 each byte encoded as two hex characters. */
c906108c 5703
2e9f7625 5704 p = rs->buf;
30559e10 5705 if ((i = hex2bin (p, myaddr, todo)) < todo)
c906108c 5706 {
30559e10 5707 /* Reply is short. This means that we were able to read
23860348 5708 only part of what we wanted to. */
30559e10 5709 return i + (origlen - len);
c906108c
SS
5710 }
5711 myaddr += todo;
5712 memaddr += todo;
5713 len -= todo;
5714 }
5715 return origlen;
5716}
74531fed
PA
5717\f
5718
5719/* Remote notification handler. */
5720
5721static void
5722handle_notification (char *buf, size_t length)
5723{
5724 if (strncmp (buf, "Stop:", 5) == 0)
5725 {
5726 if (pending_stop_reply)
5727 /* We've already parsed the in-flight stop-reply, but the stub
5728 for some reason thought we didn't, possibly due to timeout
5729 on its side. Just ignore it. */
5730 ;
5731 else
5732 {
5733 struct cleanup *old_chain;
5734 struct stop_reply *reply = stop_reply_xmalloc ();
5735 old_chain = make_cleanup (do_stop_reply_xfree, reply);
5736
5737 remote_parse_stop_reply (buf + 5, reply);
5738
5739 discard_cleanups (old_chain);
5740
5741 /* Be careful to only set it after parsing, since an error
5742 may be thrown then. */
5743 pending_stop_reply = reply;
5744
5745 /* Notify the event loop there's a stop reply to acknowledge
5746 and that there may be more events to fetch. */
5747 mark_async_event_handler (remote_async_get_pending_events_token);
5748 }
5749 }
5750 else
5751 /* We ignore notifications we don't recognize, for compatibility
5752 with newer stubs. */
5753 ;
5754}
5755
c906108c
SS
5756\f
5757/* Read or write LEN bytes from inferior memory at MEMADDR,
23860348
MS
5758 transferring to or from debugger address BUFFER. Write to inferior
5759 if SHOULD_WRITE is nonzero. Returns length of data written or
5760 read; 0 for error. TARGET is unused. */
392a587b 5761
c906108c 5762static int
961cb7b5 5763remote_xfer_memory (CORE_ADDR mem_addr, gdb_byte *buffer, int mem_len,
0a65a603 5764 int should_write, struct mem_attrib *attrib,
29e57380 5765 struct target_ops *target)
c906108c 5766{
4930751a
C
5767 int res;
5768
82f73884
PA
5769 set_general_thread (inferior_ptid);
5770
4930751a 5771 if (should_write)
b2182ed2 5772 res = remote_write_bytes (mem_addr, buffer, mem_len);
4930751a 5773 else
b2182ed2 5774 res = remote_read_bytes (mem_addr, buffer, mem_len);
4930751a
C
5775
5776 return res;
c906108c
SS
5777}
5778
a76d924d
DJ
5779/* Sends a packet with content determined by the printf format string
5780 FORMAT and the remaining arguments, then gets the reply. Returns
5781 whether the packet was a success, a failure, or unknown. */
5782
2c0b251b 5783static enum packet_result
a76d924d
DJ
5784remote_send_printf (const char *format, ...)
5785{
5786 struct remote_state *rs = get_remote_state ();
5787 int max_size = get_remote_packet_size ();
5788
5789 va_list ap;
5790 va_start (ap, format);
5791
5792 rs->buf[0] = '\0';
5793 if (vsnprintf (rs->buf, max_size, format, ap) >= max_size)
5794 internal_error (__FILE__, __LINE__, "Too long remote packet.");
5795
5796 if (putpkt (rs->buf) < 0)
5797 error (_("Communication problem with target."));
5798
5799 rs->buf[0] = '\0';
5800 getpkt (&rs->buf, &rs->buf_size, 0);
5801
5802 return packet_check_result (rs->buf);
5803}
5804
5805static void
5806restore_remote_timeout (void *p)
5807{
5808 int value = *(int *)p;
5809 remote_timeout = value;
5810}
5811
5812/* Flash writing can take quite some time. We'll set
5813 effectively infinite timeout for flash operations.
5814 In future, we'll need to decide on a better approach. */
5815static const int remote_flash_timeout = 1000;
5816
5817static void
5818remote_flash_erase (struct target_ops *ops,
5819 ULONGEST address, LONGEST length)
5820{
5821 int saved_remote_timeout = remote_timeout;
5822 enum packet_result ret;
5823
5824 struct cleanup *back_to = make_cleanup (restore_remote_timeout,
5825 &saved_remote_timeout);
5826 remote_timeout = remote_flash_timeout;
5827
5828 ret = remote_send_printf ("vFlashErase:%s,%s",
5829 paddr (address),
5830 phex (length, 4));
5831 switch (ret)
5832 {
5833 case PACKET_UNKNOWN:
5834 error (_("Remote target does not support flash erase"));
5835 case PACKET_ERROR:
5836 error (_("Error erasing flash with vFlashErase packet"));
5837 default:
5838 break;
5839 }
5840
5841 do_cleanups (back_to);
5842}
5843
5844static LONGEST
5845remote_flash_write (struct target_ops *ops,
5846 ULONGEST address, LONGEST length,
5847 const gdb_byte *data)
5848{
5849 int saved_remote_timeout = remote_timeout;
5850 int ret;
5851 struct cleanup *back_to = make_cleanup (restore_remote_timeout,
5852 &saved_remote_timeout);
5853
5854 remote_timeout = remote_flash_timeout;
5855 ret = remote_write_bytes_aux ("vFlashWrite:", address, data, length, 'X', 0);
5856 do_cleanups (back_to);
5857
5858 return ret;
5859}
5860
5861static void
5862remote_flash_done (struct target_ops *ops)
5863{
5864 int saved_remote_timeout = remote_timeout;
5865 int ret;
5866 struct cleanup *back_to = make_cleanup (restore_remote_timeout,
5867 &saved_remote_timeout);
5868
5869 remote_timeout = remote_flash_timeout;
5870 ret = remote_send_printf ("vFlashDone");
5871 do_cleanups (back_to);
5872
5873 switch (ret)
5874 {
5875 case PACKET_UNKNOWN:
5876 error (_("Remote target does not support vFlashDone"));
5877 case PACKET_ERROR:
5878 error (_("Error finishing flash operation"));
5879 default:
5880 break;
5881 }
5882}
5883
c906108c 5884static void
fba45db2 5885remote_files_info (struct target_ops *ignore)
c906108c
SS
5886{
5887 puts_filtered ("Debugging a target over a serial line.\n");
5888}
5889\f
5890/* Stuff for dealing with the packets which are part of this protocol.
5891 See comment at top of file for details. */
5892
0876f84a 5893/* Read a single character from the remote end. */
c906108c
SS
5894
5895static int
fba45db2 5896readchar (int timeout)
c906108c
SS
5897{
5898 int ch;
5899
2cd58942 5900 ch = serial_readchar (remote_desc, timeout);
c906108c 5901
2acceee2 5902 if (ch >= 0)
0876f84a 5903 return ch;
2acceee2
JM
5904
5905 switch ((enum serial_rc) ch)
c906108c
SS
5906 {
5907 case SERIAL_EOF:
ce5ce7ed 5908 pop_target ();
8a3fe4f8 5909 error (_("Remote connection closed"));
2acceee2 5910 /* no return */
c906108c 5911 case SERIAL_ERROR:
e2e0b3e5 5912 perror_with_name (_("Remote communication error"));
2acceee2 5913 /* no return */
c906108c 5914 case SERIAL_TIMEOUT:
2acceee2 5915 break;
c906108c 5916 }
2acceee2 5917 return ch;
c906108c
SS
5918}
5919
6d820c5c
DJ
5920/* Send the command in *BUF to the remote machine, and read the reply
5921 into *BUF. Report an error if we get an error reply. Resize
5922 *BUF using xrealloc if necessary to hold the result, and update
5923 *SIZEOF_BUF. */
c906108c
SS
5924
5925static void
6d820c5c
DJ
5926remote_send (char **buf,
5927 long *sizeof_buf)
c906108c 5928{
6d820c5c 5929 putpkt (*buf);
c2d11a7d 5930 getpkt (buf, sizeof_buf, 0);
c906108c 5931
6d820c5c
DJ
5932 if ((*buf)[0] == 'E')
5933 error (_("Remote failure reply: %s"), *buf);
c906108c
SS
5934}
5935
6e5abd65
PA
5936/* Return a pointer to an xmalloc'ed string representing an escaped
5937 version of BUF, of len N. E.g. \n is converted to \\n, \t to \\t,
5938 etc. The caller is responsible for releasing the returned
5939 memory. */
5940
5941static char *
5942escape_buffer (const char *buf, int n)
5943{
5944 struct cleanup *old_chain;
5945 struct ui_file *stb;
5946 char *str;
5947 long length;
5948
5949 stb = mem_fileopen ();
5950 old_chain = make_cleanup_ui_file_delete (stb);
5951
5952 fputstrn_unfiltered (buf, n, 0, stb);
5953 str = ui_file_xstrdup (stb, &length);
5954 do_cleanups (old_chain);
5955 return str;
5956}
5957
c906108c
SS
5958/* Display a null-terminated packet on stdout, for debugging, using C
5959 string notation. */
5960
5961static void
fba45db2 5962print_packet (char *buf)
c906108c
SS
5963{
5964 puts_filtered ("\"");
43e526b9 5965 fputstr_filtered (buf, '"', gdb_stdout);
c906108c
SS
5966 puts_filtered ("\"");
5967}
5968
5969int
fba45db2 5970putpkt (char *buf)
c906108c
SS
5971{
5972 return putpkt_binary (buf, strlen (buf));
5973}
5974
5975/* Send a packet to the remote machine, with error checking. The data
23860348 5976 of the packet is in BUF. The string in BUF can be at most
ea9c271d 5977 get_remote_packet_size () - 5 to account for the $, # and checksum,
23860348
MS
5978 and for a possible /0 if we are debugging (remote_debug) and want
5979 to print the sent packet as a string. */
c906108c
SS
5980
5981static int
fba45db2 5982putpkt_binary (char *buf, int cnt)
c906108c 5983{
2d717e4f 5984 struct remote_state *rs = get_remote_state ();
c906108c
SS
5985 int i;
5986 unsigned char csum = 0;
11cf8741 5987 char *buf2 = alloca (cnt + 6);
085dd6e6 5988
c906108c
SS
5989 int ch;
5990 int tcount = 0;
5991 char *p;
5992
e24a49d8
PA
5993 /* Catch cases like trying to read memory or listing threads while
5994 we're waiting for a stop reply. The remote server wouldn't be
5995 ready to handle this request, so we'd hang and timeout. We don't
5996 have to worry about this in synchronous mode, because in that
5997 case it's not possible to issue a command while the target is
74531fed
PA
5998 running. This is not a problem in non-stop mode, because in that
5999 case, the stub is always ready to process serial input. */
6000 if (!non_stop && target_can_async_p () && rs->waiting_for_stop_reply)
e24a49d8
PA
6001 error (_("Cannot execute this command while the target is running."));
6002
2d717e4f
DJ
6003 /* We're sending out a new packet. Make sure we don't look at a
6004 stale cached response. */
6005 rs->cached_wait_status = 0;
6006
c906108c
SS
6007 /* Copy the packet into buffer BUF2, encapsulating it
6008 and giving it a checksum. */
6009
c906108c
SS
6010 p = buf2;
6011 *p++ = '$';
6012
6013 for (i = 0; i < cnt; i++)
6014 {
6015 csum += buf[i];
6016 *p++ = buf[i];
6017 }
6018 *p++ = '#';
6019 *p++ = tohex ((csum >> 4) & 0xf);
6020 *p++ = tohex (csum & 0xf);
6021
6022 /* Send it over and over until we get a positive ack. */
6023
6024 while (1)
6025 {
6026 int started_error_output = 0;
6027
6028 if (remote_debug)
6029 {
6e5abd65
PA
6030 struct cleanup *old_chain;
6031 char *str;
6032
c906108c 6033 *p = '\0';
6e5abd65
PA
6034 str = escape_buffer (buf2, p - buf2);
6035 old_chain = make_cleanup (xfree, str);
6036 fprintf_unfiltered (gdb_stdlog, "Sending packet: %s...", str);
0f71a2f6 6037 gdb_flush (gdb_stdlog);
6e5abd65 6038 do_cleanups (old_chain);
c906108c 6039 }
2cd58942 6040 if (serial_write (remote_desc, buf2, p - buf2))
e2e0b3e5 6041 perror_with_name (_("putpkt: write failed"));
c906108c 6042
a6f3e723
SL
6043 /* If this is a no acks version of the remote protocol, send the
6044 packet and move on. */
6045 if (rs->noack_mode)
6046 break;
6047
74531fed
PA
6048 /* Read until either a timeout occurs (-2) or '+' is read.
6049 Handle any notification that arrives in the mean time. */
c906108c
SS
6050 while (1)
6051 {
6052 ch = readchar (remote_timeout);
6053
c5aa993b 6054 if (remote_debug)
c906108c
SS
6055 {
6056 switch (ch)
6057 {
6058 case '+':
1216fa2c 6059 case '-':
c906108c
SS
6060 case SERIAL_TIMEOUT:
6061 case '$':
74531fed 6062 case '%':
c906108c
SS
6063 if (started_error_output)
6064 {
6065 putchar_unfiltered ('\n');
6066 started_error_output = 0;
6067 }
6068 }
6069 }
6070
6071 switch (ch)
6072 {
6073 case '+':
6074 if (remote_debug)
0f71a2f6 6075 fprintf_unfiltered (gdb_stdlog, "Ack\n");
c906108c 6076 return 1;
1216fa2c
AC
6077 case '-':
6078 if (remote_debug)
6079 fprintf_unfiltered (gdb_stdlog, "Nak\n");
c906108c 6080 case SERIAL_TIMEOUT:
c5aa993b 6081 tcount++;
c906108c
SS
6082 if (tcount > 3)
6083 return 0;
23860348 6084 break; /* Retransmit buffer. */
c906108c
SS
6085 case '$':
6086 {
40e3f985 6087 if (remote_debug)
2bc416ba 6088 fprintf_unfiltered (gdb_stdlog,
23860348 6089 "Packet instead of Ack, ignoring it\n");
d6f7abdf
AC
6090 /* It's probably an old response sent because an ACK
6091 was lost. Gobble up the packet and ack it so it
6092 doesn't get retransmitted when we resend this
6093 packet. */
6d820c5c 6094 skip_frame ();
d6f7abdf 6095 serial_write (remote_desc, "+", 1);
23860348 6096 continue; /* Now, go look for +. */
c906108c 6097 }
74531fed
PA
6098
6099 case '%':
6100 {
6101 int val;
6102
6103 /* If we got a notification, handle it, and go back to looking
6104 for an ack. */
6105 /* We've found the start of a notification. Now
6106 collect the data. */
6107 val = read_frame (&rs->buf, &rs->buf_size);
6108 if (val >= 0)
6109 {
6110 if (remote_debug)
6111 {
6e5abd65
PA
6112 struct cleanup *old_chain;
6113 char *str;
6114
6115 str = escape_buffer (rs->buf, val);
6116 old_chain = make_cleanup (xfree, str);
6117 fprintf_unfiltered (gdb_stdlog,
6118 " Notification received: %s\n",
6119 str);
6120 do_cleanups (old_chain);
74531fed
PA
6121 }
6122 handle_notification (rs->buf, val);
6123 /* We're in sync now, rewait for the ack. */
6124 tcount = 0;
6125 }
6126 else
6127 {
6128 if (remote_debug)
6129 {
6130 if (!started_error_output)
6131 {
6132 started_error_output = 1;
6133 fprintf_unfiltered (gdb_stdlog, "putpkt: Junk: ");
6134 }
6135 fputc_unfiltered (ch & 0177, gdb_stdlog);
6136 fprintf_unfiltered (gdb_stdlog, "%s", rs->buf);
6137 }
6138 }
6139 continue;
6140 }
6141 /* fall-through */
c906108c
SS
6142 default:
6143 if (remote_debug)
6144 {
6145 if (!started_error_output)
6146 {
6147 started_error_output = 1;
0f71a2f6 6148 fprintf_unfiltered (gdb_stdlog, "putpkt: Junk: ");
c906108c 6149 }
0f71a2f6 6150 fputc_unfiltered (ch & 0177, gdb_stdlog);
c906108c
SS
6151 }
6152 continue;
6153 }
23860348 6154 break; /* Here to retransmit. */
c906108c
SS
6155 }
6156
6157#if 0
6158 /* This is wrong. If doing a long backtrace, the user should be
c5aa993b
JM
6159 able to get out next time we call QUIT, without anything as
6160 violent as interrupt_query. If we want to provide a way out of
6161 here without getting to the next QUIT, it should be based on
6162 hitting ^C twice as in remote_wait. */
c906108c
SS
6163 if (quit_flag)
6164 {
6165 quit_flag = 0;
6166 interrupt_query ();
6167 }
6168#endif
6169 }
a6f3e723 6170 return 0;
c906108c
SS
6171}
6172
6d820c5c
DJ
6173/* Come here after finding the start of a frame when we expected an
6174 ack. Do our best to discard the rest of this packet. */
6175
6176static void
6177skip_frame (void)
6178{
6179 int c;
6180
6181 while (1)
6182 {
6183 c = readchar (remote_timeout);
6184 switch (c)
6185 {
6186 case SERIAL_TIMEOUT:
6187 /* Nothing we can do. */
6188 return;
6189 case '#':
6190 /* Discard the two bytes of checksum and stop. */
6191 c = readchar (remote_timeout);
6192 if (c >= 0)
6193 c = readchar (remote_timeout);
6194
6195 return;
6196 case '*': /* Run length encoding. */
6197 /* Discard the repeat count. */
6198 c = readchar (remote_timeout);
6199 if (c < 0)
6200 return;
6201 break;
6202 default:
6203 /* A regular character. */
6204 break;
6205 }
6206 }
6207}
6208
c906108c 6209/* Come here after finding the start of the frame. Collect the rest
6d820c5c
DJ
6210 into *BUF, verifying the checksum, length, and handling run-length
6211 compression. NUL terminate the buffer. If there is not enough room,
6212 expand *BUF using xrealloc.
c906108c 6213
c2d11a7d
JM
6214 Returns -1 on error, number of characters in buffer (ignoring the
6215 trailing NULL) on success. (could be extended to return one of the
23860348 6216 SERIAL status indications). */
c2d11a7d
JM
6217
6218static long
6d820c5c
DJ
6219read_frame (char **buf_p,
6220 long *sizeof_buf)
c906108c
SS
6221{
6222 unsigned char csum;
c2d11a7d 6223 long bc;
c906108c 6224 int c;
6d820c5c 6225 char *buf = *buf_p;
a6f3e723 6226 struct remote_state *rs = get_remote_state ();
c906108c
SS
6227
6228 csum = 0;
c2d11a7d 6229 bc = 0;
c906108c
SS
6230
6231 while (1)
6232 {
6233 c = readchar (remote_timeout);
c906108c
SS
6234 switch (c)
6235 {
6236 case SERIAL_TIMEOUT:
6237 if (remote_debug)
0f71a2f6 6238 fputs_filtered ("Timeout in mid-packet, retrying\n", gdb_stdlog);
c2d11a7d 6239 return -1;
c906108c
SS
6240 case '$':
6241 if (remote_debug)
0f71a2f6
JM
6242 fputs_filtered ("Saw new packet start in middle of old one\n",
6243 gdb_stdlog);
23860348 6244 return -1; /* Start a new packet, count retries. */
c906108c
SS
6245 case '#':
6246 {
6247 unsigned char pktcsum;
e1b09194
AC
6248 int check_0 = 0;
6249 int check_1 = 0;
c906108c 6250
c2d11a7d 6251 buf[bc] = '\0';
c906108c 6252
e1b09194
AC
6253 check_0 = readchar (remote_timeout);
6254 if (check_0 >= 0)
6255 check_1 = readchar (remote_timeout);
802188a7 6256
e1b09194
AC
6257 if (check_0 == SERIAL_TIMEOUT || check_1 == SERIAL_TIMEOUT)
6258 {
6259 if (remote_debug)
2bc416ba 6260 fputs_filtered ("Timeout in checksum, retrying\n",
23860348 6261 gdb_stdlog);
e1b09194
AC
6262 return -1;
6263 }
6264 else if (check_0 < 0 || check_1 < 0)
40e3f985
FN
6265 {
6266 if (remote_debug)
2bc416ba 6267 fputs_filtered ("Communication error in checksum\n",
23860348 6268 gdb_stdlog);
40e3f985
FN
6269 return -1;
6270 }
c906108c 6271
a6f3e723
SL
6272 /* Don't recompute the checksum; with no ack packets we
6273 don't have any way to indicate a packet retransmission
6274 is necessary. */
6275 if (rs->noack_mode)
6276 return bc;
6277
e1b09194 6278 pktcsum = (fromhex (check_0) << 4) | fromhex (check_1);
c906108c 6279 if (csum == pktcsum)
c2d11a7d 6280 return bc;
c906108c 6281
c5aa993b 6282 if (remote_debug)
c906108c 6283 {
6e5abd65
PA
6284 struct cleanup *old_chain;
6285 char *str;
6286
6287 str = escape_buffer (buf, bc);
6288 old_chain = make_cleanup (xfree, str);
6289 fprintf_unfiltered (gdb_stdlog,
6290 "\
6291Bad checksum, sentsum=0x%x, csum=0x%x, buf=%s\n",
6292 pktcsum, csum, str);
6293 do_cleanups (old_chain);
c906108c 6294 }
c2d11a7d 6295 /* Number of characters in buffer ignoring trailing
23860348 6296 NULL. */
c2d11a7d 6297 return -1;
c906108c 6298 }
23860348 6299 case '*': /* Run length encoding. */
c2c6d25f
JM
6300 {
6301 int repeat;
6302 csum += c;
c906108c 6303
b4501125
AC
6304 c = readchar (remote_timeout);
6305 csum += c;
23860348 6306 repeat = c - ' ' + 3; /* Compute repeat count. */
c906108c 6307
23860348 6308 /* The character before ``*'' is repeated. */
c2d11a7d 6309
6d820c5c 6310 if (repeat > 0 && repeat <= 255 && bc > 0)
c2c6d25f 6311 {
6d820c5c
DJ
6312 if (bc + repeat - 1 >= *sizeof_buf - 1)
6313 {
6314 /* Make some more room in the buffer. */
6315 *sizeof_buf += repeat;
6316 *buf_p = xrealloc (*buf_p, *sizeof_buf);
6317 buf = *buf_p;
6318 }
6319
c2d11a7d
JM
6320 memset (&buf[bc], buf[bc - 1], repeat);
6321 bc += repeat;
c2c6d25f
JM
6322 continue;
6323 }
6324
c2d11a7d 6325 buf[bc] = '\0';
6d820c5c 6326 printf_filtered (_("Invalid run length encoding: %s\n"), buf);
c2d11a7d 6327 return -1;
c2c6d25f 6328 }
c906108c 6329 default:
6d820c5c 6330 if (bc >= *sizeof_buf - 1)
c906108c 6331 {
6d820c5c
DJ
6332 /* Make some more room in the buffer. */
6333 *sizeof_buf *= 2;
6334 *buf_p = xrealloc (*buf_p, *sizeof_buf);
6335 buf = *buf_p;
c906108c
SS
6336 }
6337
6d820c5c
DJ
6338 buf[bc++] = c;
6339 csum += c;
6340 continue;
c906108c
SS
6341 }
6342 }
6343}
6344
6345/* Read a packet from the remote machine, with error checking, and
6d820c5c
DJ
6346 store it in *BUF. Resize *BUF using xrealloc if necessary to hold
6347 the result, and update *SIZEOF_BUF. If FOREVER, wait forever
6348 rather than timing out; this is used (in synchronous mode) to wait
6349 for a target that is is executing user code to stop. */
d9fcf2fb
JM
6350/* FIXME: ezannoni 2000-02-01 this wrapper is necessary so that we
6351 don't have to change all the calls to getpkt to deal with the
6352 return value, because at the moment I don't know what the right
23860348 6353 thing to do it for those. */
c906108c 6354void
6d820c5c
DJ
6355getpkt (char **buf,
6356 long *sizeof_buf,
c2d11a7d 6357 int forever)
d9fcf2fb
JM
6358{
6359 int timed_out;
6360
6361 timed_out = getpkt_sane (buf, sizeof_buf, forever);
6362}
6363
6364
6365/* Read a packet from the remote machine, with error checking, and
6d820c5c
DJ
6366 store it in *BUF. Resize *BUF using xrealloc if necessary to hold
6367 the result, and update *SIZEOF_BUF. If FOREVER, wait forever
6368 rather than timing out; this is used (in synchronous mode) to wait
6369 for a target that is is executing user code to stop. If FOREVER ==
6370 0, this function is allowed to time out gracefully and return an
74531fed
PA
6371 indication of this to the caller. Otherwise return the number of
6372 bytes read. If EXPECTING_NOTIF, consider receiving a notification
6373 enough reason to return to the caller. */
6374
3172dc30 6375static int
74531fed
PA
6376getpkt_or_notif_sane_1 (char **buf, long *sizeof_buf, int forever,
6377 int expecting_notif)
c906108c 6378{
2d717e4f 6379 struct remote_state *rs = get_remote_state ();
c906108c
SS
6380 int c;
6381 int tries;
6382 int timeout;
df4b58fe 6383 int val = -1;
c906108c 6384
2d717e4f
DJ
6385 /* We're reading a new response. Make sure we don't look at a
6386 previously cached response. */
6387 rs->cached_wait_status = 0;
6388
6d820c5c 6389 strcpy (*buf, "timeout");
c906108c
SS
6390
6391 if (forever)
74531fed
PA
6392 timeout = watchdog > 0 ? watchdog : -1;
6393 else if (expecting_notif)
6394 timeout = 0; /* There should already be a char in the buffer. If
6395 not, bail out. */
c906108c
SS
6396 else
6397 timeout = remote_timeout;
6398
6399#define MAX_TRIES 3
6400
74531fed
PA
6401 /* Process any number of notifications, and then return when
6402 we get a packet. */
6403 for (;;)
c906108c 6404 {
74531fed
PA
6405 /* If we get a timeout or bad checksm, retry up to MAX_TRIES
6406 times. */
6407 for (tries = 1; tries <= MAX_TRIES; tries++)
c906108c 6408 {
74531fed
PA
6409 /* This can loop forever if the remote side sends us
6410 characters continuously, but if it pauses, we'll get
6411 SERIAL_TIMEOUT from readchar because of timeout. Then
6412 we'll count that as a retry.
6413
6414 Note that even when forever is set, we will only wait
6415 forever prior to the start of a packet. After that, we
6416 expect characters to arrive at a brisk pace. They should
6417 show up within remote_timeout intervals. */
6418 do
6419 c = readchar (timeout);
6420 while (c != SERIAL_TIMEOUT && c != '$' && c != '%');
c906108c
SS
6421
6422 if (c == SERIAL_TIMEOUT)
6423 {
74531fed
PA
6424 if (expecting_notif)
6425 return -1; /* Don't complain, it's normal to not get
6426 anything in this case. */
6427
23860348 6428 if (forever) /* Watchdog went off? Kill the target. */
c906108c 6429 {
2acceee2 6430 QUIT;
ce5ce7ed 6431 pop_target ();
489eaeba 6432 error (_("Watchdog timeout has expired. Target detached."));
c906108c 6433 }
c906108c 6434 if (remote_debug)
0f71a2f6 6435 fputs_filtered ("Timed out.\n", gdb_stdlog);
c906108c 6436 }
74531fed
PA
6437 else
6438 {
6439 /* We've found the start of a packet or notification.
6440 Now collect the data. */
6441 val = read_frame (buf, sizeof_buf);
6442 if (val >= 0)
6443 break;
6444 }
6445
6446 serial_write (remote_desc, "-", 1);
c906108c 6447 }
c906108c 6448
74531fed
PA
6449 if (tries > MAX_TRIES)
6450 {
6451 /* We have tried hard enough, and just can't receive the
6452 packet/notification. Give up. */
6453 printf_unfiltered (_("Ignoring packet error, continuing...\n"));
c906108c 6454
74531fed
PA
6455 /* Skip the ack char if we're in no-ack mode. */
6456 if (!rs->noack_mode)
6457 serial_write (remote_desc, "+", 1);
6458 return -1;
6459 }
c906108c 6460
74531fed
PA
6461 /* If we got an ordinary packet, return that to our caller. */
6462 if (c == '$')
c906108c
SS
6463 {
6464 if (remote_debug)
43e526b9 6465 {
6e5abd65
PA
6466 struct cleanup *old_chain;
6467 char *str;
6468
6469 str = escape_buffer (*buf, val);
6470 old_chain = make_cleanup (xfree, str);
6471 fprintf_unfiltered (gdb_stdlog, "Packet received: %s\n", str);
6472 do_cleanups (old_chain);
43e526b9 6473 }
a6f3e723
SL
6474
6475 /* Skip the ack char if we're in no-ack mode. */
6476 if (!rs->noack_mode)
6477 serial_write (remote_desc, "+", 1);
0876f84a 6478 return val;
c906108c
SS
6479 }
6480
74531fed
PA
6481 /* If we got a notification, handle it, and go back to looking
6482 for a packet. */
6483 else
6484 {
6485 gdb_assert (c == '%');
6486
6487 if (remote_debug)
6488 {
6e5abd65
PA
6489 struct cleanup *old_chain;
6490 char *str;
6491
6492 str = escape_buffer (*buf, val);
6493 old_chain = make_cleanup (xfree, str);
6494 fprintf_unfiltered (gdb_stdlog,
6495 " Notification received: %s\n",
6496 str);
6497 do_cleanups (old_chain);
74531fed 6498 }
c906108c 6499
74531fed 6500 handle_notification (*buf, val);
c906108c 6501
74531fed 6502 /* Notifications require no acknowledgement. */
a6f3e723 6503
74531fed
PA
6504 if (expecting_notif)
6505 return -1;
6506 }
6507 }
6508}
6509
6510static int
6511getpkt_sane (char **buf, long *sizeof_buf, int forever)
6512{
6513 return getpkt_or_notif_sane_1 (buf, sizeof_buf, forever, 0);
6514}
6515
6516static int
6517getpkt_or_notif_sane (char **buf, long *sizeof_buf, int forever)
6518{
6519 return getpkt_or_notif_sane_1 (buf, sizeof_buf, forever, 1);
c906108c 6520}
74531fed 6521
c906108c
SS
6522\f
6523static void
7d85a9c0 6524remote_kill (struct target_ops *ops)
43ff13b4 6525{
23860348
MS
6526 /* Use catch_errors so the user can quit from gdb even when we
6527 aren't on speaking terms with the remote system. */
c5aa993b 6528 catch_errors ((catch_errors_ftype *) putpkt, "k", "", RETURN_MASK_ERROR);
43ff13b4
JM
6529
6530 /* Don't wait for it to die. I'm not really sure it matters whether
6531 we do or not. For the existing stubs, kill is a noop. */
6532 target_mourn_inferior ();
6533}
6534
82f73884
PA
6535static int
6536remote_vkill (int pid, struct remote_state *rs)
6537{
6538 if (remote_protocol_packets[PACKET_vKill].support == PACKET_DISABLE)
6539 return -1;
6540
6541 /* Tell the remote target to detach. */
6542 sprintf (rs->buf, "vKill;%x", pid);
6543 putpkt (rs->buf);
6544 getpkt (&rs->buf, &rs->buf_size, 0);
6545
6546 if (packet_ok (rs->buf,
6547 &remote_protocol_packets[PACKET_vKill]) == PACKET_OK)
6548 return 0;
6549 else if (remote_protocol_packets[PACKET_vKill].support == PACKET_DISABLE)
6550 return -1;
6551 else
6552 return 1;
6553}
6554
6555static void
7d85a9c0 6556extended_remote_kill (struct target_ops *ops)
82f73884
PA
6557{
6558 int res;
6559 int pid = ptid_get_pid (inferior_ptid);
6560 struct remote_state *rs = get_remote_state ();
6561
6562 res = remote_vkill (pid, rs);
6563 if (res == -1 && !remote_multi_process_p (rs))
6564 {
6565 /* Don't try 'k' on a multi-process aware stub -- it has no way
6566 to specify the pid. */
6567
6568 putpkt ("k");
6569#if 0
6570 getpkt (&rs->buf, &rs->buf_size, 0);
6571 if (rs->buf[0] != 'O' || rs->buf[0] != 'K')
6572 res = 1;
6573#else
6574 /* Don't wait for it to die. I'm not really sure it matters whether
6575 we do or not. For the existing stubs, kill is a noop. */
6576 res = 0;
6577#endif
6578 }
6579
6580 if (res != 0)
6581 error (_("Can't kill process"));
6582
82f73884
PA
6583 target_mourn_inferior ();
6584}
6585
c906108c 6586static void
136d6dae 6587remote_mourn (struct target_ops *ops)
c906108c 6588{
136d6dae 6589 remote_mourn_1 (ops);
c906108c
SS
6590}
6591
c906108c
SS
6592/* Worker function for remote_mourn. */
6593static void
fba45db2 6594remote_mourn_1 (struct target_ops *target)
c906108c
SS
6595{
6596 unpush_target (target);
ce5ce7ed 6597
8a2492ee
PA
6598 /* remote_close takes care of doing most of the clean up. */
6599 generic_mourn_inferior ();
c906108c
SS
6600}
6601
2d717e4f
DJ
6602static void
6603extended_remote_mourn_1 (struct target_ops *target)
6604{
6605 struct remote_state *rs = get_remote_state ();
c906108c 6606
e24a49d8
PA
6607 /* In case we got here due to an error, but we're going to stay
6608 connected. */
6609 rs->waiting_for_stop_reply = 0;
6610
74531fed
PA
6611 /* We're no longer interested in these events. */
6612 discard_pending_stop_replies (ptid_get_pid (inferior_ptid));
6613
dc1981d7
PA
6614 /* If the current general thread belonged to the process we just
6615 detached from or has exited, the remote side current general
6616 thread becomes undefined. Considering a case like this:
6617
6618 - We just got here due to a detach.
6619 - The process that we're detaching from happens to immediately
6620 report a global breakpoint being hit in non-stop mode, in the
6621 same thread we had selected before.
6622 - GDB attaches to this process again.
6623 - This event happens to be the next event we handle.
6624
6625 GDB would consider that the current general thread didn't need to
6626 be set on the stub side (with Hg), since for all it knew,
6627 GENERAL_THREAD hadn't changed.
6628
6629 Notice that although in all-stop mode, the remote server always
6630 sets the current thread to the thread reporting the stop event,
6631 that doesn't happen in non-stop mode; in non-stop, the stub *must
6632 not* change the current thread when reporting a breakpoint hit,
6633 due to the decoupling of event reporting and event handling.
6634
6635 To keep things simple, we always invalidate our notion of the
6636 current thread. */
6637 record_currthread (minus_one_ptid);
6638
2d717e4f
DJ
6639 /* Unlike "target remote", we do not want to unpush the target; then
6640 the next time the user says "run", we won't be connected. */
6641
48aa3c27
PA
6642 /* Call common code to mark the inferior as not running. */
6643 generic_mourn_inferior ();
6644
d729566a 6645 if (!have_inferiors ())
2d717e4f 6646 {
82f73884
PA
6647 if (!remote_multi_process_p (rs))
6648 {
6649 /* Check whether the target is running now - some remote stubs
6650 automatically restart after kill. */
6651 putpkt ("?");
6652 getpkt (&rs->buf, &rs->buf_size, 0);
6653
6654 if (rs->buf[0] == 'S' || rs->buf[0] == 'T')
6655 {
6656 /* Assume that the target has been restarted. Set inferior_ptid
6657 so that bits of core GDB realizes there's something here, e.g.,
6658 so that the user can say "kill" again. */
6659 inferior_ptid = magic_null_ptid;
6660 }
82f73884 6661 }
2d717e4f
DJ
6662 }
6663}
c906108c
SS
6664
6665static void
136d6dae 6666extended_remote_mourn (struct target_ops *ops)
c906108c 6667{
136d6dae 6668 extended_remote_mourn_1 (ops);
2d717e4f 6669}
c906108c 6670
2d717e4f
DJ
6671static int
6672extended_remote_run (char *args)
6673{
6674 struct remote_state *rs = get_remote_state ();
6675 char *p;
6676 int len;
c906108c 6677
2d717e4f
DJ
6678 /* If the user has disabled vRun support, or we have detected that
6679 support is not available, do not try it. */
6680 if (remote_protocol_packets[PACKET_vRun].support == PACKET_DISABLE)
6681 return -1;
424163ea 6682
2d717e4f
DJ
6683 strcpy (rs->buf, "vRun;");
6684 len = strlen (rs->buf);
c906108c 6685
2d717e4f
DJ
6686 if (strlen (remote_exec_file) * 2 + len >= get_remote_packet_size ())
6687 error (_("Remote file name too long for run packet"));
6688 len += 2 * bin2hex ((gdb_byte *) remote_exec_file, rs->buf + len, 0);
6689
d1a41061 6690 gdb_assert (args != NULL);
2d717e4f
DJ
6691 if (*args)
6692 {
6693 struct cleanup *back_to;
6694 int i;
6695 char **argv;
6696
d1a41061 6697 argv = gdb_buildargv (args);
2d717e4f
DJ
6698 back_to = make_cleanup ((void (*) (void *)) freeargv, argv);
6699 for (i = 0; argv[i] != NULL; i++)
6700 {
6701 if (strlen (argv[i]) * 2 + 1 + len >= get_remote_packet_size ())
6702 error (_("Argument list too long for run packet"));
6703 rs->buf[len++] = ';';
6704 len += 2 * bin2hex ((gdb_byte *) argv[i], rs->buf + len, 0);
6705 }
6706 do_cleanups (back_to);
6707 }
6708
6709 rs->buf[len++] = '\0';
6710
6711 putpkt (rs->buf);
6712 getpkt (&rs->buf, &rs->buf_size, 0);
6713
6714 if (packet_ok (rs->buf, &remote_protocol_packets[PACKET_vRun]) == PACKET_OK)
6715 {
6716 /* We have a wait response; we don't need it, though. All is well. */
6717 return 0;
6718 }
6719 else if (remote_protocol_packets[PACKET_vRun].support == PACKET_DISABLE)
6720 /* It wasn't disabled before, but it is now. */
6721 return -1;
6722 else
6723 {
6724 if (remote_exec_file[0] == '\0')
6725 error (_("Running the default executable on the remote target failed; "
6726 "try \"set remote exec-file\"?"));
6727 else
6728 error (_("Running \"%s\" on the remote target failed"),
6729 remote_exec_file);
6730 }
c906108c
SS
6731}
6732
2d717e4f
DJ
6733/* In the extended protocol we want to be able to do things like
6734 "run" and have them basically work as expected. So we need
6735 a special create_inferior function. We support changing the
6736 executable file and the command line arguments, but not the
6737 environment. */
6738
43ff13b4 6739static void
2d717e4f 6740extended_remote_create_inferior_1 (char *exec_file, char *args,
75c99385 6741 char **env, int from_tty)
43ff13b4 6742{
43ff13b4 6743 /* If running asynchronously, register the target file descriptor
23860348 6744 with the event loop. */
75c99385 6745 if (target_can_async_p ())
2acceee2 6746 target_async (inferior_event_handler, 0);
43ff13b4
JM
6747
6748 /* Now restart the remote server. */
2d717e4f
DJ
6749 if (extended_remote_run (args) == -1)
6750 {
6751 /* vRun was not supported. Fail if we need it to do what the
6752 user requested. */
6753 if (remote_exec_file[0])
6754 error (_("Remote target does not support \"set remote exec-file\""));
6755 if (args[0])
6756 error (_("Remote target does not support \"set args\" or run <ARGS>"));
43ff13b4 6757
2d717e4f
DJ
6758 /* Fall back to "R". */
6759 extended_remote_restart ();
6760 }
424163ea 6761
45280a52
DJ
6762 /* Clean up from the last time we ran, before we mark the target
6763 running again. This will mark breakpoints uninserted, and
6764 get_offsets may insert breakpoints. */
6765 init_thread_list ();
6766 init_wait_for_inferior ();
6767
2d717e4f 6768 /* Now mark the inferior as running before we do anything else. */
79d7f229 6769 inferior_ptid = magic_null_ptid;
c0a2216e 6770
74531fed
PA
6771 /* Now, if we have thread information, update inferior_ptid. */
6772 inferior_ptid = remote_current_thread (inferior_ptid);
6773
0b16c5cf 6774 remote_add_inferior (ptid_get_pid (inferior_ptid), 0);
c0a2216e
PA
6775 add_thread_silent (inferior_ptid);
6776
2d717e4f
DJ
6777 /* Get updated offsets, if the stub uses qOffsets. */
6778 get_offsets ();
2d717e4f
DJ
6779}
6780
6781static void
136d6dae
VP
6782extended_remote_create_inferior (struct target_ops *ops,
6783 char *exec_file, char *args,
2d717e4f
DJ
6784 char **env, int from_tty)
6785{
75c99385 6786 extended_remote_create_inferior_1 (exec_file, args, env, from_tty);
43ff13b4 6787}
c906108c 6788\f
c5aa993b 6789
8181d85f
DJ
6790/* Insert a breakpoint. On targets that have software breakpoint
6791 support, we ask the remote target to do the work; on targets
6792 which don't, we insert a traditional memory breakpoint. */
c906108c
SS
6793
6794static int
a6d9a66e
UW
6795remote_insert_breakpoint (struct gdbarch *gdbarch,
6796 struct bp_target_info *bp_tgt)
c906108c 6797{
d471ea57
AC
6798 /* Try the "Z" s/w breakpoint packet if it is not already disabled.
6799 If it succeeds, then set the support to PACKET_ENABLE. If it
6800 fails, and the user has explicitly requested the Z support then
23860348 6801 report an error, otherwise, mark it disabled and go on. */
802188a7 6802
444abaca 6803 if (remote_protocol_packets[PACKET_Z0].support != PACKET_DISABLE)
96baa820 6804 {
7c0f6dcc 6805 CORE_ADDR addr = bp_tgt->placed_address;
4fff2411
JZ
6806 struct remote_state *rs;
6807 char *p;
7c0f6dcc 6808 int bpsize;
4fff2411 6809
a6d9a66e 6810 gdbarch_breakpoint_from_pc (gdbarch, &addr, &bpsize);
4fff2411
JZ
6811
6812 rs = get_remote_state ();
6813 p = rs->buf;
802188a7 6814
96baa820
JM
6815 *(p++) = 'Z';
6816 *(p++) = '0';
6817 *(p++) = ',';
7c0f6dcc 6818 addr = (ULONGEST) remote_address_masked (addr);
8181d85f 6819 p += hexnumstr (p, addr);
7c0f6dcc 6820 sprintf (p, ",%d", bpsize);
802188a7 6821
6d820c5c
DJ
6822 putpkt (rs->buf);
6823 getpkt (&rs->buf, &rs->buf_size, 0);
96baa820 6824
6d820c5c 6825 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0]))
96baa820 6826 {
d471ea57
AC
6827 case PACKET_ERROR:
6828 return -1;
6829 case PACKET_OK:
7c0f6dcc
JL
6830 bp_tgt->placed_address = addr;
6831 bp_tgt->placed_size = bpsize;
d471ea57
AC
6832 return 0;
6833 case PACKET_UNKNOWN:
6834 break;
96baa820
JM
6835 }
6836 }
c906108c 6837
a6d9a66e 6838 return memory_insert_breakpoint (gdbarch, bp_tgt);
c906108c
SS
6839}
6840
6841static int
a6d9a66e
UW
6842remote_remove_breakpoint (struct gdbarch *gdbarch,
6843 struct bp_target_info *bp_tgt)
c906108c 6844{
8181d85f 6845 CORE_ADDR addr = bp_tgt->placed_address;
d01949b6 6846 struct remote_state *rs = get_remote_state ();
96baa820
JM
6847 int bp_size;
6848
444abaca 6849 if (remote_protocol_packets[PACKET_Z0].support != PACKET_DISABLE)
96baa820 6850 {
6d820c5c 6851 char *p = rs->buf;
802188a7 6852
96baa820
JM
6853 *(p++) = 'z';
6854 *(p++) = '0';
6855 *(p++) = ',';
6856
8181d85f
DJ
6857 addr = (ULONGEST) remote_address_masked (bp_tgt->placed_address);
6858 p += hexnumstr (p, addr);
6859 sprintf (p, ",%d", bp_tgt->placed_size);
802188a7 6860
6d820c5c
DJ
6861 putpkt (rs->buf);
6862 getpkt (&rs->buf, &rs->buf_size, 0);
96baa820 6863
6d820c5c 6864 return (rs->buf[0] == 'E');
96baa820
JM
6865 }
6866
a6d9a66e 6867 return memory_remove_breakpoint (gdbarch, bp_tgt);
c906108c
SS
6868}
6869
d471ea57
AC
6870static int
6871watchpoint_to_Z_packet (int type)
6872{
6873 switch (type)
6874 {
6875 case hw_write:
bb858e6a 6876 return Z_PACKET_WRITE_WP;
d471ea57
AC
6877 break;
6878 case hw_read:
bb858e6a 6879 return Z_PACKET_READ_WP;
d471ea57
AC
6880 break;
6881 case hw_access:
bb858e6a 6882 return Z_PACKET_ACCESS_WP;
d471ea57
AC
6883 break;
6884 default:
8e65ff28 6885 internal_error (__FILE__, __LINE__,
e2e0b3e5 6886 _("hw_bp_to_z: bad watchpoint type %d"), type);
d471ea57
AC
6887 }
6888}
6889
3c3bea1c 6890static int
fba45db2 6891remote_insert_watchpoint (CORE_ADDR addr, int len, int type)
96baa820 6892{
d01949b6 6893 struct remote_state *rs = get_remote_state ();
e514a9d6 6894 char *p;
d471ea57 6895 enum Z_packet_type packet = watchpoint_to_Z_packet (type);
96baa820 6896
444abaca 6897 if (remote_protocol_packets[PACKET_Z0 + packet].support == PACKET_DISABLE)
5cffb350 6898 return -1;
802188a7 6899
6d820c5c
DJ
6900 sprintf (rs->buf, "Z%x,", packet);
6901 p = strchr (rs->buf, '\0');
96baa820
JM
6902 addr = remote_address_masked (addr);
6903 p += hexnumstr (p, (ULONGEST) addr);
d4f3574e 6904 sprintf (p, ",%x", len);
802188a7 6905
6d820c5c
DJ
6906 putpkt (rs->buf);
6907 getpkt (&rs->buf, &rs->buf_size, 0);
96baa820 6908
6d820c5c 6909 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0 + packet]))
d471ea57
AC
6910 {
6911 case PACKET_ERROR:
6912 case PACKET_UNKNOWN:
6913 return -1;
6914 case PACKET_OK:
6915 return 0;
6916 }
8e65ff28 6917 internal_error (__FILE__, __LINE__,
e2e0b3e5 6918 _("remote_insert_watchpoint: reached end of function"));
96baa820
JM
6919}
6920
d471ea57 6921
3c3bea1c 6922static int
fba45db2 6923remote_remove_watchpoint (CORE_ADDR addr, int len, int type)
96baa820 6924{
d01949b6 6925 struct remote_state *rs = get_remote_state ();
e514a9d6 6926 char *p;
d471ea57
AC
6927 enum Z_packet_type packet = watchpoint_to_Z_packet (type);
6928
444abaca 6929 if (remote_protocol_packets[PACKET_Z0 + packet].support == PACKET_DISABLE)
5cffb350 6930 return -1;
802188a7 6931
6d820c5c
DJ
6932 sprintf (rs->buf, "z%x,", packet);
6933 p = strchr (rs->buf, '\0');
96baa820
JM
6934 addr = remote_address_masked (addr);
6935 p += hexnumstr (p, (ULONGEST) addr);
d4f3574e 6936 sprintf (p, ",%x", len);
6d820c5c
DJ
6937 putpkt (rs->buf);
6938 getpkt (&rs->buf, &rs->buf_size, 0);
96baa820 6939
6d820c5c 6940 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0 + packet]))
d471ea57
AC
6941 {
6942 case PACKET_ERROR:
6943 case PACKET_UNKNOWN:
6944 return -1;
6945 case PACKET_OK:
6946 return 0;
6947 }
8e65ff28 6948 internal_error (__FILE__, __LINE__,
e2e0b3e5 6949 _("remote_remove_watchpoint: reached end of function"));
96baa820
JM
6950}
6951
3c3bea1c 6952
501eef12
AC
6953int remote_hw_watchpoint_limit = -1;
6954int remote_hw_breakpoint_limit = -1;
d471ea57 6955
b9362cc7 6956static int
3c3bea1c 6957remote_check_watch_resources (int type, int cnt, int ot)
96baa820 6958{
3c3bea1c
GS
6959 if (type == bp_hardware_breakpoint)
6960 {
6961 if (remote_hw_breakpoint_limit == 0)
6962 return 0;
501eef12
AC
6963 else if (remote_hw_breakpoint_limit < 0)
6964 return 1;
3c3bea1c
GS
6965 else if (cnt <= remote_hw_breakpoint_limit)
6966 return 1;
6967 }
6968 else
6969 {
6970 if (remote_hw_watchpoint_limit == 0)
6971 return 0;
501eef12
AC
6972 else if (remote_hw_watchpoint_limit < 0)
6973 return 1;
3c3bea1c
GS
6974 else if (ot)
6975 return -1;
6976 else if (cnt <= remote_hw_watchpoint_limit)
6977 return 1;
6978 }
6979 return -1;
6980}
6981
b9362cc7 6982static int
3c3bea1c
GS
6983remote_stopped_by_watchpoint (void)
6984{
82f73884 6985 return remote_stopped_by_watchpoint_p;
3c3bea1c
GS
6986}
6987
4aa7a7f5
JJ
6988static int
6989remote_stopped_data_address (struct target_ops *target, CORE_ADDR *addr_p)
3c3bea1c 6990{
4aa7a7f5 6991 int rc = 0;
d983da9c 6992 if (remote_stopped_by_watchpoint ())
4aa7a7f5
JJ
6993 {
6994 *addr_p = remote_watch_data_address;
6995 rc = 1;
6996 }
6997
6998 return rc;
3c3bea1c
GS
6999}
7000
7001
7002static int
a6d9a66e
UW
7003remote_insert_hw_breakpoint (struct gdbarch *gdbarch,
7004 struct bp_target_info *bp_tgt)
3c3bea1c 7005{
8181d85f 7006 CORE_ADDR addr;
4fff2411
JZ
7007 struct remote_state *rs;
7008 char *p;
802188a7 7009
c8189ed1 7010 /* The length field should be set to the size of a breakpoint
8181d85f 7011 instruction, even though we aren't inserting one ourselves. */
c8189ed1 7012
3b3b875c 7013 gdbarch_breakpoint_from_pc
a6d9a66e 7014 (gdbarch, &bp_tgt->placed_address, &bp_tgt->placed_size);
3c3bea1c 7015
444abaca 7016 if (remote_protocol_packets[PACKET_Z1].support == PACKET_DISABLE)
5cffb350 7017 return -1;
2bc416ba 7018
4fff2411
JZ
7019 rs = get_remote_state ();
7020 p = rs->buf;
7021
96baa820
JM
7022 *(p++) = 'Z';
7023 *(p++) = '1';
7024 *(p++) = ',';
802188a7 7025
8181d85f 7026 addr = remote_address_masked (bp_tgt->placed_address);
96baa820 7027 p += hexnumstr (p, (ULONGEST) addr);
8181d85f 7028 sprintf (p, ",%x", bp_tgt->placed_size);
96baa820 7029
6d820c5c
DJ
7030 putpkt (rs->buf);
7031 getpkt (&rs->buf, &rs->buf_size, 0);
96baa820 7032
6d820c5c 7033 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z1]))
d471ea57
AC
7034 {
7035 case PACKET_ERROR:
7036 case PACKET_UNKNOWN:
7037 return -1;
7038 case PACKET_OK:
7039 return 0;
7040 }
8e65ff28 7041 internal_error (__FILE__, __LINE__,
e2e0b3e5 7042 _("remote_insert_hw_breakpoint: reached end of function"));
96baa820
JM
7043}
7044
d471ea57 7045
802188a7 7046static int
a6d9a66e
UW
7047remote_remove_hw_breakpoint (struct gdbarch *gdbarch,
7048 struct bp_target_info *bp_tgt)
96baa820 7049{
8181d85f 7050 CORE_ADDR addr;
d01949b6 7051 struct remote_state *rs = get_remote_state ();
6d820c5c 7052 char *p = rs->buf;
c8189ed1 7053
444abaca 7054 if (remote_protocol_packets[PACKET_Z1].support == PACKET_DISABLE)
5cffb350 7055 return -1;
802188a7 7056
96baa820
JM
7057 *(p++) = 'z';
7058 *(p++) = '1';
7059 *(p++) = ',';
802188a7 7060
8181d85f 7061 addr = remote_address_masked (bp_tgt->placed_address);
96baa820 7062 p += hexnumstr (p, (ULONGEST) addr);
8181d85f 7063 sprintf (p, ",%x", bp_tgt->placed_size);
96baa820 7064
6d820c5c
DJ
7065 putpkt (rs->buf);
7066 getpkt (&rs->buf, &rs->buf_size, 0);
802188a7 7067
6d820c5c 7068 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z1]))
d471ea57
AC
7069 {
7070 case PACKET_ERROR:
7071 case PACKET_UNKNOWN:
7072 return -1;
7073 case PACKET_OK:
7074 return 0;
7075 }
8e65ff28 7076 internal_error (__FILE__, __LINE__,
e2e0b3e5 7077 _("remote_remove_hw_breakpoint: reached end of function"));
96baa820 7078}
96baa820 7079
23860348 7080/* Table used by the crc32 function to calcuate the checksum. */
c906108c 7081
c5aa993b
JM
7082static unsigned long crc32_table[256] =
7083{0, 0};
c906108c
SS
7084
7085static unsigned long
fba45db2 7086crc32 (unsigned char *buf, int len, unsigned int crc)
c906108c 7087{
c5aa993b 7088 if (!crc32_table[1])
c906108c 7089 {
23860348 7090 /* Initialize the CRC table and the decoding table. */
c906108c
SS
7091 int i, j;
7092 unsigned int c;
7093
7094 for (i = 0; i < 256; i++)
c5aa993b
JM
7095 {
7096 for (c = i << 24, j = 8; j > 0; --j)
7097 c = c & 0x80000000 ? (c << 1) ^ 0x04c11db7 : (c << 1);
7098 crc32_table[i] = c;
7099 }
c906108c
SS
7100 }
7101
7102 while (len--)
7103 {
7104 crc = (crc << 8) ^ crc32_table[((crc >> 24) ^ *buf) & 255];
7105 buf++;
7106 }
7107 return crc;
7108}
7109
7110/* compare-sections command
7111
7112 With no arguments, compares each loadable section in the exec bfd
7113 with the same memory range on the target, and reports mismatches.
7114 Useful for verifying the image on the target against the exec file.
7115 Depends on the target understanding the new "qCRC:" request. */
7116
e514a9d6
JM
7117/* FIXME: cagney/1999-10-26: This command should be broken down into a
7118 target method (target verify memory) and generic version of the
7119 actual command. This will allow other high-level code (especially
23860348 7120 generic_load()) to make use of this target functionality. */
e514a9d6 7121
c906108c 7122static void
fba45db2 7123compare_sections_command (char *args, int from_tty)
c906108c 7124{
d01949b6 7125 struct remote_state *rs = get_remote_state ();
c906108c
SS
7126 asection *s;
7127 unsigned long host_crc, target_crc;
c906108c 7128 struct cleanup *old_chain;
085dd6e6
JM
7129 char *tmp;
7130 char *sectdata;
ce359b09 7131 const char *sectname;
c906108c
SS
7132 bfd_size_type size;
7133 bfd_vma lma;
7134 int matched = 0;
7135 int mismatched = 0;
7136
7137 if (!exec_bfd)
8a3fe4f8 7138 error (_("command cannot be used without an exec file"));
c906108c
SS
7139 if (!current_target.to_shortname ||
7140 strcmp (current_target.to_shortname, "remote") != 0)
8a3fe4f8 7141 error (_("command can only be used with remote target"));
c906108c 7142
c5aa993b 7143 for (s = exec_bfd->sections; s; s = s->next)
c906108c
SS
7144 {
7145 if (!(s->flags & SEC_LOAD))
c5aa993b 7146 continue; /* skip non-loadable section */
c906108c 7147
2c500098 7148 size = bfd_get_section_size (s);
c906108c 7149 if (size == 0)
c5aa993b 7150 continue; /* skip zero-length section */
c906108c 7151
ce359b09 7152 sectname = bfd_get_section_name (exec_bfd, s);
c906108c 7153 if (args && strcmp (args, sectname) != 0)
c5aa993b 7154 continue; /* not the section selected by user */
c906108c 7155
c5aa993b 7156 matched = 1; /* do this section */
c906108c 7157 lma = s->lma;
23860348 7158 /* FIXME: assumes lma can fit into long. */
ea9c271d 7159 xsnprintf (rs->buf, get_remote_packet_size (), "qCRC:%lx,%lx",
ecbc58df 7160 (long) lma, (long) size);
6d820c5c 7161 putpkt (rs->buf);
c906108c 7162
23860348
MS
7163 /* Be clever; compute the host_crc before waiting for target
7164 reply. */
c906108c 7165 sectdata = xmalloc (size);
b8c9b27d 7166 old_chain = make_cleanup (xfree, sectdata);
c906108c
SS
7167 bfd_get_section_contents (exec_bfd, s, sectdata, 0, size);
7168 host_crc = crc32 ((unsigned char *) sectdata, size, 0xffffffff);
7169
6d820c5c
DJ
7170 getpkt (&rs->buf, &rs->buf_size, 0);
7171 if (rs->buf[0] == 'E')
8a3fe4f8 7172 error (_("target memory fault, section %s, range 0x%s -- 0x%s"),
823ca731 7173 sectname, paddr (lma), paddr (lma + size));
6d820c5c 7174 if (rs->buf[0] != 'C')
8a3fe4f8 7175 error (_("remote target does not support this operation"));
c906108c 7176
6d820c5c 7177 for (target_crc = 0, tmp = &rs->buf[1]; *tmp; tmp++)
c906108c
SS
7178 target_crc = target_crc * 16 + fromhex (*tmp);
7179
d4f3574e
SS
7180 printf_filtered ("Section %s, range 0x%s -- 0x%s: ",
7181 sectname, paddr (lma), paddr (lma + size));
c906108c
SS
7182 if (host_crc == target_crc)
7183 printf_filtered ("matched.\n");
7184 else
c5aa993b
JM
7185 {
7186 printf_filtered ("MIS-MATCHED!\n");
7187 mismatched++;
7188 }
c906108c
SS
7189
7190 do_cleanups (old_chain);
7191 }
7192 if (mismatched > 0)
8a3fe4f8
AC
7193 warning (_("One or more sections of the remote executable does not match\n\
7194the loaded file\n"));
c906108c 7195 if (args && !matched)
a3f17187 7196 printf_filtered (_("No loaded section named '%s'.\n"), args);
c906108c
SS
7197}
7198
0e7f50da
UW
7199/* Write LEN bytes from WRITEBUF into OBJECT_NAME/ANNEX at OFFSET
7200 into remote target. The number of bytes written to the remote
7201 target is returned, or -1 for error. */
7202
7203static LONGEST
7204remote_write_qxfer (struct target_ops *ops, const char *object_name,
7205 const char *annex, const gdb_byte *writebuf,
7206 ULONGEST offset, LONGEST len,
7207 struct packet_config *packet)
7208{
7209 int i, buf_len;
7210 ULONGEST n;
7211 gdb_byte *wbuf;
7212 struct remote_state *rs = get_remote_state ();
7213 int max_size = get_memory_write_packet_size ();
7214
7215 if (packet->support == PACKET_DISABLE)
7216 return -1;
7217
7218 /* Insert header. */
7219 i = snprintf (rs->buf, max_size,
7220 "qXfer:%s:write:%s:%s:",
7221 object_name, annex ? annex : "",
7222 phex_nz (offset, sizeof offset));
7223 max_size -= (i + 1);
7224
7225 /* Escape as much data as fits into rs->buf. */
7226 buf_len = remote_escape_output
7227 (writebuf, len, (rs->buf + i), &max_size, max_size);
7228
7229 if (putpkt_binary (rs->buf, i + buf_len) < 0
7230 || getpkt_sane (&rs->buf, &rs->buf_size, 0) < 0
7231 || packet_ok (rs->buf, packet) != PACKET_OK)
7232 return -1;
7233
7234 unpack_varlen_hex (rs->buf, &n);
7235 return n;
7236}
7237
0876f84a
DJ
7238/* Read OBJECT_NAME/ANNEX from the remote target using a qXfer packet.
7239 Data at OFFSET, of up to LEN bytes, is read into READBUF; the
7240 number of bytes read is returned, or 0 for EOF, or -1 for error.
7241 The number of bytes read may be less than LEN without indicating an
7242 EOF. PACKET is checked and updated to indicate whether the remote
7243 target supports this object. */
7244
7245static LONGEST
7246remote_read_qxfer (struct target_ops *ops, const char *object_name,
7247 const char *annex,
7248 gdb_byte *readbuf, ULONGEST offset, LONGEST len,
7249 struct packet_config *packet)
7250{
7251 static char *finished_object;
7252 static char *finished_annex;
7253 static ULONGEST finished_offset;
7254
7255 struct remote_state *rs = get_remote_state ();
7256 unsigned int total = 0;
7257 LONGEST i, n, packet_len;
7258
7259 if (packet->support == PACKET_DISABLE)
7260 return -1;
7261
7262 /* Check whether we've cached an end-of-object packet that matches
7263 this request. */
7264 if (finished_object)
7265 {
7266 if (strcmp (object_name, finished_object) == 0
7267 && strcmp (annex ? annex : "", finished_annex) == 0
7268 && offset == finished_offset)
7269 return 0;
7270
7271 /* Otherwise, we're now reading something different. Discard
7272 the cache. */
7273 xfree (finished_object);
7274 xfree (finished_annex);
7275 finished_object = NULL;
7276 finished_annex = NULL;
7277 }
7278
7279 /* Request only enough to fit in a single packet. The actual data
7280 may not, since we don't know how much of it will need to be escaped;
7281 the target is free to respond with slightly less data. We subtract
7282 five to account for the response type and the protocol frame. */
7283 n = min (get_remote_packet_size () - 5, len);
7284 snprintf (rs->buf, get_remote_packet_size () - 4, "qXfer:%s:read:%s:%s,%s",
7285 object_name, annex ? annex : "",
7286 phex_nz (offset, sizeof offset),
7287 phex_nz (n, sizeof n));
7288 i = putpkt (rs->buf);
7289 if (i < 0)
7290 return -1;
7291
7292 rs->buf[0] = '\0';
7293 packet_len = getpkt_sane (&rs->buf, &rs->buf_size, 0);
7294 if (packet_len < 0 || packet_ok (rs->buf, packet) != PACKET_OK)
7295 return -1;
7296
7297 if (rs->buf[0] != 'l' && rs->buf[0] != 'm')
7298 error (_("Unknown remote qXfer reply: %s"), rs->buf);
7299
7300 /* 'm' means there is (or at least might be) more data after this
7301 batch. That does not make sense unless there's at least one byte
7302 of data in this reply. */
7303 if (rs->buf[0] == 'm' && packet_len == 1)
7304 error (_("Remote qXfer reply contained no data."));
7305
7306 /* Got some data. */
7307 i = remote_unescape_input (rs->buf + 1, packet_len - 1, readbuf, n);
7308
7309 /* 'l' is an EOF marker, possibly including a final block of data,
0e7f50da
UW
7310 or possibly empty. If we have the final block of a non-empty
7311 object, record this fact to bypass a subsequent partial read. */
7312 if (rs->buf[0] == 'l' && offset + i > 0)
0876f84a
DJ
7313 {
7314 finished_object = xstrdup (object_name);
7315 finished_annex = xstrdup (annex ? annex : "");
7316 finished_offset = offset + i;
7317 }
7318
7319 return i;
7320}
7321
1e3ff5ad 7322static LONGEST
4b8a223f 7323remote_xfer_partial (struct target_ops *ops, enum target_object object,
961cb7b5
MK
7324 const char *annex, gdb_byte *readbuf,
7325 const gdb_byte *writebuf, ULONGEST offset, LONGEST len)
c906108c 7326{
82f73884 7327 struct remote_state *rs;
c906108c 7328 int i;
6d820c5c 7329 char *p2;
1e3ff5ad 7330 char query_type;
c906108c 7331
82f73884
PA
7332 set_general_thread (inferior_ptid);
7333
7334 rs = get_remote_state ();
7335
b2182ed2 7336 /* Handle memory using the standard memory routines. */
21e3b9b9
DJ
7337 if (object == TARGET_OBJECT_MEMORY)
7338 {
7339 int xfered;
7340 errno = 0;
7341
2d717e4f
DJ
7342 /* If the remote target is connected but not running, we should
7343 pass this request down to a lower stratum (e.g. the executable
7344 file). */
7345 if (!target_has_execution)
7346 return 0;
7347
21e3b9b9 7348 if (writebuf != NULL)
b2182ed2 7349 xfered = remote_write_bytes (offset, writebuf, len);
21e3b9b9 7350 else
b2182ed2 7351 xfered = remote_read_bytes (offset, readbuf, len);
21e3b9b9
DJ
7352
7353 if (xfered > 0)
7354 return xfered;
7355 else if (xfered == 0 && errno == 0)
7356 return 0;
7357 else
7358 return -1;
7359 }
7360
0e7f50da
UW
7361 /* Handle SPU memory using qxfer packets. */
7362 if (object == TARGET_OBJECT_SPU)
7363 {
7364 if (readbuf)
7365 return remote_read_qxfer (ops, "spu", annex, readbuf, offset, len,
7366 &remote_protocol_packets
7367 [PACKET_qXfer_spu_read]);
7368 else
7369 return remote_write_qxfer (ops, "spu", annex, writebuf, offset, len,
7370 &remote_protocol_packets
7371 [PACKET_qXfer_spu_write]);
7372 }
7373
4aa995e1
PA
7374 /* Handle extra signal info using qxfer packets. */
7375 if (object == TARGET_OBJECT_SIGNAL_INFO)
7376 {
7377 if (readbuf)
7378 return remote_read_qxfer (ops, "siginfo", annex, readbuf, offset, len,
7379 &remote_protocol_packets
7380 [PACKET_qXfer_siginfo_read]);
7381 else
7382 return remote_write_qxfer (ops, "siginfo", annex, writebuf, offset, len,
7383 &remote_protocol_packets
7384 [PACKET_qXfer_siginfo_write]);
7385 }
7386
a76d924d
DJ
7387 /* Only handle flash writes. */
7388 if (writebuf != NULL)
7389 {
7390 LONGEST xfered;
7391
7392 switch (object)
7393 {
7394 case TARGET_OBJECT_FLASH:
7395 xfered = remote_flash_write (ops, offset, len, writebuf);
7396
7397 if (xfered > 0)
7398 return xfered;
7399 else if (xfered == 0 && errno == 0)
7400 return 0;
7401 else
7402 return -1;
7403
7404 default:
7405 return -1;
7406 }
7407 }
4b8a223f 7408
1e3ff5ad
AC
7409 /* Map pre-existing objects onto letters. DO NOT do this for new
7410 objects!!! Instead specify new query packets. */
7411 switch (object)
c906108c 7412 {
1e3ff5ad
AC
7413 case TARGET_OBJECT_AVR:
7414 query_type = 'R';
7415 break;
802188a7
RM
7416
7417 case TARGET_OBJECT_AUXV:
0876f84a
DJ
7418 gdb_assert (annex == NULL);
7419 return remote_read_qxfer (ops, "auxv", annex, readbuf, offset, len,
7420 &remote_protocol_packets[PACKET_qXfer_auxv]);
802188a7 7421
23181151
DJ
7422 case TARGET_OBJECT_AVAILABLE_FEATURES:
7423 return remote_read_qxfer
7424 (ops, "features", annex, readbuf, offset, len,
7425 &remote_protocol_packets[PACKET_qXfer_features]);
7426
cfa9d6d9
DJ
7427 case TARGET_OBJECT_LIBRARIES:
7428 return remote_read_qxfer
7429 (ops, "libraries", annex, readbuf, offset, len,
7430 &remote_protocol_packets[PACKET_qXfer_libraries]);
7431
fd79ecee
DJ
7432 case TARGET_OBJECT_MEMORY_MAP:
7433 gdb_assert (annex == NULL);
7434 return remote_read_qxfer (ops, "memory-map", annex, readbuf, offset, len,
7435 &remote_protocol_packets[PACKET_qXfer_memory_map]);
7436
07e059b5
VP
7437 case TARGET_OBJECT_OSDATA:
7438 /* Should only get here if we're connected. */
7439 gdb_assert (remote_desc);
7440 return remote_read_qxfer
7441 (ops, "osdata", annex, readbuf, offset, len,
7442 &remote_protocol_packets[PACKET_qXfer_osdata]);
7443
1e3ff5ad 7444 default:
c906108c
SS
7445 return -1;
7446 }
7447
4b8a223f 7448 /* Note: a zero OFFSET and LEN can be used to query the minimum
1e3ff5ad 7449 buffer size. */
4b8a223f 7450 if (offset == 0 && len == 0)
ea9c271d
DJ
7451 return (get_remote_packet_size ());
7452 /* Minimum outbuf size is get_remote_packet_size (). If LEN is not
24b06219 7453 large enough let the caller deal with it. */
ea9c271d 7454 if (len < get_remote_packet_size ())
1e3ff5ad 7455 return -1;
ea9c271d 7456 len = get_remote_packet_size ();
1e3ff5ad 7457
23860348 7458 /* Except for querying the minimum buffer size, target must be open. */
c5aa993b 7459 if (!remote_desc)
8a3fe4f8 7460 error (_("remote query is only available after target open"));
c906108c 7461
1e3ff5ad 7462 gdb_assert (annex != NULL);
4b8a223f 7463 gdb_assert (readbuf != NULL);
c906108c 7464
6d820c5c 7465 p2 = rs->buf;
c906108c
SS
7466 *p2++ = 'q';
7467 *p2++ = query_type;
7468
23860348
MS
7469 /* We used one buffer char for the remote protocol q command and
7470 another for the query type. As the remote protocol encapsulation
7471 uses 4 chars plus one extra in case we are debugging
7472 (remote_debug), we have PBUFZIZ - 7 left to pack the query
7473 string. */
c906108c 7474 i = 0;
ea9c271d 7475 while (annex[i] && (i < (get_remote_packet_size () - 8)))
c906108c 7476 {
1e3ff5ad
AC
7477 /* Bad caller may have sent forbidden characters. */
7478 gdb_assert (isprint (annex[i]) && annex[i] != '$' && annex[i] != '#');
7479 *p2++ = annex[i];
c906108c
SS
7480 i++;
7481 }
1e3ff5ad
AC
7482 *p2 = '\0';
7483 gdb_assert (annex[i] == '\0');
c906108c 7484
6d820c5c 7485 i = putpkt (rs->buf);
c5aa993b
JM
7486 if (i < 0)
7487 return i;
c906108c 7488
6d820c5c
DJ
7489 getpkt (&rs->buf, &rs->buf_size, 0);
7490 strcpy ((char *) readbuf, rs->buf);
c906108c 7491
cfd77fa1 7492 return strlen ((char *) readbuf);
c906108c
SS
7493}
7494
08388c79
DE
7495static int
7496remote_search_memory (struct target_ops* ops,
7497 CORE_ADDR start_addr, ULONGEST search_space_len,
7498 const gdb_byte *pattern, ULONGEST pattern_len,
7499 CORE_ADDR *found_addrp)
7500{
7501 struct remote_state *rs = get_remote_state ();
7502 int max_size = get_memory_write_packet_size ();
7503 struct packet_config *packet =
7504 &remote_protocol_packets[PACKET_qSearch_memory];
7505 /* number of packet bytes used to encode the pattern,
7506 this could be more than PATTERN_LEN due to escape characters */
7507 int escaped_pattern_len;
7508 /* amount of pattern that was encodable in the packet */
7509 int used_pattern_len;
7510 int i;
7511 int found;
7512 ULONGEST found_addr;
7513
7514 /* Don't go to the target if we don't have to.
7515 This is done before checking packet->support to avoid the possibility that
7516 a success for this edge case means the facility works in general. */
7517 if (pattern_len > search_space_len)
7518 return 0;
7519 if (pattern_len == 0)
7520 {
7521 *found_addrp = start_addr;
7522 return 1;
7523 }
7524
7525 /* If we already know the packet isn't supported, fall back to the simple
7526 way of searching memory. */
7527
7528 if (packet->support == PACKET_DISABLE)
7529 {
7530 /* Target doesn't provided special support, fall back and use the
7531 standard support (copy memory and do the search here). */
7532 return simple_search_memory (ops, start_addr, search_space_len,
7533 pattern, pattern_len, found_addrp);
7534 }
7535
7536 /* Insert header. */
7537 i = snprintf (rs->buf, max_size,
7538 "qSearch:memory:%s;%s;",
7539 paddr_nz (start_addr),
7540 phex_nz (search_space_len, sizeof (search_space_len)));
7541 max_size -= (i + 1);
7542
7543 /* Escape as much data as fits into rs->buf. */
7544 escaped_pattern_len =
7545 remote_escape_output (pattern, pattern_len, (rs->buf + i),
7546 &used_pattern_len, max_size);
7547
7548 /* Bail if the pattern is too large. */
7549 if (used_pattern_len != pattern_len)
10e0fa18 7550 error ("Pattern is too large to transmit to remote target.");
08388c79
DE
7551
7552 if (putpkt_binary (rs->buf, i + escaped_pattern_len) < 0
7553 || getpkt_sane (&rs->buf, &rs->buf_size, 0) < 0
7554 || packet_ok (rs->buf, packet) != PACKET_OK)
7555 {
7556 /* The request may not have worked because the command is not
7557 supported. If so, fall back to the simple way. */
7558 if (packet->support == PACKET_DISABLE)
7559 {
7560 return simple_search_memory (ops, start_addr, search_space_len,
7561 pattern, pattern_len, found_addrp);
7562 }
7563 return -1;
7564 }
7565
7566 if (rs->buf[0] == '0')
7567 found = 0;
7568 else if (rs->buf[0] == '1')
7569 {
7570 found = 1;
7571 if (rs->buf[1] != ',')
10e0fa18 7572 error (_("Unknown qSearch:memory reply: %s"), rs->buf);
08388c79
DE
7573 unpack_varlen_hex (rs->buf + 2, &found_addr);
7574 *found_addrp = found_addr;
7575 }
7576 else
10e0fa18 7577 error (_("Unknown qSearch:memory reply: %s"), rs->buf);
08388c79
DE
7578
7579 return found;
7580}
7581
96baa820
JM
7582static void
7583remote_rcmd (char *command,
d9fcf2fb 7584 struct ui_file *outbuf)
96baa820 7585{
d01949b6 7586 struct remote_state *rs = get_remote_state ();
2e9f7625 7587 char *p = rs->buf;
96baa820
JM
7588
7589 if (!remote_desc)
8a3fe4f8 7590 error (_("remote rcmd is only available after target open"));
96baa820 7591
23860348 7592 /* Send a NULL command across as an empty command. */
7be570e7
JM
7593 if (command == NULL)
7594 command = "";
7595
23860348 7596 /* The query prefix. */
2e9f7625
DJ
7597 strcpy (rs->buf, "qRcmd,");
7598 p = strchr (rs->buf, '\0');
96baa820 7599
2e9f7625 7600 if ((strlen (rs->buf) + strlen (command) * 2 + 8/*misc*/) > get_remote_packet_size ())
8a3fe4f8 7601 error (_("\"monitor\" command ``%s'' is too long."), command);
96baa820 7602
23860348 7603 /* Encode the actual command. */
cfd77fa1 7604 bin2hex ((gdb_byte *) command, p, 0);
96baa820 7605
6d820c5c 7606 if (putpkt (rs->buf) < 0)
8a3fe4f8 7607 error (_("Communication problem with target."));
96baa820
JM
7608
7609 /* get/display the response */
7610 while (1)
7611 {
2e9f7625
DJ
7612 char *buf;
7613
23860348 7614 /* XXX - see also tracepoint.c:remote_get_noisy_reply(). */
2e9f7625 7615 rs->buf[0] = '\0';
6d820c5c 7616 getpkt (&rs->buf, &rs->buf_size, 0);
2e9f7625 7617 buf = rs->buf;
96baa820 7618 if (buf[0] == '\0')
8a3fe4f8 7619 error (_("Target does not support this command."));
96baa820
JM
7620 if (buf[0] == 'O' && buf[1] != 'K')
7621 {
23860348 7622 remote_console_output (buf + 1); /* 'O' message from stub. */
96baa820
JM
7623 continue;
7624 }
7625 if (strcmp (buf, "OK") == 0)
7626 break;
7be570e7
JM
7627 if (strlen (buf) == 3 && buf[0] == 'E'
7628 && isdigit (buf[1]) && isdigit (buf[2]))
7629 {
8a3fe4f8 7630 error (_("Protocol error with Rcmd"));
7be570e7 7631 }
96baa820
JM
7632 for (p = buf; p[0] != '\0' && p[1] != '\0'; p += 2)
7633 {
7634 char c = (fromhex (p[0]) << 4) + fromhex (p[1]);
7635 fputc_unfiltered (c, outbuf);
7636 }
7637 break;
7638 }
7639}
7640
fd79ecee
DJ
7641static VEC(mem_region_s) *
7642remote_memory_map (struct target_ops *ops)
7643{
7644 VEC(mem_region_s) *result = NULL;
7645 char *text = target_read_stralloc (&current_target,
7646 TARGET_OBJECT_MEMORY_MAP, NULL);
7647
7648 if (text)
7649 {
7650 struct cleanup *back_to = make_cleanup (xfree, text);
7651 result = parse_memory_map (text);
7652 do_cleanups (back_to);
7653 }
7654
7655 return result;
7656}
7657
c906108c 7658static void
fba45db2 7659packet_command (char *args, int from_tty)
c906108c 7660{
d01949b6 7661 struct remote_state *rs = get_remote_state ();
c906108c 7662
c5aa993b 7663 if (!remote_desc)
8a3fe4f8 7664 error (_("command can only be used with remote target"));
c906108c 7665
c5aa993b 7666 if (!args)
8a3fe4f8 7667 error (_("remote-packet command requires packet text as argument"));
c906108c
SS
7668
7669 puts_filtered ("sending: ");
7670 print_packet (args);
7671 puts_filtered ("\n");
7672 putpkt (args);
7673
6d820c5c 7674 getpkt (&rs->buf, &rs->buf_size, 0);
c906108c 7675 puts_filtered ("received: ");
6d820c5c 7676 print_packet (rs->buf);
c906108c
SS
7677 puts_filtered ("\n");
7678}
7679
7680#if 0
23860348 7681/* --------- UNIT_TEST for THREAD oriented PACKETS ------------------- */
c906108c 7682
a14ed312 7683static void display_thread_info (struct gdb_ext_thread_info *info);
c906108c 7684
a14ed312 7685static void threadset_test_cmd (char *cmd, int tty);
c906108c 7686
a14ed312 7687static void threadalive_test (char *cmd, int tty);
c906108c 7688
a14ed312 7689static void threadlist_test_cmd (char *cmd, int tty);
c906108c 7690
23860348 7691int get_and_display_threadinfo (threadref *ref);
c906108c 7692
a14ed312 7693static void threadinfo_test_cmd (char *cmd, int tty);
c906108c 7694
23860348 7695static int thread_display_step (threadref *ref, void *context);
c906108c 7696
a14ed312 7697static void threadlist_update_test_cmd (char *cmd, int tty);
c906108c 7698
a14ed312 7699static void init_remote_threadtests (void);
c906108c 7700
23860348 7701#define SAMPLE_THREAD 0x05060708 /* Truncated 64 bit threadid. */
c906108c
SS
7702
7703static void
fba45db2 7704threadset_test_cmd (char *cmd, int tty)
c906108c
SS
7705{
7706 int sample_thread = SAMPLE_THREAD;
7707
a3f17187 7708 printf_filtered (_("Remote threadset test\n"));
79d7f229 7709 set_general_thread (sample_thread);
c906108c
SS
7710}
7711
7712
7713static void
fba45db2 7714threadalive_test (char *cmd, int tty)
c906108c
SS
7715{
7716 int sample_thread = SAMPLE_THREAD;
79d7f229
PA
7717 int pid = ptid_get_pid (inferior_ptid);
7718 ptid_t ptid = ptid_build (pid, 0, sample_thread);
c906108c 7719
79d7f229 7720 if (remote_thread_alive (ptid))
c906108c
SS
7721 printf_filtered ("PASS: Thread alive test\n");
7722 else
7723 printf_filtered ("FAIL: Thread alive test\n");
7724}
7725
23860348 7726void output_threadid (char *title, threadref *ref);
c906108c
SS
7727
7728void
fba45db2 7729output_threadid (char *title, threadref *ref)
c906108c
SS
7730{
7731 char hexid[20];
7732
23860348 7733 pack_threadid (&hexid[0], ref); /* Convert threead id into hex. */
c906108c
SS
7734 hexid[16] = 0;
7735 printf_filtered ("%s %s\n", title, (&hexid[0]));
7736}
7737
7738static void
fba45db2 7739threadlist_test_cmd (char *cmd, int tty)
c906108c
SS
7740{
7741 int startflag = 1;
7742 threadref nextthread;
7743 int done, result_count;
7744 threadref threadlist[3];
7745
7746 printf_filtered ("Remote Threadlist test\n");
7747 if (!remote_get_threadlist (startflag, &nextthread, 3, &done,
7748 &result_count, &threadlist[0]))
7749 printf_filtered ("FAIL: threadlist test\n");
7750 else
7751 {
7752 threadref *scan = threadlist;
7753 threadref *limit = scan + result_count;
7754
7755 while (scan < limit)
7756 output_threadid (" thread ", scan++);
7757 }
7758}
7759
7760void
fba45db2 7761display_thread_info (struct gdb_ext_thread_info *info)
c906108c
SS
7762{
7763 output_threadid ("Threadid: ", &info->threadid);
7764 printf_filtered ("Name: %s\n ", info->shortname);
7765 printf_filtered ("State: %s\n", info->display);
7766 printf_filtered ("other: %s\n\n", info->more_display);
7767}
7768
7769int
fba45db2 7770get_and_display_threadinfo (threadref *ref)
c906108c
SS
7771{
7772 int result;
7773 int set;
7774 struct gdb_ext_thread_info threadinfo;
7775
7776 set = TAG_THREADID | TAG_EXISTS | TAG_THREADNAME
7777 | TAG_MOREDISPLAY | TAG_DISPLAY;
7778 if (0 != (result = remote_get_threadinfo (ref, set, &threadinfo)))
7779 display_thread_info (&threadinfo);
7780 return result;
7781}
7782
7783static void
fba45db2 7784threadinfo_test_cmd (char *cmd, int tty)
c906108c
SS
7785{
7786 int athread = SAMPLE_THREAD;
7787 threadref thread;
7788 int set;
7789
7790 int_to_threadref (&thread, athread);
7791 printf_filtered ("Remote Threadinfo test\n");
7792 if (!get_and_display_threadinfo (&thread))
7793 printf_filtered ("FAIL cannot get thread info\n");
7794}
7795
7796static int
fba45db2 7797thread_display_step (threadref *ref, void *context)
c906108c
SS
7798{
7799 /* output_threadid(" threadstep ",ref); *//* simple test */
7800 return get_and_display_threadinfo (ref);
7801}
7802
7803static void
fba45db2 7804threadlist_update_test_cmd (char *cmd, int tty)
c906108c
SS
7805{
7806 printf_filtered ("Remote Threadlist update test\n");
7807 remote_threadlist_iterator (thread_display_step, 0, CRAZY_MAX_THREADS);
7808}
7809
7810static void
7811init_remote_threadtests (void)
7812{
1bedd215
AC
7813 add_com ("tlist", class_obscure, threadlist_test_cmd, _("\
7814Fetch and print the remote list of thread identifiers, one pkt only"));
c906108c 7815 add_com ("tinfo", class_obscure, threadinfo_test_cmd,
1bedd215 7816 _("Fetch and display info about one thread"));
c906108c 7817 add_com ("tset", class_obscure, threadset_test_cmd,
1bedd215 7818 _("Test setting to a different thread"));
c906108c 7819 add_com ("tupd", class_obscure, threadlist_update_test_cmd,
1bedd215 7820 _("Iterate through updating all remote thread info"));
c906108c 7821 add_com ("talive", class_obscure, threadalive_test,
1bedd215 7822 _(" Remote thread alive test "));
c906108c
SS
7823}
7824
7825#endif /* 0 */
7826
f3fb8c85
MS
7827/* Convert a thread ID to a string. Returns the string in a static
7828 buffer. */
7829
7830static char *
117de6a9 7831remote_pid_to_str (struct target_ops *ops, ptid_t ptid)
f3fb8c85 7832{
79d7f229 7833 static char buf[64];
82f73884 7834 struct remote_state *rs = get_remote_state ();
f3fb8c85 7835
79d7f229
PA
7836 if (ptid_equal (magic_null_ptid, ptid))
7837 {
7838 xsnprintf (buf, sizeof buf, "Thread <main>");
7839 return buf;
7840 }
82f73884
PA
7841 else if (remote_multi_process_p (rs)
7842 && ptid_get_tid (ptid) != 0 && ptid_get_pid (ptid) != 0)
7843 {
7844 xsnprintf (buf, sizeof buf, "Thread %d.%ld",
7845 ptid_get_pid (ptid), ptid_get_tid (ptid));
7846 return buf;
7847 }
79d7f229
PA
7848 else if (ptid_get_tid (ptid) != 0)
7849 {
7850 xsnprintf (buf, sizeof buf, "Thread %ld",
7851 ptid_get_tid (ptid));
7852 return buf;
7853 }
7854
7855 return normal_pid_to_str (ptid);
f3fb8c85
MS
7856}
7857
38691318
KB
7858/* Get the address of the thread local variable in OBJFILE which is
7859 stored at OFFSET within the thread local storage for thread PTID. */
7860
7861static CORE_ADDR
117de6a9
PA
7862remote_get_thread_local_address (struct target_ops *ops,
7863 ptid_t ptid, CORE_ADDR lm, CORE_ADDR offset)
38691318 7864{
444abaca 7865 if (remote_protocol_packets[PACKET_qGetTLSAddr].support != PACKET_DISABLE)
38691318
KB
7866 {
7867 struct remote_state *rs = get_remote_state ();
6d820c5c 7868 char *p = rs->buf;
82f73884 7869 char *endp = rs->buf + get_remote_packet_size ();
571dd617 7870 enum packet_result result;
38691318
KB
7871
7872 strcpy (p, "qGetTLSAddr:");
7873 p += strlen (p);
82f73884 7874 p = write_ptid (p, endp, ptid);
38691318
KB
7875 *p++ = ',';
7876 p += hexnumstr (p, offset);
7877 *p++ = ',';
7878 p += hexnumstr (p, lm);
7879 *p++ = '\0';
7880
6d820c5c
DJ
7881 putpkt (rs->buf);
7882 getpkt (&rs->buf, &rs->buf_size, 0);
7883 result = packet_ok (rs->buf, &remote_protocol_packets[PACKET_qGetTLSAddr]);
571dd617 7884 if (result == PACKET_OK)
38691318
KB
7885 {
7886 ULONGEST result;
7887
6d820c5c 7888 unpack_varlen_hex (rs->buf, &result);
38691318
KB
7889 return result;
7890 }
571dd617 7891 else if (result == PACKET_UNKNOWN)
109c3e39
AC
7892 throw_error (TLS_GENERIC_ERROR,
7893 _("Remote target doesn't support qGetTLSAddr packet"));
38691318 7894 else
109c3e39
AC
7895 throw_error (TLS_GENERIC_ERROR,
7896 _("Remote target failed to process qGetTLSAddr request"));
38691318
KB
7897 }
7898 else
109c3e39
AC
7899 throw_error (TLS_GENERIC_ERROR,
7900 _("TLS not supported or disabled on this target"));
38691318
KB
7901 /* Not reached. */
7902 return 0;
7903}
7904
29709017
DJ
7905/* Support for inferring a target description based on the current
7906 architecture and the size of a 'g' packet. While the 'g' packet
7907 can have any size (since optional registers can be left off the
7908 end), some sizes are easily recognizable given knowledge of the
7909 approximate architecture. */
7910
7911struct remote_g_packet_guess
7912{
7913 int bytes;
7914 const struct target_desc *tdesc;
7915};
7916typedef struct remote_g_packet_guess remote_g_packet_guess_s;
7917DEF_VEC_O(remote_g_packet_guess_s);
7918
7919struct remote_g_packet_data
7920{
7921 VEC(remote_g_packet_guess_s) *guesses;
7922};
7923
7924static struct gdbarch_data *remote_g_packet_data_handle;
7925
7926static void *
7927remote_g_packet_data_init (struct obstack *obstack)
7928{
7929 return OBSTACK_ZALLOC (obstack, struct remote_g_packet_data);
7930}
7931
7932void
7933register_remote_g_packet_guess (struct gdbarch *gdbarch, int bytes,
7934 const struct target_desc *tdesc)
7935{
7936 struct remote_g_packet_data *data
7937 = gdbarch_data (gdbarch, remote_g_packet_data_handle);
7938 struct remote_g_packet_guess new_guess, *guess;
7939 int ix;
7940
7941 gdb_assert (tdesc != NULL);
7942
7943 for (ix = 0;
7944 VEC_iterate (remote_g_packet_guess_s, data->guesses, ix, guess);
7945 ix++)
7946 if (guess->bytes == bytes)
7947 internal_error (__FILE__, __LINE__,
7948 "Duplicate g packet description added for size %d",
7949 bytes);
7950
7951 new_guess.bytes = bytes;
7952 new_guess.tdesc = tdesc;
7953 VEC_safe_push (remote_g_packet_guess_s, data->guesses, &new_guess);
7954}
7955
d962ef82
DJ
7956/* Return 1 if remote_read_description would do anything on this target
7957 and architecture, 0 otherwise. */
7958
7959static int
7960remote_read_description_p (struct target_ops *target)
7961{
7962 struct remote_g_packet_data *data
7963 = gdbarch_data (target_gdbarch, remote_g_packet_data_handle);
7964
7965 if (!VEC_empty (remote_g_packet_guess_s, data->guesses))
7966 return 1;
7967
7968 return 0;
7969}
7970
29709017
DJ
7971static const struct target_desc *
7972remote_read_description (struct target_ops *target)
7973{
7974 struct remote_g_packet_data *data
1cf3db46 7975 = gdbarch_data (target_gdbarch, remote_g_packet_data_handle);
29709017 7976
d962ef82
DJ
7977 /* Do not try this during initial connection, when we do not know
7978 whether there is a running but stopped thread. */
7979 if (!target_has_execution || ptid_equal (inferior_ptid, null_ptid))
7980 return NULL;
7981
29709017
DJ
7982 if (!VEC_empty (remote_g_packet_guess_s, data->guesses))
7983 {
7984 struct remote_g_packet_guess *guess;
7985 int ix;
7986 int bytes = send_g_packet ();
7987
7988 for (ix = 0;
7989 VEC_iterate (remote_g_packet_guess_s, data->guesses, ix, guess);
7990 ix++)
7991 if (guess->bytes == bytes)
7992 return guess->tdesc;
7993
7994 /* We discard the g packet. A minor optimization would be to
7995 hold on to it, and fill the register cache once we have selected
7996 an architecture, but it's too tricky to do safely. */
7997 }
7998
7999 return NULL;
8000}
8001
a6b151f1
DJ
8002/* Remote file transfer support. This is host-initiated I/O, not
8003 target-initiated; for target-initiated, see remote-fileio.c. */
8004
8005/* If *LEFT is at least the length of STRING, copy STRING to
8006 *BUFFER, update *BUFFER to point to the new end of the buffer, and
8007 decrease *LEFT. Otherwise raise an error. */
8008
8009static void
8010remote_buffer_add_string (char **buffer, int *left, char *string)
8011{
8012 int len = strlen (string);
8013
8014 if (len > *left)
8015 error (_("Packet too long for target."));
8016
8017 memcpy (*buffer, string, len);
8018 *buffer += len;
8019 *left -= len;
8020
8021 /* NUL-terminate the buffer as a convenience, if there is
8022 room. */
8023 if (*left)
8024 **buffer = '\0';
8025}
8026
8027/* If *LEFT is large enough, hex encode LEN bytes from BYTES into
8028 *BUFFER, update *BUFFER to point to the new end of the buffer, and
8029 decrease *LEFT. Otherwise raise an error. */
8030
8031static void
8032remote_buffer_add_bytes (char **buffer, int *left, const gdb_byte *bytes,
8033 int len)
8034{
8035 if (2 * len > *left)
8036 error (_("Packet too long for target."));
8037
8038 bin2hex (bytes, *buffer, len);
8039 *buffer += 2 * len;
8040 *left -= 2 * len;
8041
8042 /* NUL-terminate the buffer as a convenience, if there is
8043 room. */
8044 if (*left)
8045 **buffer = '\0';
8046}
8047
8048/* If *LEFT is large enough, convert VALUE to hex and add it to
8049 *BUFFER, update *BUFFER to point to the new end of the buffer, and
8050 decrease *LEFT. Otherwise raise an error. */
8051
8052static void
8053remote_buffer_add_int (char **buffer, int *left, ULONGEST value)
8054{
8055 int len = hexnumlen (value);
8056
8057 if (len > *left)
8058 error (_("Packet too long for target."));
8059
8060 hexnumstr (*buffer, value);
8061 *buffer += len;
8062 *left -= len;
8063
8064 /* NUL-terminate the buffer as a convenience, if there is
8065 room. */
8066 if (*left)
8067 **buffer = '\0';
8068}
8069
8070/* Parse an I/O result packet from BUFFER. Set RETCODE to the return
8071 value, *REMOTE_ERRNO to the remote error number or zero if none
8072 was included, and *ATTACHMENT to point to the start of the annex
8073 if any. The length of the packet isn't needed here; there may
8074 be NUL bytes in BUFFER, but they will be after *ATTACHMENT.
8075
8076 Return 0 if the packet could be parsed, -1 if it could not. If
8077 -1 is returned, the other variables may not be initialized. */
8078
8079static int
8080remote_hostio_parse_result (char *buffer, int *retcode,
8081 int *remote_errno, char **attachment)
8082{
8083 char *p, *p2;
8084
8085 *remote_errno = 0;
8086 *attachment = NULL;
8087
8088 if (buffer[0] != 'F')
8089 return -1;
8090
8091 errno = 0;
8092 *retcode = strtol (&buffer[1], &p, 16);
8093 if (errno != 0 || p == &buffer[1])
8094 return -1;
8095
8096 /* Check for ",errno". */
8097 if (*p == ',')
8098 {
8099 errno = 0;
8100 *remote_errno = strtol (p + 1, &p2, 16);
8101 if (errno != 0 || p + 1 == p2)
8102 return -1;
8103 p = p2;
8104 }
8105
8106 /* Check for ";attachment". If there is no attachment, the
8107 packet should end here. */
8108 if (*p == ';')
8109 {
8110 *attachment = p + 1;
8111 return 0;
8112 }
8113 else if (*p == '\0')
8114 return 0;
8115 else
8116 return -1;
8117}
8118
8119/* Send a prepared I/O packet to the target and read its response.
8120 The prepared packet is in the global RS->BUF before this function
8121 is called, and the answer is there when we return.
8122
8123 COMMAND_BYTES is the length of the request to send, which may include
8124 binary data. WHICH_PACKET is the packet configuration to check
8125 before attempting a packet. If an error occurs, *REMOTE_ERRNO
8126 is set to the error number and -1 is returned. Otherwise the value
8127 returned by the function is returned.
8128
8129 ATTACHMENT and ATTACHMENT_LEN should be non-NULL if and only if an
8130 attachment is expected; an error will be reported if there's a
8131 mismatch. If one is found, *ATTACHMENT will be set to point into
8132 the packet buffer and *ATTACHMENT_LEN will be set to the
8133 attachment's length. */
8134
8135static int
8136remote_hostio_send_command (int command_bytes, int which_packet,
8137 int *remote_errno, char **attachment,
8138 int *attachment_len)
8139{
8140 struct remote_state *rs = get_remote_state ();
8141 int ret, bytes_read;
8142 char *attachment_tmp;
8143
f1838a98
UW
8144 if (!remote_desc
8145 || remote_protocol_packets[which_packet].support == PACKET_DISABLE)
a6b151f1
DJ
8146 {
8147 *remote_errno = FILEIO_ENOSYS;
8148 return -1;
8149 }
8150
8151 putpkt_binary (rs->buf, command_bytes);
8152 bytes_read = getpkt_sane (&rs->buf, &rs->buf_size, 0);
8153
8154 /* If it timed out, something is wrong. Don't try to parse the
8155 buffer. */
8156 if (bytes_read < 0)
8157 {
8158 *remote_errno = FILEIO_EINVAL;
8159 return -1;
8160 }
8161
8162 switch (packet_ok (rs->buf, &remote_protocol_packets[which_packet]))
8163 {
8164 case PACKET_ERROR:
8165 *remote_errno = FILEIO_EINVAL;
8166 return -1;
8167 case PACKET_UNKNOWN:
8168 *remote_errno = FILEIO_ENOSYS;
8169 return -1;
8170 case PACKET_OK:
8171 break;
8172 }
8173
8174 if (remote_hostio_parse_result (rs->buf, &ret, remote_errno,
8175 &attachment_tmp))
8176 {
8177 *remote_errno = FILEIO_EINVAL;
8178 return -1;
8179 }
8180
8181 /* Make sure we saw an attachment if and only if we expected one. */
8182 if ((attachment_tmp == NULL && attachment != NULL)
8183 || (attachment_tmp != NULL && attachment == NULL))
8184 {
8185 *remote_errno = FILEIO_EINVAL;
8186 return -1;
8187 }
8188
8189 /* If an attachment was found, it must point into the packet buffer;
8190 work out how many bytes there were. */
8191 if (attachment_tmp != NULL)
8192 {
8193 *attachment = attachment_tmp;
8194 *attachment_len = bytes_read - (*attachment - rs->buf);
8195 }
8196
8197 return ret;
8198}
8199
8200/* Open FILENAME on the remote target, using FLAGS and MODE. Return a
8201 remote file descriptor, or -1 if an error occurs (and set
8202 *REMOTE_ERRNO). */
8203
8204static int
8205remote_hostio_open (const char *filename, int flags, int mode,
8206 int *remote_errno)
8207{
8208 struct remote_state *rs = get_remote_state ();
8209 char *p = rs->buf;
8210 int left = get_remote_packet_size () - 1;
8211
8212 remote_buffer_add_string (&p, &left, "vFile:open:");
8213
8214 remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
8215 strlen (filename));
8216 remote_buffer_add_string (&p, &left, ",");
8217
8218 remote_buffer_add_int (&p, &left, flags);
8219 remote_buffer_add_string (&p, &left, ",");
8220
8221 remote_buffer_add_int (&p, &left, mode);
8222
8223 return remote_hostio_send_command (p - rs->buf, PACKET_vFile_open,
8224 remote_errno, NULL, NULL);
8225}
8226
8227/* Write up to LEN bytes from WRITE_BUF to FD on the remote target.
8228 Return the number of bytes written, or -1 if an error occurs (and
8229 set *REMOTE_ERRNO). */
8230
8231static int
8232remote_hostio_pwrite (int fd, const gdb_byte *write_buf, int len,
8233 ULONGEST offset, int *remote_errno)
8234{
8235 struct remote_state *rs = get_remote_state ();
8236 char *p = rs->buf;
8237 int left = get_remote_packet_size ();
8238 int out_len;
8239
8240 remote_buffer_add_string (&p, &left, "vFile:pwrite:");
8241
8242 remote_buffer_add_int (&p, &left, fd);
8243 remote_buffer_add_string (&p, &left, ",");
8244
8245 remote_buffer_add_int (&p, &left, offset);
8246 remote_buffer_add_string (&p, &left, ",");
8247
8248 p += remote_escape_output (write_buf, len, p, &out_len,
8249 get_remote_packet_size () - (p - rs->buf));
8250
8251 return remote_hostio_send_command (p - rs->buf, PACKET_vFile_pwrite,
8252 remote_errno, NULL, NULL);
8253}
8254
8255/* Read up to LEN bytes FD on the remote target into READ_BUF
8256 Return the number of bytes read, or -1 if an error occurs (and
8257 set *REMOTE_ERRNO). */
8258
8259static int
8260remote_hostio_pread (int fd, gdb_byte *read_buf, int len,
8261 ULONGEST offset, int *remote_errno)
8262{
8263 struct remote_state *rs = get_remote_state ();
8264 char *p = rs->buf;
8265 char *attachment;
8266 int left = get_remote_packet_size ();
8267 int ret, attachment_len;
8268 int read_len;
8269
8270 remote_buffer_add_string (&p, &left, "vFile:pread:");
8271
8272 remote_buffer_add_int (&p, &left, fd);
8273 remote_buffer_add_string (&p, &left, ",");
8274
8275 remote_buffer_add_int (&p, &left, len);
8276 remote_buffer_add_string (&p, &left, ",");
8277
8278 remote_buffer_add_int (&p, &left, offset);
8279
8280 ret = remote_hostio_send_command (p - rs->buf, PACKET_vFile_pread,
8281 remote_errno, &attachment,
8282 &attachment_len);
8283
8284 if (ret < 0)
8285 return ret;
8286
8287 read_len = remote_unescape_input (attachment, attachment_len,
8288 read_buf, len);
8289 if (read_len != ret)
8290 error (_("Read returned %d, but %d bytes."), ret, (int) read_len);
8291
8292 return ret;
8293}
8294
8295/* Close FD on the remote target. Return 0, or -1 if an error occurs
8296 (and set *REMOTE_ERRNO). */
8297
8298static int
8299remote_hostio_close (int fd, int *remote_errno)
8300{
8301 struct remote_state *rs = get_remote_state ();
8302 char *p = rs->buf;
8303 int left = get_remote_packet_size () - 1;
8304
8305 remote_buffer_add_string (&p, &left, "vFile:close:");
8306
8307 remote_buffer_add_int (&p, &left, fd);
8308
8309 return remote_hostio_send_command (p - rs->buf, PACKET_vFile_close,
8310 remote_errno, NULL, NULL);
8311}
8312
8313/* Unlink FILENAME on the remote target. Return 0, or -1 if an error
8314 occurs (and set *REMOTE_ERRNO). */
8315
8316static int
8317remote_hostio_unlink (const char *filename, int *remote_errno)
8318{
8319 struct remote_state *rs = get_remote_state ();
8320 char *p = rs->buf;
8321 int left = get_remote_packet_size () - 1;
8322
8323 remote_buffer_add_string (&p, &left, "vFile:unlink:");
8324
8325 remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
8326 strlen (filename));
8327
8328 return remote_hostio_send_command (p - rs->buf, PACKET_vFile_unlink,
8329 remote_errno, NULL, NULL);
8330}
8331
8332static int
8333remote_fileio_errno_to_host (int errnum)
8334{
8335 switch (errnum)
8336 {
8337 case FILEIO_EPERM:
8338 return EPERM;
8339 case FILEIO_ENOENT:
8340 return ENOENT;
8341 case FILEIO_EINTR:
8342 return EINTR;
8343 case FILEIO_EIO:
8344 return EIO;
8345 case FILEIO_EBADF:
8346 return EBADF;
8347 case FILEIO_EACCES:
8348 return EACCES;
8349 case FILEIO_EFAULT:
8350 return EFAULT;
8351 case FILEIO_EBUSY:
8352 return EBUSY;
8353 case FILEIO_EEXIST:
8354 return EEXIST;
8355 case FILEIO_ENODEV:
8356 return ENODEV;
8357 case FILEIO_ENOTDIR:
8358 return ENOTDIR;
8359 case FILEIO_EISDIR:
8360 return EISDIR;
8361 case FILEIO_EINVAL:
8362 return EINVAL;
8363 case FILEIO_ENFILE:
8364 return ENFILE;
8365 case FILEIO_EMFILE:
8366 return EMFILE;
8367 case FILEIO_EFBIG:
8368 return EFBIG;
8369 case FILEIO_ENOSPC:
8370 return ENOSPC;
8371 case FILEIO_ESPIPE:
8372 return ESPIPE;
8373 case FILEIO_EROFS:
8374 return EROFS;
8375 case FILEIO_ENOSYS:
8376 return ENOSYS;
8377 case FILEIO_ENAMETOOLONG:
8378 return ENAMETOOLONG;
8379 }
8380 return -1;
8381}
8382
8383static char *
8384remote_hostio_error (int errnum)
8385{
8386 int host_error = remote_fileio_errno_to_host (errnum);
8387
8388 if (host_error == -1)
8389 error (_("Unknown remote I/O error %d"), errnum);
8390 else
8391 error (_("Remote I/O error: %s"), safe_strerror (host_error));
8392}
8393
a6b151f1
DJ
8394static void
8395remote_hostio_close_cleanup (void *opaque)
8396{
8397 int fd = *(int *) opaque;
8398 int remote_errno;
8399
8400 remote_hostio_close (fd, &remote_errno);
8401}
8402
f1838a98
UW
8403
8404static void *
8405remote_bfd_iovec_open (struct bfd *abfd, void *open_closure)
8406{
8407 const char *filename = bfd_get_filename (abfd);
8408 int fd, remote_errno;
8409 int *stream;
8410
8411 gdb_assert (remote_filename_p (filename));
8412
8413 fd = remote_hostio_open (filename + 7, FILEIO_O_RDONLY, 0, &remote_errno);
8414 if (fd == -1)
8415 {
8416 errno = remote_fileio_errno_to_host (remote_errno);
8417 bfd_set_error (bfd_error_system_call);
8418 return NULL;
8419 }
8420
8421 stream = xmalloc (sizeof (int));
8422 *stream = fd;
8423 return stream;
8424}
8425
8426static int
8427remote_bfd_iovec_close (struct bfd *abfd, void *stream)
8428{
8429 int fd = *(int *)stream;
8430 int remote_errno;
8431
8432 xfree (stream);
8433
8434 /* Ignore errors on close; these may happen if the remote
8435 connection was already torn down. */
8436 remote_hostio_close (fd, &remote_errno);
8437
8438 return 1;
8439}
8440
8441static file_ptr
8442remote_bfd_iovec_pread (struct bfd *abfd, void *stream, void *buf,
8443 file_ptr nbytes, file_ptr offset)
8444{
8445 int fd = *(int *)stream;
8446 int remote_errno;
8447 file_ptr pos, bytes;
8448
8449 pos = 0;
8450 while (nbytes > pos)
8451 {
8452 bytes = remote_hostio_pread (fd, (char *)buf + pos, nbytes - pos,
8453 offset + pos, &remote_errno);
8454 if (bytes == 0)
8455 /* Success, but no bytes, means end-of-file. */
8456 break;
8457 if (bytes == -1)
8458 {
8459 errno = remote_fileio_errno_to_host (remote_errno);
8460 bfd_set_error (bfd_error_system_call);
8461 return -1;
8462 }
8463
8464 pos += bytes;
8465 }
8466
8467 return pos;
8468}
8469
8470static int
8471remote_bfd_iovec_stat (struct bfd *abfd, void *stream, struct stat *sb)
8472{
8473 /* FIXME: We should probably implement remote_hostio_stat. */
8474 sb->st_size = INT_MAX;
8475 return 0;
8476}
8477
8478int
8479remote_filename_p (const char *filename)
8480{
8481 return strncmp (filename, "remote:", 7) == 0;
8482}
8483
8484bfd *
8485remote_bfd_open (const char *remote_file, const char *target)
8486{
8487 return bfd_openr_iovec (remote_file, target,
8488 remote_bfd_iovec_open, NULL,
8489 remote_bfd_iovec_pread,
8490 remote_bfd_iovec_close,
8491 remote_bfd_iovec_stat);
8492}
8493
a6b151f1
DJ
8494void
8495remote_file_put (const char *local_file, const char *remote_file, int from_tty)
8496{
8497 struct cleanup *back_to, *close_cleanup;
8498 int retcode, fd, remote_errno, bytes, io_size;
8499 FILE *file;
8500 gdb_byte *buffer;
8501 int bytes_in_buffer;
8502 int saw_eof;
8503 ULONGEST offset;
8504
8505 if (!remote_desc)
8506 error (_("command can only be used with remote target"));
8507
8508 file = fopen (local_file, "rb");
8509 if (file == NULL)
8510 perror_with_name (local_file);
7c8a8b04 8511 back_to = make_cleanup_fclose (file);
a6b151f1
DJ
8512
8513 fd = remote_hostio_open (remote_file, (FILEIO_O_WRONLY | FILEIO_O_CREAT
8514 | FILEIO_O_TRUNC),
8515 0700, &remote_errno);
8516 if (fd == -1)
8517 remote_hostio_error (remote_errno);
8518
8519 /* Send up to this many bytes at once. They won't all fit in the
8520 remote packet limit, so we'll transfer slightly fewer. */
8521 io_size = get_remote_packet_size ();
8522 buffer = xmalloc (io_size);
8523 make_cleanup (xfree, buffer);
8524
8525 close_cleanup = make_cleanup (remote_hostio_close_cleanup, &fd);
8526
8527 bytes_in_buffer = 0;
8528 saw_eof = 0;
8529 offset = 0;
8530 while (bytes_in_buffer || !saw_eof)
8531 {
8532 if (!saw_eof)
8533 {
8534 bytes = fread (buffer + bytes_in_buffer, 1, io_size - bytes_in_buffer,
8535 file);
8536 if (bytes == 0)
8537 {
8538 if (ferror (file))
8539 error (_("Error reading %s."), local_file);
8540 else
8541 {
8542 /* EOF. Unless there is something still in the
8543 buffer from the last iteration, we are done. */
8544 saw_eof = 1;
8545 if (bytes_in_buffer == 0)
8546 break;
8547 }
8548 }
8549 }
8550 else
8551 bytes = 0;
8552
8553 bytes += bytes_in_buffer;
8554 bytes_in_buffer = 0;
8555
8556 retcode = remote_hostio_pwrite (fd, buffer, bytes, offset, &remote_errno);
8557
8558 if (retcode < 0)
8559 remote_hostio_error (remote_errno);
8560 else if (retcode == 0)
8561 error (_("Remote write of %d bytes returned 0!"), bytes);
8562 else if (retcode < bytes)
8563 {
8564 /* Short write. Save the rest of the read data for the next
8565 write. */
8566 bytes_in_buffer = bytes - retcode;
8567 memmove (buffer, buffer + retcode, bytes_in_buffer);
8568 }
8569
8570 offset += retcode;
8571 }
8572
8573 discard_cleanups (close_cleanup);
8574 if (remote_hostio_close (fd, &remote_errno))
8575 remote_hostio_error (remote_errno);
8576
8577 if (from_tty)
8578 printf_filtered (_("Successfully sent file \"%s\".\n"), local_file);
8579 do_cleanups (back_to);
8580}
8581
8582void
8583remote_file_get (const char *remote_file, const char *local_file, int from_tty)
8584{
8585 struct cleanup *back_to, *close_cleanup;
8586 int retcode, fd, remote_errno, bytes, io_size;
8587 FILE *file;
8588 gdb_byte *buffer;
8589 ULONGEST offset;
8590
8591 if (!remote_desc)
8592 error (_("command can only be used with remote target"));
8593
8594 fd = remote_hostio_open (remote_file, FILEIO_O_RDONLY, 0, &remote_errno);
8595 if (fd == -1)
8596 remote_hostio_error (remote_errno);
8597
8598 file = fopen (local_file, "wb");
8599 if (file == NULL)
8600 perror_with_name (local_file);
7c8a8b04 8601 back_to = make_cleanup_fclose (file);
a6b151f1
DJ
8602
8603 /* Send up to this many bytes at once. They won't all fit in the
8604 remote packet limit, so we'll transfer slightly fewer. */
8605 io_size = get_remote_packet_size ();
8606 buffer = xmalloc (io_size);
8607 make_cleanup (xfree, buffer);
8608
8609 close_cleanup = make_cleanup (remote_hostio_close_cleanup, &fd);
8610
8611 offset = 0;
8612 while (1)
8613 {
8614 bytes = remote_hostio_pread (fd, buffer, io_size, offset, &remote_errno);
8615 if (bytes == 0)
8616 /* Success, but no bytes, means end-of-file. */
8617 break;
8618 if (bytes == -1)
8619 remote_hostio_error (remote_errno);
8620
8621 offset += bytes;
8622
8623 bytes = fwrite (buffer, 1, bytes, file);
8624 if (bytes == 0)
8625 perror_with_name (local_file);
8626 }
8627
8628 discard_cleanups (close_cleanup);
8629 if (remote_hostio_close (fd, &remote_errno))
8630 remote_hostio_error (remote_errno);
8631
8632 if (from_tty)
8633 printf_filtered (_("Successfully fetched file \"%s\".\n"), remote_file);
8634 do_cleanups (back_to);
8635}
8636
8637void
8638remote_file_delete (const char *remote_file, int from_tty)
8639{
8640 int retcode, remote_errno;
8641
8642 if (!remote_desc)
8643 error (_("command can only be used with remote target"));
8644
8645 retcode = remote_hostio_unlink (remote_file, &remote_errno);
8646 if (retcode == -1)
8647 remote_hostio_error (remote_errno);
8648
8649 if (from_tty)
8650 printf_filtered (_("Successfully deleted file \"%s\".\n"), remote_file);
8651}
8652
8653static void
8654remote_put_command (char *args, int from_tty)
8655{
8656 struct cleanup *back_to;
8657 char **argv;
8658
d1a41061
PP
8659 if (args == NULL)
8660 error_no_arg (_("file to put"));
8661
8662 argv = gdb_buildargv (args);
a6b151f1
DJ
8663 back_to = make_cleanup_freeargv (argv);
8664 if (argv[0] == NULL || argv[1] == NULL || argv[2] != NULL)
8665 error (_("Invalid parameters to remote put"));
8666
8667 remote_file_put (argv[0], argv[1], from_tty);
8668
8669 do_cleanups (back_to);
8670}
8671
8672static void
8673remote_get_command (char *args, int from_tty)
8674{
8675 struct cleanup *back_to;
8676 char **argv;
8677
d1a41061
PP
8678 if (args == NULL)
8679 error_no_arg (_("file to get"));
8680
8681 argv = gdb_buildargv (args);
a6b151f1
DJ
8682 back_to = make_cleanup_freeargv (argv);
8683 if (argv[0] == NULL || argv[1] == NULL || argv[2] != NULL)
8684 error (_("Invalid parameters to remote get"));
8685
8686 remote_file_get (argv[0], argv[1], from_tty);
8687
8688 do_cleanups (back_to);
8689}
8690
8691static void
8692remote_delete_command (char *args, int from_tty)
8693{
8694 struct cleanup *back_to;
8695 char **argv;
8696
d1a41061
PP
8697 if (args == NULL)
8698 error_no_arg (_("file to delete"));
8699
8700 argv = gdb_buildargv (args);
a6b151f1
DJ
8701 back_to = make_cleanup_freeargv (argv);
8702 if (argv[0] == NULL || argv[1] != NULL)
8703 error (_("Invalid parameters to remote delete"));
8704
8705 remote_file_delete (argv[0], from_tty);
8706
8707 do_cleanups (back_to);
8708}
8709
8710static void
8711remote_command (char *args, int from_tty)
8712{
8713 help_list (remote_cmdlist, "remote ", -1, gdb_stdout);
8714}
8715
b2175913
MS
8716static int remote_target_can_reverse = 1;
8717
8718static int
8719remote_can_execute_reverse (void)
8720{
8721 return remote_target_can_reverse;
8722}
8723
74531fed
PA
8724static int
8725remote_supports_non_stop (void)
8726{
8727 return 1;
8728}
8729
8a305172
PA
8730static int
8731remote_supports_multi_process (void)
8732{
8733 struct remote_state *rs = get_remote_state ();
8734 return remote_multi_process_p (rs);
8735}
8736
c906108c 8737static void
fba45db2 8738init_remote_ops (void)
c906108c 8739{
c5aa993b 8740 remote_ops.to_shortname = "remote";
c906108c 8741 remote_ops.to_longname = "Remote serial target in gdb-specific protocol";
c5aa993b 8742 remote_ops.to_doc =
c906108c 8743 "Use a remote computer via a serial line, using a gdb-specific protocol.\n\
0d06e24b
JM
8744Specify the serial device it is connected to\n\
8745(e.g. /dev/ttyS0, /dev/ttya, COM1, etc.).";
c5aa993b
JM
8746 remote_ops.to_open = remote_open;
8747 remote_ops.to_close = remote_close;
c906108c 8748 remote_ops.to_detach = remote_detach;
6ad8ae5c 8749 remote_ops.to_disconnect = remote_disconnect;
c5aa993b 8750 remote_ops.to_resume = remote_resume;
c906108c
SS
8751 remote_ops.to_wait = remote_wait;
8752 remote_ops.to_fetch_registers = remote_fetch_registers;
8753 remote_ops.to_store_registers = remote_store_registers;
8754 remote_ops.to_prepare_to_store = remote_prepare_to_store;
c8e73a31 8755 remote_ops.deprecated_xfer_memory = remote_xfer_memory;
c5aa993b 8756 remote_ops.to_files_info = remote_files_info;
c906108c
SS
8757 remote_ops.to_insert_breakpoint = remote_insert_breakpoint;
8758 remote_ops.to_remove_breakpoint = remote_remove_breakpoint;
3c3bea1c
GS
8759 remote_ops.to_stopped_by_watchpoint = remote_stopped_by_watchpoint;
8760 remote_ops.to_stopped_data_address = remote_stopped_data_address;
8761 remote_ops.to_can_use_hw_breakpoint = remote_check_watch_resources;
8762 remote_ops.to_insert_hw_breakpoint = remote_insert_hw_breakpoint;
8763 remote_ops.to_remove_hw_breakpoint = remote_remove_hw_breakpoint;
8764 remote_ops.to_insert_watchpoint = remote_insert_watchpoint;
8765 remote_ops.to_remove_watchpoint = remote_remove_watchpoint;
c5aa993b
JM
8766 remote_ops.to_kill = remote_kill;
8767 remote_ops.to_load = generic_load;
c906108c
SS
8768 remote_ops.to_mourn_inferior = remote_mourn;
8769 remote_ops.to_thread_alive = remote_thread_alive;
0f71a2f6 8770 remote_ops.to_find_new_threads = remote_threads_info;
0caabb7e 8771 remote_ops.to_pid_to_str = remote_pid_to_str;
cf759d3b 8772 remote_ops.to_extra_thread_info = remote_threads_extra_info;
c906108c 8773 remote_ops.to_stop = remote_stop;
4b8a223f 8774 remote_ops.to_xfer_partial = remote_xfer_partial;
96baa820 8775 remote_ops.to_rcmd = remote_rcmd;
49d03eab 8776 remote_ops.to_log_command = serial_log_command;
38691318 8777 remote_ops.to_get_thread_local_address = remote_get_thread_local_address;
c906108c 8778 remote_ops.to_stratum = process_stratum;
c35b1492
PA
8779 remote_ops.to_has_all_memory = default_child_has_all_memory;
8780 remote_ops.to_has_memory = default_child_has_memory;
8781 remote_ops.to_has_stack = default_child_has_stack;
8782 remote_ops.to_has_registers = default_child_has_registers;
8783 remote_ops.to_has_execution = default_child_has_execution;
c5aa993b 8784 remote_ops.to_has_thread_control = tc_schedlock; /* can lock scheduler */
b2175913 8785 remote_ops.to_can_execute_reverse = remote_can_execute_reverse;
c5aa993b 8786 remote_ops.to_magic = OPS_MAGIC;
fd79ecee 8787 remote_ops.to_memory_map = remote_memory_map;
a76d924d
DJ
8788 remote_ops.to_flash_erase = remote_flash_erase;
8789 remote_ops.to_flash_done = remote_flash_done;
29709017 8790 remote_ops.to_read_description = remote_read_description;
08388c79 8791 remote_ops.to_search_memory = remote_search_memory;
75c99385
PA
8792 remote_ops.to_can_async_p = remote_can_async_p;
8793 remote_ops.to_is_async_p = remote_is_async_p;
8794 remote_ops.to_async = remote_async;
8795 remote_ops.to_async_mask = remote_async_mask;
8796 remote_ops.to_terminal_inferior = remote_terminal_inferior;
8797 remote_ops.to_terminal_ours = remote_terminal_ours;
74531fed 8798 remote_ops.to_supports_non_stop = remote_supports_non_stop;
8a305172 8799 remote_ops.to_supports_multi_process = remote_supports_multi_process;
c906108c
SS
8800}
8801
8802/* Set up the extended remote vector by making a copy of the standard
8803 remote vector and adding to it. */
8804
8805static void
fba45db2 8806init_extended_remote_ops (void)
c906108c
SS
8807{
8808 extended_remote_ops = remote_ops;
8809
0f71a2f6 8810 extended_remote_ops.to_shortname = "extended-remote";
c5aa993b 8811 extended_remote_ops.to_longname =
c906108c 8812 "Extended remote serial target in gdb-specific protocol";
c5aa993b 8813 extended_remote_ops.to_doc =
c906108c 8814 "Use a remote computer via a serial line, using a gdb-specific protocol.\n\
39237dd1
PA
8815Specify the serial device it is connected to (e.g. /dev/ttya).";
8816 extended_remote_ops.to_open = extended_remote_open;
c906108c
SS
8817 extended_remote_ops.to_create_inferior = extended_remote_create_inferior;
8818 extended_remote_ops.to_mourn_inferior = extended_remote_mourn;
2d717e4f
DJ
8819 extended_remote_ops.to_detach = extended_remote_detach;
8820 extended_remote_ops.to_attach = extended_remote_attach;
82f73884 8821 extended_remote_ops.to_kill = extended_remote_kill;
0f71a2f6
JM
8822}
8823
6426a772
JM
8824static int
8825remote_can_async_p (void)
8826{
c6ebd6cf 8827 if (!target_async_permitted)
75c99385
PA
8828 /* We only enable async when the user specifically asks for it. */
8829 return 0;
8830
23860348 8831 /* We're async whenever the serial device is. */
b84876c2 8832 return remote_async_mask_value && serial_can_async_p (remote_desc);
6426a772
JM
8833}
8834
8835static int
8836remote_is_async_p (void)
8837{
c6ebd6cf 8838 if (!target_async_permitted)
75c99385
PA
8839 /* We only enable async when the user specifically asks for it. */
8840 return 0;
8841
23860348 8842 /* We're async whenever the serial device is. */
b84876c2 8843 return remote_async_mask_value && serial_is_async_p (remote_desc);
6426a772
JM
8844}
8845
2acceee2
JM
8846/* Pass the SERIAL event on and up to the client. One day this code
8847 will be able to delay notifying the client of an event until the
23860348 8848 point where an entire packet has been received. */
2acceee2 8849
2bc416ba 8850static void (*async_client_callback) (enum inferior_event_type event_type,
23860348 8851 void *context);
2acceee2
JM
8852static void *async_client_context;
8853static serial_event_ftype remote_async_serial_handler;
8854
6426a772 8855static void
819cc324 8856remote_async_serial_handler (struct serial *scb, void *context)
6426a772 8857{
2acceee2
JM
8858 /* Don't propogate error information up to the client. Instead let
8859 the client find out about the error by querying the target. */
8860 async_client_callback (INF_REG_EVENT, async_client_context);
8861}
8862
74531fed
PA
8863static void
8864remote_async_inferior_event_handler (gdb_client_data data)
8865{
8866 inferior_event_handler (INF_REG_EVENT, NULL);
8867}
8868
8869static void
8870remote_async_get_pending_events_handler (gdb_client_data data)
8871{
8872 remote_get_pending_stop_replies ();
8873}
8874
2acceee2 8875static void
2bc416ba 8876remote_async (void (*callback) (enum inferior_event_type event_type,
23860348 8877 void *context), void *context)
2acceee2 8878{
b84876c2 8879 if (remote_async_mask_value == 0)
8e65ff28 8880 internal_error (__FILE__, __LINE__,
e2e0b3e5 8881 _("Calling remote_async when async is masked"));
ed9a39eb 8882
2acceee2
JM
8883 if (callback != NULL)
8884 {
2cd58942 8885 serial_async (remote_desc, remote_async_serial_handler, NULL);
2acceee2
JM
8886 async_client_callback = callback;
8887 async_client_context = context;
8888 }
8889 else
2cd58942 8890 serial_async (remote_desc, NULL, NULL);
6426a772
JM
8891}
8892
b84876c2
PA
8893static int
8894remote_async_mask (int new_mask)
8895{
8896 int curr_mask = remote_async_mask_value;
8897 remote_async_mask_value = new_mask;
8898 return curr_mask;
8899}
8900
5a2468f5 8901static void
c2d11a7d 8902set_remote_cmd (char *args, int from_tty)
5a2468f5 8903{
427c3a89 8904 help_list (remote_set_cmdlist, "set remote ", -1, gdb_stdout);
5a2468f5
JM
8905}
8906
d471ea57
AC
8907static void
8908show_remote_cmd (char *args, int from_tty)
8909{
37a105a1 8910 /* We can't just use cmd_show_list here, because we want to skip
427c3a89 8911 the redundant "show remote Z-packet" and the legacy aliases. */
37a105a1
DJ
8912 struct cleanup *showlist_chain;
8913 struct cmd_list_element *list = remote_show_cmdlist;
8914
8915 showlist_chain = make_cleanup_ui_out_tuple_begin_end (uiout, "showlist");
8916 for (; list != NULL; list = list->next)
8917 if (strcmp (list->name, "Z-packet") == 0)
8918 continue;
427c3a89
DJ
8919 else if (list->type == not_set_cmd)
8920 /* Alias commands are exactly like the original, except they
8921 don't have the normal type. */
8922 continue;
8923 else
37a105a1
DJ
8924 {
8925 struct cleanup *option_chain
8926 = make_cleanup_ui_out_tuple_begin_end (uiout, "option");
8927 ui_out_field_string (uiout, "name", list->name);
8928 ui_out_text (uiout, ": ");
427c3a89
DJ
8929 if (list->type == show_cmd)
8930 do_setshow_command ((char *) NULL, from_tty, list);
8931 else
8932 cmd_func (list, NULL, from_tty);
37a105a1
DJ
8933 /* Close the tuple. */
8934 do_cleanups (option_chain);
8935 }
427c3a89
DJ
8936
8937 /* Close the tuple. */
8938 do_cleanups (showlist_chain);
d471ea57 8939}
5a2468f5 8940
0f71a2f6 8941
23860348 8942/* Function to be called whenever a new objfile (shlib) is detected. */
dc8acb97
MS
8943static void
8944remote_new_objfile (struct objfile *objfile)
8945{
23860348 8946 if (remote_desc != 0) /* Have a remote connection. */
06d3b283 8947 remote_check_symbols (objfile);
dc8acb97
MS
8948}
8949
c906108c 8950void
fba45db2 8951_initialize_remote (void)
c906108c 8952{
ea9c271d
DJ
8953 struct remote_state *rs;
8954
0f71a2f6 8955 /* architecture specific data */
2bc416ba 8956 remote_gdbarch_data_handle =
23860348 8957 gdbarch_data_register_post_init (init_remote_state);
29709017
DJ
8958 remote_g_packet_data_handle =
8959 gdbarch_data_register_pre_init (remote_g_packet_data_init);
d01949b6 8960
ea9c271d
DJ
8961 /* Initialize the per-target state. At the moment there is only one
8962 of these, not one per target. Only one target is active at a
8963 time. The default buffer size is unimportant; it will be expanded
8964 whenever a larger buffer is needed. */
0b83947e 8965 rs = get_remote_state_raw ();
ea9c271d
DJ
8966 rs->buf_size = 400;
8967 rs->buf = xmalloc (rs->buf_size);
8968
c906108c
SS
8969 init_remote_ops ();
8970 add_target (&remote_ops);
8971
8972 init_extended_remote_ops ();
8973 add_target (&extended_remote_ops);
cce74817 8974
dc8acb97 8975 /* Hook into new objfile notification. */
06d3b283 8976 observer_attach_new_objfile (remote_new_objfile);
dc8acb97 8977
b803fb0f
DJ
8978 /* Set up signal handlers. */
8979 sigint_remote_token =
8980 create_async_signal_handler (async_remote_interrupt, NULL);
8981 sigint_remote_twice_token =
8982 create_async_signal_handler (inferior_event_handler_wrapper, NULL);
8983
c906108c
SS
8984#if 0
8985 init_remote_threadtests ();
8986#endif
8987
23860348 8988 /* set/show remote ... */
d471ea57 8989
1bedd215 8990 add_prefix_cmd ("remote", class_maintenance, set_remote_cmd, _("\
5a2468f5
JM
8991Remote protocol specific variables\n\
8992Configure various remote-protocol specific variables such as\n\
1bedd215 8993the packets being used"),
cff3e48b 8994 &remote_set_cmdlist, "set remote ",
23860348 8995 0 /* allow-unknown */, &setlist);
1bedd215 8996 add_prefix_cmd ("remote", class_maintenance, show_remote_cmd, _("\
5a2468f5
JM
8997Remote protocol specific variables\n\
8998Configure various remote-protocol specific variables such as\n\
1bedd215 8999the packets being used"),
cff3e48b 9000 &remote_show_cmdlist, "show remote ",
23860348 9001 0 /* allow-unknown */, &showlist);
5a2468f5 9002
1a966eab
AC
9003 add_cmd ("compare-sections", class_obscure, compare_sections_command, _("\
9004Compare section data on target to the exec file.\n\
9005Argument is a single section name (default: all loaded sections)."),
c906108c
SS
9006 &cmdlist);
9007
1a966eab
AC
9008 add_cmd ("packet", class_maintenance, packet_command, _("\
9009Send an arbitrary packet to a remote target.\n\
c906108c
SS
9010 maintenance packet TEXT\n\
9011If GDB is talking to an inferior via the GDB serial protocol, then\n\
9012this command sends the string TEXT to the inferior, and displays the\n\
9013response packet. GDB supplies the initial `$' character, and the\n\
1a966eab 9014terminating `#' character and checksum."),
c906108c
SS
9015 &maintenancelist);
9016
7915a72c
AC
9017 add_setshow_boolean_cmd ("remotebreak", no_class, &remote_break, _("\
9018Set whether to send break if interrupted."), _("\
9019Show whether to send break if interrupted."), _("\
9020If set, a break, instead of a cntrl-c, is sent to the remote target."),
2c5b56ce 9021 NULL, NULL, /* FIXME: i18n: Whether to send break if interrupted is %s. */
e707bbc2 9022 &setlist, &showlist);
c906108c 9023
23860348 9024 /* Install commands for configuring memory read/write packets. */
11cf8741 9025
1a966eab
AC
9026 add_cmd ("remotewritesize", no_class, set_memory_write_packet_size, _("\
9027Set the maximum number of bytes per memory write packet (deprecated)."),
11cf8741 9028 &setlist);
1a966eab
AC
9029 add_cmd ("remotewritesize", no_class, show_memory_write_packet_size, _("\
9030Show the maximum number of bytes per memory write packet (deprecated)."),
11cf8741
JM
9031 &showlist);
9032 add_cmd ("memory-write-packet-size", no_class,
1a966eab
AC
9033 set_memory_write_packet_size, _("\
9034Set the maximum number of bytes per memory-write packet.\n\
9035Specify the number of bytes in a packet or 0 (zero) for the\n\
9036default packet size. The actual limit is further reduced\n\
9037dependent on the target. Specify ``fixed'' to disable the\n\
9038further restriction and ``limit'' to enable that restriction."),
11cf8741
JM
9039 &remote_set_cmdlist);
9040 add_cmd ("memory-read-packet-size", no_class,
1a966eab
AC
9041 set_memory_read_packet_size, _("\
9042Set the maximum number of bytes per memory-read packet.\n\
9043Specify the number of bytes in a packet or 0 (zero) for the\n\
9044default packet size. The actual limit is further reduced\n\
9045dependent on the target. Specify ``fixed'' to disable the\n\
9046further restriction and ``limit'' to enable that restriction."),
11cf8741
JM
9047 &remote_set_cmdlist);
9048 add_cmd ("memory-write-packet-size", no_class,
9049 show_memory_write_packet_size,
1a966eab 9050 _("Show the maximum number of bytes per memory-write packet."),
11cf8741
JM
9051 &remote_show_cmdlist);
9052 add_cmd ("memory-read-packet-size", no_class,
9053 show_memory_read_packet_size,
1a966eab 9054 _("Show the maximum number of bytes per memory-read packet."),
11cf8741 9055 &remote_show_cmdlist);
c906108c 9056
b3f42336 9057 add_setshow_zinteger_cmd ("hardware-watchpoint-limit", no_class,
7915a72c
AC
9058 &remote_hw_watchpoint_limit, _("\
9059Set the maximum number of target hardware watchpoints."), _("\
9060Show the maximum number of target hardware watchpoints."), _("\
9061Specify a negative limit for unlimited."),
2c5b56ce 9062 NULL, NULL, /* FIXME: i18n: The maximum number of target hardware watchpoints is %s. */
b3f42336
AC
9063 &remote_set_cmdlist, &remote_show_cmdlist);
9064 add_setshow_zinteger_cmd ("hardware-breakpoint-limit", no_class,
7915a72c
AC
9065 &remote_hw_breakpoint_limit, _("\
9066Set the maximum number of target hardware breakpoints."), _("\
9067Show the maximum number of target hardware breakpoints."), _("\
9068Specify a negative limit for unlimited."),
2c5b56ce 9069 NULL, NULL, /* FIXME: i18n: The maximum number of target hardware breakpoints is %s. */
b3f42336 9070 &remote_set_cmdlist, &remote_show_cmdlist);
501eef12 9071
4d28ad1e
AC
9072 add_setshow_integer_cmd ("remoteaddresssize", class_obscure,
9073 &remote_address_size, _("\
9074Set the maximum size of the address (in bits) in a memory packet."), _("\
9075Show the maximum size of the address (in bits) in a memory packet."), NULL,
9076 NULL,
9077 NULL, /* FIXME: i18n: */
9078 &setlist, &showlist);
c906108c 9079
444abaca 9080 add_packet_config_cmd (&remote_protocol_packets[PACKET_X],
bb572ddd 9081 "X", "binary-download", 1);
0f71a2f6 9082
444abaca 9083 add_packet_config_cmd (&remote_protocol_packets[PACKET_vCont],
bb572ddd 9084 "vCont", "verbose-resume", 0);
506fb367 9085
89be2091
DJ
9086 add_packet_config_cmd (&remote_protocol_packets[PACKET_QPassSignals],
9087 "QPassSignals", "pass-signals", 0);
9088
444abaca 9089 add_packet_config_cmd (&remote_protocol_packets[PACKET_qSymbol],
bb572ddd 9090 "qSymbol", "symbol-lookup", 0);
dc8acb97 9091
444abaca 9092 add_packet_config_cmd (&remote_protocol_packets[PACKET_P],
bb572ddd 9093 "P", "set-register", 1);
d471ea57 9094
444abaca 9095 add_packet_config_cmd (&remote_protocol_packets[PACKET_p],
bb572ddd 9096 "p", "fetch-register", 1);
b96ec7ac 9097
444abaca 9098 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z0],
bb572ddd 9099 "Z0", "software-breakpoint", 0);
d471ea57 9100
444abaca 9101 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z1],
bb572ddd 9102 "Z1", "hardware-breakpoint", 0);
d471ea57 9103
444abaca 9104 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z2],
bb572ddd 9105 "Z2", "write-watchpoint", 0);
d471ea57 9106
444abaca 9107 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z3],
bb572ddd 9108 "Z3", "read-watchpoint", 0);
d471ea57 9109
444abaca 9110 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z4],
bb572ddd 9111 "Z4", "access-watchpoint", 0);
d471ea57 9112
0876f84a
DJ
9113 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_auxv],
9114 "qXfer:auxv:read", "read-aux-vector", 0);
802188a7 9115
23181151
DJ
9116 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_features],
9117 "qXfer:features:read", "target-features", 0);
9118
cfa9d6d9
DJ
9119 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_libraries],
9120 "qXfer:libraries:read", "library-info", 0);
9121
fd79ecee
DJ
9122 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_memory_map],
9123 "qXfer:memory-map:read", "memory-map", 0);
9124
0e7f50da
UW
9125 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_spu_read],
9126 "qXfer:spu:read", "read-spu-object", 0);
9127
9128 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_spu_write],
9129 "qXfer:spu:write", "write-spu-object", 0);
9130
07e059b5
VP
9131 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_osdata],
9132 "qXfer:osdata:read", "osdata", 0);
9133
4aa995e1
PA
9134 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_siginfo_read],
9135 "qXfer:siginfo:read", "read-siginfo-object", 0);
9136
9137 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_siginfo_write],
9138 "qXfer:siginfo:write", "write-siginfo-object", 0);
9139
444abaca 9140 add_packet_config_cmd (&remote_protocol_packets[PACKET_qGetTLSAddr],
38691318 9141 "qGetTLSAddr", "get-thread-local-storage-address",
38691318
KB
9142 0);
9143
be2a5f71
DJ
9144 add_packet_config_cmd (&remote_protocol_packets[PACKET_qSupported],
9145 "qSupported", "supported-packets", 0);
9146
08388c79
DE
9147 add_packet_config_cmd (&remote_protocol_packets[PACKET_qSearch_memory],
9148 "qSearch:memory", "search-memory", 0);
9149
a6b151f1
DJ
9150 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_open],
9151 "vFile:open", "hostio-open", 0);
9152
9153 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_pread],
9154 "vFile:pread", "hostio-pread", 0);
9155
9156 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_pwrite],
9157 "vFile:pwrite", "hostio-pwrite", 0);
9158
9159 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_close],
9160 "vFile:close", "hostio-close", 0);
9161
9162 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_unlink],
9163 "vFile:unlink", "hostio-unlink", 0);
9164
2d717e4f
DJ
9165 add_packet_config_cmd (&remote_protocol_packets[PACKET_vAttach],
9166 "vAttach", "attach", 0);
9167
9168 add_packet_config_cmd (&remote_protocol_packets[PACKET_vRun],
9169 "vRun", "run", 0);
9170
a6f3e723
SL
9171 add_packet_config_cmd (&remote_protocol_packets[PACKET_QStartNoAckMode],
9172 "QStartNoAckMode", "noack", 0);
9173
82f73884
PA
9174 add_packet_config_cmd (&remote_protocol_packets[PACKET_vKill],
9175 "vKill", "kill", 0);
9176
0b16c5cf
PA
9177 add_packet_config_cmd (&remote_protocol_packets[PACKET_qAttached],
9178 "qAttached", "query-attached", 0);
9179
37a105a1
DJ
9180 /* Keep the old ``set remote Z-packet ...'' working. Each individual
9181 Z sub-packet has its own set and show commands, but users may
9182 have sets to this variable in their .gdbinit files (or in their
9183 documentation). */
e9e68a56 9184 add_setshow_auto_boolean_cmd ("Z-packet", class_obscure,
7915a72c
AC
9185 &remote_Z_packet_detect, _("\
9186Set use of remote protocol `Z' packets"), _("\
9187Show use of remote protocol `Z' packets "), _("\
3b64bf98 9188When set, GDB will attempt to use the remote breakpoint and watchpoint\n\
7915a72c 9189packets."),
e9e68a56 9190 set_remote_protocol_Z_packet_cmd,
2c5b56ce 9191 show_remote_protocol_Z_packet_cmd, /* FIXME: i18n: Use of remote protocol `Z' packets is %s. */
e9e68a56 9192 &remote_set_cmdlist, &remote_show_cmdlist);
449092f6 9193
a6b151f1
DJ
9194 add_prefix_cmd ("remote", class_files, remote_command, _("\
9195Manipulate files on the remote system\n\
9196Transfer files to and from the remote target system."),
9197 &remote_cmdlist, "remote ",
9198 0 /* allow-unknown */, &cmdlist);
9199
9200 add_cmd ("put", class_files, remote_put_command,
9201 _("Copy a local file to the remote system."),
9202 &remote_cmdlist);
9203
9204 add_cmd ("get", class_files, remote_get_command,
9205 _("Copy a remote file to the local system."),
9206 &remote_cmdlist);
9207
9208 add_cmd ("delete", class_files, remote_delete_command,
9209 _("Delete a remote file."),
9210 &remote_cmdlist);
9211
2d717e4f
DJ
9212 remote_exec_file = xstrdup ("");
9213 add_setshow_string_noescape_cmd ("exec-file", class_files,
9214 &remote_exec_file, _("\
9215Set the remote pathname for \"run\""), _("\
9216Show the remote pathname for \"run\""), NULL, NULL, NULL,
9217 &remote_set_cmdlist, &remote_show_cmdlist);
9218
449092f6
CV
9219 /* Eventually initialize fileio. See fileio.c */
9220 initialize_remote_fileio (remote_set_cmdlist, remote_show_cmdlist);
79d7f229
PA
9221
9222 /* Take advantage of the fact that the LWP field is not used, to tag
9223 special ptids with it set to != 0. */
82f73884
PA
9224 magic_null_ptid = ptid_build (42000, 1, -1);
9225 not_sent_ptid = ptid_build (42000, 1, -2);
9226 any_thread_ptid = ptid_build (42000, 1, 0);
c906108c 9227}
This page took 1.51796 seconds and 4 git commands to generate.