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