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