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