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