Fix a typo in ChangeLog.
[deliverable/binutils-gdb.git] / gdb / remote.c
CommitLineData
c906108c 1/* Remote target communications for serial-line targets in custom GDB protocol
8926118c 2
6aba47ca
DJ
3 Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
4 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
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"
449092f6 62
fd79ecee
DJ
63#include "memory-map.h"
64
6765f3e5
DJ
65/* The size to align memory write packets, when practical. The protocol
66 does not guarantee any alignment, and gdb will generate short
67 writes and unaligned writes, but even as a best-effort attempt this
68 can improve bulk transfers. For instance, if a write is misaligned
69 relative to the target's data bus, the stub may need to make an extra
70 round trip fetching data from the target. This doesn't make a
71 huge difference, but it's easy to do, so we try to be helpful.
72
73 The alignment chosen is arbitrary; usually data bus width is
74 important here, not the possibly larger cache line size. */
75enum { REMOTE_ALIGN_WRITES = 16 };
76
23860348 77/* Prototypes for local functions. */
6426a772
JM
78static void cleanup_sigint_signal_handler (void *dummy);
79static void initialize_sigint_signal_handler (void);
6d820c5c 80static int getpkt_sane (char **buf, long *sizeof_buf, int forever);
6426a772 81
a14ed312
KB
82static void handle_remote_sigint (int);
83static void handle_remote_sigint_twice (int);
84static void async_remote_interrupt (gdb_client_data);
85void async_remote_interrupt_twice (gdb_client_data);
43ff13b4 86
a14ed312 87static void remote_files_info (struct target_ops *ignore);
c906108c 88
316f2060 89static void remote_prepare_to_store (struct regcache *regcache);
c906108c 90
56be3814 91static void remote_fetch_registers (struct regcache *regcache, int regno);
c906108c 92
39f77062
KB
93static void remote_resume (ptid_t ptid, int step,
94 enum target_signal siggnal);
95static void remote_async_resume (ptid_t ptid, int step,
a14ed312 96 enum target_signal siggnal);
a14ed312
KB
97static void remote_open (char *name, int from_tty);
98static void remote_async_open (char *name, int from_tty);
c906108c 99
a14ed312
KB
100static void extended_remote_open (char *name, int from_tty);
101static void extended_remote_async_open (char *name, int from_tty);
c906108c 102
92d1e331
DJ
103static void remote_open_1 (char *, int, struct target_ops *, int extended_p,
104 int async_p);
c906108c 105
a14ed312 106static void remote_close (int quitting);
c906108c 107
56be3814 108static void remote_store_registers (struct regcache *regcache, int regno);
c906108c 109
a14ed312
KB
110static void remote_mourn (void);
111static void remote_async_mourn (void);
c906108c 112
a14ed312 113static void extended_remote_restart (void);
c906108c 114
a14ed312 115static void extended_remote_mourn (void);
c906108c 116
a14ed312 117static void remote_mourn_1 (struct target_ops *);
c906108c 118
6d820c5c 119static void remote_send (char **buf, long *sizeof_buf_p);
c906108c 120
a14ed312 121static int readchar (int timeout);
c906108c 122
39f77062
KB
123static ptid_t remote_wait (ptid_t ptid,
124 struct target_waitstatus *status);
125static ptid_t remote_async_wait (ptid_t ptid,
126 struct target_waitstatus *status);
c906108c 127
a14ed312
KB
128static void remote_kill (void);
129static void remote_async_kill (void);
c906108c 130
a14ed312 131static int tohex (int nib);
c906108c 132
a14ed312 133static void remote_detach (char *args, int from_tty);
c906108c 134
a14ed312 135static void remote_interrupt (int signo);
c906108c 136
a14ed312 137static void remote_interrupt_twice (int signo);
7a292a7a 138
a14ed312 139static void interrupt_query (void);
c906108c 140
a14ed312 141static void set_thread (int, int);
c906108c 142
39f77062 143static int remote_thread_alive (ptid_t);
c906108c 144
a14ed312 145static void get_offsets (void);
c906108c 146
6d820c5c
DJ
147static void skip_frame (void);
148
149static long read_frame (char **buf_p, long *sizeof_buf);
c906108c 150
a14ed312 151static int hexnumlen (ULONGEST num);
c906108c 152
a14ed312 153static void init_remote_ops (void);
c906108c 154
a14ed312 155static void init_extended_remote_ops (void);
c906108c 156
a14ed312 157static void remote_stop (void);
c906108c 158
a14ed312 159static int ishex (int ch, int *val);
c906108c 160
a14ed312 161static int stubhex (int ch);
c906108c 162
a14ed312 163static int hexnumstr (char *, ULONGEST);
c906108c 164
a14ed312 165static int hexnumnstr (char *, ULONGEST, int);
2df3850c 166
a14ed312 167static CORE_ADDR remote_address_masked (CORE_ADDR);
c906108c 168
a14ed312 169static void print_packet (char *);
c906108c 170
a14ed312 171static unsigned long crc32 (unsigned char *, int, unsigned int);
c906108c 172
a14ed312 173static void compare_sections_command (char *, int);
c906108c 174
a14ed312 175static void packet_command (char *, int);
c906108c 176
a14ed312 177static int stub_unpack_int (char *buff, int fieldlength);
c906108c 178
39f77062 179static ptid_t remote_current_thread (ptid_t oldptid);
c906108c 180
a14ed312 181static void remote_find_new_threads (void);
c906108c 182
a14ed312 183static void record_currthread (int currthread);
c906108c 184
30559e10 185static int fromhex (int a);
c906108c 186
cfd77fa1 187static int hex2bin (const char *hex, gdb_byte *bin, int count);
c906108c 188
cfd77fa1 189static int bin2hex (const gdb_byte *bin, char *hex, int count);
234fa6d1 190
a14ed312 191static int putpkt_binary (char *buf, int cnt);
c906108c 192
a14ed312 193static void check_binary_download (CORE_ADDR addr);
c906108c 194
5a2468f5 195struct packet_config;
5a2468f5 196
a14ed312 197static void show_packet_config_cmd (struct packet_config *config);
5a2468f5 198
d471ea57 199static void update_packet_config (struct packet_config *config);
5a2468f5 200
bb572ddd
DJ
201static void set_remote_protocol_packet_cmd (char *args, int from_tty,
202 struct cmd_list_element *c);
203
204static void show_remote_protocol_packet_cmd (struct ui_file *file,
205 int from_tty,
206 struct cmd_list_element *c,
207 const char *value);
208
a14ed312 209void _initialize_remote (void);
c906108c 210
a6b151f1
DJ
211/* For "remote". */
212
213static struct cmd_list_element *remote_cmdlist;
214
bb572ddd
DJ
215/* For "set remote" and "show remote". */
216
217static struct cmd_list_element *remote_set_cmdlist;
218static struct cmd_list_element *remote_show_cmdlist;
219
ea9c271d
DJ
220/* Description of the remote protocol state for the currently
221 connected target. This is per-target state, and independent of the
222 selected architecture. */
223
224struct remote_state
225{
226 /* A buffer to use for incoming packets, and its current size. The
227 buffer is grown dynamically for larger incoming packets.
228 Outgoing packets may also be constructed in this buffer.
229 BUF_SIZE is always at least REMOTE_PACKET_SIZE;
230 REMOTE_PACKET_SIZE should be used to limit the length of outgoing
231 packets. */
232 char *buf;
233 long buf_size;
be2a5f71
DJ
234
235 /* If we negotiated packet size explicitly (and thus can bypass
236 heuristics for the largest packet size that will not overflow
237 a buffer in the stub), this will be set to that packet size.
238 Otherwise zero, meaning to use the guessed size. */
239 long explicit_packet_size;
ea9c271d
DJ
240};
241
242/* This data could be associated with a target, but we do not always
243 have access to the current target when we need it, so for now it is
244 static. This will be fine for as long as only one target is in use
245 at a time. */
246static struct remote_state remote_state;
247
248static struct remote_state *
0b83947e 249get_remote_state_raw (void)
ea9c271d
DJ
250{
251 return &remote_state;
252}
253
254/* Description of the remote protocol for a given architecture. */
d01949b6 255
ad10f812
AC
256struct packet_reg
257{
258 long offset; /* Offset into G packet. */
259 long regnum; /* GDB's internal register number. */
260 LONGEST pnum; /* Remote protocol register number. */
b323314b 261 int in_g_packet; /* Always part of G packet. */
2bc416ba 262 /* long size in bytes; == register_size (current_gdbarch, regnum);
23860348 263 at present. */
c9f4d572
UW
264 /* char *name; == gdbarch_register_name (current_gdbarch, regnum);
265 at present. */
ad10f812
AC
266};
267
ea9c271d 268struct remote_arch_state
d01949b6 269{
ad10f812
AC
270 /* Description of the remote protocol registers. */
271 long sizeof_g_packet;
b323314b
AC
272
273 /* Description of the remote protocol registers indexed by REGNUM
f57d151a 274 (making an array gdbarch_num_regs in size). */
b323314b 275 struct packet_reg *regs;
ad10f812 276
d01949b6
AC
277 /* This is the size (in chars) of the first response to the ``g''
278 packet. It is used as a heuristic when determining the maximum
279 size of memory-read and memory-write packets. A target will
280 typically only reserve a buffer large enough to hold the ``g''
281 packet. The size does not include packet overhead (headers and
23860348 282 trailers). */
d01949b6
AC
283 long actual_register_packet_size;
284
285 /* This is the maximum size (in chars) of a non read/write packet.
23860348 286 It is also used as a cap on the size of read/write packets. */
d01949b6
AC
287 long remote_packet_size;
288};
289
3c3bea1c 290
d01949b6
AC
291/* Handle for retreving the remote protocol data from gdbarch. */
292static struct gdbarch_data *remote_gdbarch_data_handle;
293
ea9c271d
DJ
294static struct remote_arch_state *
295get_remote_arch_state (void)
d01949b6 296{
451fbdda 297 return gdbarch_data (current_gdbarch, remote_gdbarch_data_handle);
d01949b6
AC
298}
299
0b83947e
DJ
300/* Fetch the global remote target state. */
301
302static struct remote_state *
303get_remote_state (void)
304{
305 /* Make sure that the remote architecture state has been
306 initialized, because doing so might reallocate rs->buf. Any
307 function which calls getpkt also needs to be mindful of changes
308 to rs->buf, but this call limits the number of places which run
309 into trouble. */
310 get_remote_arch_state ();
311
312 return get_remote_state_raw ();
313}
314
74ca34ce
DJ
315static int
316compare_pnums (const void *lhs_, const void *rhs_)
317{
318 const struct packet_reg * const *lhs = lhs_;
319 const struct packet_reg * const *rhs = rhs_;
320
321 if ((*lhs)->pnum < (*rhs)->pnum)
322 return -1;
323 else if ((*lhs)->pnum == (*rhs)->pnum)
324 return 0;
325 else
326 return 1;
327}
328
d01949b6
AC
329static void *
330init_remote_state (struct gdbarch *gdbarch)
331{
74ca34ce 332 int regnum, num_remote_regs, offset;
0b83947e 333 struct remote_state *rs = get_remote_state_raw ();
ea9c271d 334 struct remote_arch_state *rsa;
74ca34ce 335 struct packet_reg **remote_regs;
ea9c271d
DJ
336
337 rsa = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct remote_arch_state);
d01949b6 338
123dc839
DJ
339 /* Use the architecture to build a regnum<->pnum table, which will be
340 1:1 unless a feature set specifies otherwise. */
f57d151a 341 rsa->regs = GDBARCH_OBSTACK_CALLOC (gdbarch,
4a22f64d 342 gdbarch_num_regs (gdbarch),
f57d151a 343 struct packet_reg);
4a22f64d 344 for (regnum = 0; regnum < gdbarch_num_regs (gdbarch); regnum++)
ad10f812 345 {
ea9c271d 346 struct packet_reg *r = &rsa->regs[regnum];
baef701f 347
4a22f64d 348 if (register_size (gdbarch, regnum) == 0)
baef701f
DJ
349 /* Do not try to fetch zero-sized (placeholder) registers. */
350 r->pnum = -1;
351 else
352 r->pnum = gdbarch_remote_register_number (gdbarch, regnum);
353
b323314b 354 r->regnum = regnum;
74ca34ce
DJ
355 }
356
357 /* Define the g/G packet format as the contents of each register
358 with a remote protocol number, in order of ascending protocol
359 number. */
360
4a22f64d
UW
361 remote_regs = alloca (gdbarch_num_regs (gdbarch)
362 * sizeof (struct packet_reg *));
f57d151a 363 for (num_remote_regs = 0, regnum = 0;
4a22f64d 364 regnum < gdbarch_num_regs (gdbarch);
f57d151a 365 regnum++)
74ca34ce
DJ
366 if (rsa->regs[regnum].pnum != -1)
367 remote_regs[num_remote_regs++] = &rsa->regs[regnum];
7d58c67d 368
74ca34ce
DJ
369 qsort (remote_regs, num_remote_regs, sizeof (struct packet_reg *),
370 compare_pnums);
371
372 for (regnum = 0, offset = 0; regnum < num_remote_regs; regnum++)
373 {
374 remote_regs[regnum]->in_g_packet = 1;
375 remote_regs[regnum]->offset = offset;
4a22f64d 376 offset += register_size (gdbarch, remote_regs[regnum]->regnum);
ad10f812
AC
377 }
378
74ca34ce
DJ
379 /* Record the maximum possible size of the g packet - it may turn out
380 to be smaller. */
381 rsa->sizeof_g_packet = offset;
382
d01949b6
AC
383 /* Default maximum number of characters in a packet body. Many
384 remote stubs have a hardwired buffer size of 400 bytes
385 (c.f. BUFMAX in m68k-stub.c and i386-stub.c). BUFMAX-1 is used
386 as the maximum packet-size to ensure that the packet and an extra
387 NUL character can always fit in the buffer. This stops GDB
388 trashing stubs that try to squeeze an extra NUL into what is
ea9c271d
DJ
389 already a full buffer (As of 1999-12-04 that was most stubs). */
390 rsa->remote_packet_size = 400 - 1;
d01949b6 391
ea9c271d
DJ
392 /* This one is filled in when a ``g'' packet is received. */
393 rsa->actual_register_packet_size = 0;
394
395 /* Should rsa->sizeof_g_packet needs more space than the
ad10f812
AC
396 default, adjust the size accordingly. Remember that each byte is
397 encoded as two characters. 32 is the overhead for the packet
398 header / footer. NOTE: cagney/1999-10-26: I suspect that 8
d01949b6 399 (``$NN:G...#NN'') is a better guess, the below has been padded a
23860348 400 little. */
ea9c271d
DJ
401 if (rsa->sizeof_g_packet > ((rsa->remote_packet_size - 32) / 2))
402 rsa->remote_packet_size = (rsa->sizeof_g_packet * 2 + 32);
802188a7 403
ea9c271d
DJ
404 /* Make sure that the packet buffer is plenty big enough for
405 this architecture. */
406 if (rs->buf_size < rsa->remote_packet_size)
407 {
408 rs->buf_size = 2 * rsa->remote_packet_size;
7fca722e 409 rs->buf = xrealloc (rs->buf, rs->buf_size);
ea9c271d 410 }
6d820c5c 411
ea9c271d
DJ
412 return rsa;
413}
414
415/* Return the current allowed size of a remote packet. This is
416 inferred from the current architecture, and should be used to
417 limit the length of outgoing packets. */
418static long
419get_remote_packet_size (void)
420{
be2a5f71 421 struct remote_state *rs = get_remote_state ();
ea9c271d
DJ
422 struct remote_arch_state *rsa = get_remote_arch_state ();
423
be2a5f71
DJ
424 if (rs->explicit_packet_size)
425 return rs->explicit_packet_size;
426
ea9c271d 427 return rsa->remote_packet_size;
d01949b6
AC
428}
429
ad10f812 430static struct packet_reg *
ea9c271d 431packet_reg_from_regnum (struct remote_arch_state *rsa, long regnum)
ad10f812 432{
f57d151a 433 if (regnum < 0 && regnum >= gdbarch_num_regs (current_gdbarch))
b323314b
AC
434 return NULL;
435 else
ad10f812 436 {
ea9c271d 437 struct packet_reg *r = &rsa->regs[regnum];
b323314b
AC
438 gdb_assert (r->regnum == regnum);
439 return r;
ad10f812 440 }
ad10f812
AC
441}
442
443static struct packet_reg *
ea9c271d 444packet_reg_from_pnum (struct remote_arch_state *rsa, LONGEST pnum)
ad10f812 445{
b323314b 446 int i;
f57d151a 447 for (i = 0; i < gdbarch_num_regs (current_gdbarch); i++)
ad10f812 448 {
ea9c271d 449 struct packet_reg *r = &rsa->regs[i];
b323314b
AC
450 if (r->pnum == pnum)
451 return r;
ad10f812
AC
452 }
453 return NULL;
d01949b6
AC
454}
455
3c3bea1c
GS
456/* FIXME: graces/2002-08-08: These variables should eventually be
457 bound to an instance of the target object (as in gdbarch-tdep()),
458 when such a thing exists. */
459
460/* This is set to the data address of the access causing the target
461 to stop for a watchpoint. */
462static CORE_ADDR remote_watch_data_address;
463
94e08568 464/* This is non-zero if target stopped for a watchpoint. */
3c3bea1c
GS
465static int remote_stopped_by_watchpoint_p;
466
c906108c
SS
467static struct target_ops remote_ops;
468
469static struct target_ops extended_remote_ops;
470
43ff13b4 471/* Temporary target ops. Just like the remote_ops and
23860348 472 extended_remote_ops, but with asynchronous support. */
43ff13b4
JM
473static struct target_ops remote_async_ops;
474
475static struct target_ops extended_async_remote_ops;
476
6426a772
JM
477/* FIXME: cagney/1999-09-23: Even though getpkt was called with
478 ``forever'' still use the normal timeout mechanism. This is
479 currently used by the ASYNC code to guarentee that target reads
480 during the initial connect always time-out. Once getpkt has been
481 modified to return a timeout indication and, in turn
482 remote_wait()/wait_for_inferior() have gained a timeout parameter
23860348 483 this can go away. */
6426a772
JM
484static int wait_forever_enabled_p = 1;
485
486
c906108c
SS
487/* This variable chooses whether to send a ^C or a break when the user
488 requests program interruption. Although ^C is usually what remote
489 systems expect, and that is the default here, sometimes a break is
490 preferable instead. */
491
492static int remote_break;
493
c906108c
SS
494/* Descriptor for I/O to remote machine. Initialize it to NULL so that
495 remote_open knows that we don't have a file open when the program
496 starts. */
819cc324 497static struct serial *remote_desc = NULL;
c906108c 498
c906108c
SS
499/* This variable sets the number of bits in an address that are to be
500 sent in a memory ("M" or "m") packet. Normally, after stripping
501 leading zeros, the entire address would be sent. This variable
502 restricts the address to REMOTE_ADDRESS_SIZE bits. HISTORY: The
503 initial implementation of remote.c restricted the address sent in
504 memory packets to ``host::sizeof long'' bytes - (typically 32
505 bits). Consequently, for 64 bit targets, the upper 32 bits of an
506 address was never sent. Since fixing this bug may cause a break in
507 some remote targets this variable is principly provided to
23860348 508 facilitate backward compatibility. */
c906108c
SS
509
510static int remote_address_size;
511
6426a772
JM
512/* Tempoary to track who currently owns the terminal. See
513 target_async_terminal_* for more details. */
514
515static int remote_async_terminal_ours_p;
516
11cf8741 517\f
11cf8741 518/* User configurable variables for the number of characters in a
ea9c271d
DJ
519 memory read/write packet. MIN (rsa->remote_packet_size,
520 rsa->sizeof_g_packet) is the default. Some targets need smaller
24b06219 521 values (fifo overruns, et.al.) and some users need larger values
ad10f812
AC
522 (speed up transfers). The variables ``preferred_*'' (the user
523 request), ``current_*'' (what was actually set) and ``forced_*''
23860348 524 (Positive - a soft limit, negative - a hard limit). */
11cf8741
JM
525
526struct memory_packet_config
527{
528 char *name;
529 long size;
530 int fixed_p;
531};
532
533/* Compute the current size of a read/write packet. Since this makes
534 use of ``actual_register_packet_size'' the computation is dynamic. */
535
536static long
537get_memory_packet_size (struct memory_packet_config *config)
538{
d01949b6 539 struct remote_state *rs = get_remote_state ();
ea9c271d
DJ
540 struct remote_arch_state *rsa = get_remote_arch_state ();
541
11cf8741
JM
542 /* NOTE: The somewhat arbitrary 16k comes from the knowledge (folk
543 law?) that some hosts don't cope very well with large alloca()
544 calls. Eventually the alloca() code will be replaced by calls to
545 xmalloc() and make_cleanups() allowing this restriction to either
23860348 546 be lifted or removed. */
11cf8741
JM
547#ifndef MAX_REMOTE_PACKET_SIZE
548#define MAX_REMOTE_PACKET_SIZE 16384
549#endif
3de11b2e 550 /* NOTE: 20 ensures we can write at least one byte. */
11cf8741 551#ifndef MIN_REMOTE_PACKET_SIZE
3de11b2e 552#define MIN_REMOTE_PACKET_SIZE 20
11cf8741
JM
553#endif
554 long what_they_get;
555 if (config->fixed_p)
556 {
557 if (config->size <= 0)
558 what_they_get = MAX_REMOTE_PACKET_SIZE;
559 else
560 what_they_get = config->size;
561 }
562 else
563 {
ea9c271d 564 what_they_get = get_remote_packet_size ();
23860348 565 /* Limit the packet to the size specified by the user. */
11cf8741
JM
566 if (config->size > 0
567 && what_they_get > config->size)
568 what_they_get = config->size;
be2a5f71
DJ
569
570 /* Limit it to the size of the targets ``g'' response unless we have
571 permission from the stub to use a larger packet size. */
572 if (rs->explicit_packet_size == 0
573 && rsa->actual_register_packet_size > 0
574 && what_they_get > rsa->actual_register_packet_size)
575 what_they_get = rsa->actual_register_packet_size;
11cf8741
JM
576 }
577 if (what_they_get > MAX_REMOTE_PACKET_SIZE)
578 what_they_get = MAX_REMOTE_PACKET_SIZE;
579 if (what_they_get < MIN_REMOTE_PACKET_SIZE)
580 what_they_get = MIN_REMOTE_PACKET_SIZE;
6d820c5c
DJ
581
582 /* Make sure there is room in the global buffer for this packet
583 (including its trailing NUL byte). */
584 if (rs->buf_size < what_they_get + 1)
585 {
586 rs->buf_size = 2 * what_they_get;
587 rs->buf = xrealloc (rs->buf, 2 * what_they_get);
588 }
589
11cf8741
JM
590 return what_they_get;
591}
592
593/* Update the size of a read/write packet. If they user wants
23860348 594 something really big then do a sanity check. */
11cf8741
JM
595
596static void
597set_memory_packet_size (char *args, struct memory_packet_config *config)
598{
599 int fixed_p = config->fixed_p;
600 long size = config->size;
601 if (args == NULL)
8a3fe4f8 602 error (_("Argument required (integer, `fixed' or `limited')."));
11cf8741
JM
603 else if (strcmp (args, "hard") == 0
604 || strcmp (args, "fixed") == 0)
605 fixed_p = 1;
606 else if (strcmp (args, "soft") == 0
607 || strcmp (args, "limit") == 0)
608 fixed_p = 0;
609 else
610 {
611 char *end;
612 size = strtoul (args, &end, 0);
613 if (args == end)
8a3fe4f8 614 error (_("Invalid %s (bad syntax)."), config->name);
11cf8741
JM
615#if 0
616 /* Instead of explicitly capping the size of a packet to
617 MAX_REMOTE_PACKET_SIZE or dissallowing it, the user is
618 instead allowed to set the size to something arbitrarily
23860348 619 large. */
11cf8741 620 if (size > MAX_REMOTE_PACKET_SIZE)
8a3fe4f8 621 error (_("Invalid %s (too large)."), config->name);
11cf8741
JM
622#endif
623 }
23860348 624 /* Extra checks? */
11cf8741
JM
625 if (fixed_p && !config->fixed_p)
626 {
e2e0b3e5
AC
627 if (! query (_("The target may not be able to correctly handle a %s\n"
628 "of %ld bytes. Change the packet size? "),
11cf8741 629 config->name, size))
8a3fe4f8 630 error (_("Packet size not changed."));
11cf8741 631 }
23860348 632 /* Update the config. */
11cf8741
JM
633 config->fixed_p = fixed_p;
634 config->size = size;
635}
636
637static void
638show_memory_packet_size (struct memory_packet_config *config)
639{
a3f17187 640 printf_filtered (_("The %s is %ld. "), config->name, config->size);
11cf8741 641 if (config->fixed_p)
a3f17187 642 printf_filtered (_("Packets are fixed at %ld bytes.\n"),
11cf8741
JM
643 get_memory_packet_size (config));
644 else
a3f17187 645 printf_filtered (_("Packets are limited to %ld bytes.\n"),
11cf8741
JM
646 get_memory_packet_size (config));
647}
648
649static struct memory_packet_config memory_write_packet_config =
650{
651 "memory-write-packet-size",
652};
653
654static void
655set_memory_write_packet_size (char *args, int from_tty)
656{
657 set_memory_packet_size (args, &memory_write_packet_config);
658}
659
660static void
661show_memory_write_packet_size (char *args, int from_tty)
662{
663 show_memory_packet_size (&memory_write_packet_config);
664}
665
666static long
667get_memory_write_packet_size (void)
668{
669 return get_memory_packet_size (&memory_write_packet_config);
670}
671
672static struct memory_packet_config memory_read_packet_config =
673{
674 "memory-read-packet-size",
675};
676
677static void
678set_memory_read_packet_size (char *args, int from_tty)
679{
680 set_memory_packet_size (args, &memory_read_packet_config);
681}
682
683static void
684show_memory_read_packet_size (char *args, int from_tty)
685{
686 show_memory_packet_size (&memory_read_packet_config);
687}
688
689static long
690get_memory_read_packet_size (void)
691{
692 long size = get_memory_packet_size (&memory_read_packet_config);
693 /* FIXME: cagney/1999-11-07: Functions like getpkt() need to get an
694 extra buffer size argument before the memory read size can be
ea9c271d
DJ
695 increased beyond this. */
696 if (size > get_remote_packet_size ())
697 size = get_remote_packet_size ();
11cf8741
JM
698 return size;
699}
700
11cf8741 701\f
5a2468f5
JM
702/* Generic configuration support for packets the stub optionally
703 supports. Allows the user to specify the use of the packet as well
23860348 704 as allowing GDB to auto-detect support in the remote stub. */
5a2468f5
JM
705
706enum packet_support
707 {
708 PACKET_SUPPORT_UNKNOWN = 0,
709 PACKET_ENABLE,
710 PACKET_DISABLE
711 };
712
5a2468f5
JM
713struct packet_config
714 {
bb572ddd
DJ
715 const char *name;
716 const char *title;
7f19b9a2 717 enum auto_boolean detect;
5a2468f5
JM
718 enum packet_support support;
719 };
720
d471ea57 721/* Analyze a packet's return value and update the packet config
23860348 722 accordingly. */
d471ea57
AC
723
724enum packet_result
725{
726 PACKET_ERROR,
727 PACKET_OK,
728 PACKET_UNKNOWN
729};
730
5a2468f5 731static void
d471ea57 732update_packet_config (struct packet_config *config)
5a2468f5 733{
d471ea57
AC
734 switch (config->detect)
735 {
7f19b9a2 736 case AUTO_BOOLEAN_TRUE:
d471ea57
AC
737 config->support = PACKET_ENABLE;
738 break;
7f19b9a2 739 case AUTO_BOOLEAN_FALSE:
d471ea57
AC
740 config->support = PACKET_DISABLE;
741 break;
7f19b9a2 742 case AUTO_BOOLEAN_AUTO:
d471ea57
AC
743 config->support = PACKET_SUPPORT_UNKNOWN;
744 break;
745 }
5a2468f5
JM
746}
747
748static void
fba45db2 749show_packet_config_cmd (struct packet_config *config)
5a2468f5
JM
750{
751 char *support = "internal-error";
752 switch (config->support)
753 {
754 case PACKET_ENABLE:
755 support = "enabled";
756 break;
757 case PACKET_DISABLE:
758 support = "disabled";
759 break;
760 case PACKET_SUPPORT_UNKNOWN:
761 support = "unknown";
762 break;
763 }
764 switch (config->detect)
765 {
7f19b9a2 766 case AUTO_BOOLEAN_AUTO:
37a105a1
DJ
767 printf_filtered (_("Support for the `%s' packet is auto-detected, currently %s.\n"),
768 config->name, support);
5a2468f5 769 break;
7f19b9a2
AC
770 case AUTO_BOOLEAN_TRUE:
771 case AUTO_BOOLEAN_FALSE:
37a105a1
DJ
772 printf_filtered (_("Support for the `%s' packet is currently %s.\n"),
773 config->name, support);
8e248173 774 break;
5a2468f5
JM
775 }
776}
777
778static void
bb572ddd
DJ
779add_packet_config_cmd (struct packet_config *config, const char *name,
780 const char *title, int legacy)
d471ea57 781{
5a2468f5
JM
782 char *set_doc;
783 char *show_doc;
d471ea57 784 char *cmd_name;
3ed07be4 785
5a2468f5
JM
786 config->name = name;
787 config->title = title;
7f19b9a2 788 config->detect = AUTO_BOOLEAN_AUTO;
8e248173 789 config->support = PACKET_SUPPORT_UNKNOWN;
b435e160
AC
790 set_doc = xstrprintf ("Set use of remote protocol `%s' (%s) packet",
791 name, title);
792 show_doc = xstrprintf ("Show current use of remote protocol `%s' (%s) packet",
793 name, title);
d471ea57 794 /* set/show TITLE-packet {auto,on,off} */
b435e160 795 cmd_name = xstrprintf ("%s-packet", title);
e9e68a56 796 add_setshow_auto_boolean_cmd (cmd_name, class_obscure,
2c5b56ce 797 &config->detect, set_doc, show_doc, NULL, /* help_doc */
bb572ddd
DJ
798 set_remote_protocol_packet_cmd,
799 show_remote_protocol_packet_cmd,
800 &remote_set_cmdlist, &remote_show_cmdlist);
23860348 801 /* set/show remote NAME-packet {auto,on,off} -- legacy. */
d471ea57
AC
802 if (legacy)
803 {
804 char *legacy_name;
b435e160 805 legacy_name = xstrprintf ("%s-packet", name);
d471ea57 806 add_alias_cmd (legacy_name, cmd_name, class_obscure, 0,
bb572ddd 807 &remote_set_cmdlist);
d471ea57 808 add_alias_cmd (legacy_name, cmd_name, class_obscure, 0,
bb572ddd 809 &remote_show_cmdlist);
d471ea57 810 }
5a2468f5
JM
811}
812
d471ea57 813static enum packet_result
a76d924d 814packet_check_result (const char *buf)
5a2468f5 815{
d471ea57 816 if (buf[0] != '\0')
5a2468f5 817 {
d471ea57 818 /* The stub recognized the packet request. Check that the
23860348 819 operation succeeded. */
a76d924d
DJ
820 if (buf[0] == 'E'
821 && isxdigit (buf[1]) && isxdigit (buf[2])
822 && buf[3] == '\0')
823 /* "Enn" - definitly an error. */
824 return PACKET_ERROR;
825
826 /* Always treat "E." as an error. This will be used for
827 more verbose error messages, such as E.memtypes. */
828 if (buf[0] == 'E' && buf[1] == '.')
829 return PACKET_ERROR;
830
831 /* The packet may or may not be OK. Just assume it is. */
832 return PACKET_OK;
833 }
834 else
835 /* The stub does not support the packet. */
836 return PACKET_UNKNOWN;
837}
838
839static enum packet_result
840packet_ok (const char *buf, struct packet_config *config)
841{
842 enum packet_result result;
843
844 result = packet_check_result (buf);
845 switch (result)
846 {
847 case PACKET_OK:
848 case PACKET_ERROR:
849 /* The stub recognized the packet request. */
d471ea57
AC
850 switch (config->support)
851 {
852 case PACKET_SUPPORT_UNKNOWN:
853 if (remote_debug)
854 fprintf_unfiltered (gdb_stdlog,
855 "Packet %s (%s) is supported\n",
856 config->name, config->title);
857 config->support = PACKET_ENABLE;
858 break;
859 case PACKET_DISABLE:
8e65ff28 860 internal_error (__FILE__, __LINE__,
e2e0b3e5 861 _("packet_ok: attempt to use a disabled packet"));
d471ea57
AC
862 break;
863 case PACKET_ENABLE:
864 break;
865 }
a76d924d
DJ
866 break;
867 case PACKET_UNKNOWN:
23860348 868 /* The stub does not support the packet. */
d471ea57
AC
869 switch (config->support)
870 {
871 case PACKET_ENABLE:
7f19b9a2 872 if (config->detect == AUTO_BOOLEAN_AUTO)
d471ea57 873 /* If the stub previously indicated that the packet was
23860348 874 supported then there is a protocol error.. */
8a3fe4f8 875 error (_("Protocol error: %s (%s) conflicting enabled responses."),
d471ea57
AC
876 config->name, config->title);
877 else
23860348 878 /* The user set it wrong. */
8a3fe4f8 879 error (_("Enabled packet %s (%s) not recognized by stub"),
d471ea57
AC
880 config->name, config->title);
881 break;
882 case PACKET_SUPPORT_UNKNOWN:
883 if (remote_debug)
884 fprintf_unfiltered (gdb_stdlog,
885 "Packet %s (%s) is NOT supported\n",
886 config->name, config->title);
887 config->support = PACKET_DISABLE;
888 break;
889 case PACKET_DISABLE:
890 break;
891 }
a76d924d 892 break;
5a2468f5 893 }
a76d924d
DJ
894
895 return result;
5a2468f5
JM
896}
897
444abaca
DJ
898enum {
899 PACKET_vCont = 0,
900 PACKET_X,
901 PACKET_qSymbol,
902 PACKET_P,
903 PACKET_p,
904 PACKET_Z0,
905 PACKET_Z1,
906 PACKET_Z2,
907 PACKET_Z3,
908 PACKET_Z4,
a6b151f1
DJ
909 PACKET_vFile_open,
910 PACKET_vFile_pread,
911 PACKET_vFile_pwrite,
912 PACKET_vFile_close,
913 PACKET_vFile_unlink,
0876f84a 914 PACKET_qXfer_auxv,
23181151 915 PACKET_qXfer_features,
cfa9d6d9 916 PACKET_qXfer_libraries,
fd79ecee 917 PACKET_qXfer_memory_map,
0e7f50da
UW
918 PACKET_qXfer_spu_read,
919 PACKET_qXfer_spu_write,
444abaca 920 PACKET_qGetTLSAddr,
be2a5f71 921 PACKET_qSupported,
89be2091 922 PACKET_QPassSignals,
444abaca
DJ
923 PACKET_MAX
924};
506fb367 925
444abaca 926static struct packet_config remote_protocol_packets[PACKET_MAX];
dc8acb97
MS
927
928static void
444abaca
DJ
929set_remote_protocol_packet_cmd (char *args, int from_tty,
930 struct cmd_list_element *c)
dc8acb97 931{
444abaca 932 struct packet_config *packet;
dc8acb97 933
444abaca
DJ
934 for (packet = remote_protocol_packets;
935 packet < &remote_protocol_packets[PACKET_MAX];
936 packet++)
937 {
938 if (&packet->detect == c->var)
939 {
940 update_packet_config (packet);
941 return;
942 }
943 }
944 internal_error (__FILE__, __LINE__, "Could not find config for %s",
945 c->name);
dc8acb97
MS
946}
947
5a2468f5 948static void
444abaca
DJ
949show_remote_protocol_packet_cmd (struct ui_file *file, int from_tty,
950 struct cmd_list_element *c,
951 const char *value)
5a2468f5 952{
444abaca 953 struct packet_config *packet;
5a2468f5 954
444abaca
DJ
955 for (packet = remote_protocol_packets;
956 packet < &remote_protocol_packets[PACKET_MAX];
957 packet++)
958 {
959 if (&packet->detect == c->var)
960 {
961 show_packet_config_cmd (packet);
962 return;
963 }
964 }
965 internal_error (__FILE__, __LINE__, "Could not find config for %s",
966 c->name);
5a2468f5
JM
967}
968
d471ea57
AC
969/* Should we try one of the 'Z' requests? */
970
971enum Z_packet_type
972{
973 Z_PACKET_SOFTWARE_BP,
974 Z_PACKET_HARDWARE_BP,
975 Z_PACKET_WRITE_WP,
976 Z_PACKET_READ_WP,
977 Z_PACKET_ACCESS_WP,
978 NR_Z_PACKET_TYPES
979};
96baa820 980
d471ea57 981/* For compatibility with older distributions. Provide a ``set remote
23860348 982 Z-packet ...'' command that updates all the Z packet types. */
d471ea57 983
7f19b9a2 984static enum auto_boolean remote_Z_packet_detect;
96baa820
JM
985
986static void
fba45db2
KB
987set_remote_protocol_Z_packet_cmd (char *args, int from_tty,
988 struct cmd_list_element *c)
96baa820 989{
d471ea57
AC
990 int i;
991 for (i = 0; i < NR_Z_PACKET_TYPES; i++)
992 {
444abaca
DJ
993 remote_protocol_packets[PACKET_Z0 + i].detect = remote_Z_packet_detect;
994 update_packet_config (&remote_protocol_packets[PACKET_Z0 + i]);
d471ea57 995 }
96baa820
JM
996}
997
998static void
08546159
AC
999show_remote_protocol_Z_packet_cmd (struct ui_file *file, int from_tty,
1000 struct cmd_list_element *c,
1001 const char *value)
96baa820 1002{
d471ea57
AC
1003 int i;
1004 for (i = 0; i < NR_Z_PACKET_TYPES; i++)
1005 {
444abaca 1006 show_packet_config_cmd (&remote_protocol_packets[PACKET_Z0 + i]);
d471ea57 1007 }
96baa820
JM
1008}
1009
9d1f7ab2
MS
1010/* Should we try the 'ThreadInfo' query packet?
1011
1012 This variable (NOT available to the user: auto-detect only!)
1013 determines whether GDB will use the new, simpler "ThreadInfo"
1014 query or the older, more complex syntax for thread queries.
802188a7 1015 This is an auto-detect variable (set to true at each connect,
9d1f7ab2
MS
1016 and set to false when the target fails to recognize it). */
1017
1018static int use_threadinfo_query;
1019static int use_threadextra_query;
1020
23860348 1021/* Tokens for use by the asynchronous signal handlers for SIGINT. */
d5d6fca5
DJ
1022static struct async_signal_handler *sigint_remote_twice_token;
1023static struct async_signal_handler *sigint_remote_token;
43ff13b4 1024
c906108c
SS
1025/* These are pointers to hook functions that may be set in order to
1026 modify resume/wait behavior for a particular architecture. */
1027
9a4105ab
AC
1028void (*deprecated_target_resume_hook) (void);
1029void (*deprecated_target_wait_loop_hook) (void);
c906108c
SS
1030\f
1031
c5aa993b 1032
c906108c
SS
1033/* These are the threads which we last sent to the remote system.
1034 -1 for all or -2 for not sent yet. */
1035static int general_thread;
cce74817 1036static int continue_thread;
c906108c
SS
1037
1038/* Call this function as a result of
1039 1) A halt indication (T packet) containing a thread id
1040 2) A direct query of currthread
1041 3) Successful execution of set thread
1042 */
1043
1044static void
fba45db2 1045record_currthread (int currthread)
c906108c 1046{
c906108c 1047 general_thread = currthread;
cce74817 1048
c906108c
SS
1049 /* If this is a new thread, add it to GDB's thread list.
1050 If we leave it up to WFI to do this, bad things will happen. */
39f77062 1051 if (!in_thread_list (pid_to_ptid (currthread)))
0f71a2f6 1052 {
39f77062 1053 add_thread (pid_to_ptid (currthread));
8b93c638 1054 ui_out_text (uiout, "[New ");
39f77062 1055 ui_out_text (uiout, target_pid_to_str (pid_to_ptid (currthread)));
8b93c638 1056 ui_out_text (uiout, "]\n");
0f71a2f6 1057 }
c906108c
SS
1058}
1059
89be2091
DJ
1060static char *last_pass_packet;
1061
1062/* If 'QPassSignals' is supported, tell the remote stub what signals
1063 it can simply pass through to the inferior without reporting. */
1064
1065static void
1066remote_pass_signals (void)
1067{
1068 if (remote_protocol_packets[PACKET_QPassSignals].support != PACKET_DISABLE)
1069 {
1070 char *pass_packet, *p;
1071 int numsigs = (int) TARGET_SIGNAL_LAST;
1072 int count = 0, i;
1073
1074 gdb_assert (numsigs < 256);
1075 for (i = 0; i < numsigs; i++)
1076 {
1077 if (signal_stop_state (i) == 0
1078 && signal_print_state (i) == 0
1079 && signal_pass_state (i) == 1)
1080 count++;
1081 }
1082 pass_packet = xmalloc (count * 3 + strlen ("QPassSignals:") + 1);
1083 strcpy (pass_packet, "QPassSignals:");
1084 p = pass_packet + strlen (pass_packet);
1085 for (i = 0; i < numsigs; i++)
1086 {
1087 if (signal_stop_state (i) == 0
1088 && signal_print_state (i) == 0
1089 && signal_pass_state (i) == 1)
1090 {
1091 if (i >= 16)
1092 *p++ = tohex (i >> 4);
1093 *p++ = tohex (i & 15);
1094 if (count)
1095 *p++ = ';';
1096 else
1097 break;
1098 count--;
1099 }
1100 }
1101 *p = 0;
1102 if (!last_pass_packet || strcmp (last_pass_packet, pass_packet))
1103 {
1104 struct remote_state *rs = get_remote_state ();
1105 char *buf = rs->buf;
1106
1107 putpkt (pass_packet);
1108 getpkt (&rs->buf, &rs->buf_size, 0);
1109 packet_ok (buf, &remote_protocol_packets[PACKET_QPassSignals]);
1110 if (last_pass_packet)
1111 xfree (last_pass_packet);
1112 last_pass_packet = pass_packet;
1113 }
1114 else
1115 xfree (pass_packet);
1116 }
1117}
1118
c906108c
SS
1119#define MAGIC_NULL_PID 42000
1120
1121static void
fba45db2 1122set_thread (int th, int gen)
c906108c 1123{
d01949b6 1124 struct remote_state *rs = get_remote_state ();
6d820c5c 1125 char *buf = rs->buf;
cce74817 1126 int state = gen ? general_thread : continue_thread;
c906108c
SS
1127
1128 if (state == th)
1129 return;
1130
1131 buf[0] = 'H';
1132 buf[1] = gen ? 'g' : 'c';
1133 if (th == MAGIC_NULL_PID)
1134 {
1135 buf[2] = '0';
1136 buf[3] = '\0';
1137 }
1138 else if (th < 0)
ea9c271d 1139 xsnprintf (&buf[2], get_remote_packet_size () - 2, "-%x", -th);
c906108c 1140 else
ea9c271d 1141 xsnprintf (&buf[2], get_remote_packet_size () - 2, "%x", th);
c906108c 1142 putpkt (buf);
6d820c5c 1143 getpkt (&rs->buf, &rs->buf_size, 0);
c906108c 1144 if (gen)
c5aa993b 1145 general_thread = th;
c906108c 1146 else
cce74817 1147 continue_thread = th;
c906108c
SS
1148}
1149\f
1150/* Return nonzero if the thread TH is still alive on the remote system. */
1151
1152static int
39f77062 1153remote_thread_alive (ptid_t ptid)
c906108c 1154{
6d820c5c 1155 struct remote_state *rs = get_remote_state ();
39f77062 1156 int tid = PIDGET (ptid);
c906108c 1157
cce74817 1158 if (tid < 0)
2e9f7625 1159 xsnprintf (rs->buf, get_remote_packet_size (), "T-%08x", -tid);
c906108c 1160 else
2e9f7625
DJ
1161 xsnprintf (rs->buf, get_remote_packet_size (), "T%08x", tid);
1162 putpkt (rs->buf);
6d820c5c 1163 getpkt (&rs->buf, &rs->buf_size, 0);
2e9f7625 1164 return (rs->buf[0] == 'O' && rs->buf[1] == 'K');
c906108c
SS
1165}
1166
1167/* About these extended threadlist and threadinfo packets. They are
1168 variable length packets but, the fields within them are often fixed
1169 length. They are redundent enough to send over UDP as is the
1170 remote protocol in general. There is a matching unit test module
1171 in libstub. */
1172
cce74817
JM
1173#define OPAQUETHREADBYTES 8
1174
1175/* a 64 bit opaque identifier */
1176typedef unsigned char threadref[OPAQUETHREADBYTES];
1177
23860348
MS
1178/* WARNING: This threadref data structure comes from the remote O.S.,
1179 libstub protocol encoding, and remote.c. it is not particularly
1180 changable. */
cce74817
JM
1181
1182/* Right now, the internal structure is int. We want it to be bigger.
1183 Plan to fix this.
c5aa993b 1184 */
cce74817 1185
23860348 1186typedef int gdb_threadref; /* Internal GDB thread reference. */
cce74817 1187
9d1f7ab2 1188/* gdb_ext_thread_info is an internal GDB data structure which is
cfde0993 1189 equivalent to the reply of the remote threadinfo packet. */
cce74817
JM
1190
1191struct gdb_ext_thread_info
c5aa993b 1192 {
23860348 1193 threadref threadid; /* External form of thread reference. */
2bc416ba 1194 int active; /* Has state interesting to GDB?
23860348 1195 regs, stack. */
2bc416ba 1196 char display[256]; /* Brief state display, name,
cedea757 1197 blocked/suspended. */
23860348 1198 char shortname[32]; /* To be used to name threads. */
2bc416ba 1199 char more_display[256]; /* Long info, statistics, queue depth,
23860348 1200 whatever. */
c5aa993b 1201 };
cce74817
JM
1202
1203/* The volume of remote transfers can be limited by submitting
1204 a mask containing bits specifying the desired information.
1205 Use a union of these values as the 'selection' parameter to
1206 get_thread_info. FIXME: Make these TAG names more thread specific.
c5aa993b 1207 */
cce74817
JM
1208
1209#define TAG_THREADID 1
1210#define TAG_EXISTS 2
1211#define TAG_DISPLAY 4
1212#define TAG_THREADNAME 8
c5aa993b 1213#define TAG_MOREDISPLAY 16
cce74817 1214
23860348 1215#define BUF_THREAD_ID_SIZE (OPAQUETHREADBYTES * 2)
c906108c 1216
b2dd6311 1217char *unpack_varlen_hex (char *buff, ULONGEST *result);
cce74817 1218
a14ed312 1219static char *unpack_nibble (char *buf, int *val);
cce74817 1220
a14ed312 1221static char *pack_nibble (char *buf, int nibble);
cce74817 1222
23860348 1223static char *pack_hex_byte (char *pkt, int /* unsigned char */ byte);
cce74817 1224
a14ed312 1225static char *unpack_byte (char *buf, int *value);
cce74817 1226
a14ed312 1227static char *pack_int (char *buf, int value);
cce74817 1228
a14ed312 1229static char *unpack_int (char *buf, int *value);
cce74817 1230
a14ed312 1231static char *unpack_string (char *src, char *dest, int length);
cce74817 1232
23860348 1233static char *pack_threadid (char *pkt, threadref *id);
cce74817 1234
23860348 1235static char *unpack_threadid (char *inbuf, threadref *id);
cce74817 1236
23860348 1237void int_to_threadref (threadref *id, int value);
cce74817 1238
23860348 1239static int threadref_to_int (threadref *ref);
cce74817 1240
23860348 1241static void copy_threadref (threadref *dest, threadref *src);
cce74817 1242
23860348 1243static int threadmatch (threadref *dest, threadref *src);
cce74817 1244
2bc416ba 1245static char *pack_threadinfo_request (char *pkt, int mode,
23860348 1246 threadref *id);
cce74817 1247
a14ed312 1248static int remote_unpack_thread_info_response (char *pkt,
23860348 1249 threadref *expectedref,
a14ed312
KB
1250 struct gdb_ext_thread_info
1251 *info);
cce74817
JM
1252
1253
2bc416ba 1254static int remote_get_threadinfo (threadref *threadid,
23860348 1255 int fieldset, /*TAG mask */
a14ed312 1256 struct gdb_ext_thread_info *info);
cce74817 1257
a14ed312
KB
1258static char *pack_threadlist_request (char *pkt, int startflag,
1259 int threadcount,
23860348 1260 threadref *nextthread);
cce74817 1261
a14ed312
KB
1262static int parse_threadlist_response (char *pkt,
1263 int result_limit,
23860348 1264 threadref *original_echo,
2bc416ba 1265 threadref *resultlist,
23860348 1266 int *doneflag);
cce74817 1267
a14ed312 1268static int remote_get_threadlist (int startflag,
23860348 1269 threadref *nextthread,
a14ed312
KB
1270 int result_limit,
1271 int *done,
2bc416ba 1272 int *result_count,
23860348 1273 threadref *threadlist);
cce74817 1274
23860348 1275typedef int (*rmt_thread_action) (threadref *ref, void *context);
cce74817 1276
a14ed312
KB
1277static int remote_threadlist_iterator (rmt_thread_action stepfunction,
1278 void *context, int looplimit);
cce74817 1279
23860348 1280static int remote_newthread_step (threadref *ref, void *context);
cce74817 1281
23860348 1282/* Encode 64 bits in 16 chars of hex. */
c906108c
SS
1283
1284static const char hexchars[] = "0123456789abcdef";
1285
1286static int
fba45db2 1287ishex (int ch, int *val)
c906108c
SS
1288{
1289 if ((ch >= 'a') && (ch <= 'f'))
1290 {
1291 *val = ch - 'a' + 10;
1292 return 1;
1293 }
1294 if ((ch >= 'A') && (ch <= 'F'))
1295 {
1296 *val = ch - 'A' + 10;
1297 return 1;
1298 }
1299 if ((ch >= '0') && (ch <= '9'))
1300 {
1301 *val = ch - '0';
1302 return 1;
1303 }
1304 return 0;
1305}
1306
1307static int
fba45db2 1308stubhex (int ch)
c906108c
SS
1309{
1310 if (ch >= 'a' && ch <= 'f')
1311 return ch - 'a' + 10;
1312 if (ch >= '0' && ch <= '9')
1313 return ch - '0';
1314 if (ch >= 'A' && ch <= 'F')
1315 return ch - 'A' + 10;
1316 return -1;
1317}
1318
1319static int
fba45db2 1320stub_unpack_int (char *buff, int fieldlength)
c906108c
SS
1321{
1322 int nibble;
1323 int retval = 0;
1324
1325 while (fieldlength)
1326 {
1327 nibble = stubhex (*buff++);
1328 retval |= nibble;
1329 fieldlength--;
1330 if (fieldlength)
1331 retval = retval << 4;
1332 }
1333 return retval;
1334}
1335
1336char *
fba45db2 1337unpack_varlen_hex (char *buff, /* packet to parse */
b2dd6311 1338 ULONGEST *result)
c906108c
SS
1339{
1340 int nibble;
d49c44d5 1341 ULONGEST retval = 0;
c906108c
SS
1342
1343 while (ishex (*buff, &nibble))
1344 {
1345 buff++;
1346 retval = retval << 4;
1347 retval |= nibble & 0x0f;
1348 }
1349 *result = retval;
1350 return buff;
1351}
1352
1353static char *
fba45db2 1354unpack_nibble (char *buf, int *val)
c906108c
SS
1355{
1356 ishex (*buf++, val);
1357 return buf;
1358}
1359
1360static char *
fba45db2 1361pack_nibble (char *buf, int nibble)
c906108c
SS
1362{
1363 *buf++ = hexchars[(nibble & 0x0f)];
1364 return buf;
1365}
1366
1367static char *
fba45db2 1368pack_hex_byte (char *pkt, int byte)
c906108c
SS
1369{
1370 *pkt++ = hexchars[(byte >> 4) & 0xf];
1371 *pkt++ = hexchars[(byte & 0xf)];
1372 return pkt;
1373}
1374
1375static char *
fba45db2 1376unpack_byte (char *buf, int *value)
c906108c
SS
1377{
1378 *value = stub_unpack_int (buf, 2);
1379 return buf + 2;
1380}
1381
1382static char *
fba45db2 1383pack_int (char *buf, int value)
c906108c
SS
1384{
1385 buf = pack_hex_byte (buf, (value >> 24) & 0xff);
1386 buf = pack_hex_byte (buf, (value >> 16) & 0xff);
1387 buf = pack_hex_byte (buf, (value >> 8) & 0x0ff);
1388 buf = pack_hex_byte (buf, (value & 0xff));
1389 return buf;
1390}
1391
1392static char *
fba45db2 1393unpack_int (char *buf, int *value)
c906108c
SS
1394{
1395 *value = stub_unpack_int (buf, 8);
1396 return buf + 8;
1397}
1398
23860348 1399#if 0 /* Currently unused, uncomment when needed. */
a14ed312 1400static char *pack_string (char *pkt, char *string);
c906108c
SS
1401
1402static char *
fba45db2 1403pack_string (char *pkt, char *string)
c906108c
SS
1404{
1405 char ch;
1406 int len;
1407
1408 len = strlen (string);
1409 if (len > 200)
23860348 1410 len = 200; /* Bigger than most GDB packets, junk??? */
c906108c
SS
1411 pkt = pack_hex_byte (pkt, len);
1412 while (len-- > 0)
1413 {
1414 ch = *string++;
1415 if ((ch == '\0') || (ch == '#'))
23860348 1416 ch = '*'; /* Protect encapsulation. */
c906108c
SS
1417 *pkt++ = ch;
1418 }
1419 return pkt;
1420}
1421#endif /* 0 (unused) */
1422
1423static char *
fba45db2 1424unpack_string (char *src, char *dest, int length)
c906108c
SS
1425{
1426 while (length--)
1427 *dest++ = *src++;
1428 *dest = '\0';
1429 return src;
1430}
1431
1432static char *
fba45db2 1433pack_threadid (char *pkt, threadref *id)
c906108c
SS
1434{
1435 char *limit;
1436 unsigned char *altid;
1437
1438 altid = (unsigned char *) id;
1439 limit = pkt + BUF_THREAD_ID_SIZE;
1440 while (pkt < limit)
1441 pkt = pack_hex_byte (pkt, *altid++);
1442 return pkt;
1443}
1444
1445
1446static char *
fba45db2 1447unpack_threadid (char *inbuf, threadref *id)
c906108c
SS
1448{
1449 char *altref;
1450 char *limit = inbuf + BUF_THREAD_ID_SIZE;
1451 int x, y;
1452
1453 altref = (char *) id;
1454
1455 while (inbuf < limit)
1456 {
1457 x = stubhex (*inbuf++);
1458 y = stubhex (*inbuf++);
1459 *altref++ = (x << 4) | y;
1460 }
1461 return inbuf;
1462}
1463
1464/* Externally, threadrefs are 64 bits but internally, they are still
1465 ints. This is due to a mismatch of specifications. We would like
1466 to use 64bit thread references internally. This is an adapter
1467 function. */
1468
1469void
fba45db2 1470int_to_threadref (threadref *id, int value)
c906108c
SS
1471{
1472 unsigned char *scan;
1473
1474 scan = (unsigned char *) id;
1475 {
1476 int i = 4;
1477 while (i--)
1478 *scan++ = 0;
1479 }
1480 *scan++ = (value >> 24) & 0xff;
1481 *scan++ = (value >> 16) & 0xff;
1482 *scan++ = (value >> 8) & 0xff;
1483 *scan++ = (value & 0xff);
1484}
1485
1486static int
fba45db2 1487threadref_to_int (threadref *ref)
c906108c
SS
1488{
1489 int i, value = 0;
1490 unsigned char *scan;
1491
cfd77fa1 1492 scan = *ref;
c906108c
SS
1493 scan += 4;
1494 i = 4;
1495 while (i-- > 0)
1496 value = (value << 8) | ((*scan++) & 0xff);
1497 return value;
1498}
1499
1500static void
fba45db2 1501copy_threadref (threadref *dest, threadref *src)
c906108c
SS
1502{
1503 int i;
1504 unsigned char *csrc, *cdest;
1505
1506 csrc = (unsigned char *) src;
1507 cdest = (unsigned char *) dest;
1508 i = 8;
1509 while (i--)
1510 *cdest++ = *csrc++;
1511}
1512
1513static int
fba45db2 1514threadmatch (threadref *dest, threadref *src)
c906108c 1515{
23860348 1516 /* Things are broken right now, so just assume we got a match. */
c906108c
SS
1517#if 0
1518 unsigned char *srcp, *destp;
1519 int i, result;
1520 srcp = (char *) src;
1521 destp = (char *) dest;
1522
1523 result = 1;
1524 while (i-- > 0)
1525 result &= (*srcp++ == *destp++) ? 1 : 0;
1526 return result;
1527#endif
1528 return 1;
1529}
1530
1531/*
c5aa993b
JM
1532 threadid:1, # always request threadid
1533 context_exists:2,
1534 display:4,
1535 unique_name:8,
1536 more_display:16
1537 */
c906108c
SS
1538
1539/* Encoding: 'Q':8,'P':8,mask:32,threadid:64 */
1540
1541static char *
fba45db2 1542pack_threadinfo_request (char *pkt, int mode, threadref *id)
c906108c 1543{
23860348
MS
1544 *pkt++ = 'q'; /* Info Query */
1545 *pkt++ = 'P'; /* process or thread info */
1546 pkt = pack_int (pkt, mode); /* mode */
c906108c 1547 pkt = pack_threadid (pkt, id); /* threadid */
23860348 1548 *pkt = '\0'; /* terminate */
c906108c
SS
1549 return pkt;
1550}
1551
23860348 1552/* These values tag the fields in a thread info response packet. */
c906108c 1553/* Tagging the fields allows us to request specific fields and to
23860348 1554 add more fields as time goes by. */
c906108c 1555
23860348 1556#define TAG_THREADID 1 /* Echo the thread identifier. */
c5aa993b 1557#define TAG_EXISTS 2 /* Is this process defined enough to
23860348 1558 fetch registers and its stack? */
c5aa993b 1559#define TAG_DISPLAY 4 /* A short thing maybe to put on a window */
23860348 1560#define TAG_THREADNAME 8 /* string, maps 1-to-1 with a thread is. */
802188a7 1561#define TAG_MOREDISPLAY 16 /* Whatever the kernel wants to say about
23860348 1562 the process. */
c906108c
SS
1563
1564static int
fba45db2
KB
1565remote_unpack_thread_info_response (char *pkt, threadref *expectedref,
1566 struct gdb_ext_thread_info *info)
c906108c 1567{
d01949b6 1568 struct remote_state *rs = get_remote_state ();
c906108c 1569 int mask, length;
cfd77fa1 1570 int tag;
c906108c 1571 threadref ref;
6d820c5c 1572 char *limit = pkt + rs->buf_size; /* Plausible parsing limit. */
c906108c
SS
1573 int retval = 1;
1574
23860348 1575 /* info->threadid = 0; FIXME: implement zero_threadref. */
c906108c
SS
1576 info->active = 0;
1577 info->display[0] = '\0';
1578 info->shortname[0] = '\0';
1579 info->more_display[0] = '\0';
1580
23860348
MS
1581 /* Assume the characters indicating the packet type have been
1582 stripped. */
c906108c
SS
1583 pkt = unpack_int (pkt, &mask); /* arg mask */
1584 pkt = unpack_threadid (pkt, &ref);
1585
1586 if (mask == 0)
8a3fe4f8 1587 warning (_("Incomplete response to threadinfo request."));
c906108c 1588 if (!threadmatch (&ref, expectedref))
23860348 1589 { /* This is an answer to a different request. */
8a3fe4f8 1590 warning (_("ERROR RMT Thread info mismatch."));
c906108c
SS
1591 return 0;
1592 }
1593 copy_threadref (&info->threadid, &ref);
1594
23860348 1595 /* Loop on tagged fields , try to bail if somthing goes wrong. */
c906108c 1596
23860348
MS
1597 /* Packets are terminated with nulls. */
1598 while ((pkt < limit) && mask && *pkt)
c906108c
SS
1599 {
1600 pkt = unpack_int (pkt, &tag); /* tag */
23860348
MS
1601 pkt = unpack_byte (pkt, &length); /* length */
1602 if (!(tag & mask)) /* Tags out of synch with mask. */
c906108c 1603 {
8a3fe4f8 1604 warning (_("ERROR RMT: threadinfo tag mismatch."));
c906108c
SS
1605 retval = 0;
1606 break;
1607 }
1608 if (tag == TAG_THREADID)
1609 {
1610 if (length != 16)
1611 {
8a3fe4f8 1612 warning (_("ERROR RMT: length of threadid is not 16."));
c906108c
SS
1613 retval = 0;
1614 break;
1615 }
1616 pkt = unpack_threadid (pkt, &ref);
1617 mask = mask & ~TAG_THREADID;
1618 continue;
1619 }
1620 if (tag == TAG_EXISTS)
1621 {
1622 info->active = stub_unpack_int (pkt, length);
1623 pkt += length;
1624 mask = mask & ~(TAG_EXISTS);
1625 if (length > 8)
1626 {
8a3fe4f8 1627 warning (_("ERROR RMT: 'exists' length too long."));
c906108c
SS
1628 retval = 0;
1629 break;
1630 }
1631 continue;
1632 }
1633 if (tag == TAG_THREADNAME)
1634 {
1635 pkt = unpack_string (pkt, &info->shortname[0], length);
1636 mask = mask & ~TAG_THREADNAME;
1637 continue;
1638 }
1639 if (tag == TAG_DISPLAY)
1640 {
1641 pkt = unpack_string (pkt, &info->display[0], length);
1642 mask = mask & ~TAG_DISPLAY;
1643 continue;
1644 }
1645 if (tag == TAG_MOREDISPLAY)
1646 {
1647 pkt = unpack_string (pkt, &info->more_display[0], length);
1648 mask = mask & ~TAG_MOREDISPLAY;
1649 continue;
1650 }
8a3fe4f8 1651 warning (_("ERROR RMT: unknown thread info tag."));
23860348 1652 break; /* Not a tag we know about. */
c906108c
SS
1653 }
1654 return retval;
1655}
1656
1657static int
fba45db2
KB
1658remote_get_threadinfo (threadref *threadid, int fieldset, /* TAG mask */
1659 struct gdb_ext_thread_info *info)
c906108c 1660{
d01949b6 1661 struct remote_state *rs = get_remote_state ();
c906108c 1662 int result;
c906108c 1663
2e9f7625
DJ
1664 pack_threadinfo_request (rs->buf, fieldset, threadid);
1665 putpkt (rs->buf);
6d820c5c 1666 getpkt (&rs->buf, &rs->buf_size, 0);
2e9f7625 1667 result = remote_unpack_thread_info_response (rs->buf + 2,
23860348 1668 threadid, info);
c906108c
SS
1669 return result;
1670}
1671
c906108c
SS
1672/* Format: i'Q':8,i"L":8,initflag:8,batchsize:16,lastthreadid:32 */
1673
1674static char *
fba45db2
KB
1675pack_threadlist_request (char *pkt, int startflag, int threadcount,
1676 threadref *nextthread)
c906108c
SS
1677{
1678 *pkt++ = 'q'; /* info query packet */
1679 *pkt++ = 'L'; /* Process LIST or threadLIST request */
23860348 1680 pkt = pack_nibble (pkt, startflag); /* initflag 1 bytes */
c906108c
SS
1681 pkt = pack_hex_byte (pkt, threadcount); /* threadcount 2 bytes */
1682 pkt = pack_threadid (pkt, nextthread); /* 64 bit thread identifier */
1683 *pkt = '\0';
1684 return pkt;
1685}
1686
1687/* Encoding: 'q':8,'M':8,count:16,done:8,argthreadid:64,(threadid:64)* */
1688
1689static int
fba45db2
KB
1690parse_threadlist_response (char *pkt, int result_limit,
1691 threadref *original_echo, threadref *resultlist,
1692 int *doneflag)
c906108c 1693{
d01949b6 1694 struct remote_state *rs = get_remote_state ();
c906108c
SS
1695 char *limit;
1696 int count, resultcount, done;
1697
1698 resultcount = 0;
1699 /* Assume the 'q' and 'M chars have been stripped. */
6d820c5c 1700 limit = pkt + (rs->buf_size - BUF_THREAD_ID_SIZE);
23860348 1701 /* done parse past here */
c906108c
SS
1702 pkt = unpack_byte (pkt, &count); /* count field */
1703 pkt = unpack_nibble (pkt, &done);
1704 /* The first threadid is the argument threadid. */
1705 pkt = unpack_threadid (pkt, original_echo); /* should match query packet */
1706 while ((count-- > 0) && (pkt < limit))
1707 {
1708 pkt = unpack_threadid (pkt, resultlist++);
1709 if (resultcount++ >= result_limit)
1710 break;
1711 }
1712 if (doneflag)
1713 *doneflag = done;
1714 return resultcount;
1715}
1716
1717static int
fba45db2
KB
1718remote_get_threadlist (int startflag, threadref *nextthread, int result_limit,
1719 int *done, int *result_count, threadref *threadlist)
c906108c 1720{
d01949b6 1721 struct remote_state *rs = get_remote_state ();
c906108c 1722 static threadref echo_nextthread;
c906108c
SS
1723 int result = 1;
1724
23860348 1725 /* Trancate result limit to be smaller than the packet size. */
ea9c271d
DJ
1726 if ((((result_limit + 1) * BUF_THREAD_ID_SIZE) + 10) >= get_remote_packet_size ())
1727 result_limit = (get_remote_packet_size () / BUF_THREAD_ID_SIZE) - 2;
c906108c 1728
6d820c5c
DJ
1729 pack_threadlist_request (rs->buf, startflag, result_limit, nextthread);
1730 putpkt (rs->buf);
1731 getpkt (&rs->buf, &rs->buf_size, 0);
c906108c
SS
1732
1733 *result_count =
6d820c5c 1734 parse_threadlist_response (rs->buf + 2, result_limit, &echo_nextthread,
c906108c
SS
1735 threadlist, done);
1736
1737 if (!threadmatch (&echo_nextthread, nextthread))
1738 {
23860348
MS
1739 /* FIXME: This is a good reason to drop the packet. */
1740 /* Possably, there is a duplicate response. */
c906108c
SS
1741 /* Possabilities :
1742 retransmit immediatly - race conditions
1743 retransmit after timeout - yes
1744 exit
1745 wait for packet, then exit
1746 */
8a3fe4f8 1747 warning (_("HMM: threadlist did not echo arg thread, dropping it."));
23860348 1748 return 0; /* I choose simply exiting. */
c906108c
SS
1749 }
1750 if (*result_count <= 0)
1751 {
1752 if (*done != 1)
1753 {
8a3fe4f8 1754 warning (_("RMT ERROR : failed to get remote thread list."));
c906108c
SS
1755 result = 0;
1756 }
1757 return result; /* break; */
1758 }
1759 if (*result_count > result_limit)
1760 {
1761 *result_count = 0;
8a3fe4f8 1762 warning (_("RMT ERROR: threadlist response longer than requested."));
c906108c
SS
1763 return 0;
1764 }
1765 return result;
1766}
1767
23860348
MS
1768/* This is the interface between remote and threads, remotes upper
1769 interface. */
c906108c
SS
1770
1771/* remote_find_new_threads retrieves the thread list and for each
1772 thread in the list, looks up the thread in GDB's internal list,
1773 ading the thread if it does not already exist. This involves
1774 getting partial thread lists from the remote target so, polling the
1775 quit_flag is required. */
1776
1777
23860348 1778/* About this many threadisds fit in a packet. */
c906108c
SS
1779
1780#define MAXTHREADLISTRESULTS 32
1781
1782static int
fba45db2
KB
1783remote_threadlist_iterator (rmt_thread_action stepfunction, void *context,
1784 int looplimit)
c906108c
SS
1785{
1786 int done, i, result_count;
1787 int startflag = 1;
1788 int result = 1;
1789 int loopcount = 0;
1790 static threadref nextthread;
1791 static threadref resultthreadlist[MAXTHREADLISTRESULTS];
1792
1793 done = 0;
1794 while (!done)
1795 {
1796 if (loopcount++ > looplimit)
1797 {
1798 result = 0;
8a3fe4f8 1799 warning (_("Remote fetch threadlist -infinite loop-."));
c906108c
SS
1800 break;
1801 }
1802 if (!remote_get_threadlist (startflag, &nextthread, MAXTHREADLISTRESULTS,
1803 &done, &result_count, resultthreadlist))
1804 {
1805 result = 0;
1806 break;
1807 }
23860348 1808 /* Clear for later iterations. */
c906108c
SS
1809 startflag = 0;
1810 /* Setup to resume next batch of thread references, set nextthread. */
1811 if (result_count >= 1)
1812 copy_threadref (&nextthread, &resultthreadlist[result_count - 1]);
1813 i = 0;
1814 while (result_count--)
1815 if (!(result = (*stepfunction) (&resultthreadlist[i++], context)))
1816 break;
1817 }
1818 return result;
1819}
1820
1821static int
fba45db2 1822remote_newthread_step (threadref *ref, void *context)
c906108c 1823{
39f77062 1824 ptid_t ptid;
c906108c 1825
39f77062
KB
1826 ptid = pid_to_ptid (threadref_to_int (ref));
1827
1828 if (!in_thread_list (ptid))
1829 add_thread (ptid);
c906108c
SS
1830 return 1; /* continue iterator */
1831}
1832
1833#define CRAZY_MAX_THREADS 1000
1834
39f77062
KB
1835static ptid_t
1836remote_current_thread (ptid_t oldpid)
c906108c 1837{
d01949b6 1838 struct remote_state *rs = get_remote_state ();
c906108c
SS
1839
1840 putpkt ("qC");
6d820c5c 1841 getpkt (&rs->buf, &rs->buf_size, 0);
2e9f7625 1842 if (rs->buf[0] == 'Q' && rs->buf[1] == 'C')
c273b20f
JB
1843 /* Use strtoul here, so we'll correctly parse values whose highest
1844 bit is set. The protocol carries them as a simple series of
1845 hex digits; in the absence of a sign, strtol will see such
1846 values as positive numbers out of range for signed 'long', and
1847 return LONG_MAX to indicate an overflow. */
2e9f7625 1848 return pid_to_ptid (strtoul (&rs->buf[2], NULL, 16));
c906108c
SS
1849 else
1850 return oldpid;
1851}
1852
802188a7
RM
1853/* Find new threads for info threads command.
1854 * Original version, using John Metzler's thread protocol.
9d1f7ab2 1855 */
cce74817
JM
1856
1857static void
fba45db2 1858remote_find_new_threads (void)
c906108c 1859{
c5aa993b
JM
1860 remote_threadlist_iterator (remote_newthread_step, 0,
1861 CRAZY_MAX_THREADS);
39f77062
KB
1862 if (PIDGET (inferior_ptid) == MAGIC_NULL_PID) /* ack ack ack */
1863 inferior_ptid = remote_current_thread (inferior_ptid);
c906108c
SS
1864}
1865
9d1f7ab2
MS
1866/*
1867 * Find all threads for info threads command.
1868 * Uses new thread protocol contributed by Cisco.
1869 * Falls back and attempts to use the older method (above)
1870 * if the target doesn't respond to the new method.
1871 */
1872
0f71a2f6
JM
1873static void
1874remote_threads_info (void)
1875{
d01949b6 1876 struct remote_state *rs = get_remote_state ();
085dd6e6 1877 char *bufp;
0f71a2f6
JM
1878 int tid;
1879
1880 if (remote_desc == 0) /* paranoia */
8a3fe4f8 1881 error (_("Command can only be used when connected to the remote target."));
0f71a2f6 1882
9d1f7ab2
MS
1883 if (use_threadinfo_query)
1884 {
1885 putpkt ("qfThreadInfo");
6d820c5c 1886 getpkt (&rs->buf, &rs->buf_size, 0);
2e9f7625 1887 bufp = rs->buf;
9d1f7ab2 1888 if (bufp[0] != '\0') /* q packet recognized */
802188a7 1889 {
9d1f7ab2
MS
1890 while (*bufp++ == 'm') /* reply contains one or more TID */
1891 {
1892 do
1893 {
c273b20f
JB
1894 /* Use strtoul here, so we'll correctly parse values
1895 whose highest bit is set. The protocol carries
1896 them as a simple series of hex digits; in the
1897 absence of a sign, strtol will see such values as
1898 positive numbers out of range for signed 'long',
1899 and return LONG_MAX to indicate an overflow. */
1900 tid = strtoul (bufp, &bufp, 16);
39f77062
KB
1901 if (tid != 0 && !in_thread_list (pid_to_ptid (tid)))
1902 add_thread (pid_to_ptid (tid));
9d1f7ab2
MS
1903 }
1904 while (*bufp++ == ','); /* comma-separated list */
1905 putpkt ("qsThreadInfo");
6d820c5c 1906 getpkt (&rs->buf, &rs->buf_size, 0);
2e9f7625 1907 bufp = rs->buf;
9d1f7ab2
MS
1908 }
1909 return; /* done */
1910 }
1911 }
1912
23860348 1913 /* Else fall back to old method based on jmetzler protocol. */
9d1f7ab2
MS
1914 use_threadinfo_query = 0;
1915 remote_find_new_threads ();
1916 return;
1917}
1918
802188a7 1919/*
9d1f7ab2
MS
1920 * Collect a descriptive string about the given thread.
1921 * The target may say anything it wants to about the thread
1922 * (typically info about its blocked / runnable state, name, etc.).
1923 * This string will appear in the info threads display.
802188a7 1924 *
9d1f7ab2
MS
1925 * Optional: targets are not required to implement this function.
1926 */
1927
1928static char *
1929remote_threads_extra_info (struct thread_info *tp)
1930{
d01949b6 1931 struct remote_state *rs = get_remote_state ();
9d1f7ab2
MS
1932 int result;
1933 int set;
1934 threadref id;
1935 struct gdb_ext_thread_info threadinfo;
23860348 1936 static char display_buf[100]; /* arbitrary... */
9d1f7ab2
MS
1937 int n = 0; /* position in display_buf */
1938
1939 if (remote_desc == 0) /* paranoia */
8e65ff28 1940 internal_error (__FILE__, __LINE__,
e2e0b3e5 1941 _("remote_threads_extra_info"));
9d1f7ab2
MS
1942
1943 if (use_threadextra_query)
1944 {
2e9f7625 1945 xsnprintf (rs->buf, get_remote_packet_size (), "qThreadExtraInfo,%x",
ecbc58df 1946 PIDGET (tp->ptid));
2e9f7625 1947 putpkt (rs->buf);
6d820c5c 1948 getpkt (&rs->buf, &rs->buf_size, 0);
2e9f7625 1949 if (rs->buf[0] != 0)
9d1f7ab2 1950 {
2e9f7625
DJ
1951 n = min (strlen (rs->buf) / 2, sizeof (display_buf));
1952 result = hex2bin (rs->buf, (gdb_byte *) display_buf, n);
30559e10 1953 display_buf [result] = '\0';
9d1f7ab2
MS
1954 return display_buf;
1955 }
0f71a2f6 1956 }
9d1f7ab2
MS
1957
1958 /* If the above query fails, fall back to the old method. */
1959 use_threadextra_query = 0;
1960 set = TAG_THREADID | TAG_EXISTS | TAG_THREADNAME
1961 | TAG_MOREDISPLAY | TAG_DISPLAY;
39f77062 1962 int_to_threadref (&id, PIDGET (tp->ptid));
9d1f7ab2
MS
1963 if (remote_get_threadinfo (&id, set, &threadinfo))
1964 if (threadinfo.active)
0f71a2f6 1965 {
9d1f7ab2 1966 if (*threadinfo.shortname)
2bc416ba 1967 n += xsnprintf (&display_buf[0], sizeof (display_buf) - n,
ecbc58df 1968 " Name: %s,", threadinfo.shortname);
9d1f7ab2 1969 if (*threadinfo.display)
2bc416ba 1970 n += xsnprintf (&display_buf[n], sizeof (display_buf) - n,
ecbc58df 1971 " State: %s,", threadinfo.display);
9d1f7ab2 1972 if (*threadinfo.more_display)
2bc416ba 1973 n += xsnprintf (&display_buf[n], sizeof (display_buf) - n,
ecbc58df 1974 " Priority: %s", threadinfo.more_display);
9d1f7ab2
MS
1975
1976 if (n > 0)
c5aa993b 1977 {
23860348 1978 /* For purely cosmetic reasons, clear up trailing commas. */
9d1f7ab2
MS
1979 if (',' == display_buf[n-1])
1980 display_buf[n-1] = ' ';
1981 return display_buf;
c5aa993b 1982 }
0f71a2f6 1983 }
9d1f7ab2 1984 return NULL;
0f71a2f6 1985}
c906108c 1986\f
c5aa993b 1987
24b06219 1988/* Restart the remote side; this is an extended protocol operation. */
c906108c
SS
1989
1990static void
fba45db2 1991extended_remote_restart (void)
c906108c 1992{
d01949b6 1993 struct remote_state *rs = get_remote_state ();
c906108c
SS
1994
1995 /* Send the restart command; for reasons I don't understand the
1996 remote side really expects a number after the "R". */
ea9c271d 1997 xsnprintf (rs->buf, get_remote_packet_size (), "R%x", 0);
6d820c5c 1998 putpkt (rs->buf);
c906108c 1999
ad9a8f3f 2000 remote_fileio_reset ();
2bc416ba 2001
c906108c
SS
2002 /* Now query for status so this looks just like we restarted
2003 gdbserver from scratch. */
2004 putpkt ("?");
01d3a6ce 2005 getpkt (&rs->buf, &rs->buf_size, 0);
c906108c
SS
2006}
2007\f
2008/* Clean up connection to a remote debugger. */
2009
c906108c 2010static void
fba45db2 2011remote_close (int quitting)
c906108c
SS
2012{
2013 if (remote_desc)
2cd58942 2014 serial_close (remote_desc);
c906108c
SS
2015 remote_desc = NULL;
2016}
2017
23860348 2018/* Query the remote side for the text, data and bss offsets. */
c906108c
SS
2019
2020static void
fba45db2 2021get_offsets (void)
c906108c 2022{
d01949b6 2023 struct remote_state *rs = get_remote_state ();
2e9f7625 2024 char *buf;
085dd6e6 2025 char *ptr;
31d99776
DJ
2026 int lose, num_segments = 0, do_sections, do_segments;
2027 CORE_ADDR text_addr, data_addr, bss_addr, segments[2];
c906108c 2028 struct section_offsets *offs;
31d99776
DJ
2029 struct symfile_segment_data *data;
2030
2031 if (symfile_objfile == NULL)
2032 return;
c906108c
SS
2033
2034 putpkt ("qOffsets");
6d820c5c 2035 getpkt (&rs->buf, &rs->buf_size, 0);
2e9f7625 2036 buf = rs->buf;
c906108c
SS
2037
2038 if (buf[0] == '\000')
2039 return; /* Return silently. Stub doesn't support
23860348 2040 this command. */
c906108c
SS
2041 if (buf[0] == 'E')
2042 {
8a3fe4f8 2043 warning (_("Remote failure reply: %s"), buf);
c906108c
SS
2044 return;
2045 }
2046
2047 /* Pick up each field in turn. This used to be done with scanf, but
2048 scanf will make trouble if CORE_ADDR size doesn't match
2049 conversion directives correctly. The following code will work
2050 with any size of CORE_ADDR. */
2051 text_addr = data_addr = bss_addr = 0;
2052 ptr = buf;
2053 lose = 0;
2054
2055 if (strncmp (ptr, "Text=", 5) == 0)
2056 {
2057 ptr += 5;
2058 /* Don't use strtol, could lose on big values. */
2059 while (*ptr && *ptr != ';')
2060 text_addr = (text_addr << 4) + fromhex (*ptr++);
c906108c 2061
31d99776
DJ
2062 if (strncmp (ptr, ";Data=", 6) == 0)
2063 {
2064 ptr += 6;
2065 while (*ptr && *ptr != ';')
2066 data_addr = (data_addr << 4) + fromhex (*ptr++);
2067 }
2068 else
2069 lose = 1;
2070
2071 if (!lose && strncmp (ptr, ";Bss=", 5) == 0)
2072 {
2073 ptr += 5;
2074 while (*ptr && *ptr != ';')
2075 bss_addr = (bss_addr << 4) + fromhex (*ptr++);
c906108c 2076
31d99776
DJ
2077 if (bss_addr != data_addr)
2078 warning (_("Target reported unsupported offsets: %s"), buf);
2079 }
2080 else
2081 lose = 1;
2082 }
2083 else if (strncmp (ptr, "TextSeg=", 8) == 0)
c906108c 2084 {
31d99776
DJ
2085 ptr += 8;
2086 /* Don't use strtol, could lose on big values. */
c906108c 2087 while (*ptr && *ptr != ';')
31d99776
DJ
2088 text_addr = (text_addr << 4) + fromhex (*ptr++);
2089 num_segments = 1;
2090
2091 if (strncmp (ptr, ";DataSeg=", 9) == 0)
2092 {
2093 ptr += 9;
2094 while (*ptr && *ptr != ';')
2095 data_addr = (data_addr << 4) + fromhex (*ptr++);
2096 num_segments++;
2097 }
c906108c
SS
2098 }
2099 else
2100 lose = 1;
2101
2102 if (lose)
8a3fe4f8 2103 error (_("Malformed response to offset query, %s"), buf);
31d99776
DJ
2104 else if (*ptr != '\0')
2105 warning (_("Target reported unsupported offsets: %s"), buf);
c906108c 2106
802188a7 2107 offs = ((struct section_offsets *)
a39a16c4 2108 alloca (SIZEOF_N_SECTION_OFFSETS (symfile_objfile->num_sections)));
802188a7 2109 memcpy (offs, symfile_objfile->section_offsets,
a39a16c4 2110 SIZEOF_N_SECTION_OFFSETS (symfile_objfile->num_sections));
c906108c 2111
31d99776
DJ
2112 data = get_symfile_segment_data (symfile_objfile->obfd);
2113 do_segments = (data != NULL);
2114 do_sections = num_segments == 0;
c906108c 2115
28c32713 2116 if (num_segments > 0)
31d99776 2117 {
31d99776
DJ
2118 segments[0] = text_addr;
2119 segments[1] = data_addr;
2120 }
28c32713
JB
2121 /* If we have two segments, we can still try to relocate everything
2122 by assuming that the .text and .data offsets apply to the whole
2123 text and data segments. Convert the offsets given in the packet
2124 to base addresses for symfile_map_offsets_to_segments. */
2125 else if (data && data->num_segments == 2)
2126 {
2127 segments[0] = data->segment_bases[0] + text_addr;
2128 segments[1] = data->segment_bases[1] + data_addr;
2129 num_segments = 2;
2130 }
2131 /* There's no way to relocate by segment. */
2132 else
2133 do_segments = 0;
31d99776
DJ
2134
2135 if (do_segments)
2136 {
2137 int ret = symfile_map_offsets_to_segments (symfile_objfile->obfd, data,
2138 offs, num_segments, segments);
2139
2140 if (ret == 0 && !do_sections)
2141 error (_("Can not handle qOffsets TextSeg response with this symbol file"));
2142
2143 if (ret > 0)
2144 do_sections = 0;
2145 }
c906108c 2146
9ef895d6
DJ
2147 if (data)
2148 free_symfile_segment_data (data);
31d99776
DJ
2149
2150 if (do_sections)
2151 {
2152 offs->offsets[SECT_OFF_TEXT (symfile_objfile)] = text_addr;
2153
2154 /* This is a temporary kludge to force data and bss to use the same offsets
2155 because that's what nlmconv does now. The real solution requires changes
2156 to the stub and remote.c that I don't have time to do right now. */
2157
2158 offs->offsets[SECT_OFF_DATA (symfile_objfile)] = data_addr;
2159 offs->offsets[SECT_OFF_BSS (symfile_objfile)] = data_addr;
2160 }
c906108c
SS
2161
2162 objfile_relocate (symfile_objfile, offs);
2163}
2164
8621d6a9 2165/* Stub for catch_exception. */
0f71a2f6 2166
9cbc821d 2167static void
8621d6a9 2168remote_start_remote (struct ui_out *uiout, void *from_tty_p)
c906108c 2169{
8621d6a9
DJ
2170 int from_tty = * (int *) from_tty_p;
2171
23860348 2172 immediate_quit++; /* Allow user to interrupt it. */
c906108c
SS
2173
2174 /* Ack any packet which the remote side has already sent. */
2cd58942 2175 serial_write (remote_desc, "+", 1);
c906108c
SS
2176
2177 /* Let the stub know that we want it to return the thread. */
2178 set_thread (-1, 0);
2179
39f77062 2180 inferior_ptid = remote_current_thread (inferior_ptid);
c906108c 2181
23860348 2182 get_offsets (); /* Get text, data & bss offsets. */
c906108c 2183
23860348 2184 putpkt ("?"); /* Initiate a query from remote machine. */
8edbea78 2185 immediate_quit--;
c906108c 2186
8621d6a9 2187 start_remote (from_tty); /* Initialize gdb process mechanisms. */
c906108c
SS
2188}
2189
2190/* Open a connection to a remote debugger.
2191 NAME is the filename used for communication. */
2192
2193static void
fba45db2 2194remote_open (char *name, int from_tty)
c906108c 2195{
92d1e331 2196 remote_open_1 (name, from_tty, &remote_ops, 0, 0);
c906108c
SS
2197}
2198
23860348 2199/* Just like remote_open, but with asynchronous support. */
43ff13b4 2200static void
fba45db2 2201remote_async_open (char *name, int from_tty)
43ff13b4 2202{
92d1e331 2203 remote_open_1 (name, from_tty, &remote_async_ops, 0, 1);
43ff13b4
JM
2204}
2205
c906108c
SS
2206/* Open a connection to a remote debugger using the extended
2207 remote gdb protocol. NAME is the filename used for communication. */
2208
2209static void
fba45db2 2210extended_remote_open (char *name, int from_tty)
c906108c 2211{
92d1e331
DJ
2212 remote_open_1 (name, from_tty, &extended_remote_ops, 1 /*extended_p */,
2213 0 /* async_p */);
c906108c
SS
2214}
2215
23860348 2216/* Just like extended_remote_open, but with asynchronous support. */
43ff13b4 2217static void
fba45db2 2218extended_remote_async_open (char *name, int from_tty)
43ff13b4 2219{
92d1e331
DJ
2220 remote_open_1 (name, from_tty, &extended_async_remote_ops,
2221 1 /*extended_p */, 1 /* async_p */);
43ff13b4
JM
2222}
2223
c906108c
SS
2224/* Generic code for opening a connection to a remote target. */
2225
d471ea57
AC
2226static void
2227init_all_packet_configs (void)
2228{
2229 int i;
444abaca
DJ
2230 for (i = 0; i < PACKET_MAX; i++)
2231 update_packet_config (&remote_protocol_packets[i]);
d471ea57
AC
2232}
2233
23860348 2234/* Symbol look-up. */
dc8acb97
MS
2235
2236static void
2237remote_check_symbols (struct objfile *objfile)
2238{
d01949b6 2239 struct remote_state *rs = get_remote_state ();
dc8acb97
MS
2240 char *msg, *reply, *tmp;
2241 struct minimal_symbol *sym;
2242 int end;
2243
444abaca 2244 if (remote_protocol_packets[PACKET_qSymbol].support == PACKET_DISABLE)
dc8acb97
MS
2245 return;
2246
6d820c5c
DJ
2247 /* Allocate a message buffer. We can't reuse the input buffer in RS,
2248 because we need both at the same time. */
ea9c271d 2249 msg = alloca (get_remote_packet_size ());
6d820c5c 2250
23860348 2251 /* Invite target to request symbol lookups. */
dc8acb97
MS
2252
2253 putpkt ("qSymbol::");
6d820c5c
DJ
2254 getpkt (&rs->buf, &rs->buf_size, 0);
2255 packet_ok (rs->buf, &remote_protocol_packets[PACKET_qSymbol]);
2e9f7625 2256 reply = rs->buf;
dc8acb97
MS
2257
2258 while (strncmp (reply, "qSymbol:", 8) == 0)
2259 {
2260 tmp = &reply[8];
cfd77fa1 2261 end = hex2bin (tmp, (gdb_byte *) msg, strlen (tmp) / 2);
dc8acb97
MS
2262 msg[end] = '\0';
2263 sym = lookup_minimal_symbol (msg, NULL, NULL);
2264 if (sym == NULL)
ea9c271d 2265 xsnprintf (msg, get_remote_packet_size (), "qSymbol::%s", &reply[8]);
dc8acb97 2266 else
2bbe3cc1
DJ
2267 {
2268 CORE_ADDR sym_addr = SYMBOL_VALUE_ADDRESS (sym);
2269
2270 /* If this is a function address, return the start of code
2271 instead of any data function descriptor. */
2272 sym_addr = gdbarch_convert_from_func_ptr_addr (current_gdbarch,
2273 sym_addr,
2274 &current_target);
2275
2276 xsnprintf (msg, get_remote_packet_size (), "qSymbol:%s:%s",
2277 paddr_nz (sym_addr), &reply[8]);
2278 }
2279
dc8acb97 2280 putpkt (msg);
6d820c5c 2281 getpkt (&rs->buf, &rs->buf_size, 0);
2e9f7625 2282 reply = rs->buf;
dc8acb97
MS
2283 }
2284}
2285
9db8d71f
DJ
2286static struct serial *
2287remote_serial_open (char *name)
2288{
2289 static int udp_warning = 0;
2290
2291 /* FIXME: Parsing NAME here is a hack. But we want to warn here instead
2292 of in ser-tcp.c, because it is the remote protocol assuming that the
2293 serial connection is reliable and not the serial connection promising
2294 to be. */
2295 if (!udp_warning && strncmp (name, "udp:", 4) == 0)
2296 {
8a3fe4f8
AC
2297 warning (_("\
2298The remote protocol may be unreliable over UDP.\n\
2299Some events may be lost, rendering further debugging impossible."));
9db8d71f
DJ
2300 udp_warning = 1;
2301 }
2302
2303 return serial_open (name);
2304}
2305
be2a5f71
DJ
2306/* This type describes each known response to the qSupported
2307 packet. */
2308struct protocol_feature
2309{
2310 /* The name of this protocol feature. */
2311 const char *name;
2312
2313 /* The default for this protocol feature. */
2314 enum packet_support default_support;
2315
2316 /* The function to call when this feature is reported, or after
2317 qSupported processing if the feature is not supported.
2318 The first argument points to this structure. The second
2319 argument indicates whether the packet requested support be
2320 enabled, disabled, or probed (or the default, if this function
2321 is being called at the end of processing and this feature was
2322 not reported). The third argument may be NULL; if not NULL, it
2323 is a NUL-terminated string taken from the packet following
2324 this feature's name and an equals sign. */
2325 void (*func) (const struct protocol_feature *, enum packet_support,
2326 const char *);
2327
2328 /* The corresponding packet for this feature. Only used if
2329 FUNC is remote_supported_packet. */
2330 int packet;
2331};
2332
be2a5f71
DJ
2333static void
2334remote_supported_packet (const struct protocol_feature *feature,
2335 enum packet_support support,
2336 const char *argument)
2337{
2338 if (argument)
2339 {
2340 warning (_("Remote qSupported response supplied an unexpected value for"
2341 " \"%s\"."), feature->name);
2342 return;
2343 }
2344
2345 if (remote_protocol_packets[feature->packet].support
2346 == PACKET_SUPPORT_UNKNOWN)
2347 remote_protocol_packets[feature->packet].support = support;
2348}
be2a5f71
DJ
2349
2350static void
2351remote_packet_size (const struct protocol_feature *feature,
2352 enum packet_support support, const char *value)
2353{
2354 struct remote_state *rs = get_remote_state ();
2355
2356 int packet_size;
2357 char *value_end;
2358
2359 if (support != PACKET_ENABLE)
2360 return;
2361
2362 if (value == NULL || *value == '\0')
2363 {
2364 warning (_("Remote target reported \"%s\" without a size."),
2365 feature->name);
2366 return;
2367 }
2368
2369 errno = 0;
2370 packet_size = strtol (value, &value_end, 16);
2371 if (errno != 0 || *value_end != '\0' || packet_size < 0)
2372 {
2373 warning (_("Remote target reported \"%s\" with a bad size: \"%s\"."),
2374 feature->name, value);
2375 return;
2376 }
2377
2378 if (packet_size > MAX_REMOTE_PACKET_SIZE)
2379 {
2380 warning (_("limiting remote suggested packet size (%d bytes) to %d"),
2381 packet_size, MAX_REMOTE_PACKET_SIZE);
2382 packet_size = MAX_REMOTE_PACKET_SIZE;
2383 }
2384
2385 /* Record the new maximum packet size. */
2386 rs->explicit_packet_size = packet_size;
2387}
2388
2389static struct protocol_feature remote_protocol_features[] = {
0876f84a 2390 { "PacketSize", PACKET_DISABLE, remote_packet_size, -1 },
40e57cf2 2391 { "qXfer:auxv:read", PACKET_DISABLE, remote_supported_packet,
fd79ecee 2392 PACKET_qXfer_auxv },
23181151
DJ
2393 { "qXfer:features:read", PACKET_DISABLE, remote_supported_packet,
2394 PACKET_qXfer_features },
cfa9d6d9
DJ
2395 { "qXfer:libraries:read", PACKET_DISABLE, remote_supported_packet,
2396 PACKET_qXfer_libraries },
fd79ecee 2397 { "qXfer:memory-map:read", PACKET_DISABLE, remote_supported_packet,
89be2091 2398 PACKET_qXfer_memory_map },
4de6483e
UW
2399 { "qXfer:spu:read", PACKET_DISABLE, remote_supported_packet,
2400 PACKET_qXfer_spu_read },
2401 { "qXfer:spu:write", PACKET_DISABLE, remote_supported_packet,
2402 PACKET_qXfer_spu_write },
89be2091
DJ
2403 { "QPassSignals", PACKET_DISABLE, remote_supported_packet,
2404 PACKET_QPassSignals },
be2a5f71
DJ
2405};
2406
2407static void
2408remote_query_supported (void)
2409{
2410 struct remote_state *rs = get_remote_state ();
2411 char *next;
2412 int i;
2413 unsigned char seen [ARRAY_SIZE (remote_protocol_features)];
2414
2415 /* The packet support flags are handled differently for this packet
2416 than for most others. We treat an error, a disabled packet, and
2417 an empty response identically: any features which must be reported
2418 to be used will be automatically disabled. An empty buffer
2419 accomplishes this, since that is also the representation for a list
2420 containing no features. */
2421
2422 rs->buf[0] = 0;
2423 if (remote_protocol_packets[PACKET_qSupported].support != PACKET_DISABLE)
2424 {
2425 putpkt ("qSupported");
2426 getpkt (&rs->buf, &rs->buf_size, 0);
2427
2428 /* If an error occured, warn, but do not return - just reset the
2429 buffer to empty and go on to disable features. */
2430 if (packet_ok (rs->buf, &remote_protocol_packets[PACKET_qSupported])
2431 == PACKET_ERROR)
2432 {
2433 warning (_("Remote failure reply: %s"), rs->buf);
2434 rs->buf[0] = 0;
2435 }
2436 }
2437
2438 memset (seen, 0, sizeof (seen));
2439
2440 next = rs->buf;
2441 while (*next)
2442 {
2443 enum packet_support is_supported;
2444 char *p, *end, *name_end, *value;
2445
2446 /* First separate out this item from the rest of the packet. If
2447 there's another item after this, we overwrite the separator
2448 (terminated strings are much easier to work with). */
2449 p = next;
2450 end = strchr (p, ';');
2451 if (end == NULL)
2452 {
2453 end = p + strlen (p);
2454 next = end;
2455 }
2456 else
2457 {
89be2091
DJ
2458 *end = '\0';
2459 next = end + 1;
2460
be2a5f71
DJ
2461 if (end == p)
2462 {
2463 warning (_("empty item in \"qSupported\" response"));
2464 continue;
2465 }
be2a5f71
DJ
2466 }
2467
2468 name_end = strchr (p, '=');
2469 if (name_end)
2470 {
2471 /* This is a name=value entry. */
2472 is_supported = PACKET_ENABLE;
2473 value = name_end + 1;
2474 *name_end = '\0';
2475 }
2476 else
2477 {
2478 value = NULL;
2479 switch (end[-1])
2480 {
2481 case '+':
2482 is_supported = PACKET_ENABLE;
2483 break;
2484
2485 case '-':
2486 is_supported = PACKET_DISABLE;
2487 break;
2488
2489 case '?':
2490 is_supported = PACKET_SUPPORT_UNKNOWN;
2491 break;
2492
2493 default:
2494 warning (_("unrecognized item \"%s\" in \"qSupported\" response"), p);
2495 continue;
2496 }
2497 end[-1] = '\0';
2498 }
2499
2500 for (i = 0; i < ARRAY_SIZE (remote_protocol_features); i++)
2501 if (strcmp (remote_protocol_features[i].name, p) == 0)
2502 {
2503 const struct protocol_feature *feature;
2504
2505 seen[i] = 1;
2506 feature = &remote_protocol_features[i];
2507 feature->func (feature, is_supported, value);
2508 break;
2509 }
2510 }
2511
2512 /* If we increased the packet size, make sure to increase the global
2513 buffer size also. We delay this until after parsing the entire
2514 qSupported packet, because this is the same buffer we were
2515 parsing. */
2516 if (rs->buf_size < rs->explicit_packet_size)
2517 {
2518 rs->buf_size = rs->explicit_packet_size;
2519 rs->buf = xrealloc (rs->buf, rs->buf_size);
2520 }
2521
2522 /* Handle the defaults for unmentioned features. */
2523 for (i = 0; i < ARRAY_SIZE (remote_protocol_features); i++)
2524 if (!seen[i])
2525 {
2526 const struct protocol_feature *feature;
2527
2528 feature = &remote_protocol_features[i];
2529 feature->func (feature, feature->default_support, NULL);
2530 }
2531}
2532
2533
c906108c 2534static void
fba45db2 2535remote_open_1 (char *name, int from_tty, struct target_ops *target,
92d1e331 2536 int extended_p, int async_p)
c906108c 2537{
d01949b6 2538 struct remote_state *rs = get_remote_state ();
c906108c 2539 if (name == 0)
8a3fe4f8 2540 error (_("To open a remote debug connection, you need to specify what\n"
22e04375 2541 "serial device is attached to the remote system\n"
8a3fe4f8 2542 "(e.g. /dev/ttyS0, /dev/ttya, COM1, etc.)."));
c906108c 2543
23860348 2544 /* See FIXME above. */
92d1e331
DJ
2545 if (!async_p)
2546 wait_forever_enabled_p = 1;
6426a772 2547
c906108c
SS
2548 target_preopen (from_tty);
2549
2550 unpush_target (target);
2551
89be2091
DJ
2552 /* Make sure we send the passed signals list the next time we resume. */
2553 xfree (last_pass_packet);
2554 last_pass_packet = NULL;
2555
ad9a8f3f 2556 remote_fileio_reset ();
1dd41f16
NS
2557 reopen_exec_file ();
2558 reread_symbols ();
2559
9db8d71f 2560 remote_desc = remote_serial_open (name);
c906108c
SS
2561 if (!remote_desc)
2562 perror_with_name (name);
2563
2564 if (baud_rate != -1)
2565 {
2cd58942 2566 if (serial_setbaudrate (remote_desc, baud_rate))
c906108c 2567 {
9b74d5d3
KB
2568 /* The requested speed could not be set. Error out to
2569 top level after closing remote_desc. Take care to
2570 set remote_desc to NULL to avoid closing remote_desc
2571 more than once. */
2cd58942 2572 serial_close (remote_desc);
9b74d5d3 2573 remote_desc = NULL;
c906108c
SS
2574 perror_with_name (name);
2575 }
2576 }
2577
2cd58942 2578 serial_raw (remote_desc);
c906108c
SS
2579
2580 /* If there is something sitting in the buffer we might take it as a
2581 response to a command, which would be bad. */
2cd58942 2582 serial_flush_input (remote_desc);
c906108c
SS
2583
2584 if (from_tty)
2585 {
2586 puts_filtered ("Remote debugging using ");
2587 puts_filtered (name);
2588 puts_filtered ("\n");
2589 }
23860348 2590 push_target (target); /* Switch to using remote target now. */
c906108c 2591
be2a5f71
DJ
2592 /* Reset the target state; these things will be queried either by
2593 remote_query_supported or as they are needed. */
d471ea57 2594 init_all_packet_configs ();
be2a5f71 2595 rs->explicit_packet_size = 0;
802188a7 2596
c5aa993b 2597 general_thread = -2;
cce74817 2598 continue_thread = -2;
c906108c 2599
9d1f7ab2
MS
2600 /* Probe for ability to use "ThreadInfo" query, as required. */
2601 use_threadinfo_query = 1;
2602 use_threadextra_query = 1;
2603
be2a5f71
DJ
2604 /* The first packet we send to the target is the optional "supported
2605 packets" request. If the target can answer this, it will tell us
2606 which later probes to skip. */
2607 remote_query_supported ();
2608
424163ea
DJ
2609 /* Next, if the target can specify a description, read it. We do
2610 this before anything involving memory or registers. */
2611 target_find_description ();
2612
c906108c
SS
2613 /* Without this, some commands which require an active target (such
2614 as kill) won't work. This variable serves (at least) double duty
2615 as both the pid of the target process (if it has such), and as a
2616 flag indicating that a target is active. These functions should
2617 be split out into seperate variables, especially since GDB will
2618 someday have a notion of debugging several processes. */
2619
39f77062 2620 inferior_ptid = pid_to_ptid (MAGIC_NULL_PID);
92d1e331
DJ
2621
2622 if (async_p)
2623 {
23860348 2624 /* With this target we start out by owning the terminal. */
92d1e331
DJ
2625 remote_async_terminal_ours_p = 1;
2626
2627 /* FIXME: cagney/1999-09-23: During the initial connection it is
2628 assumed that the target is already ready and able to respond to
2629 requests. Unfortunately remote_start_remote() eventually calls
2630 wait_for_inferior() with no timeout. wait_forever_enabled_p gets
2631 around this. Eventually a mechanism that allows
2632 wait_for_inferior() to expect/get timeouts will be
23860348 2633 implemented. */
92d1e331
DJ
2634 wait_forever_enabled_p = 0;
2635 }
2636
23860348 2637 /* First delete any symbols previously loaded from shared libraries. */
f78f6cf1 2638 no_shared_libraries (NULL, 0);
f78f6cf1 2639
36918e70 2640 /* Start the remote connection. If error() or QUIT, discard this
165b8e33
AC
2641 target (we'd otherwise be in an inconsistent state) and then
2642 propogate the error on up the exception chain. This ensures that
2643 the caller doesn't stumble along blindly assuming that the
2644 function succeeded. The CLI doesn't have this problem but other
2645 UI's, such as MI do.
36918e70
AC
2646
2647 FIXME: cagney/2002-05-19: Instead of re-throwing the exception,
2648 this function should return an error indication letting the
ce2826aa 2649 caller restore the previous state. Unfortunately the command
36918e70
AC
2650 ``target remote'' is directly wired to this function making that
2651 impossible. On a positive note, the CLI side of this problem has
2652 been fixed - the function set_cmd_context() makes it possible for
2653 all the ``target ....'' commands to share a common callback
2654 function. See cli-dump.c. */
109c3e39
AC
2655 {
2656 struct gdb_exception ex
8621d6a9
DJ
2657 = catch_exception (uiout, remote_start_remote, &from_tty,
2658 RETURN_MASK_ALL);
109c3e39
AC
2659 if (ex.reason < 0)
2660 {
2661 pop_target ();
2662 if (async_p)
2663 wait_forever_enabled_p = 1;
2664 throw_exception (ex);
2665 }
2666 }
c906108c 2667
92d1e331
DJ
2668 if (async_p)
2669 wait_forever_enabled_p = 1;
6426a772
JM
2670
2671 if (extended_p)
43ff13b4 2672 {
6240bebf 2673 /* Tell the remote that we are using the extended protocol. */
6426a772 2674 putpkt ("!");
6d820c5c 2675 getpkt (&rs->buf, &rs->buf_size, 0);
43ff13b4 2676 }
a77053c2 2677
23860348 2678 if (exec_bfd) /* No use without an exec file. */
9353355f 2679 remote_check_symbols (symfile_objfile);
43ff13b4
JM
2680}
2681
c906108c
SS
2682/* This takes a program previously attached to and detaches it. After
2683 this is done, GDB can be used to debug some other program. We
2684 better not have left any breakpoints in the target program or it'll
2685 die when it hits one. */
2686
2687static void
fba45db2 2688remote_detach (char *args, int from_tty)
c906108c 2689{
d01949b6 2690 struct remote_state *rs = get_remote_state ();
c906108c
SS
2691
2692 if (args)
8a3fe4f8 2693 error (_("Argument given to \"detach\" when remotely debugging."));
c906108c
SS
2694
2695 /* Tell the remote target to detach. */
6d820c5c 2696 strcpy (rs->buf, "D");
4ddda9b5
PA
2697 putpkt (rs->buf);
2698 getpkt (&rs->buf, &rs->buf_size, 0);
2699
2700 if (rs->buf[0] == 'E')
2701 error (_("Can't detach process."));
c906108c 2702
23860348 2703 /* Unregister the file descriptor from the event loop. */
6ad8ae5c
DJ
2704 if (target_is_async_p ())
2705 serial_async (remote_desc, NULL, 0);
2706
cca728d0 2707 target_mourn_inferior ();
c906108c
SS
2708 if (from_tty)
2709 puts_filtered ("Ending remote debugging.\n");
2710}
2711
6ad8ae5c
DJ
2712/* Same as remote_detach, but don't send the "D" packet; just disconnect. */
2713
43ff13b4 2714static void
597320e7 2715remote_disconnect (struct target_ops *target, char *args, int from_tty)
43ff13b4 2716{
43ff13b4 2717 if (args)
8a3fe4f8 2718 error (_("Argument given to \"detach\" when remotely debugging."));
43ff13b4 2719
23860348 2720 /* Unregister the file descriptor from the event loop. */
ed9a39eb 2721 if (target_is_async_p ())
2cd58942 2722 serial_async (remote_desc, NULL, 0);
43ff13b4 2723
cca728d0 2724 target_mourn_inferior ();
43ff13b4
JM
2725 if (from_tty)
2726 puts_filtered ("Ending remote debugging.\n");
2727}
2728
c906108c
SS
2729/* Convert hex digit A to a number. */
2730
30559e10 2731static int
fba45db2 2732fromhex (int a)
c906108c
SS
2733{
2734 if (a >= '0' && a <= '9')
2735 return a - '0';
2736 else if (a >= 'a' && a <= 'f')
2737 return a - 'a' + 10;
2738 else if (a >= 'A' && a <= 'F')
2739 return a - 'A' + 10;
c5aa993b 2740 else
8a3fe4f8 2741 error (_("Reply contains invalid hex digit %d"), a);
c906108c
SS
2742}
2743
30559e10 2744static int
cfd77fa1 2745hex2bin (const char *hex, gdb_byte *bin, int count)
30559e10
MS
2746{
2747 int i;
2748
30559e10
MS
2749 for (i = 0; i < count; i++)
2750 {
2751 if (hex[0] == 0 || hex[1] == 0)
2752 {
2753 /* Hex string is short, or of uneven length.
23860348 2754 Return the count that has been converted so far. */
30559e10
MS
2755 return i;
2756 }
2757 *bin++ = fromhex (hex[0]) * 16 + fromhex (hex[1]);
2758 hex += 2;
2759 }
2760 return i;
2761}
2762
c906108c
SS
2763/* Convert number NIB to a hex digit. */
2764
2765static int
fba45db2 2766tohex (int nib)
c906108c
SS
2767{
2768 if (nib < 10)
c5aa993b 2769 return '0' + nib;
c906108c 2770 else
c5aa993b 2771 return 'a' + nib - 10;
c906108c 2772}
30559e10
MS
2773
2774static int
cfd77fa1 2775bin2hex (const gdb_byte *bin, char *hex, int count)
30559e10
MS
2776{
2777 int i;
23860348 2778 /* May use a length, or a nul-terminated string as input. */
30559e10 2779 if (count == 0)
cfd77fa1 2780 count = strlen ((char *) bin);
30559e10
MS
2781
2782 for (i = 0; i < count; i++)
2783 {
2784 *hex++ = tohex ((*bin >> 4) & 0xf);
2785 *hex++ = tohex (*bin++ & 0xf);
2786 }
2787 *hex = 0;
2788 return i;
2789}
c906108c 2790\f
506fb367
DJ
2791/* Check for the availability of vCont. This function should also check
2792 the response. */
c906108c
SS
2793
2794static void
6d820c5c 2795remote_vcont_probe (struct remote_state *rs)
c906108c 2796{
2e9f7625 2797 char *buf;
6d820c5c 2798
2e9f7625
DJ
2799 strcpy (rs->buf, "vCont?");
2800 putpkt (rs->buf);
6d820c5c 2801 getpkt (&rs->buf, &rs->buf_size, 0);
2e9f7625 2802 buf = rs->buf;
c906108c 2803
506fb367
DJ
2804 /* Make sure that the features we assume are supported. */
2805 if (strncmp (buf, "vCont", 5) == 0)
2806 {
2807 char *p = &buf[5];
2808 int support_s, support_S, support_c, support_C;
2809
2810 support_s = 0;
2811 support_S = 0;
2812 support_c = 0;
2813 support_C = 0;
2814 while (p && *p == ';')
2815 {
2816 p++;
2817 if (*p == 's' && (*(p + 1) == ';' || *(p + 1) == 0))
2818 support_s = 1;
2819 else if (*p == 'S' && (*(p + 1) == ';' || *(p + 1) == 0))
2820 support_S = 1;
2821 else if (*p == 'c' && (*(p + 1) == ';' || *(p + 1) == 0))
2822 support_c = 1;
2823 else if (*p == 'C' && (*(p + 1) == ';' || *(p + 1) == 0))
2824 support_C = 1;
2825
2826 p = strchr (p, ';');
2827 }
c906108c 2828
506fb367
DJ
2829 /* If s, S, c, and C are not all supported, we can't use vCont. Clearing
2830 BUF will make packet_ok disable the packet. */
2831 if (!support_s || !support_S || !support_c || !support_C)
2832 buf[0] = 0;
2833 }
c906108c 2834
444abaca 2835 packet_ok (buf, &remote_protocol_packets[PACKET_vCont]);
506fb367 2836}
c906108c 2837
506fb367
DJ
2838/* Resume the remote inferior by using a "vCont" packet. The thread
2839 to be resumed is PTID; STEP and SIGGNAL indicate whether the
2840 resumed thread should be single-stepped and/or signalled. If PTID's
2841 PID is -1, then all threads are resumed; the thread to be stepped and/or
2842 signalled is given in the global INFERIOR_PTID. This function returns
2843 non-zero iff it resumes the inferior.
44eaed12 2844
506fb367
DJ
2845 This function issues a strict subset of all possible vCont commands at the
2846 moment. */
44eaed12 2847
506fb367
DJ
2848static int
2849remote_vcont_resume (ptid_t ptid, int step, enum target_signal siggnal)
2850{
2851 struct remote_state *rs = get_remote_state ();
2852 int pid = PIDGET (ptid);
2963ee1d 2853 char *buf = NULL, *outbuf;
506fb367 2854 struct cleanup *old_cleanup;
44eaed12 2855
444abaca 2856 if (remote_protocol_packets[PACKET_vCont].support == PACKET_SUPPORT_UNKNOWN)
6d820c5c 2857 remote_vcont_probe (rs);
44eaed12 2858
444abaca 2859 if (remote_protocol_packets[PACKET_vCont].support == PACKET_DISABLE)
6d820c5c 2860 return 0;
44eaed12 2861
506fb367
DJ
2862 /* If we could generate a wider range of packets, we'd have to worry
2863 about overflowing BUF. Should there be a generic
2864 "multi-part-packet" packet? */
2865
2866 if (PIDGET (inferior_ptid) == MAGIC_NULL_PID)
c906108c 2867 {
506fb367
DJ
2868 /* MAGIC_NULL_PTID means that we don't have any active threads, so we
2869 don't have any PID numbers the inferior will understand. Make sure
2870 to only send forms that do not specify a PID. */
2871 if (step && siggnal != TARGET_SIGNAL_0)
2963ee1d 2872 outbuf = xstrprintf ("vCont;S%02x", siggnal);
506fb367 2873 else if (step)
2963ee1d 2874 outbuf = xstrprintf ("vCont;s");
506fb367 2875 else if (siggnal != TARGET_SIGNAL_0)
2963ee1d 2876 outbuf = xstrprintf ("vCont;C%02x", siggnal);
506fb367 2877 else
2963ee1d 2878 outbuf = xstrprintf ("vCont;c");
506fb367
DJ
2879 }
2880 else if (pid == -1)
2881 {
2882 /* Resume all threads, with preference for INFERIOR_PTID. */
2883 if (step && siggnal != TARGET_SIGNAL_0)
2963ee1d
DJ
2884 outbuf = xstrprintf ("vCont;S%02x:%x;c", siggnal,
2885 PIDGET (inferior_ptid));
506fb367 2886 else if (step)
2963ee1d 2887 outbuf = xstrprintf ("vCont;s:%x;c", PIDGET (inferior_ptid));
506fb367 2888 else if (siggnal != TARGET_SIGNAL_0)
2963ee1d
DJ
2889 outbuf = xstrprintf ("vCont;C%02x:%x;c", siggnal,
2890 PIDGET (inferior_ptid));
506fb367 2891 else
2963ee1d 2892 outbuf = xstrprintf ("vCont;c");
c906108c
SS
2893 }
2894 else
506fb367
DJ
2895 {
2896 /* Scheduler locking; resume only PTID. */
2897 if (step && siggnal != TARGET_SIGNAL_0)
2963ee1d 2898 outbuf = xstrprintf ("vCont;S%02x:%x", siggnal, pid);
506fb367 2899 else if (step)
2963ee1d 2900 outbuf = xstrprintf ("vCont;s:%x", pid);
506fb367 2901 else if (siggnal != TARGET_SIGNAL_0)
2963ee1d 2902 outbuf = xstrprintf ("vCont;C%02x:%x", siggnal, pid);
506fb367 2903 else
2963ee1d 2904 outbuf = xstrprintf ("vCont;c:%x", pid);
506fb367 2905 }
c906108c 2906
ea9c271d 2907 gdb_assert (outbuf && strlen (outbuf) < get_remote_packet_size ());
6d820c5c 2908 old_cleanup = make_cleanup (xfree, outbuf);
2963ee1d
DJ
2909
2910 putpkt (outbuf);
506fb367
DJ
2911
2912 do_cleanups (old_cleanup);
2913
2914 return 1;
c906108c 2915}
43ff13b4 2916
506fb367
DJ
2917/* Tell the remote machine to resume. */
2918
2919static enum target_signal last_sent_signal = TARGET_SIGNAL_0;
2920
2921static int last_sent_step;
2922
43ff13b4 2923static void
506fb367 2924remote_resume (ptid_t ptid, int step, enum target_signal siggnal)
43ff13b4 2925{
d01949b6 2926 struct remote_state *rs = get_remote_state ();
2e9f7625 2927 char *buf;
39f77062 2928 int pid = PIDGET (ptid);
43ff13b4 2929
43ff13b4
JM
2930 last_sent_signal = siggnal;
2931 last_sent_step = step;
2932
2933 /* A hook for when we need to do something at the last moment before
2934 resumption. */
9a4105ab
AC
2935 if (deprecated_target_resume_hook)
2936 (*deprecated_target_resume_hook) ();
43ff13b4 2937
89be2091
DJ
2938 /* Update the inferior on signals to silently pass, if they've changed. */
2939 remote_pass_signals ();
2940
506fb367
DJ
2941 /* The vCont packet doesn't need to specify threads via Hc. */
2942 if (remote_vcont_resume (ptid, step, siggnal))
2943 return;
2944
2945 /* All other supported resume packets do use Hc, so call set_thread. */
2946 if (pid == -1)
23860348 2947 set_thread (0, 0); /* Run any thread. */
506fb367 2948 else
23860348 2949 set_thread (pid, 0); /* Run this thread. */
506fb367 2950
2e9f7625 2951 buf = rs->buf;
43ff13b4
JM
2952 if (siggnal != TARGET_SIGNAL_0)
2953 {
2954 buf[0] = step ? 'S' : 'C';
c5aa993b 2955 buf[1] = tohex (((int) siggnal >> 4) & 0xf);
506fb367 2956 buf[2] = tohex (((int) siggnal) & 0xf);
43ff13b4
JM
2957 buf[3] = '\0';
2958 }
2959 else
c5aa993b 2960 strcpy (buf, step ? "s" : "c");
506fb367 2961
44eaed12 2962 putpkt (buf);
506fb367
DJ
2963}
2964
23860348 2965/* Same as remote_resume, but with async support. */
506fb367
DJ
2966static void
2967remote_async_resume (ptid_t ptid, int step, enum target_signal siggnal)
2968{
2969 remote_resume (ptid, step, siggnal);
43ff13b4 2970
2acceee2
JM
2971 /* We are about to start executing the inferior, let's register it
2972 with the event loop. NOTE: this is the one place where all the
2973 execution commands end up. We could alternatively do this in each
23860348 2974 of the execution commands in infcmd.c. */
2acceee2
JM
2975 /* FIXME: ezannoni 1999-09-28: We may need to move this out of here
2976 into infcmd.c in order to allow inferior function calls to work
23860348 2977 NOT asynchronously. */
362646f5 2978 if (target_can_async_p ())
2acceee2 2979 target_async (inferior_event_handler, 0);
23860348 2980 /* Tell the world that the target is now executing. */
2acceee2
JM
2981 /* FIXME: cagney/1999-09-23: Is it the targets responsibility to set
2982 this? Instead, should the client of target just assume (for
2983 async targets) that the target is going to start executing? Is
2984 this information already found in the continuation block? */
ed9a39eb 2985 if (target_is_async_p ())
2acceee2 2986 target_executing = 1;
43ff13b4 2987}
c906108c 2988\f
43ff13b4
JM
2989
2990/* Set up the signal handler for SIGINT, while the target is
23860348 2991 executing, ovewriting the 'regular' SIGINT signal handler. */
43ff13b4 2992static void
fba45db2 2993initialize_sigint_signal_handler (void)
43ff13b4 2994{
c5aa993b 2995 sigint_remote_token =
43ff13b4
JM
2996 create_async_signal_handler (async_remote_interrupt, NULL);
2997 signal (SIGINT, handle_remote_sigint);
2998}
2999
23860348 3000/* Signal handler for SIGINT, while the target is executing. */
43ff13b4 3001static void
fba45db2 3002handle_remote_sigint (int sig)
43ff13b4
JM
3003{
3004 signal (sig, handle_remote_sigint_twice);
c5aa993b 3005 sigint_remote_twice_token =
43ff13b4
JM
3006 create_async_signal_handler (async_remote_interrupt_twice, NULL);
3007 mark_async_signal_handler_wrapper (sigint_remote_token);
3008}
3009
3010/* Signal handler for SIGINT, installed after SIGINT has already been
3011 sent once. It will take effect the second time that the user sends
23860348 3012 a ^C. */
43ff13b4 3013static void
fba45db2 3014handle_remote_sigint_twice (int sig)
43ff13b4
JM
3015{
3016 signal (sig, handle_sigint);
c5aa993b 3017 sigint_remote_twice_token =
2df3850c 3018 create_async_signal_handler (inferior_event_handler_wrapper, NULL);
43ff13b4
JM
3019 mark_async_signal_handler_wrapper (sigint_remote_twice_token);
3020}
3021
6426a772 3022/* Perform the real interruption of the target execution, in response
23860348 3023 to a ^C. */
c5aa993b 3024static void
fba45db2 3025async_remote_interrupt (gdb_client_data arg)
43ff13b4
JM
3026{
3027 if (remote_debug)
3028 fprintf_unfiltered (gdb_stdlog, "remote_interrupt called\n");
3029
3030 target_stop ();
3031}
3032
3033/* Perform interrupt, if the first attempt did not succeed. Just give
23860348 3034 up on the target alltogether. */
2df3850c 3035void
fba45db2 3036async_remote_interrupt_twice (gdb_client_data arg)
43ff13b4 3037{
2df3850c
JM
3038 if (remote_debug)
3039 fprintf_unfiltered (gdb_stdlog, "remote_interrupt_twice called\n");
6426a772 3040 /* Do something only if the target was not killed by the previous
23860348 3041 cntl-C. */
6426a772
JM
3042 if (target_executing)
3043 {
3044 interrupt_query ();
3045 signal (SIGINT, handle_remote_sigint);
3046 }
43ff13b4
JM
3047}
3048
3049/* Reinstall the usual SIGINT handlers, after the target has
23860348 3050 stopped. */
6426a772
JM
3051static void
3052cleanup_sigint_signal_handler (void *dummy)
43ff13b4
JM
3053{
3054 signal (SIGINT, handle_sigint);
3055 if (sigint_remote_twice_token)
d5d6fca5 3056 delete_async_signal_handler (&sigint_remote_twice_token);
43ff13b4 3057 if (sigint_remote_token)
d5d6fca5 3058 delete_async_signal_handler (&sigint_remote_token);
43ff13b4
JM
3059}
3060
c906108c
SS
3061/* Send ^C to target to halt it. Target will respond, and send us a
3062 packet. */
507f3c78 3063static void (*ofunc) (int);
c906108c 3064
7a292a7a
SS
3065/* The command line interface's stop routine. This function is installed
3066 as a signal handler for SIGINT. The first time a user requests a
3067 stop, we call remote_stop to send a break or ^C. If there is no
3068 response from the target (it didn't stop when the user requested it),
23860348 3069 we ask the user if he'd like to detach from the target. */
c906108c 3070static void
fba45db2 3071remote_interrupt (int signo)
c906108c 3072{
23860348 3073 /* If this doesn't work, try more severe steps. */
7a292a7a
SS
3074 signal (signo, remote_interrupt_twice);
3075
3076 if (remote_debug)
0f71a2f6 3077 fprintf_unfiltered (gdb_stdlog, "remote_interrupt called\n");
7a292a7a
SS
3078
3079 target_stop ();
3080}
3081
3082/* The user typed ^C twice. */
3083
3084static void
fba45db2 3085remote_interrupt_twice (int signo)
7a292a7a
SS
3086{
3087 signal (signo, ofunc);
3088 interrupt_query ();
c906108c
SS
3089 signal (signo, remote_interrupt);
3090}
7a292a7a
SS
3091
3092/* This is the generic stop called via the target vector. When a target
3093 interrupt is requested, either by the command line or the GUI, we
23860348 3094 will eventually end up here. */
c906108c 3095static void
fba45db2 3096remote_stop (void)
c906108c 3097{
7a292a7a
SS
3098 /* Send a break or a ^C, depending on user preference. */
3099 if (remote_debug)
0f71a2f6 3100 fprintf_unfiltered (gdb_stdlog, "remote_stop called\n");
c906108c 3101
7a292a7a 3102 if (remote_break)
2cd58942 3103 serial_send_break (remote_desc);
c906108c 3104 else
2cd58942 3105 serial_write (remote_desc, "\003", 1);
c906108c
SS
3106}
3107
3108/* Ask the user what to do when an interrupt is received. */
3109
3110static void
fba45db2 3111interrupt_query (void)
c906108c
SS
3112{
3113 target_terminal_ours ();
3114
3115 if (query ("Interrupted while waiting for the program.\n\
3116Give up (and stop debugging it)? "))
3117 {
3118 target_mourn_inferior ();
315a522e 3119 deprecated_throw_reason (RETURN_QUIT);
c906108c
SS
3120 }
3121
3122 target_terminal_inferior ();
3123}
3124
6426a772
JM
3125/* Enable/disable target terminal ownership. Most targets can use
3126 terminal groups to control terminal ownership. Remote targets are
3127 different in that explicit transfer of ownership to/from GDB/target
23860348 3128 is required. */
6426a772
JM
3129
3130static void
3131remote_async_terminal_inferior (void)
3132{
3133 /* FIXME: cagney/1999-09-27: Shouldn't need to test for
3134 sync_execution here. This function should only be called when
3135 GDB is resuming the inferior in the forground. A background
3136 resume (``run&'') should leave GDB in control of the terminal and
23860348 3137 consequently should not call this code. */
6426a772
JM
3138 if (!sync_execution)
3139 return;
3140 /* FIXME: cagney/1999-09-27: Closely related to the above. Make
3141 calls target_terminal_*() idenpotent. The event-loop GDB talking
3142 to an asynchronous target with a synchronous command calls this
3143 function from both event-top.c and infrun.c/infcmd.c. Once GDB
3144 stops trying to transfer the terminal to the target when it
3145 shouldn't this guard can go away. */
3146 if (!remote_async_terminal_ours_p)
3147 return;
3148 delete_file_handler (input_fd);
3149 remote_async_terminal_ours_p = 0;
3150 initialize_sigint_signal_handler ();
3151 /* NOTE: At this point we could also register our selves as the
3152 recipient of all input. Any characters typed could then be
23860348 3153 passed on down to the target. */
6426a772
JM
3154}
3155
3156static void
3157remote_async_terminal_ours (void)
3158{
23860348 3159 /* See FIXME in remote_async_terminal_inferior. */
6426a772
JM
3160 if (!sync_execution)
3161 return;
23860348 3162 /* See FIXME in remote_async_terminal_inferior. */
6426a772
JM
3163 if (remote_async_terminal_ours_p)
3164 return;
3165 cleanup_sigint_signal_handler (NULL);
3166 add_file_handler (input_fd, stdin_event_handler, 0);
3167 remote_async_terminal_ours_p = 1;
3168}
3169
c906108c
SS
3170/* If nonzero, ignore the next kill. */
3171
3172int kill_kludge;
3173
3174void
917317f4 3175remote_console_output (char *msg)
c906108c
SS
3176{
3177 char *p;
3178
c5aa993b 3179 for (p = msg; p[0] && p[1]; p += 2)
c906108c
SS
3180 {
3181 char tb[2];
3182 char c = fromhex (p[0]) * 16 + fromhex (p[1]);
3183 tb[0] = c;
3184 tb[1] = 0;
43ff13b4 3185 fputs_unfiltered (tb, gdb_stdtarg);
c906108c 3186 }
917317f4 3187 gdb_flush (gdb_stdtarg);
c906108c
SS
3188}
3189
0f71a2f6
JM
3190/* Wait until the remote machine stops, then return,
3191 storing status in STATUS just as `wait' would.
802188a7 3192 Returns "pid", which in the case of a multi-threaded
0f71a2f6 3193 remote OS, is the thread-id. */
c906108c 3194
39f77062
KB
3195static ptid_t
3196remote_wait (ptid_t ptid, struct target_waitstatus *status)
c906108c 3197{
d01949b6 3198 struct remote_state *rs = get_remote_state ();
ea9c271d 3199 struct remote_arch_state *rsa = get_remote_arch_state ();
b2dd6311 3200 ULONGEST thread_num = -1;
3c3bea1c 3201 ULONGEST addr;
cfa9d6d9 3202 int solibs_changed = 0;
c906108c
SS
3203
3204 status->kind = TARGET_WAITKIND_EXITED;
3205 status->value.integer = 0;
3206
3207 while (1)
3208 {
2e9f7625 3209 char *buf, *p;
c906108c 3210
c906108c 3211 ofunc = signal (SIGINT, remote_interrupt);
6d820c5c 3212 getpkt (&rs->buf, &rs->buf_size, 1);
c906108c
SS
3213 signal (SIGINT, ofunc);
3214
2e9f7625
DJ
3215 buf = rs->buf;
3216
c906108c 3217 /* This is a hook for when we need to do something (perhaps the
c5aa993b 3218 collection of trace data) every time the target stops. */
9a4105ab
AC
3219 if (deprecated_target_wait_loop_hook)
3220 (*deprecated_target_wait_loop_hook) ();
c906108c 3221
3c3bea1c
GS
3222 remote_stopped_by_watchpoint_p = 0;
3223
c906108c
SS
3224 switch (buf[0])
3225 {
23860348 3226 case 'E': /* Error of some sort. */
8a3fe4f8 3227 warning (_("Remote failure reply: %s"), buf);
c906108c 3228 continue;
23860348 3229 case 'F': /* File-I/O request. */
449092f6
CV
3230 remote_fileio_request (buf);
3231 continue;
23860348 3232 case 'T': /* Status with PC, SP, FP, ... */
c906108c 3233 {
cfd77fa1 3234 gdb_byte regs[MAX_REGISTER_SIZE];
c906108c 3235
23860348 3236 /* Expedited reply, containing Signal, {regno, reg} repeat. */
c906108c 3237 /* format is: 'Tssn...:r...;n...:r...;n...:r...;#cc', where
c5aa993b
JM
3238 ss = signal number
3239 n... = register number
3240 r... = register contents
3241 */
c906108c
SS
3242 p = &buf[3]; /* after Txx */
3243
3244 while (*p)
3245 {
cfd77fa1 3246 char *p1;
c906108c 3247 char *p_temp;
97345198 3248 int fieldsize;
3c3bea1c
GS
3249 LONGEST pnum = 0;
3250
23860348
MS
3251 /* If the packet contains a register number save it in
3252 pnum and set p1 to point to the character following
3253 it. Otherwise p1 points to p. */
c906108c 3254
23860348
MS
3255 /* If this packet is an awatch packet, don't parse the
3256 'a' as a register number. */
3c3bea1c
GS
3257
3258 if (strncmp (p, "awatch", strlen("awatch")) != 0)
3259 {
3260 /* Read the ``P'' register number. */
3261 pnum = strtol (p, &p_temp, 16);
cfd77fa1 3262 p1 = p_temp;
3c3bea1c 3263 }
802188a7 3264 else
3c3bea1c 3265 p1 = p;
c906108c 3266
23860348 3267 if (p1 == p) /* No register number present here. */
c906108c 3268 {
cfd77fa1 3269 p1 = strchr (p, ':');
c906108c 3270 if (p1 == NULL)
670aa98f 3271 error (_("Malformed packet(a) (missing colon): %s\n\
8a3fe4f8 3272Packet: '%s'\n"),
670aa98f 3273 p, buf);
3c3bea1c 3274 if (strncmp (p, "thread", p1 - p) == 0)
c906108c
SS
3275 {
3276 p_temp = unpack_varlen_hex (++p1, &thread_num);
3277 record_currthread (thread_num);
cfd77fa1 3278 p = p_temp;
c906108c 3279 }
3c3bea1c
GS
3280 else if ((strncmp (p, "watch", p1 - p) == 0)
3281 || (strncmp (p, "rwatch", p1 - p) == 0)
3282 || (strncmp (p, "awatch", p1 - p) == 0))
3283 {
3284 remote_stopped_by_watchpoint_p = 1;
3285 p = unpack_varlen_hex (++p1, &addr);
3286 remote_watch_data_address = (CORE_ADDR)addr;
3287 }
cfa9d6d9
DJ
3288 else if (strncmp (p, "library", p1 - p) == 0)
3289 {
3290 p1++;
3291 p_temp = p1;
3292 while (*p_temp && *p_temp != ';')
3293 p_temp++;
3294
3295 solibs_changed = 1;
3296 p = p_temp;
3297 }
3c3bea1c
GS
3298 else
3299 {
3300 /* Silently skip unknown optional info. */
3301 p_temp = strchr (p1 + 1, ';');
3302 if (p_temp)
cfd77fa1 3303 p = p_temp;
3c3bea1c 3304 }
c906108c
SS
3305 }
3306 else
3307 {
ea9c271d 3308 struct packet_reg *reg = packet_reg_from_pnum (rsa, pnum);
c906108c
SS
3309 p = p1;
3310
3311 if (*p++ != ':')
8a3fe4f8
AC
3312 error (_("Malformed packet(b) (missing colon): %s\n\
3313Packet: '%s'\n"),
3fcb8548 3314 p, buf);
c906108c 3315
ad10f812 3316 if (reg == NULL)
8a3fe4f8
AC
3317 error (_("Remote sent bad register number %s: %s\n\
3318Packet: '%s'\n"),
3fcb8548 3319 phex_nz (pnum, 0), p, buf);
c906108c 3320
cfd77fa1 3321 fieldsize = hex2bin (p, regs,
2bc416ba 3322 register_size (current_gdbarch,
23860348 3323 reg->regnum));
97345198 3324 p += 2 * fieldsize;
2bc416ba 3325 if (fieldsize < register_size (current_gdbarch,
23860348 3326 reg->regnum))
8a3fe4f8 3327 warning (_("Remote reply is too short: %s"), buf);
594f7785 3328 regcache_raw_supply (get_current_regcache (),
23860348 3329 reg->regnum, regs);
c906108c
SS
3330 }
3331
3332 if (*p++ != ';')
2bc416ba 3333 error (_("Remote register badly formatted: %s\nhere: %s"),
23860348 3334 buf, p);
c906108c
SS
3335 }
3336 }
3337 /* fall through */
23860348 3338 case 'S': /* Old style status, just signal only. */
cfa9d6d9
DJ
3339 if (solibs_changed)
3340 status->kind = TARGET_WAITKIND_LOADED;
3341 else
3342 {
3343 status->kind = TARGET_WAITKIND_STOPPED;
3344 status->value.sig = (enum target_signal)
3345 (((fromhex (buf[1])) << 4) + (fromhex (buf[2])));
3346 }
c906108c 3347
0f71a2f6
JM
3348 if (buf[3] == 'p')
3349 {
0f71a2f6
JM
3350 thread_num = strtol ((const char *) &buf[4], NULL, 16);
3351 record_currthread (thread_num);
3352 }
c906108c 3353 goto got_status;
23860348 3354 case 'W': /* Target exited. */
c906108c
SS
3355 {
3356 /* The remote process exited. */
3357 status->kind = TARGET_WAITKIND_EXITED;
3358 status->value.integer = (fromhex (buf[1]) << 4) + fromhex (buf[2]);
3359 goto got_status;
3360 }
3361 case 'X':
3362 status->kind = TARGET_WAITKIND_SIGNALLED;
3363 status->value.sig = (enum target_signal)
3364 (((fromhex (buf[1])) << 4) + (fromhex (buf[2])));
3365 kill_kludge = 1;
3366
3367 goto got_status;
23860348 3368 case 'O': /* Console output. */
c906108c
SS
3369 remote_console_output (buf + 1);
3370 continue;
3371 case '\0':
3372 if (last_sent_signal != TARGET_SIGNAL_0)
3373 {
3374 /* Zero length reply means that we tried 'S' or 'C' and
c5aa993b 3375 the remote system doesn't support it. */
c906108c
SS
3376 target_terminal_ours_for_output ();
3377 printf_filtered
3378 ("Can't send signals to this remote system. %s not sent.\n",
3379 target_signal_to_name (last_sent_signal));
3380 last_sent_signal = TARGET_SIGNAL_0;
3381 target_terminal_inferior ();
3382
3383 strcpy ((char *) buf, last_sent_step ? "s" : "c");
3384 putpkt ((char *) buf);
3385 continue;
3386 }
3387 /* else fallthrough */
3388 default:
8a3fe4f8 3389 warning (_("Invalid remote reply: %s"), buf);
c906108c
SS
3390 continue;
3391 }
3392 }
c5aa993b 3393got_status:
c906108c
SS
3394 if (thread_num != -1)
3395 {
39f77062 3396 return pid_to_ptid (thread_num);
c906108c 3397 }
39f77062 3398 return inferior_ptid;
c906108c
SS
3399}
3400
23860348 3401/* Async version of remote_wait. */
39f77062
KB
3402static ptid_t
3403remote_async_wait (ptid_t ptid, struct target_waitstatus *status)
43ff13b4 3404{
d01949b6 3405 struct remote_state *rs = get_remote_state ();
ea9c271d 3406 struct remote_arch_state *rsa = get_remote_arch_state ();
b2dd6311 3407 ULONGEST thread_num = -1;
3c3bea1c 3408 ULONGEST addr;
cfa9d6d9 3409 int solibs_changed = 0;
43ff13b4
JM
3410
3411 status->kind = TARGET_WAITKIND_EXITED;
3412 status->value.integer = 0;
3413
3c3bea1c
GS
3414 remote_stopped_by_watchpoint_p = 0;
3415
43ff13b4
JM
3416 while (1)
3417 {
2e9f7625 3418 char *buf, *p;
c5aa993b 3419
ed9a39eb 3420 if (!target_is_async_p ())
43ff13b4 3421 ofunc = signal (SIGINT, remote_interrupt);
6426a772
JM
3422 /* FIXME: cagney/1999-09-27: If we're in async mode we should
3423 _never_ wait for ever -> test on target_is_async_p().
3424 However, before we do that we need to ensure that the caller
23860348 3425 knows how to take the target into/out of async mode. */
6d820c5c 3426 getpkt (&rs->buf, &rs->buf_size, wait_forever_enabled_p);
ed9a39eb 3427 if (!target_is_async_p ())
43ff13b4
JM
3428 signal (SIGINT, ofunc);
3429
2e9f7625
DJ
3430 buf = rs->buf;
3431
43ff13b4 3432 /* This is a hook for when we need to do something (perhaps the
c5aa993b 3433 collection of trace data) every time the target stops. */
9a4105ab
AC
3434 if (deprecated_target_wait_loop_hook)
3435 (*deprecated_target_wait_loop_hook) ();
43ff13b4
JM
3436
3437 switch (buf[0])
3438 {
23860348 3439 case 'E': /* Error of some sort. */
8a3fe4f8 3440 warning (_("Remote failure reply: %s"), buf);
43ff13b4 3441 continue;
23860348 3442 case 'F': /* File-I/O request. */
449092f6
CV
3443 remote_fileio_request (buf);
3444 continue;
23860348 3445 case 'T': /* Status with PC, SP, FP, ... */
43ff13b4 3446 {
cfd77fa1 3447 gdb_byte regs[MAX_REGISTER_SIZE];
43ff13b4 3448
23860348 3449 /* Expedited reply, containing Signal, {regno, reg} repeat. */
43ff13b4 3450 /* format is: 'Tssn...:r...;n...:r...;n...:r...;#cc', where
c5aa993b
JM
3451 ss = signal number
3452 n... = register number
3453 r... = register contents
3454 */
43ff13b4
JM
3455 p = &buf[3]; /* after Txx */
3456
3457 while (*p)
3458 {
cfd77fa1 3459 char *p1;
43ff13b4 3460 char *p_temp;
6c3f2dbf 3461 int fieldsize;
3c3bea1c 3462 long pnum = 0;
43ff13b4 3463
23860348
MS
3464 /* If the packet contains a register number, save it
3465 in pnum and set p1 to point to the character
3466 following it. Otherwise p1 points to p. */
3c3bea1c
GS
3467
3468 /* If this packet is an awatch packet, don't parse the 'a'
3469 as a register number. */
802188a7 3470
cfa9d6d9 3471 if (strncmp (p, "awatch", strlen("awatch")) != 0)
3c3bea1c
GS
3472 {
3473 /* Read the register number. */
3474 pnum = strtol (p, &p_temp, 16);
cfd77fa1 3475 p1 = p_temp;
3c3bea1c 3476 }
802188a7 3477 else
3c3bea1c 3478 p1 = p;
43ff13b4 3479
23860348 3480 if (p1 == p) /* No register number present here. */
43ff13b4 3481 {
cfd77fa1 3482 p1 = strchr (p, ':');
43ff13b4 3483 if (p1 == NULL)
8a3fe4f8
AC
3484 error (_("Malformed packet(a) (missing colon): %s\n\
3485Packet: '%s'\n"),
3fcb8548 3486 p, buf);
3c3bea1c 3487 if (strncmp (p, "thread", p1 - p) == 0)
43ff13b4
JM
3488 {
3489 p_temp = unpack_varlen_hex (++p1, &thread_num);
3490 record_currthread (thread_num);
cfd77fa1 3491 p = p_temp;
43ff13b4 3492 }
3c3bea1c
GS
3493 else if ((strncmp (p, "watch", p1 - p) == 0)
3494 || (strncmp (p, "rwatch", p1 - p) == 0)
3495 || (strncmp (p, "awatch", p1 - p) == 0))
3496 {
3497 remote_stopped_by_watchpoint_p = 1;
3498 p = unpack_varlen_hex (++p1, &addr);
3499 remote_watch_data_address = (CORE_ADDR)addr;
3500 }
cfa9d6d9
DJ
3501 else if (strncmp (p, "library", p1 - p) == 0)
3502 {
3503 p1++;
3504 p_temp = p1;
3505 while (*p_temp && *p_temp != ';')
3506 p_temp++;
3507
3508 solibs_changed = 1;
3509 p = p_temp;
3510 }
3c3bea1c
GS
3511 else
3512 {
3513 /* Silently skip unknown optional info. */
cfd77fa1 3514 p_temp = strchr (p1 + 1, ';');
3c3bea1c
GS
3515 if (p_temp)
3516 p = p_temp;
3517 }
43ff13b4 3518 }
802188a7 3519
43ff13b4
JM
3520 else
3521 {
ea9c271d 3522 struct packet_reg *reg = packet_reg_from_pnum (rsa, pnum);
43ff13b4 3523 p = p1;
43ff13b4 3524 if (*p++ != ':')
8a3fe4f8
AC
3525 error (_("Malformed packet(b) (missing colon): %s\n\
3526Packet: '%s'\n"),
3fcb8548 3527 p, buf);
43ff13b4 3528
ad10f812 3529 if (reg == NULL)
8a3fe4f8
AC
3530 error (_("Remote sent bad register number %ld: %s\n\
3531Packet: '%s'\n"),
3fcb8548 3532 pnum, p, buf);
43ff13b4 3533
cfd77fa1 3534 fieldsize = hex2bin (p, regs,
2bc416ba 3535 register_size (current_gdbarch,
23860348 3536 reg->regnum));
6c3f2dbf 3537 p += 2 * fieldsize;
2bc416ba 3538 if (fieldsize < register_size (current_gdbarch,
23860348 3539 reg->regnum))
8a3fe4f8 3540 warning (_("Remote reply is too short: %s"), buf);
594f7785
UW
3541 regcache_raw_supply (get_current_regcache (),
3542 reg->regnum, regs);
43ff13b4
JM
3543 }
3544
3545 if (*p++ != ';')
8a3fe4f8 3546 error (_("Remote register badly formatted: %s\nhere: %s"),
0a2cfde4 3547 buf, p);
43ff13b4
JM
3548 }
3549 }
3550 /* fall through */
23860348 3551 case 'S': /* Old style status, just signal only. */
cfa9d6d9
DJ
3552 if (solibs_changed)
3553 status->kind = TARGET_WAITKIND_LOADED;
3554 else
3555 {
3556 status->kind = TARGET_WAITKIND_STOPPED;
3557 status->value.sig = (enum target_signal)
3558 (((fromhex (buf[1])) << 4) + (fromhex (buf[2])));
3559 }
43ff13b4
JM
3560
3561 if (buf[3] == 'p')
3562 {
43ff13b4
JM
3563 thread_num = strtol ((const char *) &buf[4], NULL, 16);
3564 record_currthread (thread_num);
3565 }
43ff13b4 3566 goto got_status;
23860348 3567 case 'W': /* Target exited. */
43ff13b4
JM
3568 {
3569 /* The remote process exited. */
3570 status->kind = TARGET_WAITKIND_EXITED;
3571 status->value.integer = (fromhex (buf[1]) << 4) + fromhex (buf[2]);
3572 goto got_status;
3573 }
3574 case 'X':
3575 status->kind = TARGET_WAITKIND_SIGNALLED;
3576 status->value.sig = (enum target_signal)
3577 (((fromhex (buf[1])) << 4) + (fromhex (buf[2])));
3578 kill_kludge = 1;
3579
3580 goto got_status;
23860348 3581 case 'O': /* Console output. */
43ff13b4 3582 remote_console_output (buf + 1);
c4093a6a 3583 /* Return immediately to the event loop. The event loop will
23860348 3584 still be waiting on the inferior afterwards. */
c4093a6a
JM
3585 status->kind = TARGET_WAITKIND_IGNORE;
3586 goto got_status;
43ff13b4
JM
3587 case '\0':
3588 if (last_sent_signal != TARGET_SIGNAL_0)
3589 {
3590 /* Zero length reply means that we tried 'S' or 'C' and
c5aa993b 3591 the remote system doesn't support it. */
43ff13b4
JM
3592 target_terminal_ours_for_output ();
3593 printf_filtered
3594 ("Can't send signals to this remote system. %s not sent.\n",
3595 target_signal_to_name (last_sent_signal));
3596 last_sent_signal = TARGET_SIGNAL_0;
3597 target_terminal_inferior ();
3598
3599 strcpy ((char *) buf, last_sent_step ? "s" : "c");
3600 putpkt ((char *) buf);
3601 continue;
3602 }
3603 /* else fallthrough */
3604 default:
8a3fe4f8 3605 warning (_("Invalid remote reply: %s"), buf);
43ff13b4
JM
3606 continue;
3607 }
3608 }
c5aa993b 3609got_status:
43ff13b4
JM
3610 if (thread_num != -1)
3611 {
39f77062 3612 return pid_to_ptid (thread_num);
43ff13b4 3613 }
39f77062 3614 return inferior_ptid;
43ff13b4
JM
3615}
3616
74ca34ce 3617/* Fetch a single register using a 'p' packet. */
c906108c 3618
b96ec7ac 3619static int
56be3814 3620fetch_register_using_p (struct regcache *regcache, struct packet_reg *reg)
b96ec7ac
AC
3621{
3622 struct remote_state *rs = get_remote_state ();
2e9f7625 3623 char *buf, *p;
b96ec7ac
AC
3624 char regp[MAX_REGISTER_SIZE];
3625 int i;
3626
74ca34ce
DJ
3627 if (remote_protocol_packets[PACKET_p].support == PACKET_DISABLE)
3628 return 0;
3629
3630 if (reg->pnum == -1)
3631 return 0;
3632
2e9f7625 3633 p = rs->buf;
fcad0fa4 3634 *p++ = 'p';
74ca34ce 3635 p += hexnumstr (p, reg->pnum);
fcad0fa4 3636 *p++ = '\0';
6d820c5c 3637 remote_send (&rs->buf, &rs->buf_size);
3f9a994c 3638
2e9f7625
DJ
3639 buf = rs->buf;
3640
74ca34ce
DJ
3641 switch (packet_ok (buf, &remote_protocol_packets[PACKET_p]))
3642 {
3643 case PACKET_OK:
3644 break;
3645 case PACKET_UNKNOWN:
3646 return 0;
3647 case PACKET_ERROR:
3648 error (_("Could not fetch register \"%s\""),
4a22f64d 3649 gdbarch_register_name (get_regcache_arch (regcache), reg->regnum));
74ca34ce 3650 }
3f9a994c
JB
3651
3652 /* If this register is unfetchable, tell the regcache. */
3653 if (buf[0] == 'x')
8480adf2 3654 {
56be3814 3655 regcache_raw_supply (regcache, reg->regnum, NULL);
8480adf2 3656 return 1;
b96ec7ac 3657 }
b96ec7ac 3658
3f9a994c
JB
3659 /* Otherwise, parse and supply the value. */
3660 p = buf;
3661 i = 0;
3662 while (p[0] != 0)
3663 {
3664 if (p[1] == 0)
74ca34ce 3665 error (_("fetch_register_using_p: early buf termination"));
3f9a994c
JB
3666
3667 regp[i++] = fromhex (p[0]) * 16 + fromhex (p[1]);
3668 p += 2;
3669 }
56be3814 3670 regcache_raw_supply (regcache, reg->regnum, regp);
3f9a994c 3671 return 1;
b96ec7ac
AC
3672}
3673
74ca34ce
DJ
3674/* Fetch the registers included in the target's 'g' packet. */
3675
29709017
DJ
3676static int
3677send_g_packet (void)
c906108c 3678{
d01949b6 3679 struct remote_state *rs = get_remote_state ();
74ca34ce 3680 int i, buf_len;
c906108c 3681 char *p;
74ca34ce 3682 char *regs;
c906108c 3683
74ca34ce
DJ
3684 sprintf (rs->buf, "g");
3685 remote_send (&rs->buf, &rs->buf_size);
c906108c 3686
29709017
DJ
3687 /* We can get out of synch in various cases. If the first character
3688 in the buffer is not a hex character, assume that has happened
3689 and try to fetch another packet to read. */
3690 while ((rs->buf[0] < '0' || rs->buf[0] > '9')
3691 && (rs->buf[0] < 'A' || rs->buf[0] > 'F')
3692 && (rs->buf[0] < 'a' || rs->buf[0] > 'f')
3693 && rs->buf[0] != 'x') /* New: unavailable register value. */
3694 {
3695 if (remote_debug)
3696 fprintf_unfiltered (gdb_stdlog,
3697 "Bad register packet; fetching a new packet\n");
3698 getpkt (&rs->buf, &rs->buf_size, 0);
3699 }
3700
74ca34ce
DJ
3701 buf_len = strlen (rs->buf);
3702
3703 /* Sanity check the received packet. */
3704 if (buf_len % 2 != 0)
3705 error (_("Remote 'g' packet reply is of odd length: %s"), rs->buf);
29709017
DJ
3706
3707 return buf_len / 2;
3708}
3709
3710static void
56be3814 3711process_g_packet (struct regcache *regcache)
29709017 3712{
4a22f64d 3713 struct gdbarch *gdbarch = get_regcache_arch (regcache);
29709017
DJ
3714 struct remote_state *rs = get_remote_state ();
3715 struct remote_arch_state *rsa = get_remote_arch_state ();
3716 int i, buf_len;
3717 char *p;
3718 char *regs;
3719
3720 buf_len = strlen (rs->buf);
3721
3722 /* Further sanity checks, with knowledge of the architecture. */
74ca34ce
DJ
3723 if (buf_len > 2 * rsa->sizeof_g_packet)
3724 error (_("Remote 'g' packet reply is too long: %s"), rs->buf);
3725
3726 /* Save the size of the packet sent to us by the target. It is used
3727 as a heuristic when determining the max size of packets that the
3728 target can safely receive. */
3729 if (rsa->actual_register_packet_size == 0)
3730 rsa->actual_register_packet_size = buf_len;
3731
3732 /* If this is smaller than we guessed the 'g' packet would be,
3733 update our records. A 'g' reply that doesn't include a register's
3734 value implies either that the register is not available, or that
3735 the 'p' packet must be used. */
3736 if (buf_len < 2 * rsa->sizeof_g_packet)
b323314b 3737 {
74ca34ce
DJ
3738 rsa->sizeof_g_packet = buf_len / 2;
3739
4a22f64d 3740 for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
b96ec7ac 3741 {
74ca34ce
DJ
3742 if (rsa->regs[i].pnum == -1)
3743 continue;
3744
3745 if (rsa->regs[i].offset >= rsa->sizeof_g_packet)
3746 rsa->regs[i].in_g_packet = 0;
b96ec7ac 3747 else
74ca34ce 3748 rsa->regs[i].in_g_packet = 1;
b96ec7ac 3749 }
74ca34ce 3750 }
b323314b 3751
74ca34ce 3752 regs = alloca (rsa->sizeof_g_packet);
c906108c
SS
3753
3754 /* Unimplemented registers read as all bits zero. */
ea9c271d 3755 memset (regs, 0, rsa->sizeof_g_packet);
c906108c 3756
c906108c
SS
3757 /* Reply describes registers byte by byte, each byte encoded as two
3758 hex characters. Suck them all up, then supply them to the
3759 register cacheing/storage mechanism. */
3760
74ca34ce 3761 p = rs->buf;
ea9c271d 3762 for (i = 0; i < rsa->sizeof_g_packet; i++)
c906108c 3763 {
74ca34ce
DJ
3764 if (p[0] == 0 || p[1] == 0)
3765 /* This shouldn't happen - we adjusted sizeof_g_packet above. */
3766 internal_error (__FILE__, __LINE__,
3767 "unexpected end of 'g' packet reply");
3768
c906108c 3769 if (p[0] == 'x' && p[1] == 'x')
c5aa993b 3770 regs[i] = 0; /* 'x' */
c906108c
SS
3771 else
3772 regs[i] = fromhex (p[0]) * 16 + fromhex (p[1]);
3773 p += 2;
3774 }
3775
ad10f812 3776 {
b323314b 3777 int i;
4a22f64d 3778 for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
ad10f812 3779 {
ea9c271d 3780 struct packet_reg *r = &rsa->regs[i];
b323314b
AC
3781 if (r->in_g_packet)
3782 {
74ca34ce
DJ
3783 if (r->offset * 2 >= strlen (rs->buf))
3784 /* This shouldn't happen - we adjusted in_g_packet above. */
3785 internal_error (__FILE__, __LINE__,
3786 "unexpected end of 'g' packet reply");
3787 else if (rs->buf[r->offset * 2] == 'x')
8ccc1287 3788 {
74ca34ce 3789 gdb_assert (r->offset * 2 < strlen (rs->buf));
8ccc1287
AC
3790 /* The register isn't available, mark it as such (at
3791 the same time setting the value to zero). */
56be3814 3792 regcache_raw_supply (regcache, r->regnum, NULL);
8ccc1287
AC
3793 }
3794 else
56be3814 3795 regcache_raw_supply (regcache, r->regnum,
8ccc1287 3796 regs + r->offset);
b323314b 3797 }
ad10f812
AC
3798 }
3799 }
c906108c
SS
3800}
3801
29709017 3802static void
56be3814 3803fetch_registers_using_g (struct regcache *regcache)
29709017
DJ
3804{
3805 send_g_packet ();
56be3814 3806 process_g_packet (regcache);
29709017
DJ
3807}
3808
74ca34ce 3809static void
56be3814 3810remote_fetch_registers (struct regcache *regcache, int regnum)
74ca34ce
DJ
3811{
3812 struct remote_state *rs = get_remote_state ();
3813 struct remote_arch_state *rsa = get_remote_arch_state ();
3814 int i;
3815
3816 set_thread (PIDGET (inferior_ptid), 1);
3817
3818 if (regnum >= 0)
3819 {
3820 struct packet_reg *reg = packet_reg_from_regnum (rsa, regnum);
3821 gdb_assert (reg != NULL);
3822
3823 /* If this register might be in the 'g' packet, try that first -
3824 we are likely to read more than one register. If this is the
3825 first 'g' packet, we might be overly optimistic about its
3826 contents, so fall back to 'p'. */
3827 if (reg->in_g_packet)
3828 {
56be3814 3829 fetch_registers_using_g (regcache);
74ca34ce
DJ
3830 if (reg->in_g_packet)
3831 return;
3832 }
3833
56be3814 3834 if (fetch_register_using_p (regcache, reg))
74ca34ce
DJ
3835 return;
3836
3837 /* This register is not available. */
56be3814 3838 regcache_raw_supply (regcache, reg->regnum, NULL);
74ca34ce
DJ
3839
3840 return;
3841 }
3842
56be3814 3843 fetch_registers_using_g (regcache);
74ca34ce 3844
4a22f64d 3845 for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++)
74ca34ce 3846 if (!rsa->regs[i].in_g_packet)
56be3814 3847 if (!fetch_register_using_p (regcache, &rsa->regs[i]))
74ca34ce
DJ
3848 {
3849 /* This register is not available. */
56be3814 3850 regcache_raw_supply (regcache, i, NULL);
74ca34ce
DJ
3851 }
3852}
3853
c906108c
SS
3854/* Prepare to store registers. Since we may send them all (using a
3855 'G' request), we have to read out the ones we don't want to change
3856 first. */
3857
c5aa993b 3858static void
316f2060 3859remote_prepare_to_store (struct regcache *regcache)
c906108c 3860{
ea9c271d 3861 struct remote_arch_state *rsa = get_remote_arch_state ();
cf0e1e0d 3862 int i;
cfd77fa1 3863 gdb_byte buf[MAX_REGISTER_SIZE];
cf0e1e0d 3864
c906108c 3865 /* Make sure the entire registers array is valid. */
444abaca 3866 switch (remote_protocol_packets[PACKET_P].support)
5a2468f5
JM
3867 {
3868 case PACKET_DISABLE:
3869 case PACKET_SUPPORT_UNKNOWN:
cf0e1e0d 3870 /* Make sure all the necessary registers are cached. */
4a22f64d 3871 for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++)
ea9c271d 3872 if (rsa->regs[i].in_g_packet)
316f2060 3873 regcache_raw_read (regcache, rsa->regs[i].regnum, buf);
5a2468f5
JM
3874 break;
3875 case PACKET_ENABLE:
3876 break;
3877 }
3878}
3879
ad10f812 3880/* Helper: Attempt to store REGNUM using the P packet. Return fail IFF
23860348 3881 packet was not recognized. */
5a2468f5
JM
3882
3883static int
56be3814 3884store_register_using_P (const struct regcache *regcache, struct packet_reg *reg)
5a2468f5 3885{
4a22f64d 3886 struct gdbarch *gdbarch = get_regcache_arch (regcache);
d01949b6 3887 struct remote_state *rs = get_remote_state ();
ea9c271d 3888 struct remote_arch_state *rsa = get_remote_arch_state ();
5a2468f5 3889 /* Try storing a single register. */
6d820c5c 3890 char *buf = rs->buf;
cfd77fa1 3891 gdb_byte regp[MAX_REGISTER_SIZE];
5a2468f5 3892 char *p;
5a2468f5 3893
74ca34ce
DJ
3894 if (remote_protocol_packets[PACKET_P].support == PACKET_DISABLE)
3895 return 0;
3896
3897 if (reg->pnum == -1)
3898 return 0;
3899
ea9c271d 3900 xsnprintf (buf, get_remote_packet_size (), "P%s=", phex_nz (reg->pnum, 0));
5a2468f5 3901 p = buf + strlen (buf);
56be3814 3902 regcache_raw_collect (regcache, reg->regnum, regp);
4a22f64d 3903 bin2hex (regp, p, register_size (gdbarch, reg->regnum));
6d820c5c 3904 remote_send (&rs->buf, &rs->buf_size);
5a2468f5 3905
74ca34ce
DJ
3906 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_P]))
3907 {
3908 case PACKET_OK:
3909 return 1;
3910 case PACKET_ERROR:
3911 error (_("Could not write register \"%s\""),
4a22f64d 3912 gdbarch_register_name (gdbarch, reg->regnum));
74ca34ce
DJ
3913 case PACKET_UNKNOWN:
3914 return 0;
3915 default:
3916 internal_error (__FILE__, __LINE__, _("Bad result from packet_ok"));
3917 }
c906108c
SS
3918}
3919
23860348
MS
3920/* Store register REGNUM, or all registers if REGNUM == -1, from the
3921 contents of the register cache buffer. FIXME: ignores errors. */
c906108c
SS
3922
3923static void
56be3814 3924store_registers_using_G (const struct regcache *regcache)
c906108c 3925{
d01949b6 3926 struct remote_state *rs = get_remote_state ();
ea9c271d 3927 struct remote_arch_state *rsa = get_remote_arch_state ();
cfd77fa1 3928 gdb_byte *regs;
c906108c
SS
3929 char *p;
3930
193cb69f
AC
3931 /* Extract all the registers in the regcache copying them into a
3932 local buffer. */
3933 {
b323314b 3934 int i;
ea9c271d
DJ
3935 regs = alloca (rsa->sizeof_g_packet);
3936 memset (regs, 0, rsa->sizeof_g_packet);
4a22f64d 3937 for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++)
193cb69f 3938 {
ea9c271d 3939 struct packet_reg *r = &rsa->regs[i];
b323314b 3940 if (r->in_g_packet)
56be3814 3941 regcache_raw_collect (regcache, r->regnum, regs + r->offset);
193cb69f
AC
3942 }
3943 }
c906108c
SS
3944
3945 /* Command describes registers byte by byte,
3946 each byte encoded as two hex characters. */
6d820c5c 3947 p = rs->buf;
193cb69f 3948 *p++ = 'G';
74ca34ce
DJ
3949 /* remote_prepare_to_store insures that rsa->sizeof_g_packet gets
3950 updated. */
3951 bin2hex (regs, p, rsa->sizeof_g_packet);
6d820c5c 3952 remote_send (&rs->buf, &rs->buf_size);
c906108c 3953}
74ca34ce
DJ
3954
3955/* Store register REGNUM, or all registers if REGNUM == -1, from the contents
3956 of the register cache buffer. FIXME: ignores errors. */
3957
3958static void
56be3814 3959remote_store_registers (struct regcache *regcache, int regnum)
74ca34ce
DJ
3960{
3961 struct remote_state *rs = get_remote_state ();
3962 struct remote_arch_state *rsa = get_remote_arch_state ();
3963 int i;
3964
3965 set_thread (PIDGET (inferior_ptid), 1);
3966
3967 if (regnum >= 0)
3968 {
3969 struct packet_reg *reg = packet_reg_from_regnum (rsa, regnum);
3970 gdb_assert (reg != NULL);
3971
3972 /* Always prefer to store registers using the 'P' packet if
3973 possible; we often change only a small number of registers.
3974 Sometimes we change a larger number; we'd need help from a
3975 higher layer to know to use 'G'. */
56be3814 3976 if (store_register_using_P (regcache, reg))
74ca34ce
DJ
3977 return;
3978
3979 /* For now, don't complain if we have no way to write the
3980 register. GDB loses track of unavailable registers too
3981 easily. Some day, this may be an error. We don't have
3982 any way to read the register, either... */
3983 if (!reg->in_g_packet)
3984 return;
3985
56be3814 3986 store_registers_using_G (regcache);
74ca34ce
DJ
3987 return;
3988 }
3989
56be3814 3990 store_registers_using_G (regcache);
74ca34ce 3991
4a22f64d 3992 for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++)
74ca34ce 3993 if (!rsa->regs[i].in_g_packet)
56be3814 3994 if (!store_register_using_P (regcache, &rsa->regs[i]))
74ca34ce
DJ
3995 /* See above for why we do not issue an error here. */
3996 continue;
3997}
c906108c
SS
3998\f
3999
4000/* Return the number of hex digits in num. */
4001
4002static int
fba45db2 4003hexnumlen (ULONGEST num)
c906108c
SS
4004{
4005 int i;
4006
4007 for (i = 0; num != 0; i++)
4008 num >>= 4;
4009
4010 return max (i, 1);
4011}
4012
2df3850c 4013/* Set BUF to the minimum number of hex digits representing NUM. */
c906108c
SS
4014
4015static int
fba45db2 4016hexnumstr (char *buf, ULONGEST num)
c906108c 4017{
c906108c 4018 int len = hexnumlen (num);
2df3850c
JM
4019 return hexnumnstr (buf, num, len);
4020}
4021
c906108c 4022
2df3850c 4023/* Set BUF to the hex digits representing NUM, padded to WIDTH characters. */
c906108c 4024
2df3850c 4025static int
fba45db2 4026hexnumnstr (char *buf, ULONGEST num, int width)
2df3850c
JM
4027{
4028 int i;
4029
4030 buf[width] = '\0';
4031
4032 for (i = width - 1; i >= 0; i--)
c906108c 4033 {
c5aa993b 4034 buf[i] = "0123456789abcdef"[(num & 0xf)];
c906108c
SS
4035 num >>= 4;
4036 }
4037
2df3850c 4038 return width;
c906108c
SS
4039}
4040
23860348 4041/* Mask all but the least significant REMOTE_ADDRESS_SIZE bits. */
c906108c
SS
4042
4043static CORE_ADDR
fba45db2 4044remote_address_masked (CORE_ADDR addr)
c906108c 4045{
911c95a5
UW
4046 int address_size = remote_address_size;
4047 /* If "remoteaddresssize" was not set, default to target address size. */
4048 if (!address_size)
4049 address_size = gdbarch_addr_bit (current_gdbarch);
4050
4051 if (address_size > 0
4052 && address_size < (sizeof (ULONGEST) * 8))
c906108c
SS
4053 {
4054 /* Only create a mask when that mask can safely be constructed
23860348 4055 in a ULONGEST variable. */
c906108c 4056 ULONGEST mask = 1;
911c95a5 4057 mask = (mask << address_size) - 1;
c906108c
SS
4058 addr &= mask;
4059 }
4060 return addr;
4061}
4062
a31ea83d
DJ
4063/* Convert BUFFER, binary data at least LEN bytes long, into escaped
4064 binary data in OUT_BUF. Set *OUT_LEN to the length of the data
4065 encoded in OUT_BUF, and return the number of bytes in OUT_BUF
4066 (which may be more than *OUT_LEN due to escape characters). The
4067 total number of bytes in the output buffer will be at most
4068 OUT_MAXLEN. */
4069
4070static int
4071remote_escape_output (const gdb_byte *buffer, int len,
4072 gdb_byte *out_buf, int *out_len,
4073 int out_maxlen)
4074{
4075 int input_index, output_index;
4076
4077 output_index = 0;
4078 for (input_index = 0; input_index < len; input_index++)
4079 {
4080 gdb_byte b = buffer[input_index];
4081
4082 if (b == '$' || b == '#' || b == '}')
4083 {
4084 /* These must be escaped. */
4085 if (output_index + 2 > out_maxlen)
4086 break;
4087 out_buf[output_index++] = '}';
4088 out_buf[output_index++] = b ^ 0x20;
4089 }
4090 else
4091 {
4092 if (output_index + 1 > out_maxlen)
4093 break;
4094 out_buf[output_index++] = b;
4095 }
4096 }
4097
4098 *out_len = input_index;
4099 return output_index;
4100}
4101
0876f84a
DJ
4102/* Convert BUFFER, escaped data LEN bytes long, into binary data
4103 in OUT_BUF. Return the number of bytes written to OUT_BUF.
4104 Raise an error if the total number of bytes exceeds OUT_MAXLEN.
4105
4106 This function reverses remote_escape_output. It allows more
4107 escaped characters than that function does, in particular because
4108 '*' must be escaped to avoid the run-length encoding processing
4109 in reading packets. */
4110
4111static int
4112remote_unescape_input (const gdb_byte *buffer, int len,
4113 gdb_byte *out_buf, int out_maxlen)
4114{
4115 int input_index, output_index;
4116 int escaped;
4117
4118 output_index = 0;
4119 escaped = 0;
4120 for (input_index = 0; input_index < len; input_index++)
4121 {
4122 gdb_byte b = buffer[input_index];
4123
4124 if (output_index + 1 > out_maxlen)
4125 {
4126 warning (_("Received too much data from remote target;"
4127 " ignoring overflow."));
4128 return output_index;
4129 }
4130
4131 if (escaped)
4132 {
4133 out_buf[output_index++] = b ^ 0x20;
4134 escaped = 0;
4135 }
4136 else if (b == '}')
4137 escaped = 1;
4138 else
4139 out_buf[output_index++] = b;
4140 }
4141
4142 if (escaped)
4143 error (_("Unmatched escape character in target response."));
4144
4145 return output_index;
4146}
4147
c906108c
SS
4148/* Determine whether the remote target supports binary downloading.
4149 This is accomplished by sending a no-op memory write of zero length
4150 to the target at the specified address. It does not suffice to send
23860348
MS
4151 the whole packet, since many stubs strip the eighth bit and
4152 subsequently compute a wrong checksum, which causes real havoc with
4153 remote_write_bytes.
7a292a7a 4154
96baa820
JM
4155 NOTE: This can still lose if the serial line is not eight-bit
4156 clean. In cases like this, the user should clear "remote
23860348 4157 X-packet". */
96baa820 4158
c906108c 4159static void
fba45db2 4160check_binary_download (CORE_ADDR addr)
c906108c 4161{
d01949b6 4162 struct remote_state *rs = get_remote_state ();
24b06219 4163
444abaca 4164 switch (remote_protocol_packets[PACKET_X].support)
c906108c 4165 {
96baa820
JM
4166 case PACKET_DISABLE:
4167 break;
4168 case PACKET_ENABLE:
4169 break;
4170 case PACKET_SUPPORT_UNKNOWN:
4171 {
96baa820 4172 char *p;
802188a7 4173
2e9f7625 4174 p = rs->buf;
96baa820
JM
4175 *p++ = 'X';
4176 p += hexnumstr (p, (ULONGEST) addr);
4177 *p++ = ',';
4178 p += hexnumstr (p, (ULONGEST) 0);
4179 *p++ = ':';
4180 *p = '\0';
802188a7 4181
2e9f7625 4182 putpkt_binary (rs->buf, (int) (p - rs->buf));
6d820c5c 4183 getpkt (&rs->buf, &rs->buf_size, 0);
c906108c 4184
2e9f7625 4185 if (rs->buf[0] == '\0')
96baa820
JM
4186 {
4187 if (remote_debug)
4188 fprintf_unfiltered (gdb_stdlog,
4189 "binary downloading NOT suppported by target\n");
444abaca 4190 remote_protocol_packets[PACKET_X].support = PACKET_DISABLE;
96baa820
JM
4191 }
4192 else
4193 {
4194 if (remote_debug)
4195 fprintf_unfiltered (gdb_stdlog,
4196 "binary downloading suppported by target\n");
444abaca 4197 remote_protocol_packets[PACKET_X].support = PACKET_ENABLE;
96baa820
JM
4198 }
4199 break;
4200 }
c906108c
SS
4201 }
4202}
4203
4204/* Write memory data directly to the remote machine.
4205 This does not inform the data cache; the data cache uses this.
a76d924d 4206 HEADER is the starting part of the packet.
c906108c
SS
4207 MEMADDR is the address in the remote memory space.
4208 MYADDR is the address of the buffer in our space.
4209 LEN is the number of bytes.
a76d924d
DJ
4210 PACKET_FORMAT should be either 'X' or 'M', and indicates if we
4211 should send data as binary ('X'), or hex-encoded ('M').
4212
4213 The function creates packet of the form
4214 <HEADER><ADDRESS>,<LENGTH>:<DATA>
4215
4216 where encoding of <DATA> is termined by PACKET_FORMAT.
4217
4218 If USE_LENGTH is 0, then the <LENGTH> field and the preceding comma
4219 are omitted.
4220
4221 Returns the number of bytes transferred, or 0 (setting errno) for
23860348 4222 error. Only transfer a single packet. */
c906108c 4223
a76d924d
DJ
4224static int
4225remote_write_bytes_aux (const char *header, CORE_ADDR memaddr,
4226 const gdb_byte *myaddr, int len,
4227 char packet_format, int use_length)
c906108c 4228{
6d820c5c 4229 struct remote_state *rs = get_remote_state ();
cfd77fa1 4230 char *p;
a76d924d
DJ
4231 char *plen = NULL;
4232 int plenlen = 0;
917317f4
JM
4233 int todo;
4234 int nr_bytes;
a257b5bb 4235 int payload_size;
6765f3e5 4236 int payload_length;
a76d924d
DJ
4237 int header_length;
4238
4239 if (packet_format != 'X' && packet_format != 'M')
4240 internal_error (__FILE__, __LINE__,
4241 "remote_write_bytes_aux: bad packet format");
c906108c 4242
b2182ed2
DJ
4243 if (len <= 0)
4244 return 0;
4245
3de11b2e 4246 payload_size = get_memory_write_packet_size ();
2bc416ba 4247
6d820c5c
DJ
4248 /* The packet buffer will be large enough for the payload;
4249 get_memory_packet_size ensures this. */
a76d924d 4250 rs->buf[0] = '\0';
c906108c 4251
a257b5bb 4252 /* Compute the size of the actual payload by subtracting out the
3de11b2e
NS
4253 packet header and footer overhead: "$M<memaddr>,<len>:...#nn".
4254 */
a76d924d
DJ
4255 payload_size -= strlen ("$,:#NN");
4256 if (!use_length)
4257 /* The comma won't be used. */
4258 payload_size += 1;
4259 header_length = strlen (header);
4260 payload_size -= header_length;
3de11b2e 4261 payload_size -= hexnumlen (memaddr);
c906108c 4262
a76d924d 4263 /* Construct the packet excluding the data: "<header><memaddr>,<len>:". */
917317f4 4264
a76d924d
DJ
4265 strcat (rs->buf, header);
4266 p = rs->buf + strlen (header);
4267
4268 /* Compute a best guess of the number of bytes actually transfered. */
4269 if (packet_format == 'X')
c906108c 4270 {
23860348 4271 /* Best guess at number of bytes that will fit. */
a257b5bb 4272 todo = min (len, payload_size);
a76d924d
DJ
4273 if (use_length)
4274 payload_size -= hexnumlen (todo);
3de11b2e 4275 todo = min (todo, payload_size);
a76d924d
DJ
4276 }
4277 else
4278 {
23860348 4279 /* Num bytes that will fit. */
a257b5bb 4280 todo = min (len, payload_size / 2);
a76d924d
DJ
4281 if (use_length)
4282 payload_size -= hexnumlen (todo);
3de11b2e 4283 todo = min (todo, payload_size / 2);
917317f4 4284 }
a76d924d 4285
3de11b2e
NS
4286 if (todo <= 0)
4287 internal_error (__FILE__, __LINE__,
4288 _("minumum packet size too small to write data"));
802188a7 4289
6765f3e5
DJ
4290 /* If we already need another packet, then try to align the end
4291 of this packet to a useful boundary. */
4292 if (todo > 2 * REMOTE_ALIGN_WRITES && todo < len)
4293 todo = ((memaddr + todo) & ~(REMOTE_ALIGN_WRITES - 1)) - memaddr;
4294
a257b5bb 4295 /* Append "<memaddr>". */
917317f4
JM
4296 memaddr = remote_address_masked (memaddr);
4297 p += hexnumstr (p, (ULONGEST) memaddr);
a257b5bb 4298
a76d924d
DJ
4299 if (use_length)
4300 {
4301 /* Append ",". */
4302 *p++ = ',';
802188a7 4303
a76d924d
DJ
4304 /* Append <len>. Retain the location/size of <len>. It may need to
4305 be adjusted once the packet body has been created. */
4306 plen = p;
4307 plenlen = hexnumstr (p, (ULONGEST) todo);
4308 p += plenlen;
4309 }
a257b5bb
AC
4310
4311 /* Append ":". */
917317f4
JM
4312 *p++ = ':';
4313 *p = '\0';
802188a7 4314
a257b5bb 4315 /* Append the packet body. */
a76d924d 4316 if (packet_format == 'X')
917317f4 4317 {
917317f4
JM
4318 /* Binary mode. Send target system values byte by byte, in
4319 increasing byte addresses. Only escape certain critical
4320 characters. */
6765f3e5
DJ
4321 payload_length = remote_escape_output (myaddr, todo, p, &nr_bytes,
4322 payload_size);
4323
4324 /* If not all TODO bytes fit, then we'll need another packet. Make
9b7194bc
DJ
4325 a second try to keep the end of the packet aligned. Don't do
4326 this if the packet is tiny. */
4327 if (nr_bytes < todo && nr_bytes > 2 * REMOTE_ALIGN_WRITES)
6765f3e5
DJ
4328 {
4329 int new_nr_bytes;
4330
4331 new_nr_bytes = (((memaddr + nr_bytes) & ~(REMOTE_ALIGN_WRITES - 1))
4332 - memaddr);
4333 if (new_nr_bytes != nr_bytes)
4334 payload_length = remote_escape_output (myaddr, new_nr_bytes,
4335 p, &nr_bytes,
4336 payload_size);
4337 }
4338
4339 p += payload_length;
a76d924d 4340 if (use_length && nr_bytes < todo)
c906108c 4341 {
802188a7 4342 /* Escape chars have filled up the buffer prematurely,
917317f4
JM
4343 and we have actually sent fewer bytes than planned.
4344 Fix-up the length field of the packet. Use the same
4345 number of characters as before. */
917317f4
JM
4346 plen += hexnumnstr (plen, (ULONGEST) nr_bytes, plenlen);
4347 *plen = ':'; /* overwrite \0 from hexnumnstr() */
c906108c 4348 }
a76d924d
DJ
4349 }
4350 else
4351 {
917317f4
JM
4352 /* Normal mode: Send target system values byte by byte, in
4353 increasing byte addresses. Each byte is encoded as a two hex
4354 value. */
2644f393 4355 nr_bytes = bin2hex (myaddr, p, todo);
aa6c0017 4356 p += 2 * nr_bytes;
c906108c 4357 }
802188a7 4358
2e9f7625 4359 putpkt_binary (rs->buf, (int) (p - rs->buf));
6d820c5c 4360 getpkt (&rs->buf, &rs->buf_size, 0);
802188a7 4361
2e9f7625 4362 if (rs->buf[0] == 'E')
917317f4
JM
4363 {
4364 /* There is no correspondance between what the remote protocol
4365 uses for errors and errno codes. We would like a cleaner way
4366 of representing errors (big enough to include errno codes,
4367 bfd_error codes, and others). But for now just return EIO. */
4368 errno = EIO;
4369 return 0;
4370 }
802188a7 4371
23860348
MS
4372 /* Return NR_BYTES, not TODO, in case escape chars caused us to send
4373 fewer bytes than we'd planned. */
917317f4 4374 return nr_bytes;
c906108c
SS
4375}
4376
a76d924d
DJ
4377/* Write memory data directly to the remote machine.
4378 This does not inform the data cache; the data cache uses this.
4379 MEMADDR is the address in the remote memory space.
4380 MYADDR is the address of the buffer in our space.
4381 LEN is the number of bytes.
4382
4383 Returns number of bytes transferred, or 0 (setting errno) for
4384 error. Only transfer a single packet. */
4385
4386int
4387remote_write_bytes (CORE_ADDR memaddr, const gdb_byte *myaddr, int len)
4388{
4389 char *packet_format = 0;
4390
4391 /* Check whether the target supports binary download. */
4392 check_binary_download (memaddr);
4393
4394 switch (remote_protocol_packets[PACKET_X].support)
4395 {
4396 case PACKET_ENABLE:
4397 packet_format = "X";
4398 break;
4399 case PACKET_DISABLE:
4400 packet_format = "M";
4401 break;
4402 case PACKET_SUPPORT_UNKNOWN:
4403 internal_error (__FILE__, __LINE__,
4404 _("remote_write_bytes: bad internal state"));
4405 default:
4406 internal_error (__FILE__, __LINE__, _("bad switch"));
4407 }
4408
4409 return remote_write_bytes_aux (packet_format,
4410 memaddr, myaddr, len, packet_format[0], 1);
4411}
4412
c906108c
SS
4413/* Read memory data directly from the remote machine.
4414 This does not use the data cache; the data cache uses this.
4415 MEMADDR is the address in the remote memory space.
4416 MYADDR is the address of the buffer in our space.
4417 LEN is the number of bytes.
4418
4419 Returns number of bytes transferred, or 0 for error. */
4420
917317f4
JM
4421/* NOTE: cagney/1999-10-18: This function (and its siblings in other
4422 remote targets) shouldn't attempt to read the entire buffer.
4423 Instead it should read a single packet worth of data and then
4424 return the byte size of that packet to the caller. The caller (its
4425 caller and its callers caller ;-) already contains code for
23860348 4426 handling partial reads. */
917317f4 4427
449092f6 4428int
cfd77fa1 4429remote_read_bytes (CORE_ADDR memaddr, gdb_byte *myaddr, int len)
c906108c 4430{
6d820c5c 4431 struct remote_state *rs = get_remote_state ();
23860348 4432 int max_buf_size; /* Max size of packet output buffer. */
c906108c
SS
4433 int origlen;
4434
b2182ed2
DJ
4435 if (len <= 0)
4436 return 0;
4437
11cf8741 4438 max_buf_size = get_memory_read_packet_size ();
6d820c5c
DJ
4439 /* The packet buffer will be large enough for the payload;
4440 get_memory_packet_size ensures this. */
c906108c
SS
4441
4442 origlen = len;
4443 while (len > 0)
4444 {
c906108c
SS
4445 char *p;
4446 int todo;
4447 int i;
4448
c5aa993b 4449 todo = min (len, max_buf_size / 2); /* num bytes that will fit */
c906108c
SS
4450
4451 /* construct "m"<memaddr>","<len>" */
2e9f7625 4452 /* sprintf (rs->buf, "m%lx,%x", (unsigned long) memaddr, todo); */
c906108c 4453 memaddr = remote_address_masked (memaddr);
2e9f7625 4454 p = rs->buf;
c906108c
SS
4455 *p++ = 'm';
4456 p += hexnumstr (p, (ULONGEST) memaddr);
4457 *p++ = ',';
4458 p += hexnumstr (p, (ULONGEST) todo);
4459 *p = '\0';
4460
2e9f7625 4461 putpkt (rs->buf);
6d820c5c 4462 getpkt (&rs->buf, &rs->buf_size, 0);
c906108c 4463
2e9f7625
DJ
4464 if (rs->buf[0] == 'E'
4465 && isxdigit (rs->buf[1]) && isxdigit (rs->buf[2])
4466 && rs->buf[3] == '\0')
c906108c 4467 {
23860348
MS
4468 /* There is no correspondance between what the remote
4469 protocol uses for errors and errno codes. We would like
4470 a cleaner way of representing errors (big enough to
4471 include errno codes, bfd_error codes, and others). But
4472 for now just return EIO. */
c906108c
SS
4473 errno = EIO;
4474 return 0;
4475 }
4476
c5aa993b
JM
4477 /* Reply describes memory byte by byte,
4478 each byte encoded as two hex characters. */
c906108c 4479
2e9f7625 4480 p = rs->buf;
30559e10 4481 if ((i = hex2bin (p, myaddr, todo)) < todo)
c906108c 4482 {
30559e10 4483 /* Reply is short. This means that we were able to read
23860348 4484 only part of what we wanted to. */
30559e10 4485 return i + (origlen - len);
c906108c
SS
4486 }
4487 myaddr += todo;
4488 memaddr += todo;
4489 len -= todo;
4490 }
4491 return origlen;
4492}
4493\f
4494/* Read or write LEN bytes from inferior memory at MEMADDR,
23860348
MS
4495 transferring to or from debugger address BUFFER. Write to inferior
4496 if SHOULD_WRITE is nonzero. Returns length of data written or
4497 read; 0 for error. TARGET is unused. */
392a587b 4498
c906108c 4499static int
961cb7b5 4500remote_xfer_memory (CORE_ADDR mem_addr, gdb_byte *buffer, int mem_len,
0a65a603 4501 int should_write, struct mem_attrib *attrib,
29e57380 4502 struct target_ops *target)
c906108c 4503{
4930751a
C
4504 int res;
4505
4930751a 4506 if (should_write)
b2182ed2 4507 res = remote_write_bytes (mem_addr, buffer, mem_len);
4930751a 4508 else
b2182ed2 4509 res = remote_read_bytes (mem_addr, buffer, mem_len);
4930751a
C
4510
4511 return res;
c906108c
SS
4512}
4513
a76d924d
DJ
4514/* Sends a packet with content determined by the printf format string
4515 FORMAT and the remaining arguments, then gets the reply. Returns
4516 whether the packet was a success, a failure, or unknown. */
4517
4518enum packet_result
4519remote_send_printf (const char *format, ...)
4520{
4521 struct remote_state *rs = get_remote_state ();
4522 int max_size = get_remote_packet_size ();
4523
4524 va_list ap;
4525 va_start (ap, format);
4526
4527 rs->buf[0] = '\0';
4528 if (vsnprintf (rs->buf, max_size, format, ap) >= max_size)
4529 internal_error (__FILE__, __LINE__, "Too long remote packet.");
4530
4531 if (putpkt (rs->buf) < 0)
4532 error (_("Communication problem with target."));
4533
4534 rs->buf[0] = '\0';
4535 getpkt (&rs->buf, &rs->buf_size, 0);
4536
4537 return packet_check_result (rs->buf);
4538}
4539
4540static void
4541restore_remote_timeout (void *p)
4542{
4543 int value = *(int *)p;
4544 remote_timeout = value;
4545}
4546
4547/* Flash writing can take quite some time. We'll set
4548 effectively infinite timeout for flash operations.
4549 In future, we'll need to decide on a better approach. */
4550static const int remote_flash_timeout = 1000;
4551
4552static void
4553remote_flash_erase (struct target_ops *ops,
4554 ULONGEST address, LONGEST length)
4555{
4556 int saved_remote_timeout = remote_timeout;
4557 enum packet_result ret;
4558
4559 struct cleanup *back_to = make_cleanup (restore_remote_timeout,
4560 &saved_remote_timeout);
4561 remote_timeout = remote_flash_timeout;
4562
4563 ret = remote_send_printf ("vFlashErase:%s,%s",
4564 paddr (address),
4565 phex (length, 4));
4566 switch (ret)
4567 {
4568 case PACKET_UNKNOWN:
4569 error (_("Remote target does not support flash erase"));
4570 case PACKET_ERROR:
4571 error (_("Error erasing flash with vFlashErase packet"));
4572 default:
4573 break;
4574 }
4575
4576 do_cleanups (back_to);
4577}
4578
4579static LONGEST
4580remote_flash_write (struct target_ops *ops,
4581 ULONGEST address, LONGEST length,
4582 const gdb_byte *data)
4583{
4584 int saved_remote_timeout = remote_timeout;
4585 int ret;
4586 struct cleanup *back_to = make_cleanup (restore_remote_timeout,
4587 &saved_remote_timeout);
4588
4589 remote_timeout = remote_flash_timeout;
4590 ret = remote_write_bytes_aux ("vFlashWrite:", address, data, length, 'X', 0);
4591 do_cleanups (back_to);
4592
4593 return ret;
4594}
4595
4596static void
4597remote_flash_done (struct target_ops *ops)
4598{
4599 int saved_remote_timeout = remote_timeout;
4600 int ret;
4601 struct cleanup *back_to = make_cleanup (restore_remote_timeout,
4602 &saved_remote_timeout);
4603
4604 remote_timeout = remote_flash_timeout;
4605 ret = remote_send_printf ("vFlashDone");
4606 do_cleanups (back_to);
4607
4608 switch (ret)
4609 {
4610 case PACKET_UNKNOWN:
4611 error (_("Remote target does not support vFlashDone"));
4612 case PACKET_ERROR:
4613 error (_("Error finishing flash operation"));
4614 default:
4615 break;
4616 }
4617}
4618
c906108c 4619static void
fba45db2 4620remote_files_info (struct target_ops *ignore)
c906108c
SS
4621{
4622 puts_filtered ("Debugging a target over a serial line.\n");
4623}
4624\f
4625/* Stuff for dealing with the packets which are part of this protocol.
4626 See comment at top of file for details. */
4627
0876f84a 4628/* Read a single character from the remote end. */
c906108c
SS
4629
4630static int
fba45db2 4631readchar (int timeout)
c906108c
SS
4632{
4633 int ch;
4634
2cd58942 4635 ch = serial_readchar (remote_desc, timeout);
c906108c 4636
2acceee2 4637 if (ch >= 0)
0876f84a 4638 return ch;
2acceee2
JM
4639
4640 switch ((enum serial_rc) ch)
c906108c
SS
4641 {
4642 case SERIAL_EOF:
2acceee2 4643 target_mourn_inferior ();
8a3fe4f8 4644 error (_("Remote connection closed"));
2acceee2 4645 /* no return */
c906108c 4646 case SERIAL_ERROR:
e2e0b3e5 4647 perror_with_name (_("Remote communication error"));
2acceee2 4648 /* no return */
c906108c 4649 case SERIAL_TIMEOUT:
2acceee2 4650 break;
c906108c 4651 }
2acceee2 4652 return ch;
c906108c
SS
4653}
4654
6d820c5c
DJ
4655/* Send the command in *BUF to the remote machine, and read the reply
4656 into *BUF. Report an error if we get an error reply. Resize
4657 *BUF using xrealloc if necessary to hold the result, and update
4658 *SIZEOF_BUF. */
c906108c
SS
4659
4660static void
6d820c5c
DJ
4661remote_send (char **buf,
4662 long *sizeof_buf)
c906108c 4663{
6d820c5c 4664 putpkt (*buf);
c2d11a7d 4665 getpkt (buf, sizeof_buf, 0);
c906108c 4666
6d820c5c
DJ
4667 if ((*buf)[0] == 'E')
4668 error (_("Remote failure reply: %s"), *buf);
c906108c
SS
4669}
4670
4671/* Display a null-terminated packet on stdout, for debugging, using C
4672 string notation. */
4673
4674static void
fba45db2 4675print_packet (char *buf)
c906108c
SS
4676{
4677 puts_filtered ("\"");
43e526b9 4678 fputstr_filtered (buf, '"', gdb_stdout);
c906108c
SS
4679 puts_filtered ("\"");
4680}
4681
4682int
fba45db2 4683putpkt (char *buf)
c906108c
SS
4684{
4685 return putpkt_binary (buf, strlen (buf));
4686}
4687
4688/* Send a packet to the remote machine, with error checking. The data
23860348 4689 of the packet is in BUF. The string in BUF can be at most
ea9c271d 4690 get_remote_packet_size () - 5 to account for the $, # and checksum,
23860348
MS
4691 and for a possible /0 if we are debugging (remote_debug) and want
4692 to print the sent packet as a string. */
c906108c
SS
4693
4694static int
fba45db2 4695putpkt_binary (char *buf, int cnt)
c906108c
SS
4696{
4697 int i;
4698 unsigned char csum = 0;
11cf8741 4699 char *buf2 = alloca (cnt + 6);
085dd6e6 4700
c906108c
SS
4701 int ch;
4702 int tcount = 0;
4703 char *p;
4704
4705 /* Copy the packet into buffer BUF2, encapsulating it
4706 and giving it a checksum. */
4707
c906108c
SS
4708 p = buf2;
4709 *p++ = '$';
4710
4711 for (i = 0; i < cnt; i++)
4712 {
4713 csum += buf[i];
4714 *p++ = buf[i];
4715 }
4716 *p++ = '#';
4717 *p++ = tohex ((csum >> 4) & 0xf);
4718 *p++ = tohex (csum & 0xf);
4719
4720 /* Send it over and over until we get a positive ack. */
4721
4722 while (1)
4723 {
4724 int started_error_output = 0;
4725
4726 if (remote_debug)
4727 {
4728 *p = '\0';
43e526b9
JM
4729 fprintf_unfiltered (gdb_stdlog, "Sending packet: ");
4730 fputstrn_unfiltered (buf2, p - buf2, 0, gdb_stdlog);
d4f3574e 4731 fprintf_unfiltered (gdb_stdlog, "...");
0f71a2f6 4732 gdb_flush (gdb_stdlog);
c906108c 4733 }
2cd58942 4734 if (serial_write (remote_desc, buf2, p - buf2))
e2e0b3e5 4735 perror_with_name (_("putpkt: write failed"));
c906108c 4736
23860348 4737 /* Read until either a timeout occurs (-2) or '+' is read. */
c906108c
SS
4738 while (1)
4739 {
4740 ch = readchar (remote_timeout);
4741
c5aa993b 4742 if (remote_debug)
c906108c
SS
4743 {
4744 switch (ch)
4745 {
4746 case '+':
1216fa2c 4747 case '-':
c906108c
SS
4748 case SERIAL_TIMEOUT:
4749 case '$':
4750 if (started_error_output)
4751 {
4752 putchar_unfiltered ('\n');
4753 started_error_output = 0;
4754 }
4755 }
4756 }
4757
4758 switch (ch)
4759 {
4760 case '+':
4761 if (remote_debug)
0f71a2f6 4762 fprintf_unfiltered (gdb_stdlog, "Ack\n");
c906108c 4763 return 1;
1216fa2c
AC
4764 case '-':
4765 if (remote_debug)
4766 fprintf_unfiltered (gdb_stdlog, "Nak\n");
c906108c 4767 case SERIAL_TIMEOUT:
c5aa993b 4768 tcount++;
c906108c
SS
4769 if (tcount > 3)
4770 return 0;
23860348 4771 break; /* Retransmit buffer. */
c906108c
SS
4772 case '$':
4773 {
40e3f985 4774 if (remote_debug)
2bc416ba 4775 fprintf_unfiltered (gdb_stdlog,
23860348 4776 "Packet instead of Ack, ignoring it\n");
d6f7abdf
AC
4777 /* It's probably an old response sent because an ACK
4778 was lost. Gobble up the packet and ack it so it
4779 doesn't get retransmitted when we resend this
4780 packet. */
6d820c5c 4781 skip_frame ();
d6f7abdf 4782 serial_write (remote_desc, "+", 1);
23860348 4783 continue; /* Now, go look for +. */
c906108c
SS
4784 }
4785 default:
4786 if (remote_debug)
4787 {
4788 if (!started_error_output)
4789 {
4790 started_error_output = 1;
0f71a2f6 4791 fprintf_unfiltered (gdb_stdlog, "putpkt: Junk: ");
c906108c 4792 }
0f71a2f6 4793 fputc_unfiltered (ch & 0177, gdb_stdlog);
c906108c
SS
4794 }
4795 continue;
4796 }
23860348 4797 break; /* Here to retransmit. */
c906108c
SS
4798 }
4799
4800#if 0
4801 /* This is wrong. If doing a long backtrace, the user should be
c5aa993b
JM
4802 able to get out next time we call QUIT, without anything as
4803 violent as interrupt_query. If we want to provide a way out of
4804 here without getting to the next QUIT, it should be based on
4805 hitting ^C twice as in remote_wait. */
c906108c
SS
4806 if (quit_flag)
4807 {
4808 quit_flag = 0;
4809 interrupt_query ();
4810 }
4811#endif
4812 }
4813}
4814
6d820c5c
DJ
4815/* Come here after finding the start of a frame when we expected an
4816 ack. Do our best to discard the rest of this packet. */
4817
4818static void
4819skip_frame (void)
4820{
4821 int c;
4822
4823 while (1)
4824 {
4825 c = readchar (remote_timeout);
4826 switch (c)
4827 {
4828 case SERIAL_TIMEOUT:
4829 /* Nothing we can do. */
4830 return;
4831 case '#':
4832 /* Discard the two bytes of checksum and stop. */
4833 c = readchar (remote_timeout);
4834 if (c >= 0)
4835 c = readchar (remote_timeout);
4836
4837 return;
4838 case '*': /* Run length encoding. */
4839 /* Discard the repeat count. */
4840 c = readchar (remote_timeout);
4841 if (c < 0)
4842 return;
4843 break;
4844 default:
4845 /* A regular character. */
4846 break;
4847 }
4848 }
4849}
4850
c906108c 4851/* Come here after finding the start of the frame. Collect the rest
6d820c5c
DJ
4852 into *BUF, verifying the checksum, length, and handling run-length
4853 compression. NUL terminate the buffer. If there is not enough room,
4854 expand *BUF using xrealloc.
c906108c 4855
c2d11a7d
JM
4856 Returns -1 on error, number of characters in buffer (ignoring the
4857 trailing NULL) on success. (could be extended to return one of the
23860348 4858 SERIAL status indications). */
c2d11a7d
JM
4859
4860static long
6d820c5c
DJ
4861read_frame (char **buf_p,
4862 long *sizeof_buf)
c906108c
SS
4863{
4864 unsigned char csum;
c2d11a7d 4865 long bc;
c906108c 4866 int c;
6d820c5c 4867 char *buf = *buf_p;
c906108c
SS
4868
4869 csum = 0;
c2d11a7d 4870 bc = 0;
c906108c
SS
4871
4872 while (1)
4873 {
4874 c = readchar (remote_timeout);
c906108c
SS
4875 switch (c)
4876 {
4877 case SERIAL_TIMEOUT:
4878 if (remote_debug)
0f71a2f6 4879 fputs_filtered ("Timeout in mid-packet, retrying\n", gdb_stdlog);
c2d11a7d 4880 return -1;
c906108c
SS
4881 case '$':
4882 if (remote_debug)
0f71a2f6
JM
4883 fputs_filtered ("Saw new packet start in middle of old one\n",
4884 gdb_stdlog);
23860348 4885 return -1; /* Start a new packet, count retries. */
c906108c
SS
4886 case '#':
4887 {
4888 unsigned char pktcsum;
e1b09194
AC
4889 int check_0 = 0;
4890 int check_1 = 0;
c906108c 4891
c2d11a7d 4892 buf[bc] = '\0';
c906108c 4893
e1b09194
AC
4894 check_0 = readchar (remote_timeout);
4895 if (check_0 >= 0)
4896 check_1 = readchar (remote_timeout);
802188a7 4897
e1b09194
AC
4898 if (check_0 == SERIAL_TIMEOUT || check_1 == SERIAL_TIMEOUT)
4899 {
4900 if (remote_debug)
2bc416ba 4901 fputs_filtered ("Timeout in checksum, retrying\n",
23860348 4902 gdb_stdlog);
e1b09194
AC
4903 return -1;
4904 }
4905 else if (check_0 < 0 || check_1 < 0)
40e3f985
FN
4906 {
4907 if (remote_debug)
2bc416ba 4908 fputs_filtered ("Communication error in checksum\n",
23860348 4909 gdb_stdlog);
40e3f985
FN
4910 return -1;
4911 }
c906108c 4912
e1b09194 4913 pktcsum = (fromhex (check_0) << 4) | fromhex (check_1);
c906108c 4914 if (csum == pktcsum)
c2d11a7d 4915 return bc;
c906108c 4916
c5aa993b 4917 if (remote_debug)
c906108c 4918 {
0f71a2f6 4919 fprintf_filtered (gdb_stdlog,
c5aa993b 4920 "Bad checksum, sentsum=0x%x, csum=0x%x, buf=",
0f71a2f6 4921 pktcsum, csum);
0876f84a 4922 fputstrn_filtered (buf, bc, 0, gdb_stdlog);
0f71a2f6 4923 fputs_filtered ("\n", gdb_stdlog);
c906108c 4924 }
c2d11a7d 4925 /* Number of characters in buffer ignoring trailing
23860348 4926 NULL. */
c2d11a7d 4927 return -1;
c906108c 4928 }
23860348 4929 case '*': /* Run length encoding. */
c2c6d25f
JM
4930 {
4931 int repeat;
4932 csum += c;
c906108c 4933
b4501125
AC
4934 c = readchar (remote_timeout);
4935 csum += c;
23860348 4936 repeat = c - ' ' + 3; /* Compute repeat count. */
c906108c 4937
23860348 4938 /* The character before ``*'' is repeated. */
c2d11a7d 4939
6d820c5c 4940 if (repeat > 0 && repeat <= 255 && bc > 0)
c2c6d25f 4941 {
6d820c5c
DJ
4942 if (bc + repeat - 1 >= *sizeof_buf - 1)
4943 {
4944 /* Make some more room in the buffer. */
4945 *sizeof_buf += repeat;
4946 *buf_p = xrealloc (*buf_p, *sizeof_buf);
4947 buf = *buf_p;
4948 }
4949
c2d11a7d
JM
4950 memset (&buf[bc], buf[bc - 1], repeat);
4951 bc += repeat;
c2c6d25f
JM
4952 continue;
4953 }
4954
c2d11a7d 4955 buf[bc] = '\0';
6d820c5c 4956 printf_filtered (_("Invalid run length encoding: %s\n"), buf);
c2d11a7d 4957 return -1;
c2c6d25f 4958 }
c906108c 4959 default:
6d820c5c 4960 if (bc >= *sizeof_buf - 1)
c906108c 4961 {
6d820c5c
DJ
4962 /* Make some more room in the buffer. */
4963 *sizeof_buf *= 2;
4964 *buf_p = xrealloc (*buf_p, *sizeof_buf);
4965 buf = *buf_p;
c906108c
SS
4966 }
4967
6d820c5c
DJ
4968 buf[bc++] = c;
4969 csum += c;
4970 continue;
c906108c
SS
4971 }
4972 }
4973}
4974
4975/* Read a packet from the remote machine, with error checking, and
6d820c5c
DJ
4976 store it in *BUF. Resize *BUF using xrealloc if necessary to hold
4977 the result, and update *SIZEOF_BUF. If FOREVER, wait forever
4978 rather than timing out; this is used (in synchronous mode) to wait
4979 for a target that is is executing user code to stop. */
d9fcf2fb
JM
4980/* FIXME: ezannoni 2000-02-01 this wrapper is necessary so that we
4981 don't have to change all the calls to getpkt to deal with the
4982 return value, because at the moment I don't know what the right
23860348 4983 thing to do it for those. */
c906108c 4984void
6d820c5c
DJ
4985getpkt (char **buf,
4986 long *sizeof_buf,
c2d11a7d 4987 int forever)
d9fcf2fb
JM
4988{
4989 int timed_out;
4990
4991 timed_out = getpkt_sane (buf, sizeof_buf, forever);
4992}
4993
4994
4995/* Read a packet from the remote machine, with error checking, and
6d820c5c
DJ
4996 store it in *BUF. Resize *BUF using xrealloc if necessary to hold
4997 the result, and update *SIZEOF_BUF. If FOREVER, wait forever
4998 rather than timing out; this is used (in synchronous mode) to wait
4999 for a target that is is executing user code to stop. If FOREVER ==
5000 0, this function is allowed to time out gracefully and return an
0876f84a
DJ
5001 indication of this to the caller. Otherwise return the number
5002 of bytes read. */
3172dc30 5003static int
6d820c5c 5004getpkt_sane (char **buf, long *sizeof_buf, int forever)
c906108c
SS
5005{
5006 int c;
5007 int tries;
5008 int timeout;
5009 int val;
5010
6d820c5c 5011 strcpy (*buf, "timeout");
c906108c
SS
5012
5013 if (forever)
5014 {
c906108c 5015 timeout = watchdog > 0 ? watchdog : -1;
c906108c
SS
5016 }
5017
5018 else
5019 timeout = remote_timeout;
5020
5021#define MAX_TRIES 3
5022
5023 for (tries = 1; tries <= MAX_TRIES; tries++)
5024 {
5025 /* This can loop forever if the remote side sends us characters
23860348
MS
5026 continuously, but if it pauses, we'll get a zero from
5027 readchar because of timeout. Then we'll count that as a
5028 retry. */
c906108c 5029
23860348
MS
5030 /* Note that we will only wait forever prior to the start of a
5031 packet. After that, we expect characters to arrive at a
5032 brisk pace. They should show up within remote_timeout
5033 intervals. */
c906108c
SS
5034
5035 do
5036 {
5037 c = readchar (timeout);
5038
5039 if (c == SERIAL_TIMEOUT)
5040 {
23860348 5041 if (forever) /* Watchdog went off? Kill the target. */
c906108c 5042 {
2acceee2 5043 QUIT;
c906108c 5044 target_mourn_inferior ();
489eaeba 5045 error (_("Watchdog timeout has expired. Target detached."));
c906108c 5046 }
c906108c 5047 if (remote_debug)
0f71a2f6 5048 fputs_filtered ("Timed out.\n", gdb_stdlog);
c906108c
SS
5049 goto retry;
5050 }
5051 }
5052 while (c != '$');
5053
5054 /* We've found the start of a packet, now collect the data. */
5055
c2d11a7d 5056 val = read_frame (buf, sizeof_buf);
c906108c 5057
c2d11a7d 5058 if (val >= 0)
c906108c
SS
5059 {
5060 if (remote_debug)
43e526b9
JM
5061 {
5062 fprintf_unfiltered (gdb_stdlog, "Packet received: ");
0876f84a 5063 fputstrn_unfiltered (*buf, val, 0, gdb_stdlog);
43e526b9
JM
5064 fprintf_unfiltered (gdb_stdlog, "\n");
5065 }
2cd58942 5066 serial_write (remote_desc, "+", 1);
0876f84a 5067 return val;
c906108c
SS
5068 }
5069
5070 /* Try the whole thing again. */
5071 retry:
2cd58942 5072 serial_write (remote_desc, "-", 1);
c906108c
SS
5073 }
5074
2bc416ba 5075 /* We have tried hard enough, and just can't receive the packet.
23860348 5076 Give up. */
c906108c 5077
a3f17187 5078 printf_unfiltered (_("Ignoring packet error, continuing...\n"));
2cd58942 5079 serial_write (remote_desc, "+", 1);
0876f84a 5080 return -1;
c906108c
SS
5081}
5082\f
5083static void
fba45db2 5084remote_kill (void)
c906108c
SS
5085{
5086 /* For some mysterious reason, wait_for_inferior calls kill instead of
5087 mourn after it gets TARGET_WAITKIND_SIGNALLED. Work around it. */
5088 if (kill_kludge)
5089 {
5090 kill_kludge = 0;
5091 target_mourn_inferior ();
5092 return;
5093 }
5094
5095 /* Use catch_errors so the user can quit from gdb even when we aren't on
5096 speaking terms with the remote system. */
c5aa993b 5097 catch_errors ((catch_errors_ftype *) putpkt, "k", "", RETURN_MASK_ERROR);
c906108c
SS
5098
5099 /* Don't wait for it to die. I'm not really sure it matters whether
5100 we do or not. For the existing stubs, kill is a noop. */
5101 target_mourn_inferior ();
5102}
5103
23860348 5104/* Async version of remote_kill. */
43ff13b4 5105static void
fba45db2 5106remote_async_kill (void)
43ff13b4 5107{
23860348 5108 /* Unregister the file descriptor from the event loop. */
ed9a39eb 5109 if (target_is_async_p ())
2cd58942 5110 serial_async (remote_desc, NULL, 0);
43ff13b4
JM
5111
5112 /* For some mysterious reason, wait_for_inferior calls kill instead of
5113 mourn after it gets TARGET_WAITKIND_SIGNALLED. Work around it. */
5114 if (kill_kludge)
5115 {
5116 kill_kludge = 0;
5117 target_mourn_inferior ();
5118 return;
5119 }
5120
23860348
MS
5121 /* Use catch_errors so the user can quit from gdb even when we
5122 aren't on speaking terms with the remote system. */
c5aa993b 5123 catch_errors ((catch_errors_ftype *) putpkt, "k", "", RETURN_MASK_ERROR);
43ff13b4
JM
5124
5125 /* Don't wait for it to die. I'm not really sure it matters whether
5126 we do or not. For the existing stubs, kill is a noop. */
5127 target_mourn_inferior ();
5128}
5129
c906108c 5130static void
fba45db2 5131remote_mourn (void)
c906108c
SS
5132{
5133 remote_mourn_1 (&remote_ops);
5134}
5135
53a5351d 5136static void
fba45db2 5137remote_async_mourn (void)
53a5351d
JM
5138{
5139 remote_mourn_1 (&remote_async_ops);
5140}
5141
c906108c 5142static void
fba45db2 5143extended_remote_mourn (void)
c906108c
SS
5144{
5145 /* We do _not_ want to mourn the target like this; this will
5146 remove the extended remote target from the target stack,
802188a7 5147 and the next time the user says "run" it'll fail.
c906108c
SS
5148
5149 FIXME: What is the right thing to do here? */
5150#if 0
5151 remote_mourn_1 (&extended_remote_ops);
5152#endif
5153}
5154
5155/* Worker function for remote_mourn. */
5156static void
fba45db2 5157remote_mourn_1 (struct target_ops *target)
c906108c
SS
5158{
5159 unpush_target (target);
5160 generic_mourn_inferior ();
5161}
5162
5163/* In the extended protocol we want to be able to do things like
5164 "run" and have them basically work as expected. So we need
802188a7 5165 a special create_inferior function.
c906108c
SS
5166
5167 FIXME: One day add support for changing the exec file
5168 we're debugging, arguments and an environment. */
5169
5170static void
23860348
MS
5171extended_remote_create_inferior (char *exec_file, char *args,
5172 char **env, int from_tty)
c906108c
SS
5173{
5174 /* Rip out the breakpoints; we'll reinsert them after restarting
5175 the remote server. */
5176 remove_breakpoints ();
5177
5178 /* Now restart the remote server. */
5179 extended_remote_restart ();
5180
424163ea
DJ
5181 /* NOTE: We don't need to recheck for a target description here; but
5182 if we gain the ability to switch the remote executable we may
5183 need to, if for instance we are running a process which requested
5184 different emulated hardware from the operating system. A
5185 concrete example of this is ARM GNU/Linux, where some binaries
5186 will have a legacy FPA coprocessor emulated and others may have
5187 access to a hardware VFP unit. */
5188
c906108c
SS
5189 /* Now put the breakpoints back in. This way we're safe if the
5190 restart function works via a unix fork on the remote side. */
5191 insert_breakpoints ();
5192
5193 /* Clean up from the last time we were running. */
5194 clear_proceed_status ();
c906108c
SS
5195}
5196
23860348 5197/* Async version of extended_remote_create_inferior. */
43ff13b4 5198static void
23860348
MS
5199extended_remote_async_create_inferior (char *exec_file, char *args,
5200 char **env, int from_tty)
43ff13b4
JM
5201{
5202 /* Rip out the breakpoints; we'll reinsert them after restarting
5203 the remote server. */
5204 remove_breakpoints ();
5205
5206 /* If running asynchronously, register the target file descriptor
23860348 5207 with the event loop. */
362646f5 5208 if (target_can_async_p ())
2acceee2 5209 target_async (inferior_event_handler, 0);
43ff13b4
JM
5210
5211 /* Now restart the remote server. */
5212 extended_remote_restart ();
5213
424163ea
DJ
5214 /* NOTE: We don't need to recheck for a target description here; but
5215 if we gain the ability to switch the remote executable we may
5216 need to, if for instance we are running a process which requested
5217 different emulated hardware from the operating system. A
5218 concrete example of this is ARM GNU/Linux, where some binaries
5219 will have a legacy FPA coprocessor emulated and others may have
5220 access to a hardware VFP unit. */
5221
43ff13b4
JM
5222 /* Now put the breakpoints back in. This way we're safe if the
5223 restart function works via a unix fork on the remote side. */
5224 insert_breakpoints ();
5225
5226 /* Clean up from the last time we were running. */
5227 clear_proceed_status ();
43ff13b4 5228}
c906108c 5229\f
c5aa993b 5230
8181d85f
DJ
5231/* Insert a breakpoint. On targets that have software breakpoint
5232 support, we ask the remote target to do the work; on targets
5233 which don't, we insert a traditional memory breakpoint. */
c906108c
SS
5234
5235static int
8181d85f 5236remote_insert_breakpoint (struct bp_target_info *bp_tgt)
c906108c 5237{
8181d85f 5238 CORE_ADDR addr = bp_tgt->placed_address;
d01949b6 5239 struct remote_state *rs = get_remote_state ();
96baa820 5240
d471ea57
AC
5241 /* Try the "Z" s/w breakpoint packet if it is not already disabled.
5242 If it succeeds, then set the support to PACKET_ENABLE. If it
5243 fails, and the user has explicitly requested the Z support then
23860348 5244 report an error, otherwise, mark it disabled and go on. */
802188a7 5245
444abaca 5246 if (remote_protocol_packets[PACKET_Z0].support != PACKET_DISABLE)
96baa820 5247 {
6d820c5c 5248 char *p = rs->buf;
802188a7 5249
96baa820
JM
5250 *(p++) = 'Z';
5251 *(p++) = '0';
5252 *(p++) = ',';
3b3b875c
UW
5253 gdbarch_breakpoint_from_pc
5254 (current_gdbarch, &bp_tgt->placed_address, &bp_tgt->placed_size);
8181d85f
DJ
5255 addr = (ULONGEST) remote_address_masked (bp_tgt->placed_address);
5256 p += hexnumstr (p, addr);
5257 sprintf (p, ",%d", bp_tgt->placed_size);
802188a7 5258
6d820c5c
DJ
5259 putpkt (rs->buf);
5260 getpkt (&rs->buf, &rs->buf_size, 0);
96baa820 5261
6d820c5c 5262 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0]))
96baa820 5263 {
d471ea57
AC
5264 case PACKET_ERROR:
5265 return -1;
5266 case PACKET_OK:
5267 return 0;
5268 case PACKET_UNKNOWN:
5269 break;
96baa820
JM
5270 }
5271 }
c906108c 5272
8181d85f 5273 return memory_insert_breakpoint (bp_tgt);
c906108c
SS
5274}
5275
5276static int
8181d85f 5277remote_remove_breakpoint (struct bp_target_info *bp_tgt)
c906108c 5278{
8181d85f 5279 CORE_ADDR addr = bp_tgt->placed_address;
d01949b6 5280 struct remote_state *rs = get_remote_state ();
96baa820
JM
5281 int bp_size;
5282
444abaca 5283 if (remote_protocol_packets[PACKET_Z0].support != PACKET_DISABLE)
96baa820 5284 {
6d820c5c 5285 char *p = rs->buf;
802188a7 5286
96baa820
JM
5287 *(p++) = 'z';
5288 *(p++) = '0';
5289 *(p++) = ',';
5290
8181d85f
DJ
5291 addr = (ULONGEST) remote_address_masked (bp_tgt->placed_address);
5292 p += hexnumstr (p, addr);
5293 sprintf (p, ",%d", bp_tgt->placed_size);
802188a7 5294
6d820c5c
DJ
5295 putpkt (rs->buf);
5296 getpkt (&rs->buf, &rs->buf_size, 0);
96baa820 5297
6d820c5c 5298 return (rs->buf[0] == 'E');
96baa820
JM
5299 }
5300
8181d85f 5301 return memory_remove_breakpoint (bp_tgt);
c906108c
SS
5302}
5303
d471ea57
AC
5304static int
5305watchpoint_to_Z_packet (int type)
5306{
5307 switch (type)
5308 {
5309 case hw_write:
bb858e6a 5310 return Z_PACKET_WRITE_WP;
d471ea57
AC
5311 break;
5312 case hw_read:
bb858e6a 5313 return Z_PACKET_READ_WP;
d471ea57
AC
5314 break;
5315 case hw_access:
bb858e6a 5316 return Z_PACKET_ACCESS_WP;
d471ea57
AC
5317 break;
5318 default:
8e65ff28 5319 internal_error (__FILE__, __LINE__,
e2e0b3e5 5320 _("hw_bp_to_z: bad watchpoint type %d"), type);
d471ea57
AC
5321 }
5322}
5323
3c3bea1c 5324static int
fba45db2 5325remote_insert_watchpoint (CORE_ADDR addr, int len, int type)
96baa820 5326{
d01949b6 5327 struct remote_state *rs = get_remote_state ();
e514a9d6 5328 char *p;
d471ea57 5329 enum Z_packet_type packet = watchpoint_to_Z_packet (type);
96baa820 5330
444abaca 5331 if (remote_protocol_packets[PACKET_Z0 + packet].support == PACKET_DISABLE)
5cffb350 5332 return -1;
802188a7 5333
6d820c5c
DJ
5334 sprintf (rs->buf, "Z%x,", packet);
5335 p = strchr (rs->buf, '\0');
96baa820
JM
5336 addr = remote_address_masked (addr);
5337 p += hexnumstr (p, (ULONGEST) addr);
d4f3574e 5338 sprintf (p, ",%x", len);
802188a7 5339
6d820c5c
DJ
5340 putpkt (rs->buf);
5341 getpkt (&rs->buf, &rs->buf_size, 0);
96baa820 5342
6d820c5c 5343 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0 + packet]))
d471ea57
AC
5344 {
5345 case PACKET_ERROR:
5346 case PACKET_UNKNOWN:
5347 return -1;
5348 case PACKET_OK:
5349 return 0;
5350 }
8e65ff28 5351 internal_error (__FILE__, __LINE__,
e2e0b3e5 5352 _("remote_insert_watchpoint: reached end of function"));
96baa820
JM
5353}
5354
d471ea57 5355
3c3bea1c 5356static int
fba45db2 5357remote_remove_watchpoint (CORE_ADDR addr, int len, int type)
96baa820 5358{
d01949b6 5359 struct remote_state *rs = get_remote_state ();
e514a9d6 5360 char *p;
d471ea57
AC
5361 enum Z_packet_type packet = watchpoint_to_Z_packet (type);
5362
444abaca 5363 if (remote_protocol_packets[PACKET_Z0 + packet].support == PACKET_DISABLE)
5cffb350 5364 return -1;
802188a7 5365
6d820c5c
DJ
5366 sprintf (rs->buf, "z%x,", packet);
5367 p = strchr (rs->buf, '\0');
96baa820
JM
5368 addr = remote_address_masked (addr);
5369 p += hexnumstr (p, (ULONGEST) addr);
d4f3574e 5370 sprintf (p, ",%x", len);
6d820c5c
DJ
5371 putpkt (rs->buf);
5372 getpkt (&rs->buf, &rs->buf_size, 0);
96baa820 5373
6d820c5c 5374 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0 + packet]))
d471ea57
AC
5375 {
5376 case PACKET_ERROR:
5377 case PACKET_UNKNOWN:
5378 return -1;
5379 case PACKET_OK:
5380 return 0;
5381 }
8e65ff28 5382 internal_error (__FILE__, __LINE__,
e2e0b3e5 5383 _("remote_remove_watchpoint: reached end of function"));
96baa820
JM
5384}
5385
3c3bea1c 5386
501eef12
AC
5387int remote_hw_watchpoint_limit = -1;
5388int remote_hw_breakpoint_limit = -1;
d471ea57 5389
b9362cc7 5390static int
3c3bea1c 5391remote_check_watch_resources (int type, int cnt, int ot)
96baa820 5392{
3c3bea1c
GS
5393 if (type == bp_hardware_breakpoint)
5394 {
5395 if (remote_hw_breakpoint_limit == 0)
5396 return 0;
501eef12
AC
5397 else if (remote_hw_breakpoint_limit < 0)
5398 return 1;
3c3bea1c
GS
5399 else if (cnt <= remote_hw_breakpoint_limit)
5400 return 1;
5401 }
5402 else
5403 {
5404 if (remote_hw_watchpoint_limit == 0)
5405 return 0;
501eef12
AC
5406 else if (remote_hw_watchpoint_limit < 0)
5407 return 1;
3c3bea1c
GS
5408 else if (ot)
5409 return -1;
5410 else if (cnt <= remote_hw_watchpoint_limit)
5411 return 1;
5412 }
5413 return -1;
5414}
5415
b9362cc7 5416static int
3c3bea1c
GS
5417remote_stopped_by_watchpoint (void)
5418{
5419 return remote_stopped_by_watchpoint_p;
5420}
5421
4aa7a7f5
JJ
5422static int
5423remote_stopped_data_address (struct target_ops *target, CORE_ADDR *addr_p)
3c3bea1c 5424{
4aa7a7f5 5425 int rc = 0;
d983da9c 5426 if (remote_stopped_by_watchpoint ())
4aa7a7f5
JJ
5427 {
5428 *addr_p = remote_watch_data_address;
5429 rc = 1;
5430 }
5431
5432 return rc;
3c3bea1c
GS
5433}
5434
5435
5436static int
8181d85f 5437remote_insert_hw_breakpoint (struct bp_target_info *bp_tgt)
3c3bea1c 5438{
8181d85f 5439 CORE_ADDR addr;
d01949b6 5440 struct remote_state *rs = get_remote_state ();
6d820c5c 5441 char *p = rs->buf;
802188a7 5442
c8189ed1 5443 /* The length field should be set to the size of a breakpoint
8181d85f 5444 instruction, even though we aren't inserting one ourselves. */
c8189ed1 5445
3b3b875c
UW
5446 gdbarch_breakpoint_from_pc
5447 (current_gdbarch, &bp_tgt->placed_address, &bp_tgt->placed_size);
3c3bea1c 5448
444abaca 5449 if (remote_protocol_packets[PACKET_Z1].support == PACKET_DISABLE)
5cffb350 5450 return -1;
2bc416ba 5451
96baa820
JM
5452 *(p++) = 'Z';
5453 *(p++) = '1';
5454 *(p++) = ',';
802188a7 5455
8181d85f 5456 addr = remote_address_masked (bp_tgt->placed_address);
96baa820 5457 p += hexnumstr (p, (ULONGEST) addr);
8181d85f 5458 sprintf (p, ",%x", bp_tgt->placed_size);
96baa820 5459
6d820c5c
DJ
5460 putpkt (rs->buf);
5461 getpkt (&rs->buf, &rs->buf_size, 0);
96baa820 5462
6d820c5c 5463 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z1]))
d471ea57
AC
5464 {
5465 case PACKET_ERROR:
5466 case PACKET_UNKNOWN:
5467 return -1;
5468 case PACKET_OK:
5469 return 0;
5470 }
8e65ff28 5471 internal_error (__FILE__, __LINE__,
e2e0b3e5 5472 _("remote_insert_hw_breakpoint: reached end of function"));
96baa820
JM
5473}
5474
d471ea57 5475
802188a7 5476static int
8181d85f 5477remote_remove_hw_breakpoint (struct bp_target_info *bp_tgt)
96baa820 5478{
8181d85f 5479 CORE_ADDR addr;
d01949b6 5480 struct remote_state *rs = get_remote_state ();
6d820c5c 5481 char *p = rs->buf;
c8189ed1 5482
444abaca 5483 if (remote_protocol_packets[PACKET_Z1].support == PACKET_DISABLE)
5cffb350 5484 return -1;
802188a7 5485
96baa820
JM
5486 *(p++) = 'z';
5487 *(p++) = '1';
5488 *(p++) = ',';
802188a7 5489
8181d85f 5490 addr = remote_address_masked (bp_tgt->placed_address);
96baa820 5491 p += hexnumstr (p, (ULONGEST) addr);
8181d85f 5492 sprintf (p, ",%x", bp_tgt->placed_size);
96baa820 5493
6d820c5c
DJ
5494 putpkt (rs->buf);
5495 getpkt (&rs->buf, &rs->buf_size, 0);
802188a7 5496
6d820c5c 5497 switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z1]))
d471ea57
AC
5498 {
5499 case PACKET_ERROR:
5500 case PACKET_UNKNOWN:
5501 return -1;
5502 case PACKET_OK:
5503 return 0;
5504 }
8e65ff28 5505 internal_error (__FILE__, __LINE__,
e2e0b3e5 5506 _("remote_remove_hw_breakpoint: reached end of function"));
96baa820 5507}
96baa820 5508
c906108c
SS
5509/* Some targets are only capable of doing downloads, and afterwards
5510 they switch to the remote serial protocol. This function provides
5511 a clean way to get from the download target to the remote target.
5512 It's basically just a wrapper so that we don't have to expose any
5513 of the internal workings of remote.c.
5514
5515 Prior to calling this routine, you should shutdown the current
5516 target code, else you will get the "A program is being debugged
5517 already..." message. Usually a call to pop_target() suffices. */
5518
5519void
fba45db2 5520push_remote_target (char *name, int from_tty)
c906108c 5521{
a3f17187 5522 printf_filtered (_("Switching to remote protocol\n"));
c906108c
SS
5523 remote_open (name, from_tty);
5524}
5525
23860348 5526/* Table used by the crc32 function to calcuate the checksum. */
c906108c 5527
c5aa993b
JM
5528static unsigned long crc32_table[256] =
5529{0, 0};
c906108c
SS
5530
5531static unsigned long
fba45db2 5532crc32 (unsigned char *buf, int len, unsigned int crc)
c906108c 5533{
c5aa993b 5534 if (!crc32_table[1])
c906108c 5535 {
23860348 5536 /* Initialize the CRC table and the decoding table. */
c906108c
SS
5537 int i, j;
5538 unsigned int c;
5539
5540 for (i = 0; i < 256; i++)
c5aa993b
JM
5541 {
5542 for (c = i << 24, j = 8; j > 0; --j)
5543 c = c & 0x80000000 ? (c << 1) ^ 0x04c11db7 : (c << 1);
5544 crc32_table[i] = c;
5545 }
c906108c
SS
5546 }
5547
5548 while (len--)
5549 {
5550 crc = (crc << 8) ^ crc32_table[((crc >> 24) ^ *buf) & 255];
5551 buf++;
5552 }
5553 return crc;
5554}
5555
5556/* compare-sections command
5557
5558 With no arguments, compares each loadable section in the exec bfd
5559 with the same memory range on the target, and reports mismatches.
5560 Useful for verifying the image on the target against the exec file.
5561 Depends on the target understanding the new "qCRC:" request. */
5562
e514a9d6
JM
5563/* FIXME: cagney/1999-10-26: This command should be broken down into a
5564 target method (target verify memory) and generic version of the
5565 actual command. This will allow other high-level code (especially
23860348 5566 generic_load()) to make use of this target functionality. */
e514a9d6 5567
c906108c 5568static void
fba45db2 5569compare_sections_command (char *args, int from_tty)
c906108c 5570{
d01949b6 5571 struct remote_state *rs = get_remote_state ();
c906108c
SS
5572 asection *s;
5573 unsigned long host_crc, target_crc;
5574 extern bfd *exec_bfd;
5575 struct cleanup *old_chain;
085dd6e6
JM
5576 char *tmp;
5577 char *sectdata;
ce359b09 5578 const char *sectname;
c906108c
SS
5579 bfd_size_type size;
5580 bfd_vma lma;
5581 int matched = 0;
5582 int mismatched = 0;
5583
5584 if (!exec_bfd)
8a3fe4f8 5585 error (_("command cannot be used without an exec file"));
c906108c
SS
5586 if (!current_target.to_shortname ||
5587 strcmp (current_target.to_shortname, "remote") != 0)
8a3fe4f8 5588 error (_("command can only be used with remote target"));
c906108c 5589
c5aa993b 5590 for (s = exec_bfd->sections; s; s = s->next)
c906108c
SS
5591 {
5592 if (!(s->flags & SEC_LOAD))
c5aa993b 5593 continue; /* skip non-loadable section */
c906108c 5594
2c500098 5595 size = bfd_get_section_size (s);
c906108c 5596 if (size == 0)
c5aa993b 5597 continue; /* skip zero-length section */
c906108c 5598
ce359b09 5599 sectname = bfd_get_section_name (exec_bfd, s);
c906108c 5600 if (args && strcmp (args, sectname) != 0)
c5aa993b 5601 continue; /* not the section selected by user */
c906108c 5602
c5aa993b 5603 matched = 1; /* do this section */
c906108c 5604 lma = s->lma;
23860348 5605 /* FIXME: assumes lma can fit into long. */
ea9c271d 5606 xsnprintf (rs->buf, get_remote_packet_size (), "qCRC:%lx,%lx",
ecbc58df 5607 (long) lma, (long) size);
6d820c5c 5608 putpkt (rs->buf);
c906108c 5609
23860348
MS
5610 /* Be clever; compute the host_crc before waiting for target
5611 reply. */
c906108c 5612 sectdata = xmalloc (size);
b8c9b27d 5613 old_chain = make_cleanup (xfree, sectdata);
c906108c
SS
5614 bfd_get_section_contents (exec_bfd, s, sectdata, 0, size);
5615 host_crc = crc32 ((unsigned char *) sectdata, size, 0xffffffff);
5616
6d820c5c
DJ
5617 getpkt (&rs->buf, &rs->buf_size, 0);
5618 if (rs->buf[0] == 'E')
8a3fe4f8 5619 error (_("target memory fault, section %s, range 0x%s -- 0x%s"),
823ca731 5620 sectname, paddr (lma), paddr (lma + size));
6d820c5c 5621 if (rs->buf[0] != 'C')
8a3fe4f8 5622 error (_("remote target does not support this operation"));
c906108c 5623
6d820c5c 5624 for (target_crc = 0, tmp = &rs->buf[1]; *tmp; tmp++)
c906108c
SS
5625 target_crc = target_crc * 16 + fromhex (*tmp);
5626
d4f3574e
SS
5627 printf_filtered ("Section %s, range 0x%s -- 0x%s: ",
5628 sectname, paddr (lma), paddr (lma + size));
c906108c
SS
5629 if (host_crc == target_crc)
5630 printf_filtered ("matched.\n");
5631 else
c5aa993b
JM
5632 {
5633 printf_filtered ("MIS-MATCHED!\n");
5634 mismatched++;
5635 }
c906108c
SS
5636
5637 do_cleanups (old_chain);
5638 }
5639 if (mismatched > 0)
8a3fe4f8
AC
5640 warning (_("One or more sections of the remote executable does not match\n\
5641the loaded file\n"));
c906108c 5642 if (args && !matched)
a3f17187 5643 printf_filtered (_("No loaded section named '%s'.\n"), args);
c906108c
SS
5644}
5645
0e7f50da
UW
5646/* Write LEN bytes from WRITEBUF into OBJECT_NAME/ANNEX at OFFSET
5647 into remote target. The number of bytes written to the remote
5648 target is returned, or -1 for error. */
5649
5650static LONGEST
5651remote_write_qxfer (struct target_ops *ops, const char *object_name,
5652 const char *annex, const gdb_byte *writebuf,
5653 ULONGEST offset, LONGEST len,
5654 struct packet_config *packet)
5655{
5656 int i, buf_len;
5657 ULONGEST n;
5658 gdb_byte *wbuf;
5659 struct remote_state *rs = get_remote_state ();
5660 int max_size = get_memory_write_packet_size ();
5661
5662 if (packet->support == PACKET_DISABLE)
5663 return -1;
5664
5665 /* Insert header. */
5666 i = snprintf (rs->buf, max_size,
5667 "qXfer:%s:write:%s:%s:",
5668 object_name, annex ? annex : "",
5669 phex_nz (offset, sizeof offset));
5670 max_size -= (i + 1);
5671
5672 /* Escape as much data as fits into rs->buf. */
5673 buf_len = remote_escape_output
5674 (writebuf, len, (rs->buf + i), &max_size, max_size);
5675
5676 if (putpkt_binary (rs->buf, i + buf_len) < 0
5677 || getpkt_sane (&rs->buf, &rs->buf_size, 0) < 0
5678 || packet_ok (rs->buf, packet) != PACKET_OK)
5679 return -1;
5680
5681 unpack_varlen_hex (rs->buf, &n);
5682 return n;
5683}
5684
0876f84a
DJ
5685/* Read OBJECT_NAME/ANNEX from the remote target using a qXfer packet.
5686 Data at OFFSET, of up to LEN bytes, is read into READBUF; the
5687 number of bytes read is returned, or 0 for EOF, or -1 for error.
5688 The number of bytes read may be less than LEN without indicating an
5689 EOF. PACKET is checked and updated to indicate whether the remote
5690 target supports this object. */
5691
5692static LONGEST
5693remote_read_qxfer (struct target_ops *ops, const char *object_name,
5694 const char *annex,
5695 gdb_byte *readbuf, ULONGEST offset, LONGEST len,
5696 struct packet_config *packet)
5697{
5698 static char *finished_object;
5699 static char *finished_annex;
5700 static ULONGEST finished_offset;
5701
5702 struct remote_state *rs = get_remote_state ();
5703 unsigned int total = 0;
5704 LONGEST i, n, packet_len;
5705
5706 if (packet->support == PACKET_DISABLE)
5707 return -1;
5708
5709 /* Check whether we've cached an end-of-object packet that matches
5710 this request. */
5711 if (finished_object)
5712 {
5713 if (strcmp (object_name, finished_object) == 0
5714 && strcmp (annex ? annex : "", finished_annex) == 0
5715 && offset == finished_offset)
5716 return 0;
5717
5718 /* Otherwise, we're now reading something different. Discard
5719 the cache. */
5720 xfree (finished_object);
5721 xfree (finished_annex);
5722 finished_object = NULL;
5723 finished_annex = NULL;
5724 }
5725
5726 /* Request only enough to fit in a single packet. The actual data
5727 may not, since we don't know how much of it will need to be escaped;
5728 the target is free to respond with slightly less data. We subtract
5729 five to account for the response type and the protocol frame. */
5730 n = min (get_remote_packet_size () - 5, len);
5731 snprintf (rs->buf, get_remote_packet_size () - 4, "qXfer:%s:read:%s:%s,%s",
5732 object_name, annex ? annex : "",
5733 phex_nz (offset, sizeof offset),
5734 phex_nz (n, sizeof n));
5735 i = putpkt (rs->buf);
5736 if (i < 0)
5737 return -1;
5738
5739 rs->buf[0] = '\0';
5740 packet_len = getpkt_sane (&rs->buf, &rs->buf_size, 0);
5741 if (packet_len < 0 || packet_ok (rs->buf, packet) != PACKET_OK)
5742 return -1;
5743
5744 if (rs->buf[0] != 'l' && rs->buf[0] != 'm')
5745 error (_("Unknown remote qXfer reply: %s"), rs->buf);
5746
5747 /* 'm' means there is (or at least might be) more data after this
5748 batch. That does not make sense unless there's at least one byte
5749 of data in this reply. */
5750 if (rs->buf[0] == 'm' && packet_len == 1)
5751 error (_("Remote qXfer reply contained no data."));
5752
5753 /* Got some data. */
5754 i = remote_unescape_input (rs->buf + 1, packet_len - 1, readbuf, n);
5755
5756 /* 'l' is an EOF marker, possibly including a final block of data,
0e7f50da
UW
5757 or possibly empty. If we have the final block of a non-empty
5758 object, record this fact to bypass a subsequent partial read. */
5759 if (rs->buf[0] == 'l' && offset + i > 0)
0876f84a
DJ
5760 {
5761 finished_object = xstrdup (object_name);
5762 finished_annex = xstrdup (annex ? annex : "");
5763 finished_offset = offset + i;
5764 }
5765
5766 return i;
5767}
5768
1e3ff5ad 5769static LONGEST
4b8a223f 5770remote_xfer_partial (struct target_ops *ops, enum target_object object,
961cb7b5
MK
5771 const char *annex, gdb_byte *readbuf,
5772 const gdb_byte *writebuf, ULONGEST offset, LONGEST len)
c906108c 5773{
d01949b6 5774 struct remote_state *rs = get_remote_state ();
c906108c 5775 int i;
6d820c5c 5776 char *p2;
1e3ff5ad 5777 char query_type;
c906108c 5778
b2182ed2 5779 /* Handle memory using the standard memory routines. */
21e3b9b9
DJ
5780 if (object == TARGET_OBJECT_MEMORY)
5781 {
5782 int xfered;
5783 errno = 0;
5784
5785 if (writebuf != NULL)
b2182ed2 5786 xfered = remote_write_bytes (offset, writebuf, len);
21e3b9b9 5787 else
b2182ed2 5788 xfered = remote_read_bytes (offset, readbuf, len);
21e3b9b9
DJ
5789
5790 if (xfered > 0)
5791 return xfered;
5792 else if (xfered == 0 && errno == 0)
5793 return 0;
5794 else
5795 return -1;
5796 }
5797
0e7f50da
UW
5798 /* Handle SPU memory using qxfer packets. */
5799 if (object == TARGET_OBJECT_SPU)
5800 {
5801 if (readbuf)
5802 return remote_read_qxfer (ops, "spu", annex, readbuf, offset, len,
5803 &remote_protocol_packets
5804 [PACKET_qXfer_spu_read]);
5805 else
5806 return remote_write_qxfer (ops, "spu", annex, writebuf, offset, len,
5807 &remote_protocol_packets
5808 [PACKET_qXfer_spu_write]);
5809 }
5810
a76d924d
DJ
5811 /* Only handle flash writes. */
5812 if (writebuf != NULL)
5813 {
5814 LONGEST xfered;
5815
5816 switch (object)
5817 {
5818 case TARGET_OBJECT_FLASH:
5819 xfered = remote_flash_write (ops, offset, len, writebuf);
5820
5821 if (xfered > 0)
5822 return xfered;
5823 else if (xfered == 0 && errno == 0)
5824 return 0;
5825 else
5826 return -1;
5827
5828 default:
5829 return -1;
5830 }
5831 }
4b8a223f 5832
1e3ff5ad
AC
5833 /* Map pre-existing objects onto letters. DO NOT do this for new
5834 objects!!! Instead specify new query packets. */
5835 switch (object)
c906108c 5836 {
1e3ff5ad
AC
5837 case TARGET_OBJECT_AVR:
5838 query_type = 'R';
5839 break;
802188a7
RM
5840
5841 case TARGET_OBJECT_AUXV:
0876f84a
DJ
5842 gdb_assert (annex == NULL);
5843 return remote_read_qxfer (ops, "auxv", annex, readbuf, offset, len,
5844 &remote_protocol_packets[PACKET_qXfer_auxv]);
802188a7 5845
23181151
DJ
5846 case TARGET_OBJECT_AVAILABLE_FEATURES:
5847 return remote_read_qxfer
5848 (ops, "features", annex, readbuf, offset, len,
5849 &remote_protocol_packets[PACKET_qXfer_features]);
5850
cfa9d6d9
DJ
5851 case TARGET_OBJECT_LIBRARIES:
5852 return remote_read_qxfer
5853 (ops, "libraries", annex, readbuf, offset, len,
5854 &remote_protocol_packets[PACKET_qXfer_libraries]);
5855
fd79ecee
DJ
5856 case TARGET_OBJECT_MEMORY_MAP:
5857 gdb_assert (annex == NULL);
5858 return remote_read_qxfer (ops, "memory-map", annex, readbuf, offset, len,
5859 &remote_protocol_packets[PACKET_qXfer_memory_map]);
5860
1e3ff5ad 5861 default:
c906108c
SS
5862 return -1;
5863 }
5864
4b8a223f 5865 /* Note: a zero OFFSET and LEN can be used to query the minimum
1e3ff5ad 5866 buffer size. */
4b8a223f 5867 if (offset == 0 && len == 0)
ea9c271d
DJ
5868 return (get_remote_packet_size ());
5869 /* Minimum outbuf size is get_remote_packet_size (). If LEN is not
24b06219 5870 large enough let the caller deal with it. */
ea9c271d 5871 if (len < get_remote_packet_size ())
1e3ff5ad 5872 return -1;
ea9c271d 5873 len = get_remote_packet_size ();
1e3ff5ad 5874
23860348 5875 /* Except for querying the minimum buffer size, target must be open. */
c5aa993b 5876 if (!remote_desc)
8a3fe4f8 5877 error (_("remote query is only available after target open"));
c906108c 5878
1e3ff5ad 5879 gdb_assert (annex != NULL);
4b8a223f 5880 gdb_assert (readbuf != NULL);
c906108c 5881
6d820c5c 5882 p2 = rs->buf;
c906108c
SS
5883 *p2++ = 'q';
5884 *p2++ = query_type;
5885
23860348
MS
5886 /* We used one buffer char for the remote protocol q command and
5887 another for the query type. As the remote protocol encapsulation
5888 uses 4 chars plus one extra in case we are debugging
5889 (remote_debug), we have PBUFZIZ - 7 left to pack the query
5890 string. */
c906108c 5891 i = 0;
ea9c271d 5892 while (annex[i] && (i < (get_remote_packet_size () - 8)))
c906108c 5893 {
1e3ff5ad
AC
5894 /* Bad caller may have sent forbidden characters. */
5895 gdb_assert (isprint (annex[i]) && annex[i] != '$' && annex[i] != '#');
5896 *p2++ = annex[i];
c906108c
SS
5897 i++;
5898 }
1e3ff5ad
AC
5899 *p2 = '\0';
5900 gdb_assert (annex[i] == '\0');
c906108c 5901
6d820c5c 5902 i = putpkt (rs->buf);
c5aa993b
JM
5903 if (i < 0)
5904 return i;
c906108c 5905
6d820c5c
DJ
5906 getpkt (&rs->buf, &rs->buf_size, 0);
5907 strcpy ((char *) readbuf, rs->buf);
c906108c 5908
cfd77fa1 5909 return strlen ((char *) readbuf);
c906108c
SS
5910}
5911
96baa820
JM
5912static void
5913remote_rcmd (char *command,
d9fcf2fb 5914 struct ui_file *outbuf)
96baa820 5915{
d01949b6 5916 struct remote_state *rs = get_remote_state ();
2e9f7625 5917 char *p = rs->buf;
96baa820
JM
5918
5919 if (!remote_desc)
8a3fe4f8 5920 error (_("remote rcmd is only available after target open"));
96baa820 5921
23860348 5922 /* Send a NULL command across as an empty command. */
7be570e7
JM
5923 if (command == NULL)
5924 command = "";
5925
23860348 5926 /* The query prefix. */
2e9f7625
DJ
5927 strcpy (rs->buf, "qRcmd,");
5928 p = strchr (rs->buf, '\0');
96baa820 5929
2e9f7625 5930 if ((strlen (rs->buf) + strlen (command) * 2 + 8/*misc*/) > get_remote_packet_size ())
8a3fe4f8 5931 error (_("\"monitor\" command ``%s'' is too long."), command);
96baa820 5932
23860348 5933 /* Encode the actual command. */
cfd77fa1 5934 bin2hex ((gdb_byte *) command, p, 0);
96baa820 5935
6d820c5c 5936 if (putpkt (rs->buf) < 0)
8a3fe4f8 5937 error (_("Communication problem with target."));
96baa820
JM
5938
5939 /* get/display the response */
5940 while (1)
5941 {
2e9f7625
DJ
5942 char *buf;
5943
23860348 5944 /* XXX - see also tracepoint.c:remote_get_noisy_reply(). */
2e9f7625 5945 rs->buf[0] = '\0';
6d820c5c 5946 getpkt (&rs->buf, &rs->buf_size, 0);
2e9f7625 5947 buf = rs->buf;
96baa820 5948 if (buf[0] == '\0')
8a3fe4f8 5949 error (_("Target does not support this command."));
96baa820
JM
5950 if (buf[0] == 'O' && buf[1] != 'K')
5951 {
23860348 5952 remote_console_output (buf + 1); /* 'O' message from stub. */
96baa820
JM
5953 continue;
5954 }
5955 if (strcmp (buf, "OK") == 0)
5956 break;
7be570e7
JM
5957 if (strlen (buf) == 3 && buf[0] == 'E'
5958 && isdigit (buf[1]) && isdigit (buf[2]))
5959 {
8a3fe4f8 5960 error (_("Protocol error with Rcmd"));
7be570e7 5961 }
96baa820
JM
5962 for (p = buf; p[0] != '\0' && p[1] != '\0'; p += 2)
5963 {
5964 char c = (fromhex (p[0]) << 4) + fromhex (p[1]);
5965 fputc_unfiltered (c, outbuf);
5966 }
5967 break;
5968 }
5969}
5970
fd79ecee
DJ
5971static VEC(mem_region_s) *
5972remote_memory_map (struct target_ops *ops)
5973{
5974 VEC(mem_region_s) *result = NULL;
5975 char *text = target_read_stralloc (&current_target,
5976 TARGET_OBJECT_MEMORY_MAP, NULL);
5977
5978 if (text)
5979 {
5980 struct cleanup *back_to = make_cleanup (xfree, text);
5981 result = parse_memory_map (text);
5982 do_cleanups (back_to);
5983 }
5984
5985 return result;
5986}
5987
c906108c 5988static void
fba45db2 5989packet_command (char *args, int from_tty)
c906108c 5990{
d01949b6 5991 struct remote_state *rs = get_remote_state ();
c906108c 5992
c5aa993b 5993 if (!remote_desc)
8a3fe4f8 5994 error (_("command can only be used with remote target"));
c906108c 5995
c5aa993b 5996 if (!args)
8a3fe4f8 5997 error (_("remote-packet command requires packet text as argument"));
c906108c
SS
5998
5999 puts_filtered ("sending: ");
6000 print_packet (args);
6001 puts_filtered ("\n");
6002 putpkt (args);
6003
6d820c5c 6004 getpkt (&rs->buf, &rs->buf_size, 0);
c906108c 6005 puts_filtered ("received: ");
6d820c5c 6006 print_packet (rs->buf);
c906108c
SS
6007 puts_filtered ("\n");
6008}
6009
6010#if 0
23860348 6011/* --------- UNIT_TEST for THREAD oriented PACKETS ------------------- */
c906108c 6012
a14ed312 6013static void display_thread_info (struct gdb_ext_thread_info *info);
c906108c 6014
a14ed312 6015static void threadset_test_cmd (char *cmd, int tty);
c906108c 6016
a14ed312 6017static void threadalive_test (char *cmd, int tty);
c906108c 6018
a14ed312 6019static void threadlist_test_cmd (char *cmd, int tty);
c906108c 6020
23860348 6021int get_and_display_threadinfo (threadref *ref);
c906108c 6022
a14ed312 6023static void threadinfo_test_cmd (char *cmd, int tty);
c906108c 6024
23860348 6025static int thread_display_step (threadref *ref, void *context);
c906108c 6026
a14ed312 6027static void threadlist_update_test_cmd (char *cmd, int tty);
c906108c 6028
a14ed312 6029static void init_remote_threadtests (void);
c906108c 6030
23860348 6031#define SAMPLE_THREAD 0x05060708 /* Truncated 64 bit threadid. */
c906108c
SS
6032
6033static void
fba45db2 6034threadset_test_cmd (char *cmd, int tty)
c906108c
SS
6035{
6036 int sample_thread = SAMPLE_THREAD;
6037
a3f17187 6038 printf_filtered (_("Remote threadset test\n"));
c906108c
SS
6039 set_thread (sample_thread, 1);
6040}
6041
6042
6043static void
fba45db2 6044threadalive_test (char *cmd, int tty)
c906108c
SS
6045{
6046 int sample_thread = SAMPLE_THREAD;
6047
39f77062 6048 if (remote_thread_alive (pid_to_ptid (sample_thread)))
c906108c
SS
6049 printf_filtered ("PASS: Thread alive test\n");
6050 else
6051 printf_filtered ("FAIL: Thread alive test\n");
6052}
6053
23860348 6054void output_threadid (char *title, threadref *ref);
c906108c
SS
6055
6056void
fba45db2 6057output_threadid (char *title, threadref *ref)
c906108c
SS
6058{
6059 char hexid[20];
6060
23860348 6061 pack_threadid (&hexid[0], ref); /* Convert threead id into hex. */
c906108c
SS
6062 hexid[16] = 0;
6063 printf_filtered ("%s %s\n", title, (&hexid[0]));
6064}
6065
6066static void
fba45db2 6067threadlist_test_cmd (char *cmd, int tty)
c906108c
SS
6068{
6069 int startflag = 1;
6070 threadref nextthread;
6071 int done, result_count;
6072 threadref threadlist[3];
6073
6074 printf_filtered ("Remote Threadlist test\n");
6075 if (!remote_get_threadlist (startflag, &nextthread, 3, &done,
6076 &result_count, &threadlist[0]))
6077 printf_filtered ("FAIL: threadlist test\n");
6078 else
6079 {
6080 threadref *scan = threadlist;
6081 threadref *limit = scan + result_count;
6082
6083 while (scan < limit)
6084 output_threadid (" thread ", scan++);
6085 }
6086}
6087
6088void
fba45db2 6089display_thread_info (struct gdb_ext_thread_info *info)
c906108c
SS
6090{
6091 output_threadid ("Threadid: ", &info->threadid);
6092 printf_filtered ("Name: %s\n ", info->shortname);
6093 printf_filtered ("State: %s\n", info->display);
6094 printf_filtered ("other: %s\n\n", info->more_display);
6095}
6096
6097int
fba45db2 6098get_and_display_threadinfo (threadref *ref)
c906108c
SS
6099{
6100 int result;
6101 int set;
6102 struct gdb_ext_thread_info threadinfo;
6103
6104 set = TAG_THREADID | TAG_EXISTS | TAG_THREADNAME
6105 | TAG_MOREDISPLAY | TAG_DISPLAY;
6106 if (0 != (result = remote_get_threadinfo (ref, set, &threadinfo)))
6107 display_thread_info (&threadinfo);
6108 return result;
6109}
6110
6111static void
fba45db2 6112threadinfo_test_cmd (char *cmd, int tty)
c906108c
SS
6113{
6114 int athread = SAMPLE_THREAD;
6115 threadref thread;
6116 int set;
6117
6118 int_to_threadref (&thread, athread);
6119 printf_filtered ("Remote Threadinfo test\n");
6120 if (!get_and_display_threadinfo (&thread))
6121 printf_filtered ("FAIL cannot get thread info\n");
6122}
6123
6124static int
fba45db2 6125thread_display_step (threadref *ref, void *context)
c906108c
SS
6126{
6127 /* output_threadid(" threadstep ",ref); *//* simple test */
6128 return get_and_display_threadinfo (ref);
6129}
6130
6131static void
fba45db2 6132threadlist_update_test_cmd (char *cmd, int tty)
c906108c
SS
6133{
6134 printf_filtered ("Remote Threadlist update test\n");
6135 remote_threadlist_iterator (thread_display_step, 0, CRAZY_MAX_THREADS);
6136}
6137
6138static void
6139init_remote_threadtests (void)
6140{
1bedd215
AC
6141 add_com ("tlist", class_obscure, threadlist_test_cmd, _("\
6142Fetch and print the remote list of thread identifiers, one pkt only"));
c906108c 6143 add_com ("tinfo", class_obscure, threadinfo_test_cmd,
1bedd215 6144 _("Fetch and display info about one thread"));
c906108c 6145 add_com ("tset", class_obscure, threadset_test_cmd,
1bedd215 6146 _("Test setting to a different thread"));
c906108c 6147 add_com ("tupd", class_obscure, threadlist_update_test_cmd,
1bedd215 6148 _("Iterate through updating all remote thread info"));
c906108c 6149 add_com ("talive", class_obscure, threadalive_test,
1bedd215 6150 _(" Remote thread alive test "));
c906108c
SS
6151}
6152
6153#endif /* 0 */
6154
f3fb8c85
MS
6155/* Convert a thread ID to a string. Returns the string in a static
6156 buffer. */
6157
6158static char *
39f77062 6159remote_pid_to_str (ptid_t ptid)
f3fb8c85 6160{
fd0a2a6f 6161 static char buf[32];
f3fb8c85 6162
32a5b2f1 6163 xsnprintf (buf, sizeof buf, "Thread %d", ptid_get_pid (ptid));
f3fb8c85
MS
6164 return buf;
6165}
6166
38691318
KB
6167/* Get the address of the thread local variable in OBJFILE which is
6168 stored at OFFSET within the thread local storage for thread PTID. */
6169
6170static CORE_ADDR
6171remote_get_thread_local_address (ptid_t ptid, CORE_ADDR lm, CORE_ADDR offset)
6172{
444abaca 6173 if (remote_protocol_packets[PACKET_qGetTLSAddr].support != PACKET_DISABLE)
38691318
KB
6174 {
6175 struct remote_state *rs = get_remote_state ();
6d820c5c 6176 char *p = rs->buf;
571dd617 6177 enum packet_result result;
38691318
KB
6178
6179 strcpy (p, "qGetTLSAddr:");
6180 p += strlen (p);
6181 p += hexnumstr (p, PIDGET (ptid));
6182 *p++ = ',';
6183 p += hexnumstr (p, offset);
6184 *p++ = ',';
6185 p += hexnumstr (p, lm);
6186 *p++ = '\0';
6187
6d820c5c
DJ
6188 putpkt (rs->buf);
6189 getpkt (&rs->buf, &rs->buf_size, 0);
6190 result = packet_ok (rs->buf, &remote_protocol_packets[PACKET_qGetTLSAddr]);
571dd617 6191 if (result == PACKET_OK)
38691318
KB
6192 {
6193 ULONGEST result;
6194
6d820c5c 6195 unpack_varlen_hex (rs->buf, &result);
38691318
KB
6196 return result;
6197 }
571dd617 6198 else if (result == PACKET_UNKNOWN)
109c3e39
AC
6199 throw_error (TLS_GENERIC_ERROR,
6200 _("Remote target doesn't support qGetTLSAddr packet"));
38691318 6201 else
109c3e39
AC
6202 throw_error (TLS_GENERIC_ERROR,
6203 _("Remote target failed to process qGetTLSAddr request"));
38691318
KB
6204 }
6205 else
109c3e39
AC
6206 throw_error (TLS_GENERIC_ERROR,
6207 _("TLS not supported or disabled on this target"));
38691318
KB
6208 /* Not reached. */
6209 return 0;
6210}
6211
29709017
DJ
6212/* Support for inferring a target description based on the current
6213 architecture and the size of a 'g' packet. While the 'g' packet
6214 can have any size (since optional registers can be left off the
6215 end), some sizes are easily recognizable given knowledge of the
6216 approximate architecture. */
6217
6218struct remote_g_packet_guess
6219{
6220 int bytes;
6221 const struct target_desc *tdesc;
6222};
6223typedef struct remote_g_packet_guess remote_g_packet_guess_s;
6224DEF_VEC_O(remote_g_packet_guess_s);
6225
6226struct remote_g_packet_data
6227{
6228 VEC(remote_g_packet_guess_s) *guesses;
6229};
6230
6231static struct gdbarch_data *remote_g_packet_data_handle;
6232
6233static void *
6234remote_g_packet_data_init (struct obstack *obstack)
6235{
6236 return OBSTACK_ZALLOC (obstack, struct remote_g_packet_data);
6237}
6238
6239void
6240register_remote_g_packet_guess (struct gdbarch *gdbarch, int bytes,
6241 const struct target_desc *tdesc)
6242{
6243 struct remote_g_packet_data *data
6244 = gdbarch_data (gdbarch, remote_g_packet_data_handle);
6245 struct remote_g_packet_guess new_guess, *guess;
6246 int ix;
6247
6248 gdb_assert (tdesc != NULL);
6249
6250 for (ix = 0;
6251 VEC_iterate (remote_g_packet_guess_s, data->guesses, ix, guess);
6252 ix++)
6253 if (guess->bytes == bytes)
6254 internal_error (__FILE__, __LINE__,
6255 "Duplicate g packet description added for size %d",
6256 bytes);
6257
6258 new_guess.bytes = bytes;
6259 new_guess.tdesc = tdesc;
6260 VEC_safe_push (remote_g_packet_guess_s, data->guesses, &new_guess);
6261}
6262
6263static const struct target_desc *
6264remote_read_description (struct target_ops *target)
6265{
6266 struct remote_g_packet_data *data
6267 = gdbarch_data (current_gdbarch, remote_g_packet_data_handle);
6268
6269 if (!VEC_empty (remote_g_packet_guess_s, data->guesses))
6270 {
6271 struct remote_g_packet_guess *guess;
6272 int ix;
6273 int bytes = send_g_packet ();
6274
6275 for (ix = 0;
6276 VEC_iterate (remote_g_packet_guess_s, data->guesses, ix, guess);
6277 ix++)
6278 if (guess->bytes == bytes)
6279 return guess->tdesc;
6280
6281 /* We discard the g packet. A minor optimization would be to
6282 hold on to it, and fill the register cache once we have selected
6283 an architecture, but it's too tricky to do safely. */
6284 }
6285
6286 return NULL;
6287}
6288
a6b151f1
DJ
6289/* Remote file transfer support. This is host-initiated I/O, not
6290 target-initiated; for target-initiated, see remote-fileio.c. */
6291
6292/* If *LEFT is at least the length of STRING, copy STRING to
6293 *BUFFER, update *BUFFER to point to the new end of the buffer, and
6294 decrease *LEFT. Otherwise raise an error. */
6295
6296static void
6297remote_buffer_add_string (char **buffer, int *left, char *string)
6298{
6299 int len = strlen (string);
6300
6301 if (len > *left)
6302 error (_("Packet too long for target."));
6303
6304 memcpy (*buffer, string, len);
6305 *buffer += len;
6306 *left -= len;
6307
6308 /* NUL-terminate the buffer as a convenience, if there is
6309 room. */
6310 if (*left)
6311 **buffer = '\0';
6312}
6313
6314/* If *LEFT is large enough, hex encode LEN bytes from BYTES into
6315 *BUFFER, update *BUFFER to point to the new end of the buffer, and
6316 decrease *LEFT. Otherwise raise an error. */
6317
6318static void
6319remote_buffer_add_bytes (char **buffer, int *left, const gdb_byte *bytes,
6320 int len)
6321{
6322 if (2 * len > *left)
6323 error (_("Packet too long for target."));
6324
6325 bin2hex (bytes, *buffer, len);
6326 *buffer += 2 * len;
6327 *left -= 2 * len;
6328
6329 /* NUL-terminate the buffer as a convenience, if there is
6330 room. */
6331 if (*left)
6332 **buffer = '\0';
6333}
6334
6335/* If *LEFT is large enough, convert VALUE to hex and add it to
6336 *BUFFER, update *BUFFER to point to the new end of the buffer, and
6337 decrease *LEFT. Otherwise raise an error. */
6338
6339static void
6340remote_buffer_add_int (char **buffer, int *left, ULONGEST value)
6341{
6342 int len = hexnumlen (value);
6343
6344 if (len > *left)
6345 error (_("Packet too long for target."));
6346
6347 hexnumstr (*buffer, value);
6348 *buffer += len;
6349 *left -= len;
6350
6351 /* NUL-terminate the buffer as a convenience, if there is
6352 room. */
6353 if (*left)
6354 **buffer = '\0';
6355}
6356
6357/* Parse an I/O result packet from BUFFER. Set RETCODE to the return
6358 value, *REMOTE_ERRNO to the remote error number or zero if none
6359 was included, and *ATTACHMENT to point to the start of the annex
6360 if any. The length of the packet isn't needed here; there may
6361 be NUL bytes in BUFFER, but they will be after *ATTACHMENT.
6362
6363 Return 0 if the packet could be parsed, -1 if it could not. If
6364 -1 is returned, the other variables may not be initialized. */
6365
6366static int
6367remote_hostio_parse_result (char *buffer, int *retcode,
6368 int *remote_errno, char **attachment)
6369{
6370 char *p, *p2;
6371
6372 *remote_errno = 0;
6373 *attachment = NULL;
6374
6375 if (buffer[0] != 'F')
6376 return -1;
6377
6378 errno = 0;
6379 *retcode = strtol (&buffer[1], &p, 16);
6380 if (errno != 0 || p == &buffer[1])
6381 return -1;
6382
6383 /* Check for ",errno". */
6384 if (*p == ',')
6385 {
6386 errno = 0;
6387 *remote_errno = strtol (p + 1, &p2, 16);
6388 if (errno != 0 || p + 1 == p2)
6389 return -1;
6390 p = p2;
6391 }
6392
6393 /* Check for ";attachment". If there is no attachment, the
6394 packet should end here. */
6395 if (*p == ';')
6396 {
6397 *attachment = p + 1;
6398 return 0;
6399 }
6400 else if (*p == '\0')
6401 return 0;
6402 else
6403 return -1;
6404}
6405
6406/* Send a prepared I/O packet to the target and read its response.
6407 The prepared packet is in the global RS->BUF before this function
6408 is called, and the answer is there when we return.
6409
6410 COMMAND_BYTES is the length of the request to send, which may include
6411 binary data. WHICH_PACKET is the packet configuration to check
6412 before attempting a packet. If an error occurs, *REMOTE_ERRNO
6413 is set to the error number and -1 is returned. Otherwise the value
6414 returned by the function is returned.
6415
6416 ATTACHMENT and ATTACHMENT_LEN should be non-NULL if and only if an
6417 attachment is expected; an error will be reported if there's a
6418 mismatch. If one is found, *ATTACHMENT will be set to point into
6419 the packet buffer and *ATTACHMENT_LEN will be set to the
6420 attachment's length. */
6421
6422static int
6423remote_hostio_send_command (int command_bytes, int which_packet,
6424 int *remote_errno, char **attachment,
6425 int *attachment_len)
6426{
6427 struct remote_state *rs = get_remote_state ();
6428 int ret, bytes_read;
6429 char *attachment_tmp;
6430
6431 if (remote_protocol_packets[which_packet].support == PACKET_DISABLE)
6432 {
6433 *remote_errno = FILEIO_ENOSYS;
6434 return -1;
6435 }
6436
6437 putpkt_binary (rs->buf, command_bytes);
6438 bytes_read = getpkt_sane (&rs->buf, &rs->buf_size, 0);
6439
6440 /* If it timed out, something is wrong. Don't try to parse the
6441 buffer. */
6442 if (bytes_read < 0)
6443 {
6444 *remote_errno = FILEIO_EINVAL;
6445 return -1;
6446 }
6447
6448 switch (packet_ok (rs->buf, &remote_protocol_packets[which_packet]))
6449 {
6450 case PACKET_ERROR:
6451 *remote_errno = FILEIO_EINVAL;
6452 return -1;
6453 case PACKET_UNKNOWN:
6454 *remote_errno = FILEIO_ENOSYS;
6455 return -1;
6456 case PACKET_OK:
6457 break;
6458 }
6459
6460 if (remote_hostio_parse_result (rs->buf, &ret, remote_errno,
6461 &attachment_tmp))
6462 {
6463 *remote_errno = FILEIO_EINVAL;
6464 return -1;
6465 }
6466
6467 /* Make sure we saw an attachment if and only if we expected one. */
6468 if ((attachment_tmp == NULL && attachment != NULL)
6469 || (attachment_tmp != NULL && attachment == NULL))
6470 {
6471 *remote_errno = FILEIO_EINVAL;
6472 return -1;
6473 }
6474
6475 /* If an attachment was found, it must point into the packet buffer;
6476 work out how many bytes there were. */
6477 if (attachment_tmp != NULL)
6478 {
6479 *attachment = attachment_tmp;
6480 *attachment_len = bytes_read - (*attachment - rs->buf);
6481 }
6482
6483 return ret;
6484}
6485
6486/* Open FILENAME on the remote target, using FLAGS and MODE. Return a
6487 remote file descriptor, or -1 if an error occurs (and set
6488 *REMOTE_ERRNO). */
6489
6490static int
6491remote_hostio_open (const char *filename, int flags, int mode,
6492 int *remote_errno)
6493{
6494 struct remote_state *rs = get_remote_state ();
6495 char *p = rs->buf;
6496 int left = get_remote_packet_size () - 1;
6497
6498 remote_buffer_add_string (&p, &left, "vFile:open:");
6499
6500 remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
6501 strlen (filename));
6502 remote_buffer_add_string (&p, &left, ",");
6503
6504 remote_buffer_add_int (&p, &left, flags);
6505 remote_buffer_add_string (&p, &left, ",");
6506
6507 remote_buffer_add_int (&p, &left, mode);
6508
6509 return remote_hostio_send_command (p - rs->buf, PACKET_vFile_open,
6510 remote_errno, NULL, NULL);
6511}
6512
6513/* Write up to LEN bytes from WRITE_BUF to FD on the remote target.
6514 Return the number of bytes written, or -1 if an error occurs (and
6515 set *REMOTE_ERRNO). */
6516
6517static int
6518remote_hostio_pwrite (int fd, const gdb_byte *write_buf, int len,
6519 ULONGEST offset, int *remote_errno)
6520{
6521 struct remote_state *rs = get_remote_state ();
6522 char *p = rs->buf;
6523 int left = get_remote_packet_size ();
6524 int out_len;
6525
6526 remote_buffer_add_string (&p, &left, "vFile:pwrite:");
6527
6528 remote_buffer_add_int (&p, &left, fd);
6529 remote_buffer_add_string (&p, &left, ",");
6530
6531 remote_buffer_add_int (&p, &left, offset);
6532 remote_buffer_add_string (&p, &left, ",");
6533
6534 p += remote_escape_output (write_buf, len, p, &out_len,
6535 get_remote_packet_size () - (p - rs->buf));
6536
6537 return remote_hostio_send_command (p - rs->buf, PACKET_vFile_pwrite,
6538 remote_errno, NULL, NULL);
6539}
6540
6541/* Read up to LEN bytes FD on the remote target into READ_BUF
6542 Return the number of bytes read, or -1 if an error occurs (and
6543 set *REMOTE_ERRNO). */
6544
6545static int
6546remote_hostio_pread (int fd, gdb_byte *read_buf, int len,
6547 ULONGEST offset, int *remote_errno)
6548{
6549 struct remote_state *rs = get_remote_state ();
6550 char *p = rs->buf;
6551 char *attachment;
6552 int left = get_remote_packet_size ();
6553 int ret, attachment_len;
6554 int read_len;
6555
6556 remote_buffer_add_string (&p, &left, "vFile:pread:");
6557
6558 remote_buffer_add_int (&p, &left, fd);
6559 remote_buffer_add_string (&p, &left, ",");
6560
6561 remote_buffer_add_int (&p, &left, len);
6562 remote_buffer_add_string (&p, &left, ",");
6563
6564 remote_buffer_add_int (&p, &left, offset);
6565
6566 ret = remote_hostio_send_command (p - rs->buf, PACKET_vFile_pread,
6567 remote_errno, &attachment,
6568 &attachment_len);
6569
6570 if (ret < 0)
6571 return ret;
6572
6573 read_len = remote_unescape_input (attachment, attachment_len,
6574 read_buf, len);
6575 if (read_len != ret)
6576 error (_("Read returned %d, but %d bytes."), ret, (int) read_len);
6577
6578 return ret;
6579}
6580
6581/* Close FD on the remote target. Return 0, or -1 if an error occurs
6582 (and set *REMOTE_ERRNO). */
6583
6584static int
6585remote_hostio_close (int fd, int *remote_errno)
6586{
6587 struct remote_state *rs = get_remote_state ();
6588 char *p = rs->buf;
6589 int left = get_remote_packet_size () - 1;
6590
6591 remote_buffer_add_string (&p, &left, "vFile:close:");
6592
6593 remote_buffer_add_int (&p, &left, fd);
6594
6595 return remote_hostio_send_command (p - rs->buf, PACKET_vFile_close,
6596 remote_errno, NULL, NULL);
6597}
6598
6599/* Unlink FILENAME on the remote target. Return 0, or -1 if an error
6600 occurs (and set *REMOTE_ERRNO). */
6601
6602static int
6603remote_hostio_unlink (const char *filename, int *remote_errno)
6604{
6605 struct remote_state *rs = get_remote_state ();
6606 char *p = rs->buf;
6607 int left = get_remote_packet_size () - 1;
6608
6609 remote_buffer_add_string (&p, &left, "vFile:unlink:");
6610
6611 remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
6612 strlen (filename));
6613
6614 return remote_hostio_send_command (p - rs->buf, PACKET_vFile_unlink,
6615 remote_errno, NULL, NULL);
6616}
6617
6618static int
6619remote_fileio_errno_to_host (int errnum)
6620{
6621 switch (errnum)
6622 {
6623 case FILEIO_EPERM:
6624 return EPERM;
6625 case FILEIO_ENOENT:
6626 return ENOENT;
6627 case FILEIO_EINTR:
6628 return EINTR;
6629 case FILEIO_EIO:
6630 return EIO;
6631 case FILEIO_EBADF:
6632 return EBADF;
6633 case FILEIO_EACCES:
6634 return EACCES;
6635 case FILEIO_EFAULT:
6636 return EFAULT;
6637 case FILEIO_EBUSY:
6638 return EBUSY;
6639 case FILEIO_EEXIST:
6640 return EEXIST;
6641 case FILEIO_ENODEV:
6642 return ENODEV;
6643 case FILEIO_ENOTDIR:
6644 return ENOTDIR;
6645 case FILEIO_EISDIR:
6646 return EISDIR;
6647 case FILEIO_EINVAL:
6648 return EINVAL;
6649 case FILEIO_ENFILE:
6650 return ENFILE;
6651 case FILEIO_EMFILE:
6652 return EMFILE;
6653 case FILEIO_EFBIG:
6654 return EFBIG;
6655 case FILEIO_ENOSPC:
6656 return ENOSPC;
6657 case FILEIO_ESPIPE:
6658 return ESPIPE;
6659 case FILEIO_EROFS:
6660 return EROFS;
6661 case FILEIO_ENOSYS:
6662 return ENOSYS;
6663 case FILEIO_ENAMETOOLONG:
6664 return ENAMETOOLONG;
6665 }
6666 return -1;
6667}
6668
6669static char *
6670remote_hostio_error (int errnum)
6671{
6672 int host_error = remote_fileio_errno_to_host (errnum);
6673
6674 if (host_error == -1)
6675 error (_("Unknown remote I/O error %d"), errnum);
6676 else
6677 error (_("Remote I/O error: %s"), safe_strerror (host_error));
6678}
6679
6680static void
6681fclose_cleanup (void *file)
6682{
6683 fclose (file);
6684}
6685
6686static void
6687remote_hostio_close_cleanup (void *opaque)
6688{
6689 int fd = *(int *) opaque;
6690 int remote_errno;
6691
6692 remote_hostio_close (fd, &remote_errno);
6693}
6694
6695void
6696remote_file_put (const char *local_file, const char *remote_file, int from_tty)
6697{
6698 struct cleanup *back_to, *close_cleanup;
6699 int retcode, fd, remote_errno, bytes, io_size;
6700 FILE *file;
6701 gdb_byte *buffer;
6702 int bytes_in_buffer;
6703 int saw_eof;
6704 ULONGEST offset;
6705
6706 if (!remote_desc)
6707 error (_("command can only be used with remote target"));
6708
6709 file = fopen (local_file, "rb");
6710 if (file == NULL)
6711 perror_with_name (local_file);
6712 back_to = make_cleanup (fclose_cleanup, file);
6713
6714 fd = remote_hostio_open (remote_file, (FILEIO_O_WRONLY | FILEIO_O_CREAT
6715 | FILEIO_O_TRUNC),
6716 0700, &remote_errno);
6717 if (fd == -1)
6718 remote_hostio_error (remote_errno);
6719
6720 /* Send up to this many bytes at once. They won't all fit in the
6721 remote packet limit, so we'll transfer slightly fewer. */
6722 io_size = get_remote_packet_size ();
6723 buffer = xmalloc (io_size);
6724 make_cleanup (xfree, buffer);
6725
6726 close_cleanup = make_cleanup (remote_hostio_close_cleanup, &fd);
6727
6728 bytes_in_buffer = 0;
6729 saw_eof = 0;
6730 offset = 0;
6731 while (bytes_in_buffer || !saw_eof)
6732 {
6733 if (!saw_eof)
6734 {
6735 bytes = fread (buffer + bytes_in_buffer, 1, io_size - bytes_in_buffer,
6736 file);
6737 if (bytes == 0)
6738 {
6739 if (ferror (file))
6740 error (_("Error reading %s."), local_file);
6741 else
6742 {
6743 /* EOF. Unless there is something still in the
6744 buffer from the last iteration, we are done. */
6745 saw_eof = 1;
6746 if (bytes_in_buffer == 0)
6747 break;
6748 }
6749 }
6750 }
6751 else
6752 bytes = 0;
6753
6754 bytes += bytes_in_buffer;
6755 bytes_in_buffer = 0;
6756
6757 retcode = remote_hostio_pwrite (fd, buffer, bytes, offset, &remote_errno);
6758
6759 if (retcode < 0)
6760 remote_hostio_error (remote_errno);
6761 else if (retcode == 0)
6762 error (_("Remote write of %d bytes returned 0!"), bytes);
6763 else if (retcode < bytes)
6764 {
6765 /* Short write. Save the rest of the read data for the next
6766 write. */
6767 bytes_in_buffer = bytes - retcode;
6768 memmove (buffer, buffer + retcode, bytes_in_buffer);
6769 }
6770
6771 offset += retcode;
6772 }
6773
6774 discard_cleanups (close_cleanup);
6775 if (remote_hostio_close (fd, &remote_errno))
6776 remote_hostio_error (remote_errno);
6777
6778 if (from_tty)
6779 printf_filtered (_("Successfully sent file \"%s\".\n"), local_file);
6780 do_cleanups (back_to);
6781}
6782
6783void
6784remote_file_get (const char *remote_file, const char *local_file, int from_tty)
6785{
6786 struct cleanup *back_to, *close_cleanup;
6787 int retcode, fd, remote_errno, bytes, io_size;
6788 FILE *file;
6789 gdb_byte *buffer;
6790 ULONGEST offset;
6791
6792 if (!remote_desc)
6793 error (_("command can only be used with remote target"));
6794
6795 fd = remote_hostio_open (remote_file, FILEIO_O_RDONLY, 0, &remote_errno);
6796 if (fd == -1)
6797 remote_hostio_error (remote_errno);
6798
6799 file = fopen (local_file, "wb");
6800 if (file == NULL)
6801 perror_with_name (local_file);
6802 back_to = make_cleanup (fclose_cleanup, file);
6803
6804 /* Send up to this many bytes at once. They won't all fit in the
6805 remote packet limit, so we'll transfer slightly fewer. */
6806 io_size = get_remote_packet_size ();
6807 buffer = xmalloc (io_size);
6808 make_cleanup (xfree, buffer);
6809
6810 close_cleanup = make_cleanup (remote_hostio_close_cleanup, &fd);
6811
6812 offset = 0;
6813 while (1)
6814 {
6815 bytes = remote_hostio_pread (fd, buffer, io_size, offset, &remote_errno);
6816 if (bytes == 0)
6817 /* Success, but no bytes, means end-of-file. */
6818 break;
6819 if (bytes == -1)
6820 remote_hostio_error (remote_errno);
6821
6822 offset += bytes;
6823
6824 bytes = fwrite (buffer, 1, bytes, file);
6825 if (bytes == 0)
6826 perror_with_name (local_file);
6827 }
6828
6829 discard_cleanups (close_cleanup);
6830 if (remote_hostio_close (fd, &remote_errno))
6831 remote_hostio_error (remote_errno);
6832
6833 if (from_tty)
6834 printf_filtered (_("Successfully fetched file \"%s\".\n"), remote_file);
6835 do_cleanups (back_to);
6836}
6837
6838void
6839remote_file_delete (const char *remote_file, int from_tty)
6840{
6841 int retcode, remote_errno;
6842
6843 if (!remote_desc)
6844 error (_("command can only be used with remote target"));
6845
6846 retcode = remote_hostio_unlink (remote_file, &remote_errno);
6847 if (retcode == -1)
6848 remote_hostio_error (remote_errno);
6849
6850 if (from_tty)
6851 printf_filtered (_("Successfully deleted file \"%s\".\n"), remote_file);
6852}
6853
6854static void
6855remote_put_command (char *args, int from_tty)
6856{
6857 struct cleanup *back_to;
6858 char **argv;
6859
6860 argv = buildargv (args);
6861 if (argv == NULL)
6862 nomem (0);
6863 back_to = make_cleanup_freeargv (argv);
6864 if (argv[0] == NULL || argv[1] == NULL || argv[2] != NULL)
6865 error (_("Invalid parameters to remote put"));
6866
6867 remote_file_put (argv[0], argv[1], from_tty);
6868
6869 do_cleanups (back_to);
6870}
6871
6872static void
6873remote_get_command (char *args, int from_tty)
6874{
6875 struct cleanup *back_to;
6876 char **argv;
6877
6878 argv = buildargv (args);
6879 if (argv == NULL)
6880 nomem (0);
6881 back_to = make_cleanup_freeargv (argv);
6882 if (argv[0] == NULL || argv[1] == NULL || argv[2] != NULL)
6883 error (_("Invalid parameters to remote get"));
6884
6885 remote_file_get (argv[0], argv[1], from_tty);
6886
6887 do_cleanups (back_to);
6888}
6889
6890static void
6891remote_delete_command (char *args, int from_tty)
6892{
6893 struct cleanup *back_to;
6894 char **argv;
6895
6896 argv = buildargv (args);
6897 if (argv == NULL)
6898 nomem (0);
6899 back_to = make_cleanup_freeargv (argv);
6900 if (argv[0] == NULL || argv[1] != NULL)
6901 error (_("Invalid parameters to remote delete"));
6902
6903 remote_file_delete (argv[0], from_tty);
6904
6905 do_cleanups (back_to);
6906}
6907
6908static void
6909remote_command (char *args, int from_tty)
6910{
6911 help_list (remote_cmdlist, "remote ", -1, gdb_stdout);
6912}
6913
c906108c 6914static void
fba45db2 6915init_remote_ops (void)
c906108c 6916{
c5aa993b 6917 remote_ops.to_shortname = "remote";
c906108c 6918 remote_ops.to_longname = "Remote serial target in gdb-specific protocol";
c5aa993b 6919 remote_ops.to_doc =
c906108c 6920 "Use a remote computer via a serial line, using a gdb-specific protocol.\n\
0d06e24b
JM
6921Specify the serial device it is connected to\n\
6922(e.g. /dev/ttyS0, /dev/ttya, COM1, etc.).";
c5aa993b
JM
6923 remote_ops.to_open = remote_open;
6924 remote_ops.to_close = remote_close;
c906108c 6925 remote_ops.to_detach = remote_detach;
6ad8ae5c 6926 remote_ops.to_disconnect = remote_disconnect;
c5aa993b 6927 remote_ops.to_resume = remote_resume;
c906108c
SS
6928 remote_ops.to_wait = remote_wait;
6929 remote_ops.to_fetch_registers = remote_fetch_registers;
6930 remote_ops.to_store_registers = remote_store_registers;
6931 remote_ops.to_prepare_to_store = remote_prepare_to_store;
c8e73a31 6932 remote_ops.deprecated_xfer_memory = remote_xfer_memory;
c5aa993b 6933 remote_ops.to_files_info = remote_files_info;
c906108c
SS
6934 remote_ops.to_insert_breakpoint = remote_insert_breakpoint;
6935 remote_ops.to_remove_breakpoint = remote_remove_breakpoint;
3c3bea1c
GS
6936 remote_ops.to_stopped_by_watchpoint = remote_stopped_by_watchpoint;
6937 remote_ops.to_stopped_data_address = remote_stopped_data_address;
6938 remote_ops.to_can_use_hw_breakpoint = remote_check_watch_resources;
6939 remote_ops.to_insert_hw_breakpoint = remote_insert_hw_breakpoint;
6940 remote_ops.to_remove_hw_breakpoint = remote_remove_hw_breakpoint;
6941 remote_ops.to_insert_watchpoint = remote_insert_watchpoint;
6942 remote_ops.to_remove_watchpoint = remote_remove_watchpoint;
c5aa993b
JM
6943 remote_ops.to_kill = remote_kill;
6944 remote_ops.to_load = generic_load;
c906108c
SS
6945 remote_ops.to_mourn_inferior = remote_mourn;
6946 remote_ops.to_thread_alive = remote_thread_alive;
0f71a2f6 6947 remote_ops.to_find_new_threads = remote_threads_info;
0caabb7e 6948 remote_ops.to_pid_to_str = remote_pid_to_str;
cf759d3b 6949 remote_ops.to_extra_thread_info = remote_threads_extra_info;
c906108c 6950 remote_ops.to_stop = remote_stop;
4b8a223f 6951 remote_ops.to_xfer_partial = remote_xfer_partial;
96baa820 6952 remote_ops.to_rcmd = remote_rcmd;
49d03eab 6953 remote_ops.to_log_command = serial_log_command;
38691318 6954 remote_ops.to_get_thread_local_address = remote_get_thread_local_address;
c906108c 6955 remote_ops.to_stratum = process_stratum;
c5aa993b
JM
6956 remote_ops.to_has_all_memory = 1;
6957 remote_ops.to_has_memory = 1;
6958 remote_ops.to_has_stack = 1;
6959 remote_ops.to_has_registers = 1;
6960 remote_ops.to_has_execution = 1;
6961 remote_ops.to_has_thread_control = tc_schedlock; /* can lock scheduler */
6962 remote_ops.to_magic = OPS_MAGIC;
fd79ecee 6963 remote_ops.to_memory_map = remote_memory_map;
a76d924d
DJ
6964 remote_ops.to_flash_erase = remote_flash_erase;
6965 remote_ops.to_flash_done = remote_flash_done;
29709017 6966 remote_ops.to_read_description = remote_read_description;
c906108c
SS
6967}
6968
6969/* Set up the extended remote vector by making a copy of the standard
6970 remote vector and adding to it. */
6971
6972static void
fba45db2 6973init_extended_remote_ops (void)
c906108c
SS
6974{
6975 extended_remote_ops = remote_ops;
6976
0f71a2f6 6977 extended_remote_ops.to_shortname = "extended-remote";
c5aa993b 6978 extended_remote_ops.to_longname =
c906108c 6979 "Extended remote serial target in gdb-specific protocol";
c5aa993b 6980 extended_remote_ops.to_doc =
c906108c
SS
6981 "Use a remote computer via a serial line, using a gdb-specific protocol.\n\
6982Specify the serial device it is connected to (e.g. /dev/ttya).",
c5aa993b 6983 extended_remote_ops.to_open = extended_remote_open;
c906108c
SS
6984 extended_remote_ops.to_create_inferior = extended_remote_create_inferior;
6985 extended_remote_ops.to_mourn_inferior = extended_remote_mourn;
0f71a2f6
JM
6986}
6987
6426a772
JM
6988static int
6989remote_can_async_p (void)
6990{
23860348 6991 /* We're async whenever the serial device is. */
2cd58942 6992 return (current_target.to_async_mask_value) && serial_can_async_p (remote_desc);
6426a772
JM
6993}
6994
6995static int
6996remote_is_async_p (void)
6997{
23860348 6998 /* We're async whenever the serial device is. */
2cd58942 6999 return (current_target.to_async_mask_value) && serial_is_async_p (remote_desc);
6426a772
JM
7000}
7001
2acceee2
JM
7002/* Pass the SERIAL event on and up to the client. One day this code
7003 will be able to delay notifying the client of an event until the
23860348 7004 point where an entire packet has been received. */
2acceee2 7005
2bc416ba 7006static void (*async_client_callback) (enum inferior_event_type event_type,
23860348 7007 void *context);
2acceee2
JM
7008static void *async_client_context;
7009static serial_event_ftype remote_async_serial_handler;
7010
6426a772 7011static void
819cc324 7012remote_async_serial_handler (struct serial *scb, void *context)
6426a772 7013{
2acceee2
JM
7014 /* Don't propogate error information up to the client. Instead let
7015 the client find out about the error by querying the target. */
7016 async_client_callback (INF_REG_EVENT, async_client_context);
7017}
7018
7019static void
2bc416ba 7020remote_async (void (*callback) (enum inferior_event_type event_type,
23860348 7021 void *context), void *context)
2acceee2 7022{
ed9a39eb 7023 if (current_target.to_async_mask_value == 0)
8e65ff28 7024 internal_error (__FILE__, __LINE__,
e2e0b3e5 7025 _("Calling remote_async when async is masked"));
ed9a39eb 7026
2acceee2
JM
7027 if (callback != NULL)
7028 {
2cd58942 7029 serial_async (remote_desc, remote_async_serial_handler, NULL);
2acceee2
JM
7030 async_client_callback = callback;
7031 async_client_context = context;
7032 }
7033 else
2cd58942 7034 serial_async (remote_desc, NULL, NULL);
6426a772
JM
7035}
7036
43ff13b4
JM
7037/* Target async and target extended-async.
7038
7039 This are temporary targets, until it is all tested. Eventually
7040 async support will be incorporated int the usual 'remote'
23860348 7041 target. */
43ff13b4
JM
7042
7043static void
c2d11a7d 7044init_remote_async_ops (void)
43ff13b4
JM
7045{
7046 remote_async_ops.to_shortname = "async";
2bc416ba 7047 remote_async_ops.to_longname =
23860348 7048 "Remote serial target in async version of the gdb-specific protocol";
c5aa993b 7049 remote_async_ops.to_doc =
43ff13b4
JM
7050 "Use a remote computer via a serial line, using a gdb-specific protocol.\n\
7051Specify the serial device it is connected to (e.g. /dev/ttya).";
c5aa993b
JM
7052 remote_async_ops.to_open = remote_async_open;
7053 remote_async_ops.to_close = remote_close;
6ad8ae5c
DJ
7054 remote_async_ops.to_detach = remote_detach;
7055 remote_async_ops.to_disconnect = remote_disconnect;
c5aa993b
JM
7056 remote_async_ops.to_resume = remote_async_resume;
7057 remote_async_ops.to_wait = remote_async_wait;
7058 remote_async_ops.to_fetch_registers = remote_fetch_registers;
7059 remote_async_ops.to_store_registers = remote_store_registers;
7060 remote_async_ops.to_prepare_to_store = remote_prepare_to_store;
c8e73a31 7061 remote_async_ops.deprecated_xfer_memory = remote_xfer_memory;
c5aa993b 7062 remote_async_ops.to_files_info = remote_files_info;
43ff13b4
JM
7063 remote_async_ops.to_insert_breakpoint = remote_insert_breakpoint;
7064 remote_async_ops.to_remove_breakpoint = remote_remove_breakpoint;
3c3bea1c
GS
7065 remote_async_ops.to_can_use_hw_breakpoint = remote_check_watch_resources;
7066 remote_async_ops.to_insert_hw_breakpoint = remote_insert_hw_breakpoint;
7067 remote_async_ops.to_remove_hw_breakpoint = remote_remove_hw_breakpoint;
7068 remote_async_ops.to_insert_watchpoint = remote_insert_watchpoint;
7069 remote_async_ops.to_remove_watchpoint = remote_remove_watchpoint;
7070 remote_async_ops.to_stopped_by_watchpoint = remote_stopped_by_watchpoint;
7071 remote_async_ops.to_stopped_data_address = remote_stopped_data_address;
6426a772
JM
7072 remote_async_ops.to_terminal_inferior = remote_async_terminal_inferior;
7073 remote_async_ops.to_terminal_ours = remote_async_terminal_ours;
c5aa993b
JM
7074 remote_async_ops.to_kill = remote_async_kill;
7075 remote_async_ops.to_load = generic_load;
53a5351d 7076 remote_async_ops.to_mourn_inferior = remote_async_mourn;
c5aa993b
JM
7077 remote_async_ops.to_thread_alive = remote_thread_alive;
7078 remote_async_ops.to_find_new_threads = remote_threads_info;
cf759d3b
ND
7079 remote_async_ops.to_pid_to_str = remote_pid_to_str;
7080 remote_async_ops.to_extra_thread_info = remote_threads_extra_info;
43ff13b4 7081 remote_async_ops.to_stop = remote_stop;
4b8a223f 7082 remote_async_ops.to_xfer_partial = remote_xfer_partial;
96baa820 7083 remote_async_ops.to_rcmd = remote_rcmd;
c5aa993b
JM
7084 remote_async_ops.to_stratum = process_stratum;
7085 remote_async_ops.to_has_all_memory = 1;
7086 remote_async_ops.to_has_memory = 1;
7087 remote_async_ops.to_has_stack = 1;
7088 remote_async_ops.to_has_registers = 1;
7089 remote_async_ops.to_has_execution = 1;
7090 remote_async_ops.to_has_thread_control = tc_schedlock; /* can lock scheduler */
6426a772
JM
7091 remote_async_ops.to_can_async_p = remote_can_async_p;
7092 remote_async_ops.to_is_async_p = remote_is_async_p;
7093 remote_async_ops.to_async = remote_async;
ed9a39eb 7094 remote_async_ops.to_async_mask_value = 1;
c5aa993b 7095 remote_async_ops.to_magic = OPS_MAGIC;
fd79ecee 7096 remote_async_ops.to_memory_map = remote_memory_map;
a76d924d
DJ
7097 remote_async_ops.to_flash_erase = remote_flash_erase;
7098 remote_async_ops.to_flash_done = remote_flash_done;
cfa9d6d9 7099 remote_async_ops.to_read_description = remote_read_description;
43ff13b4
JM
7100}
7101
7102/* Set up the async extended remote vector by making a copy of the standard
7103 remote vector and adding to it. */
7104
7105static void
c2d11a7d 7106init_extended_async_remote_ops (void)
43ff13b4
JM
7107{
7108 extended_async_remote_ops = remote_async_ops;
7109
7110 extended_async_remote_ops.to_shortname = "extended-async";
c5aa993b 7111 extended_async_remote_ops.to_longname =
43ff13b4 7112 "Extended remote serial target in async gdb-specific protocol";
c5aa993b 7113 extended_async_remote_ops.to_doc =
43ff13b4
JM
7114 "Use a remote computer via a serial line, using an async gdb-specific protocol.\n\
7115Specify the serial device it is connected to (e.g. /dev/ttya).",
c5aa993b 7116 extended_async_remote_ops.to_open = extended_remote_async_open;
43ff13b4
JM
7117 extended_async_remote_ops.to_create_inferior = extended_remote_async_create_inferior;
7118 extended_async_remote_ops.to_mourn_inferior = extended_remote_mourn;
7119}
7120
5a2468f5 7121static void
c2d11a7d 7122set_remote_cmd (char *args, int from_tty)
5a2468f5 7123{
427c3a89 7124 help_list (remote_set_cmdlist, "set remote ", -1, gdb_stdout);
5a2468f5
JM
7125}
7126
d471ea57
AC
7127static void
7128show_remote_cmd (char *args, int from_tty)
7129{
37a105a1 7130 /* We can't just use cmd_show_list here, because we want to skip
427c3a89 7131 the redundant "show remote Z-packet" and the legacy aliases. */
37a105a1
DJ
7132 struct cleanup *showlist_chain;
7133 struct cmd_list_element *list = remote_show_cmdlist;
7134
7135 showlist_chain = make_cleanup_ui_out_tuple_begin_end (uiout, "showlist");
7136 for (; list != NULL; list = list->next)
7137 if (strcmp (list->name, "Z-packet") == 0)
7138 continue;
427c3a89
DJ
7139 else if (list->type == not_set_cmd)
7140 /* Alias commands are exactly like the original, except they
7141 don't have the normal type. */
7142 continue;
7143 else
37a105a1
DJ
7144 {
7145 struct cleanup *option_chain
7146 = make_cleanup_ui_out_tuple_begin_end (uiout, "option");
7147 ui_out_field_string (uiout, "name", list->name);
7148 ui_out_text (uiout, ": ");
427c3a89
DJ
7149 if (list->type == show_cmd)
7150 do_setshow_command ((char *) NULL, from_tty, list);
7151 else
7152 cmd_func (list, NULL, from_tty);
37a105a1
DJ
7153 /* Close the tuple. */
7154 do_cleanups (option_chain);
7155 }
427c3a89
DJ
7156
7157 /* Close the tuple. */
7158 do_cleanups (showlist_chain);
d471ea57 7159}
5a2468f5 7160
0f71a2f6 7161
23860348 7162/* Function to be called whenever a new objfile (shlib) is detected. */
dc8acb97
MS
7163static void
7164remote_new_objfile (struct objfile *objfile)
7165{
23860348 7166 if (remote_desc != 0) /* Have a remote connection. */
06d3b283 7167 remote_check_symbols (objfile);
dc8acb97
MS
7168}
7169
c906108c 7170void
fba45db2 7171_initialize_remote (void)
c906108c 7172{
ea9c271d
DJ
7173 struct remote_state *rs;
7174
0f71a2f6 7175 /* architecture specific data */
2bc416ba 7176 remote_gdbarch_data_handle =
23860348 7177 gdbarch_data_register_post_init (init_remote_state);
29709017
DJ
7178 remote_g_packet_data_handle =
7179 gdbarch_data_register_pre_init (remote_g_packet_data_init);
d01949b6 7180
ea9c271d
DJ
7181 /* Initialize the per-target state. At the moment there is only one
7182 of these, not one per target. Only one target is active at a
7183 time. The default buffer size is unimportant; it will be expanded
7184 whenever a larger buffer is needed. */
0b83947e 7185 rs = get_remote_state_raw ();
ea9c271d
DJ
7186 rs->buf_size = 400;
7187 rs->buf = xmalloc (rs->buf_size);
7188
c906108c
SS
7189 init_remote_ops ();
7190 add_target (&remote_ops);
7191
7192 init_extended_remote_ops ();
7193 add_target (&extended_remote_ops);
cce74817 7194
43ff13b4
JM
7195 init_remote_async_ops ();
7196 add_target (&remote_async_ops);
7197
7198 init_extended_async_remote_ops ();
7199 add_target (&extended_async_remote_ops);
7200
dc8acb97 7201 /* Hook into new objfile notification. */
06d3b283 7202 observer_attach_new_objfile (remote_new_objfile);
dc8acb97 7203
c906108c
SS
7204#if 0
7205 init_remote_threadtests ();
7206#endif
7207
23860348 7208 /* set/show remote ... */
d471ea57 7209
1bedd215 7210 add_prefix_cmd ("remote", class_maintenance, set_remote_cmd, _("\
5a2468f5
JM
7211Remote protocol specific variables\n\
7212Configure various remote-protocol specific variables such as\n\
1bedd215 7213the packets being used"),
cff3e48b 7214 &remote_set_cmdlist, "set remote ",
23860348 7215 0 /* allow-unknown */, &setlist);
1bedd215 7216 add_prefix_cmd ("remote", class_maintenance, show_remote_cmd, _("\
5a2468f5
JM
7217Remote protocol specific variables\n\
7218Configure various remote-protocol specific variables such as\n\
1bedd215 7219the packets being used"),
cff3e48b 7220 &remote_show_cmdlist, "show remote ",
23860348 7221 0 /* allow-unknown */, &showlist);
5a2468f5 7222
1a966eab
AC
7223 add_cmd ("compare-sections", class_obscure, compare_sections_command, _("\
7224Compare section data on target to the exec file.\n\
7225Argument is a single section name (default: all loaded sections)."),
c906108c
SS
7226 &cmdlist);
7227
1a966eab
AC
7228 add_cmd ("packet", class_maintenance, packet_command, _("\
7229Send an arbitrary packet to a remote target.\n\
c906108c
SS
7230 maintenance packet TEXT\n\
7231If GDB is talking to an inferior via the GDB serial protocol, then\n\
7232this command sends the string TEXT to the inferior, and displays the\n\
7233response packet. GDB supplies the initial `$' character, and the\n\
1a966eab 7234terminating `#' character and checksum."),
c906108c
SS
7235 &maintenancelist);
7236
7915a72c
AC
7237 add_setshow_boolean_cmd ("remotebreak", no_class, &remote_break, _("\
7238Set whether to send break if interrupted."), _("\
7239Show whether to send break if interrupted."), _("\
7240If set, a break, instead of a cntrl-c, is sent to the remote target."),
2c5b56ce 7241 NULL, NULL, /* FIXME: i18n: Whether to send break if interrupted is %s. */
e707bbc2 7242 &setlist, &showlist);
c906108c 7243
23860348 7244 /* Install commands for configuring memory read/write packets. */
11cf8741 7245
1a966eab
AC
7246 add_cmd ("remotewritesize", no_class, set_memory_write_packet_size, _("\
7247Set the maximum number of bytes per memory write packet (deprecated)."),
11cf8741 7248 &setlist);
1a966eab
AC
7249 add_cmd ("remotewritesize", no_class, show_memory_write_packet_size, _("\
7250Show the maximum number of bytes per memory write packet (deprecated)."),
11cf8741
JM
7251 &showlist);
7252 add_cmd ("memory-write-packet-size", no_class,
1a966eab
AC
7253 set_memory_write_packet_size, _("\
7254Set the maximum number of bytes per memory-write packet.\n\
7255Specify the number of bytes in a packet or 0 (zero) for the\n\
7256default packet size. The actual limit is further reduced\n\
7257dependent on the target. Specify ``fixed'' to disable the\n\
7258further restriction and ``limit'' to enable that restriction."),
11cf8741
JM
7259 &remote_set_cmdlist);
7260 add_cmd ("memory-read-packet-size", no_class,
1a966eab
AC
7261 set_memory_read_packet_size, _("\
7262Set the maximum number of bytes per memory-read packet.\n\
7263Specify the number of bytes in a packet or 0 (zero) for the\n\
7264default packet size. The actual limit is further reduced\n\
7265dependent on the target. Specify ``fixed'' to disable the\n\
7266further restriction and ``limit'' to enable that restriction."),
11cf8741
JM
7267 &remote_set_cmdlist);
7268 add_cmd ("memory-write-packet-size", no_class,
7269 show_memory_write_packet_size,
1a966eab 7270 _("Show the maximum number of bytes per memory-write packet."),
11cf8741
JM
7271 &remote_show_cmdlist);
7272 add_cmd ("memory-read-packet-size", no_class,
7273 show_memory_read_packet_size,
1a966eab 7274 _("Show the maximum number of bytes per memory-read packet."),
11cf8741 7275 &remote_show_cmdlist);
c906108c 7276
b3f42336 7277 add_setshow_zinteger_cmd ("hardware-watchpoint-limit", no_class,
7915a72c
AC
7278 &remote_hw_watchpoint_limit, _("\
7279Set the maximum number of target hardware watchpoints."), _("\
7280Show the maximum number of target hardware watchpoints."), _("\
7281Specify a negative limit for unlimited."),
2c5b56ce 7282 NULL, NULL, /* FIXME: i18n: The maximum number of target hardware watchpoints is %s. */
b3f42336
AC
7283 &remote_set_cmdlist, &remote_show_cmdlist);
7284 add_setshow_zinteger_cmd ("hardware-breakpoint-limit", no_class,
7915a72c
AC
7285 &remote_hw_breakpoint_limit, _("\
7286Set the maximum number of target hardware breakpoints."), _("\
7287Show the maximum number of target hardware breakpoints."), _("\
7288Specify a negative limit for unlimited."),
2c5b56ce 7289 NULL, NULL, /* FIXME: i18n: The maximum number of target hardware breakpoints is %s. */
b3f42336 7290 &remote_set_cmdlist, &remote_show_cmdlist);
501eef12 7291
4d28ad1e
AC
7292 add_setshow_integer_cmd ("remoteaddresssize", class_obscure,
7293 &remote_address_size, _("\
7294Set the maximum size of the address (in bits) in a memory packet."), _("\
7295Show the maximum size of the address (in bits) in a memory packet."), NULL,
7296 NULL,
7297 NULL, /* FIXME: i18n: */
7298 &setlist, &showlist);
c906108c 7299
444abaca 7300 add_packet_config_cmd (&remote_protocol_packets[PACKET_X],
bb572ddd 7301 "X", "binary-download", 1);
0f71a2f6 7302
444abaca 7303 add_packet_config_cmd (&remote_protocol_packets[PACKET_vCont],
bb572ddd 7304 "vCont", "verbose-resume", 0);
506fb367 7305
89be2091
DJ
7306 add_packet_config_cmd (&remote_protocol_packets[PACKET_QPassSignals],
7307 "QPassSignals", "pass-signals", 0);
7308
444abaca 7309 add_packet_config_cmd (&remote_protocol_packets[PACKET_qSymbol],
bb572ddd 7310 "qSymbol", "symbol-lookup", 0);
dc8acb97 7311
444abaca 7312 add_packet_config_cmd (&remote_protocol_packets[PACKET_P],
bb572ddd 7313 "P", "set-register", 1);
d471ea57 7314
444abaca 7315 add_packet_config_cmd (&remote_protocol_packets[PACKET_p],
bb572ddd 7316 "p", "fetch-register", 1);
b96ec7ac 7317
444abaca 7318 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z0],
bb572ddd 7319 "Z0", "software-breakpoint", 0);
d471ea57 7320
444abaca 7321 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z1],
bb572ddd 7322 "Z1", "hardware-breakpoint", 0);
d471ea57 7323
444abaca 7324 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z2],
bb572ddd 7325 "Z2", "write-watchpoint", 0);
d471ea57 7326
444abaca 7327 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z3],
bb572ddd 7328 "Z3", "read-watchpoint", 0);
d471ea57 7329
444abaca 7330 add_packet_config_cmd (&remote_protocol_packets[PACKET_Z4],
bb572ddd 7331 "Z4", "access-watchpoint", 0);
d471ea57 7332
0876f84a
DJ
7333 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_auxv],
7334 "qXfer:auxv:read", "read-aux-vector", 0);
802188a7 7335
23181151
DJ
7336 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_features],
7337 "qXfer:features:read", "target-features", 0);
7338
cfa9d6d9
DJ
7339 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_libraries],
7340 "qXfer:libraries:read", "library-info", 0);
7341
fd79ecee
DJ
7342 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_memory_map],
7343 "qXfer:memory-map:read", "memory-map", 0);
7344
0e7f50da
UW
7345 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_spu_read],
7346 "qXfer:spu:read", "read-spu-object", 0);
7347
7348 add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_spu_write],
7349 "qXfer:spu:write", "write-spu-object", 0);
7350
444abaca 7351 add_packet_config_cmd (&remote_protocol_packets[PACKET_qGetTLSAddr],
38691318 7352 "qGetTLSAddr", "get-thread-local-storage-address",
38691318
KB
7353 0);
7354
be2a5f71
DJ
7355 add_packet_config_cmd (&remote_protocol_packets[PACKET_qSupported],
7356 "qSupported", "supported-packets", 0);
7357
a6b151f1
DJ
7358 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_open],
7359 "vFile:open", "hostio-open", 0);
7360
7361 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_pread],
7362 "vFile:pread", "hostio-pread", 0);
7363
7364 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_pwrite],
7365 "vFile:pwrite", "hostio-pwrite", 0);
7366
7367 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_close],
7368 "vFile:close", "hostio-close", 0);
7369
7370 add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_unlink],
7371 "vFile:unlink", "hostio-unlink", 0);
7372
37a105a1
DJ
7373 /* Keep the old ``set remote Z-packet ...'' working. Each individual
7374 Z sub-packet has its own set and show commands, but users may
7375 have sets to this variable in their .gdbinit files (or in their
7376 documentation). */
e9e68a56 7377 add_setshow_auto_boolean_cmd ("Z-packet", class_obscure,
7915a72c
AC
7378 &remote_Z_packet_detect, _("\
7379Set use of remote protocol `Z' packets"), _("\
7380Show use of remote protocol `Z' packets "), _("\
3b64bf98 7381When set, GDB will attempt to use the remote breakpoint and watchpoint\n\
7915a72c 7382packets."),
e9e68a56 7383 set_remote_protocol_Z_packet_cmd,
2c5b56ce 7384 show_remote_protocol_Z_packet_cmd, /* FIXME: i18n: Use of remote protocol `Z' packets is %s. */
e9e68a56 7385 &remote_set_cmdlist, &remote_show_cmdlist);
449092f6 7386
a6b151f1
DJ
7387 add_prefix_cmd ("remote", class_files, remote_command, _("\
7388Manipulate files on the remote system\n\
7389Transfer files to and from the remote target system."),
7390 &remote_cmdlist, "remote ",
7391 0 /* allow-unknown */, &cmdlist);
7392
7393 add_cmd ("put", class_files, remote_put_command,
7394 _("Copy a local file to the remote system."),
7395 &remote_cmdlist);
7396
7397 add_cmd ("get", class_files, remote_get_command,
7398 _("Copy a remote file to the local system."),
7399 &remote_cmdlist);
7400
7401 add_cmd ("delete", class_files, remote_delete_command,
7402 _("Delete a remote file."),
7403 &remote_cmdlist);
7404
449092f6
CV
7405 /* Eventually initialize fileio. See fileio.c */
7406 initialize_remote_fileio (remote_set_cmdlist, remote_show_cmdlist);
c906108c 7407}
This page took 1.425112 seconds and 4 git commands to generate.