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