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