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