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