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