Home | History | Annotate | Line # | Download | only in gdb
remote.c revision 1.1.1.5
      1 /* Remote target communications for serial-line targets in custom GDB protocol
      2 
      3    Copyright (C) 1988-2017 Free Software Foundation, Inc.
      4 
      5    This file is part of GDB.
      6 
      7    This program is free software; you can redistribute it and/or modify
      8    it under the terms of the GNU General Public License as published by
      9    the Free Software Foundation; either version 3 of the License, or
     10    (at your option) any later version.
     11 
     12    This program is distributed in the hope that it will be useful,
     13    but WITHOUT ANY WARRANTY; without even the implied warranty of
     14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     15    GNU General Public License for more details.
     16 
     17    You should have received a copy of the GNU General Public License
     18    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
     19 
     20 /* See the GDB User Guide for details of the GDB remote protocol.  */
     21 
     22 #include "defs.h"
     23 #include <ctype.h>
     24 #include <fcntl.h>
     25 #include "inferior.h"
     26 #include "infrun.h"
     27 #include "bfd.h"
     28 #include "symfile.h"
     29 #include "target.h"
     30 /*#include "terminal.h" */
     31 #include "gdbcmd.h"
     32 #include "objfiles.h"
     33 #include "gdb-stabs.h"
     34 #include "gdbthread.h"
     35 #include "remote.h"
     36 #include "remote-notif.h"
     37 #include "regcache.h"
     38 #include "value.h"
     39 #include "observer.h"
     40 #include "solib.h"
     41 #include "cli/cli-decode.h"
     42 #include "cli/cli-setshow.h"
     43 #include "target-descriptions.h"
     44 #include "gdb_bfd.h"
     45 #include "filestuff.h"
     46 #include "rsp-low.h"
     47 #include "disasm.h"
     48 #include "location.h"
     49 
     50 #include "gdb_sys_time.h"
     51 
     52 #include "event-loop.h"
     53 #include "event-top.h"
     54 #include "inf-loop.h"
     55 
     56 #include <signal.h>
     57 #include "serial.h"
     58 
     59 #include "gdbcore.h" /* for exec_bfd */
     60 
     61 #include "remote-fileio.h"
     62 #include "gdb/fileio.h"
     63 #include <sys/stat.h>
     64 #include "xml-support.h"
     65 
     66 #include "memory-map.h"
     67 
     68 #include "tracepoint.h"
     69 #include "ax.h"
     70 #include "ax-gdb.h"
     71 #include "agent.h"
     72 #include "btrace.h"
     73 #include "record-btrace.h"
     74 #include <algorithm>
     75 
     76 /* Temp hacks for tracepoint encoding migration.  */
     77 static char *target_buf;
     78 static long target_buf_size;
     79 
     80 /* Per-program-space data key.  */
     81 static const struct program_space_data *remote_pspace_data;
     82 
     83 /* The variable registered as the control variable used by the
     84    remote exec-file commands.  While the remote exec-file setting is
     85    per-program-space, the set/show machinery uses this as the
     86    location of the remote exec-file value.  */
     87 static char *remote_exec_file_var;
     88 
     89 /* The size to align memory write packets, when practical.  The protocol
     90    does not guarantee any alignment, and gdb will generate short
     91    writes and unaligned writes, but even as a best-effort attempt this
     92    can improve bulk transfers.  For instance, if a write is misaligned
     93    relative to the target's data bus, the stub may need to make an extra
     94    round trip fetching data from the target.  This doesn't make a
     95    huge difference, but it's easy to do, so we try to be helpful.
     96 
     97    The alignment chosen is arbitrary; usually data bus width is
     98    important here, not the possibly larger cache line size.  */
     99 enum { REMOTE_ALIGN_WRITES = 16 };
    100 
    101 /* Prototypes for local functions.  */
    102 static int getpkt_sane (char **buf, long *sizeof_buf, int forever);
    103 static int getpkt_or_notif_sane (char **buf, long *sizeof_buf,
    104 				 int forever, int *is_notif);
    105 
    106 static void remote_files_info (struct target_ops *ignore);
    107 
    108 static void remote_prepare_to_store (struct target_ops *self,
    109 				     struct regcache *regcache);
    110 
    111 static void remote_open_1 (const char *, int, struct target_ops *,
    112 			   int extended_p);
    113 
    114 static void remote_close (struct target_ops *self);
    115 
    116 struct remote_state;
    117 
    118 static int remote_vkill (int pid, struct remote_state *rs);
    119 
    120 static void remote_kill_k (void);
    121 
    122 static void remote_mourn (struct target_ops *ops);
    123 
    124 static void extended_remote_restart (void);
    125 
    126 static void remote_send (char **buf, long *sizeof_buf_p);
    127 
    128 static int readchar (int timeout);
    129 
    130 static void remote_serial_write (const char *str, int len);
    131 
    132 static void remote_kill (struct target_ops *ops);
    133 
    134 static int remote_can_async_p (struct target_ops *);
    135 
    136 static int remote_is_async_p (struct target_ops *);
    137 
    138 static void remote_async (struct target_ops *ops, int enable);
    139 
    140 static void remote_thread_events (struct target_ops *ops, int enable);
    141 
    142 static void interrupt_query (void);
    143 
    144 static void set_general_thread (ptid_t ptid);
    145 static void set_continue_thread (ptid_t ptid);
    146 
    147 static void get_offsets (void);
    148 
    149 static void skip_frame (void);
    150 
    151 static long read_frame (char **buf_p, long *sizeof_buf);
    152 
    153 static int hexnumlen (ULONGEST num);
    154 
    155 static void init_remote_ops (void);
    156 
    157 static void init_extended_remote_ops (void);
    158 
    159 static void remote_stop (struct target_ops *self, ptid_t);
    160 
    161 static int stubhex (int ch);
    162 
    163 static int hexnumstr (char *, ULONGEST);
    164 
    165 static int hexnumnstr (char *, ULONGEST, int);
    166 
    167 static CORE_ADDR remote_address_masked (CORE_ADDR);
    168 
    169 static void print_packet (const char *);
    170 
    171 static void compare_sections_command (char *, int);
    172 
    173 static void packet_command (char *, int);
    174 
    175 static int stub_unpack_int (char *buff, int fieldlength);
    176 
    177 static ptid_t remote_current_thread (ptid_t oldptid);
    178 
    179 static int putpkt_binary (const 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 show_remote_protocol_packet_cmd (struct ui_file *file,
    188 					     int from_tty,
    189 					     struct cmd_list_element *c,
    190 					     const char *value);
    191 
    192 static char *write_ptid (char *buf, const char *endbuf, ptid_t ptid);
    193 static ptid_t read_ptid (char *buf, char **obuf);
    194 
    195 static void remote_set_permissions (struct target_ops *self);
    196 
    197 static int remote_get_trace_status (struct target_ops *self,
    198 				    struct trace_status *ts);
    199 
    200 static int remote_upload_tracepoints (struct target_ops *self,
    201 				      struct uploaded_tp **utpp);
    202 
    203 static int remote_upload_trace_state_variables (struct target_ops *self,
    204 						struct uploaded_tsv **utsvp);
    205 
    206 static void remote_query_supported (void);
    207 
    208 static void remote_check_symbols (void);
    209 
    210 void _initialize_remote (void);
    211 
    212 struct stop_reply;
    213 static void stop_reply_xfree (struct stop_reply *);
    214 static void remote_parse_stop_reply (char *, struct stop_reply *);
    215 static void push_stop_reply (struct stop_reply *);
    216 static void discard_pending_stop_replies_in_queue (struct remote_state *);
    217 static int peek_stop_reply (ptid_t ptid);
    218 
    219 struct threads_listing_context;
    220 static void remove_new_fork_children (struct threads_listing_context *);
    221 
    222 static void remote_async_inferior_event_handler (gdb_client_data);
    223 
    224 static void remote_terminal_ours (struct target_ops *self);
    225 
    226 static int remote_read_description_p (struct target_ops *target);
    227 
    228 static void remote_console_output (char *msg);
    229 
    230 static int remote_supports_cond_breakpoints (struct target_ops *self);
    231 
    232 static int remote_can_run_breakpoint_commands (struct target_ops *self);
    233 
    234 static void remote_btrace_reset (void);
    235 
    236 static void remote_btrace_maybe_reopen (void);
    237 
    238 static int stop_reply_queue_length (void);
    239 
    240 static void readahead_cache_invalidate (void);
    241 
    242 static void remote_unpush_and_throw (void);
    243 
    244 /* For "remote".  */
    245 
    246 static struct cmd_list_element *remote_cmdlist;
    247 
    248 /* For "set remote" and "show remote".  */
    249 
    250 static struct cmd_list_element *remote_set_cmdlist;
    251 static struct cmd_list_element *remote_show_cmdlist;
    252 
    253 /* Stub vCont actions support.
    254 
    255    Each field is a boolean flag indicating whether the stub reports
    256    support for the corresponding action.  */
    257 
    258 struct vCont_action_support
    259 {
    260   /* vCont;t */
    261   int t;
    262 
    263   /* vCont;r */
    264   int r;
    265 
    266   /* vCont;s */
    267   int s;
    268 
    269   /* vCont;S */
    270   int S;
    271 };
    272 
    273 /* Controls whether GDB is willing to use range stepping.  */
    274 
    275 static int use_range_stepping = 1;
    276 
    277 #define OPAQUETHREADBYTES 8
    278 
    279 /* a 64 bit opaque identifier */
    280 typedef unsigned char threadref[OPAQUETHREADBYTES];
    281 
    282 /* About this many threadisds fit in a packet.  */
    283 
    284 #define MAXTHREADLISTRESULTS 32
    285 
    286 /* The max number of chars in debug output.  The rest of chars are
    287    omitted.  */
    288 
    289 #define REMOTE_DEBUG_MAX_CHAR 512
    290 
    291 /* Data for the vFile:pread readahead cache.  */
    292 
    293 struct readahead_cache
    294 {
    295   /* The file descriptor for the file that is being cached.  -1 if the
    296      cache is invalid.  */
    297   int fd;
    298 
    299   /* The offset into the file that the cache buffer corresponds
    300      to.  */
    301   ULONGEST offset;
    302 
    303   /* The buffer holding the cache contents.  */
    304   gdb_byte *buf;
    305   /* The buffer's size.  We try to read as much as fits into a packet
    306      at a time.  */
    307   size_t bufsize;
    308 
    309   /* Cache hit and miss counters.  */
    310   ULONGEST hit_count;
    311   ULONGEST miss_count;
    312 };
    313 
    314 /* Description of the remote protocol state for the currently
    315    connected target.  This is per-target state, and independent of the
    316    selected architecture.  */
    317 
    318 struct remote_state
    319 {
    320   /* A buffer to use for incoming packets, and its current size.  The
    321      buffer is grown dynamically for larger incoming packets.
    322      Outgoing packets may also be constructed in this buffer.
    323      BUF_SIZE is always at least REMOTE_PACKET_SIZE;
    324      REMOTE_PACKET_SIZE should be used to limit the length of outgoing
    325      packets.  */
    326   char *buf;
    327   long buf_size;
    328 
    329   /* True if we're going through initial connection setup (finding out
    330      about the remote side's threads, relocating symbols, etc.).  */
    331   int starting_up;
    332 
    333   /* If we negotiated packet size explicitly (and thus can bypass
    334      heuristics for the largest packet size that will not overflow
    335      a buffer in the stub), this will be set to that packet size.
    336      Otherwise zero, meaning to use the guessed size.  */
    337   long explicit_packet_size;
    338 
    339   /* remote_wait is normally called when the target is running and
    340      waits for a stop reply packet.  But sometimes we need to call it
    341      when the target is already stopped.  We can send a "?" packet
    342      and have remote_wait read the response.  Or, if we already have
    343      the response, we can stash it in BUF and tell remote_wait to
    344      skip calling getpkt.  This flag is set when BUF contains a
    345      stop reply packet and the target is not waiting.  */
    346   int cached_wait_status;
    347 
    348   /* True, if in no ack mode.  That is, neither GDB nor the stub will
    349      expect acks from each other.  The connection is assumed to be
    350      reliable.  */
    351   int noack_mode;
    352 
    353   /* True if we're connected in extended remote mode.  */
    354   int extended;
    355 
    356   /* True if we resumed the target and we're waiting for the target to
    357      stop.  In the mean time, we can't start another command/query.
    358      The remote server wouldn't be ready to process it, so we'd
    359      timeout waiting for a reply that would never come and eventually
    360      we'd close the connection.  This can happen in asynchronous mode
    361      because we allow GDB commands while the target is running.  */
    362   int waiting_for_stop_reply;
    363 
    364   /* The status of the stub support for the various vCont actions.  */
    365   struct vCont_action_support supports_vCont;
    366 
    367   /* Nonzero if the user has pressed Ctrl-C, but the target hasn't
    368      responded to that.  */
    369   int ctrlc_pending_p;
    370 
    371   /* True if we saw a Ctrl-C while reading or writing from/to the
    372      remote descriptor.  At that point it is not safe to send a remote
    373      interrupt packet, so we instead remember we saw the Ctrl-C and
    374      process it once we're done with sending/receiving the current
    375      packet, which should be shortly.  If however that takes too long,
    376      and the user presses Ctrl-C again, we offer to disconnect.  */
    377   int got_ctrlc_during_io;
    378 
    379   /* Descriptor for I/O to remote machine.  Initialize it to NULL so that
    380      remote_open knows that we don't have a file open when the program
    381      starts.  */
    382   struct serial *remote_desc;
    383 
    384   /* These are the threads which we last sent to the remote system.  The
    385      TID member will be -1 for all or -2 for not sent yet.  */
    386   ptid_t general_thread;
    387   ptid_t continue_thread;
    388 
    389   /* This is the traceframe which we last selected on the remote system.
    390      It will be -1 if no traceframe is selected.  */
    391   int remote_traceframe_number;
    392 
    393   char *last_pass_packet;
    394 
    395   /* The last QProgramSignals packet sent to the target.  We bypass
    396      sending a new program signals list down to the target if the new
    397      packet is exactly the same as the last we sent.  IOW, we only let
    398      the target know about program signals list changes.  */
    399   char *last_program_signals_packet;
    400 
    401   enum gdb_signal last_sent_signal;
    402 
    403   int last_sent_step;
    404 
    405   /* The execution direction of the last resume we got.  */
    406   enum exec_direction_kind last_resume_exec_dir;
    407 
    408   char *finished_object;
    409   char *finished_annex;
    410   ULONGEST finished_offset;
    411 
    412   /* Should we try the 'ThreadInfo' query packet?
    413 
    414      This variable (NOT available to the user: auto-detect only!)
    415      determines whether GDB will use the new, simpler "ThreadInfo"
    416      query or the older, more complex syntax for thread queries.
    417      This is an auto-detect variable (set to true at each connect,
    418      and set to false when the target fails to recognize it).  */
    419   int use_threadinfo_query;
    420   int use_threadextra_query;
    421 
    422   threadref echo_nextthread;
    423   threadref nextthread;
    424   threadref resultthreadlist[MAXTHREADLISTRESULTS];
    425 
    426   /* The state of remote notification.  */
    427   struct remote_notif_state *notif_state;
    428 
    429   /* The branch trace configuration.  */
    430   struct btrace_config btrace_config;
    431 
    432   /* The argument to the last "vFile:setfs:" packet we sent, used
    433      to avoid sending repeated unnecessary "vFile:setfs:" packets.
    434      Initialized to -1 to indicate that no "vFile:setfs:" packet
    435      has yet been sent.  */
    436   int fs_pid;
    437 
    438   /* A readahead cache for vFile:pread.  Often, reading a binary
    439      involves a sequence of small reads.  E.g., when parsing an ELF
    440      file.  A readahead cache helps mostly the case of remote
    441      debugging on a connection with higher latency, due to the
    442      request/reply nature of the RSP.  We only cache data for a single
    443      file descriptor at a time.  */
    444   struct readahead_cache readahead_cache;
    445 };
    446 
    447 /* Private data that we'll store in (struct thread_info)->private.  */
    448 struct private_thread_info
    449 {
    450   char *extra;
    451   char *name;
    452   int core;
    453 
    454   /* Whether the target stopped for a breakpoint/watchpoint.  */
    455   enum target_stop_reason stop_reason;
    456 
    457   /* This is set to the data address of the access causing the target
    458      to stop for a watchpoint.  */
    459   CORE_ADDR watch_data_address;
    460 
    461   /* Fields used by the vCont action coalescing implemented in
    462      remote_resume / remote_commit_resume.  remote_resume stores each
    463      thread's last resume request in these fields, so that a later
    464      remote_commit_resume knows which is the proper action for this
    465      thread to include in the vCont packet.  */
    466 
    467   /* True if the last target_resume call for this thread was a step
    468      request, false if a continue request.  */
    469   int last_resume_step;
    470 
    471   /* The signal specified in the last target_resume call for this
    472      thread.  */
    473   enum gdb_signal last_resume_sig;
    474 
    475   /* Whether this thread was already vCont-resumed on the remote
    476      side.  */
    477   int vcont_resumed;
    478 };
    479 
    480 static void
    481 free_private_thread_info (struct private_thread_info *info)
    482 {
    483   xfree (info->extra);
    484   xfree (info->name);
    485   xfree (info);
    486 }
    487 
    488 /* This data could be associated with a target, but we do not always
    489    have access to the current target when we need it, so for now it is
    490    static.  This will be fine for as long as only one target is in use
    491    at a time.  */
    492 static struct remote_state *remote_state;
    493 
    494 static struct remote_state *
    495 get_remote_state_raw (void)
    496 {
    497   return remote_state;
    498 }
    499 
    500 /* Allocate a new struct remote_state with xmalloc, initialize it, and
    501    return it.  */
    502 
    503 static struct remote_state *
    504 new_remote_state (void)
    505 {
    506   struct remote_state *result = XCNEW (struct remote_state);
    507 
    508   /* The default buffer size is unimportant; it will be expanded
    509      whenever a larger buffer is needed. */
    510   result->buf_size = 400;
    511   result->buf = (char *) xmalloc (result->buf_size);
    512   result->remote_traceframe_number = -1;
    513   result->last_sent_signal = GDB_SIGNAL_0;
    514   result->last_resume_exec_dir = EXEC_FORWARD;
    515   result->fs_pid = -1;
    516 
    517   return result;
    518 }
    519 
    520 /* Description of the remote protocol for a given architecture.  */
    521 
    522 struct packet_reg
    523 {
    524   long offset; /* Offset into G packet.  */
    525   long regnum; /* GDB's internal register number.  */
    526   LONGEST pnum; /* Remote protocol register number.  */
    527   int in_g_packet; /* Always part of G packet.  */
    528   /* long size in bytes;  == register_size (target_gdbarch (), regnum);
    529      at present.  */
    530   /* char *name; == gdbarch_register_name (target_gdbarch (), regnum);
    531      at present.  */
    532 };
    533 
    534 struct remote_arch_state
    535 {
    536   /* Description of the remote protocol registers.  */
    537   long sizeof_g_packet;
    538 
    539   /* Description of the remote protocol registers indexed by REGNUM
    540      (making an array gdbarch_num_regs in size).  */
    541   struct packet_reg *regs;
    542 
    543   /* This is the size (in chars) of the first response to the ``g''
    544      packet.  It is used as a heuristic when determining the maximum
    545      size of memory-read and memory-write packets.  A target will
    546      typically only reserve a buffer large enough to hold the ``g''
    547      packet.  The size does not include packet overhead (headers and
    548      trailers).  */
    549   long actual_register_packet_size;
    550 
    551   /* This is the maximum size (in chars) of a non read/write packet.
    552      It is also used as a cap on the size of read/write packets.  */
    553   long remote_packet_size;
    554 };
    555 
    556 /* Utility: generate error from an incoming stub packet.  */
    557 static void
    558 trace_error (char *buf)
    559 {
    560   if (*buf++ != 'E')
    561     return;			/* not an error msg */
    562   switch (*buf)
    563     {
    564     case '1':			/* malformed packet error */
    565       if (*++buf == '0')	/*   general case: */
    566 	error (_("remote.c: error in outgoing packet."));
    567       else
    568 	error (_("remote.c: error in outgoing packet at field #%ld."),
    569 	       strtol (buf, NULL, 16));
    570     default:
    571       error (_("Target returns error code '%s'."), buf);
    572     }
    573 }
    574 
    575 /* Utility: wait for reply from stub, while accepting "O" packets.  */
    576 static char *
    577 remote_get_noisy_reply (char **buf_p,
    578 			long *sizeof_buf)
    579 {
    580   do				/* Loop on reply from remote stub.  */
    581     {
    582       char *buf;
    583 
    584       QUIT;			/* Allow user to bail out with ^C.  */
    585       getpkt (buf_p, sizeof_buf, 0);
    586       buf = *buf_p;
    587       if (buf[0] == 'E')
    588 	trace_error (buf);
    589       else if (startswith (buf, "qRelocInsn:"))
    590 	{
    591 	  ULONGEST ul;
    592 	  CORE_ADDR from, to, org_to;
    593 	  char *p, *pp;
    594 	  int adjusted_size = 0;
    595 	  int relocated = 0;
    596 
    597 	  p = buf + strlen ("qRelocInsn:");
    598 	  pp = unpack_varlen_hex (p, &ul);
    599 	  if (*pp != ';')
    600 	    error (_("invalid qRelocInsn packet: %s"), buf);
    601 	  from = ul;
    602 
    603 	  p = pp + 1;
    604 	  unpack_varlen_hex (p, &ul);
    605 	  to = ul;
    606 
    607 	  org_to = to;
    608 
    609 	  TRY
    610 	    {
    611 	      gdbarch_relocate_instruction (target_gdbarch (), &to, from);
    612 	      relocated = 1;
    613 	    }
    614 	  CATCH (ex, RETURN_MASK_ALL)
    615 	    {
    616 	      if (ex.error == MEMORY_ERROR)
    617 		{
    618 		  /* Propagate memory errors silently back to the
    619 		     target.  The stub may have limited the range of
    620 		     addresses we can write to, for example.  */
    621 		}
    622 	      else
    623 		{
    624 		  /* Something unexpectedly bad happened.  Be verbose
    625 		     so we can tell what, and propagate the error back
    626 		     to the stub, so it doesn't get stuck waiting for
    627 		     a response.  */
    628 		  exception_fprintf (gdb_stderr, ex,
    629 				     _("warning: relocating instruction: "));
    630 		}
    631 	      putpkt ("E01");
    632 	    }
    633 	  END_CATCH
    634 
    635 	  if (relocated)
    636 	    {
    637 	      adjusted_size = to - org_to;
    638 
    639 	      xsnprintf (buf, *sizeof_buf, "qRelocInsn:%x", adjusted_size);
    640 	      putpkt (buf);
    641 	    }
    642 	}
    643       else if (buf[0] == 'O' && buf[1] != 'K')
    644 	remote_console_output (buf + 1);	/* 'O' message from stub */
    645       else
    646 	return buf;		/* Here's the actual reply.  */
    647     }
    648   while (1);
    649 }
    650 
    651 /* Handle for retreving the remote protocol data from gdbarch.  */
    652 static struct gdbarch_data *remote_gdbarch_data_handle;
    653 
    654 static struct remote_arch_state *
    655 get_remote_arch_state (void)
    656 {
    657   gdb_assert (target_gdbarch () != NULL);
    658   return ((struct remote_arch_state *)
    659 	  gdbarch_data (target_gdbarch (), remote_gdbarch_data_handle));
    660 }
    661 
    662 /* Fetch the global remote target state.  */
    663 
    664 static struct remote_state *
    665 get_remote_state (void)
    666 {
    667   /* Make sure that the remote architecture state has been
    668      initialized, because doing so might reallocate rs->buf.  Any
    669      function which calls getpkt also needs to be mindful of changes
    670      to rs->buf, but this call limits the number of places which run
    671      into trouble.  */
    672   get_remote_arch_state ();
    673 
    674   return get_remote_state_raw ();
    675 }
    676 
    677 /* Cleanup routine for the remote module's pspace data.  */
    678 
    679 static void
    680 remote_pspace_data_cleanup (struct program_space *pspace, void *arg)
    681 {
    682   char *remote_exec_file = (char *) arg;
    683 
    684   xfree (remote_exec_file);
    685 }
    686 
    687 /* Fetch the remote exec-file from the current program space.  */
    688 
    689 static const char *
    690 get_remote_exec_file (void)
    691 {
    692   char *remote_exec_file;
    693 
    694   remote_exec_file
    695     = (char *) program_space_data (current_program_space,
    696 				   remote_pspace_data);
    697   if (remote_exec_file == NULL)
    698     return "";
    699 
    700   return remote_exec_file;
    701 }
    702 
    703 /* Set the remote exec file for PSPACE.  */
    704 
    705 static void
    706 set_pspace_remote_exec_file (struct program_space *pspace,
    707 			char *remote_exec_file)
    708 {
    709   char *old_file = (char *) program_space_data (pspace, remote_pspace_data);
    710 
    711   xfree (old_file);
    712   set_program_space_data (pspace, remote_pspace_data,
    713 			  xstrdup (remote_exec_file));
    714 }
    715 
    716 /* The "set/show remote exec-file" set command hook.  */
    717 
    718 static void
    719 set_remote_exec_file (char *ignored, int from_tty,
    720 		      struct cmd_list_element *c)
    721 {
    722   gdb_assert (remote_exec_file_var != NULL);
    723   set_pspace_remote_exec_file (current_program_space, remote_exec_file_var);
    724 }
    725 
    726 /* The "set/show remote exec-file" show command hook.  */
    727 
    728 static void
    729 show_remote_exec_file (struct ui_file *file, int from_tty,
    730 		       struct cmd_list_element *cmd, const char *value)
    731 {
    732   fprintf_filtered (file, "%s\n", remote_exec_file_var);
    733 }
    734 
    735 static int
    736 compare_pnums (const void *lhs_, const void *rhs_)
    737 {
    738   const struct packet_reg * const *lhs
    739     = (const struct packet_reg * const *) lhs_;
    740   const struct packet_reg * const *rhs
    741     = (const struct packet_reg * const *) rhs_;
    742 
    743   if ((*lhs)->pnum < (*rhs)->pnum)
    744     return -1;
    745   else if ((*lhs)->pnum == (*rhs)->pnum)
    746     return 0;
    747   else
    748     return 1;
    749 }
    750 
    751 static int
    752 map_regcache_remote_table (struct gdbarch *gdbarch, struct packet_reg *regs)
    753 {
    754   int regnum, num_remote_regs, offset;
    755   struct packet_reg **remote_regs;
    756 
    757   for (regnum = 0; regnum < gdbarch_num_regs (gdbarch); regnum++)
    758     {
    759       struct packet_reg *r = &regs[regnum];
    760 
    761       if (register_size (gdbarch, regnum) == 0)
    762 	/* Do not try to fetch zero-sized (placeholder) registers.  */
    763 	r->pnum = -1;
    764       else
    765 	r->pnum = gdbarch_remote_register_number (gdbarch, regnum);
    766 
    767       r->regnum = regnum;
    768     }
    769 
    770   /* Define the g/G packet format as the contents of each register
    771      with a remote protocol number, in order of ascending protocol
    772      number.  */
    773 
    774   remote_regs = XALLOCAVEC (struct packet_reg *, gdbarch_num_regs (gdbarch));
    775   for (num_remote_regs = 0, regnum = 0;
    776        regnum < gdbarch_num_regs (gdbarch);
    777        regnum++)
    778     if (regs[regnum].pnum != -1)
    779       remote_regs[num_remote_regs++] = &regs[regnum];
    780 
    781   qsort (remote_regs, num_remote_regs, sizeof (struct packet_reg *),
    782 	 compare_pnums);
    783 
    784   for (regnum = 0, offset = 0; regnum < num_remote_regs; regnum++)
    785     {
    786       remote_regs[regnum]->in_g_packet = 1;
    787       remote_regs[regnum]->offset = offset;
    788       offset += register_size (gdbarch, remote_regs[regnum]->regnum);
    789     }
    790 
    791   return offset;
    792 }
    793 
    794 /* Given the architecture described by GDBARCH, return the remote
    795    protocol register's number and the register's offset in the g/G
    796    packets of GDB register REGNUM, in PNUM and POFFSET respectively.
    797    If the target does not have a mapping for REGNUM, return false,
    798    otherwise, return true.  */
    799 
    800 int
    801 remote_register_number_and_offset (struct gdbarch *gdbarch, int regnum,
    802 				   int *pnum, int *poffset)
    803 {
    804   struct packet_reg *regs;
    805   struct cleanup *old_chain;
    806 
    807   gdb_assert (regnum < gdbarch_num_regs (gdbarch));
    808 
    809   regs = XCNEWVEC (struct packet_reg, gdbarch_num_regs (gdbarch));
    810   old_chain = make_cleanup (xfree, regs);
    811 
    812   map_regcache_remote_table (gdbarch, regs);
    813 
    814   *pnum = regs[regnum].pnum;
    815   *poffset = regs[regnum].offset;
    816 
    817   do_cleanups (old_chain);
    818 
    819   return *pnum != -1;
    820 }
    821 
    822 static void *
    823 init_remote_state (struct gdbarch *gdbarch)
    824 {
    825   struct remote_state *rs = get_remote_state_raw ();
    826   struct remote_arch_state *rsa;
    827 
    828   rsa = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct remote_arch_state);
    829 
    830   /* Use the architecture to build a regnum<->pnum table, which will be
    831      1:1 unless a feature set specifies otherwise.  */
    832   rsa->regs = GDBARCH_OBSTACK_CALLOC (gdbarch,
    833 				      gdbarch_num_regs (gdbarch),
    834 				      struct packet_reg);
    835 
    836   /* Record the maximum possible size of the g packet - it may turn out
    837      to be smaller.  */
    838   rsa->sizeof_g_packet = map_regcache_remote_table (gdbarch, rsa->regs);
    839 
    840   /* Default maximum number of characters in a packet body.  Many
    841      remote stubs have a hardwired buffer size of 400 bytes
    842      (c.f. BUFMAX in m68k-stub.c and i386-stub.c).  BUFMAX-1 is used
    843      as the maximum packet-size to ensure that the packet and an extra
    844      NUL character can always fit in the buffer.  This stops GDB
    845      trashing stubs that try to squeeze an extra NUL into what is
    846      already a full buffer (As of 1999-12-04 that was most stubs).  */
    847   rsa->remote_packet_size = 400 - 1;
    848 
    849   /* This one is filled in when a ``g'' packet is received.  */
    850   rsa->actual_register_packet_size = 0;
    851 
    852   /* Should rsa->sizeof_g_packet needs more space than the
    853      default, adjust the size accordingly.  Remember that each byte is
    854      encoded as two characters.  32 is the overhead for the packet
    855      header / footer.  NOTE: cagney/1999-10-26: I suspect that 8
    856      (``$NN:G...#NN'') is a better guess, the below has been padded a
    857      little.  */
    858   if (rsa->sizeof_g_packet > ((rsa->remote_packet_size - 32) / 2))
    859     rsa->remote_packet_size = (rsa->sizeof_g_packet * 2 + 32);
    860 
    861   /* Make sure that the packet buffer is plenty big enough for
    862      this architecture.  */
    863   if (rs->buf_size < rsa->remote_packet_size)
    864     {
    865       rs->buf_size = 2 * rsa->remote_packet_size;
    866       rs->buf = (char *) xrealloc (rs->buf, rs->buf_size);
    867     }
    868 
    869   return rsa;
    870 }
    871 
    872 /* Return the current allowed size of a remote packet.  This is
    873    inferred from the current architecture, and should be used to
    874    limit the length of outgoing packets.  */
    875 static long
    876 get_remote_packet_size (void)
    877 {
    878   struct remote_state *rs = get_remote_state ();
    879   struct remote_arch_state *rsa = get_remote_arch_state ();
    880 
    881   if (rs->explicit_packet_size)
    882     return rs->explicit_packet_size;
    883 
    884   return rsa->remote_packet_size;
    885 }
    886 
    887 static struct packet_reg *
    888 packet_reg_from_regnum (struct remote_arch_state *rsa, long regnum)
    889 {
    890   if (regnum < 0 && regnum >= gdbarch_num_regs (target_gdbarch ()))
    891     return NULL;
    892   else
    893     {
    894       struct packet_reg *r = &rsa->regs[regnum];
    895 
    896       gdb_assert (r->regnum == regnum);
    897       return r;
    898     }
    899 }
    900 
    901 static struct packet_reg *
    902 packet_reg_from_pnum (struct remote_arch_state *rsa, LONGEST pnum)
    903 {
    904   int i;
    905 
    906   for (i = 0; i < gdbarch_num_regs (target_gdbarch ()); i++)
    907     {
    908       struct packet_reg *r = &rsa->regs[i];
    909 
    910       if (r->pnum == pnum)
    911 	return r;
    912     }
    913   return NULL;
    914 }
    915 
    916 static struct target_ops remote_ops;
    917 
    918 static struct target_ops extended_remote_ops;
    919 
    920 /* FIXME: cagney/1999-09-23: Even though getpkt was called with
    921    ``forever'' still use the normal timeout mechanism.  This is
    922    currently used by the ASYNC code to guarentee that target reads
    923    during the initial connect always time-out.  Once getpkt has been
    924    modified to return a timeout indication and, in turn
    925    remote_wait()/wait_for_inferior() have gained a timeout parameter
    926    this can go away.  */
    927 static int wait_forever_enabled_p = 1;
    928 
    929 /* Allow the user to specify what sequence to send to the remote
    930    when he requests a program interruption: Although ^C is usually
    931    what remote systems expect (this is the default, here), it is
    932    sometimes preferable to send a break.  On other systems such
    933    as the Linux kernel, a break followed by g, which is Magic SysRq g
    934    is required in order to interrupt the execution.  */
    935 const char interrupt_sequence_control_c[] = "Ctrl-C";
    936 const char interrupt_sequence_break[] = "BREAK";
    937 const char interrupt_sequence_break_g[] = "BREAK-g";
    938 static const char *const interrupt_sequence_modes[] =
    939   {
    940     interrupt_sequence_control_c,
    941     interrupt_sequence_break,
    942     interrupt_sequence_break_g,
    943     NULL
    944   };
    945 static const char *interrupt_sequence_mode = interrupt_sequence_control_c;
    946 
    947 static void
    948 show_interrupt_sequence (struct ui_file *file, int from_tty,
    949 			 struct cmd_list_element *c,
    950 			 const char *value)
    951 {
    952   if (interrupt_sequence_mode == interrupt_sequence_control_c)
    953     fprintf_filtered (file,
    954 		      _("Send the ASCII ETX character (Ctrl-c) "
    955 			"to the remote target to interrupt the "
    956 			"execution of the program.\n"));
    957   else if (interrupt_sequence_mode == interrupt_sequence_break)
    958     fprintf_filtered (file,
    959 		      _("send a break signal to the remote target "
    960 			"to interrupt the execution of the program.\n"));
    961   else if (interrupt_sequence_mode == interrupt_sequence_break_g)
    962     fprintf_filtered (file,
    963 		      _("Send a break signal and 'g' a.k.a. Magic SysRq g to "
    964 			"the remote target to interrupt the execution "
    965 			"of Linux kernel.\n"));
    966   else
    967     internal_error (__FILE__, __LINE__,
    968 		    _("Invalid value for interrupt_sequence_mode: %s."),
    969 		    interrupt_sequence_mode);
    970 }
    971 
    972 /* This boolean variable specifies whether interrupt_sequence is sent
    973    to the remote target when gdb connects to it.
    974    This is mostly needed when you debug the Linux kernel: The Linux kernel
    975    expects BREAK g which is Magic SysRq g for connecting gdb.  */
    976 static int interrupt_on_connect = 0;
    977 
    978 /* This variable is used to implement the "set/show remotebreak" commands.
    979    Since these commands are now deprecated in favor of "set/show remote
    980    interrupt-sequence", it no longer has any effect on the code.  */
    981 static int remote_break;
    982 
    983 static void
    984 set_remotebreak (char *args, int from_tty, struct cmd_list_element *c)
    985 {
    986   if (remote_break)
    987     interrupt_sequence_mode = interrupt_sequence_break;
    988   else
    989     interrupt_sequence_mode = interrupt_sequence_control_c;
    990 }
    991 
    992 static void
    993 show_remotebreak (struct ui_file *file, int from_tty,
    994 		  struct cmd_list_element *c,
    995 		  const char *value)
    996 {
    997 }
    998 
    999 /* This variable sets the number of bits in an address that are to be
   1000    sent in a memory ("M" or "m") packet.  Normally, after stripping
   1001    leading zeros, the entire address would be sent.  This variable
   1002    restricts the address to REMOTE_ADDRESS_SIZE bits.  HISTORY: The
   1003    initial implementation of remote.c restricted the address sent in
   1004    memory packets to ``host::sizeof long'' bytes - (typically 32
   1005    bits).  Consequently, for 64 bit targets, the upper 32 bits of an
   1006    address was never sent.  Since fixing this bug may cause a break in
   1007    some remote targets this variable is principly provided to
   1008    facilitate backward compatibility.  */
   1009 
   1010 static unsigned int remote_address_size;
   1011 
   1012 /* Temporary to track who currently owns the terminal.  See
   1013    remote_terminal_* for more details.  */
   1014 
   1015 static int remote_async_terminal_ours_p;
   1016 
   1017 
   1018 /* User configurable variables for the number of characters in a
   1020    memory read/write packet.  MIN (rsa->remote_packet_size,
   1021    rsa->sizeof_g_packet) is the default.  Some targets need smaller
   1022    values (fifo overruns, et.al.) and some users need larger values
   1023    (speed up transfers).  The variables ``preferred_*'' (the user
   1024    request), ``current_*'' (what was actually set) and ``forced_*''
   1025    (Positive - a soft limit, negative - a hard limit).  */
   1026 
   1027 struct memory_packet_config
   1028 {
   1029   const char *name;
   1030   long size;
   1031   int fixed_p;
   1032 };
   1033 
   1034 /* The default max memory-write-packet-size.  The 16k is historical.
   1035    (It came from older GDB's using alloca for buffers and the
   1036    knowledge (folklore?) that some hosts don't cope very well with
   1037    large alloca calls.)  */
   1038 #define DEFAULT_MAX_MEMORY_PACKET_SIZE 16384
   1039 
   1040 /* The minimum remote packet size for memory transfers.  Ensures we
   1041    can write at least one byte.  */
   1042 #define MIN_MEMORY_PACKET_SIZE 20
   1043 
   1044 /* Compute the current size of a read/write packet.  Since this makes
   1045    use of ``actual_register_packet_size'' the computation is dynamic.  */
   1046 
   1047 static long
   1048 get_memory_packet_size (struct memory_packet_config *config)
   1049 {
   1050   struct remote_state *rs = get_remote_state ();
   1051   struct remote_arch_state *rsa = get_remote_arch_state ();
   1052 
   1053   long what_they_get;
   1054   if (config->fixed_p)
   1055     {
   1056       if (config->size <= 0)
   1057 	what_they_get = DEFAULT_MAX_MEMORY_PACKET_SIZE;
   1058       else
   1059 	what_they_get = config->size;
   1060     }
   1061   else
   1062     {
   1063       what_they_get = get_remote_packet_size ();
   1064       /* Limit the packet to the size specified by the user.  */
   1065       if (config->size > 0
   1066 	  && what_they_get > config->size)
   1067 	what_they_get = config->size;
   1068 
   1069       /* Limit it to the size of the targets ``g'' response unless we have
   1070 	 permission from the stub to use a larger packet size.  */
   1071       if (rs->explicit_packet_size == 0
   1072 	  && rsa->actual_register_packet_size > 0
   1073 	  && what_they_get > rsa->actual_register_packet_size)
   1074 	what_they_get = rsa->actual_register_packet_size;
   1075     }
   1076   if (what_they_get < MIN_MEMORY_PACKET_SIZE)
   1077     what_they_get = MIN_MEMORY_PACKET_SIZE;
   1078 
   1079   /* Make sure there is room in the global buffer for this packet
   1080      (including its trailing NUL byte).  */
   1081   if (rs->buf_size < what_they_get + 1)
   1082     {
   1083       rs->buf_size = 2 * what_they_get;
   1084       rs->buf = (char *) xrealloc (rs->buf, 2 * what_they_get);
   1085     }
   1086 
   1087   return what_they_get;
   1088 }
   1089 
   1090 /* Update the size of a read/write packet.  If they user wants
   1091    something really big then do a sanity check.  */
   1092 
   1093 static void
   1094 set_memory_packet_size (char *args, struct memory_packet_config *config)
   1095 {
   1096   int fixed_p = config->fixed_p;
   1097   long size = config->size;
   1098 
   1099   if (args == NULL)
   1100     error (_("Argument required (integer, `fixed' or `limited')."));
   1101   else if (strcmp (args, "hard") == 0
   1102       || strcmp (args, "fixed") == 0)
   1103     fixed_p = 1;
   1104   else if (strcmp (args, "soft") == 0
   1105 	   || strcmp (args, "limit") == 0)
   1106     fixed_p = 0;
   1107   else
   1108     {
   1109       char *end;
   1110 
   1111       size = strtoul (args, &end, 0);
   1112       if (args == end)
   1113 	error (_("Invalid %s (bad syntax)."), config->name);
   1114 
   1115       /* Instead of explicitly capping the size of a packet to or
   1116 	 disallowing it, the user is allowed to set the size to
   1117 	 something arbitrarily large.  */
   1118     }
   1119 
   1120   /* So that the query shows the correct value.  */
   1121   if (size <= 0)
   1122     size = DEFAULT_MAX_MEMORY_PACKET_SIZE;
   1123 
   1124   /* Extra checks?  */
   1125   if (fixed_p && !config->fixed_p)
   1126     {
   1127       if (! query (_("The target may not be able to correctly handle a %s\n"
   1128 		   "of %ld bytes. Change the packet size? "),
   1129 		   config->name, size))
   1130 	error (_("Packet size not changed."));
   1131     }
   1132   /* Update the config.  */
   1133   config->fixed_p = fixed_p;
   1134   config->size = size;
   1135 }
   1136 
   1137 static void
   1138 show_memory_packet_size (struct memory_packet_config *config)
   1139 {
   1140   printf_filtered (_("The %s is %ld. "), config->name, config->size);
   1141   if (config->fixed_p)
   1142     printf_filtered (_("Packets are fixed at %ld bytes.\n"),
   1143 		     get_memory_packet_size (config));
   1144   else
   1145     printf_filtered (_("Packets are limited to %ld bytes.\n"),
   1146 		     get_memory_packet_size (config));
   1147 }
   1148 
   1149 static struct memory_packet_config memory_write_packet_config =
   1150 {
   1151   "memory-write-packet-size",
   1152 };
   1153 
   1154 static void
   1155 set_memory_write_packet_size (char *args, int from_tty)
   1156 {
   1157   set_memory_packet_size (args, &memory_write_packet_config);
   1158 }
   1159 
   1160 static void
   1161 show_memory_write_packet_size (char *args, int from_tty)
   1162 {
   1163   show_memory_packet_size (&memory_write_packet_config);
   1164 }
   1165 
   1166 static long
   1167 get_memory_write_packet_size (void)
   1168 {
   1169   return get_memory_packet_size (&memory_write_packet_config);
   1170 }
   1171 
   1172 static struct memory_packet_config memory_read_packet_config =
   1173 {
   1174   "memory-read-packet-size",
   1175 };
   1176 
   1177 static void
   1178 set_memory_read_packet_size (char *args, int from_tty)
   1179 {
   1180   set_memory_packet_size (args, &memory_read_packet_config);
   1181 }
   1182 
   1183 static void
   1184 show_memory_read_packet_size (char *args, int from_tty)
   1185 {
   1186   show_memory_packet_size (&memory_read_packet_config);
   1187 }
   1188 
   1189 static long
   1190 get_memory_read_packet_size (void)
   1191 {
   1192   long size = get_memory_packet_size (&memory_read_packet_config);
   1193 
   1194   /* FIXME: cagney/1999-11-07: Functions like getpkt() need to get an
   1195      extra buffer size argument before the memory read size can be
   1196      increased beyond this.  */
   1197   if (size > get_remote_packet_size ())
   1198     size = get_remote_packet_size ();
   1199   return size;
   1200 }
   1201 
   1202 
   1203 /* Generic configuration support for packets the stub optionally
   1205    supports.  Allows the user to specify the use of the packet as well
   1206    as allowing GDB to auto-detect support in the remote stub.  */
   1207 
   1208 enum packet_support
   1209   {
   1210     PACKET_SUPPORT_UNKNOWN = 0,
   1211     PACKET_ENABLE,
   1212     PACKET_DISABLE
   1213   };
   1214 
   1215 struct packet_config
   1216   {
   1217     const char *name;
   1218     const char *title;
   1219 
   1220     /* If auto, GDB auto-detects support for this packet or feature,
   1221        either through qSupported, or by trying the packet and looking
   1222        at the response.  If true, GDB assumes the target supports this
   1223        packet.  If false, the packet is disabled.  Configs that don't
   1224        have an associated command always have this set to auto.  */
   1225     enum auto_boolean detect;
   1226 
   1227     /* Does the target support this packet?  */
   1228     enum packet_support support;
   1229   };
   1230 
   1231 /* Analyze a packet's return value and update the packet config
   1232    accordingly.  */
   1233 
   1234 enum packet_result
   1235 {
   1236   PACKET_ERROR,
   1237   PACKET_OK,
   1238   PACKET_UNKNOWN
   1239 };
   1240 
   1241 static enum packet_support packet_config_support (struct packet_config *config);
   1242 static enum packet_support packet_support (int packet);
   1243 
   1244 static void
   1245 show_packet_config_cmd (struct packet_config *config)
   1246 {
   1247   const char *support = "internal-error";
   1248 
   1249   switch (packet_config_support (config))
   1250     {
   1251     case PACKET_ENABLE:
   1252       support = "enabled";
   1253       break;
   1254     case PACKET_DISABLE:
   1255       support = "disabled";
   1256       break;
   1257     case PACKET_SUPPORT_UNKNOWN:
   1258       support = "unknown";
   1259       break;
   1260     }
   1261   switch (config->detect)
   1262     {
   1263     case AUTO_BOOLEAN_AUTO:
   1264       printf_filtered (_("Support for the `%s' packet "
   1265 			 "is auto-detected, currently %s.\n"),
   1266 		       config->name, support);
   1267       break;
   1268     case AUTO_BOOLEAN_TRUE:
   1269     case AUTO_BOOLEAN_FALSE:
   1270       printf_filtered (_("Support for the `%s' packet is currently %s.\n"),
   1271 		       config->name, support);
   1272       break;
   1273     }
   1274 }
   1275 
   1276 static void
   1277 add_packet_config_cmd (struct packet_config *config, const char *name,
   1278 		       const char *title, int legacy)
   1279 {
   1280   char *set_doc;
   1281   char *show_doc;
   1282   char *cmd_name;
   1283 
   1284   config->name = name;
   1285   config->title = title;
   1286   set_doc = xstrprintf ("Set use of remote protocol `%s' (%s) packet",
   1287 			name, title);
   1288   show_doc = xstrprintf ("Show current use of remote "
   1289 			 "protocol `%s' (%s) packet",
   1290 			 name, title);
   1291   /* set/show TITLE-packet {auto,on,off} */
   1292   cmd_name = xstrprintf ("%s-packet", title);
   1293   add_setshow_auto_boolean_cmd (cmd_name, class_obscure,
   1294 				&config->detect, set_doc,
   1295 				show_doc, NULL, /* help_doc */
   1296 				NULL,
   1297 				show_remote_protocol_packet_cmd,
   1298 				&remote_set_cmdlist, &remote_show_cmdlist);
   1299   /* The command code copies the documentation strings.  */
   1300   xfree (set_doc);
   1301   xfree (show_doc);
   1302   /* set/show remote NAME-packet {auto,on,off} -- legacy.  */
   1303   if (legacy)
   1304     {
   1305       char *legacy_name;
   1306 
   1307       legacy_name = xstrprintf ("%s-packet", name);
   1308       add_alias_cmd (legacy_name, cmd_name, class_obscure, 0,
   1309 		     &remote_set_cmdlist);
   1310       add_alias_cmd (legacy_name, cmd_name, class_obscure, 0,
   1311 		     &remote_show_cmdlist);
   1312     }
   1313 }
   1314 
   1315 static enum packet_result
   1316 packet_check_result (const char *buf)
   1317 {
   1318   if (buf[0] != '\0')
   1319     {
   1320       /* The stub recognized the packet request.  Check that the
   1321 	 operation succeeded.  */
   1322       if (buf[0] == 'E'
   1323 	  && isxdigit (buf[1]) && isxdigit (buf[2])
   1324 	  && buf[3] == '\0')
   1325 	/* "Enn"  - definitly an error.  */
   1326 	return PACKET_ERROR;
   1327 
   1328       /* Always treat "E." as an error.  This will be used for
   1329 	 more verbose error messages, such as E.memtypes.  */
   1330       if (buf[0] == 'E' && buf[1] == '.')
   1331 	return PACKET_ERROR;
   1332 
   1333       /* The packet may or may not be OK.  Just assume it is.  */
   1334       return PACKET_OK;
   1335     }
   1336   else
   1337     /* The stub does not support the packet.  */
   1338     return PACKET_UNKNOWN;
   1339 }
   1340 
   1341 static enum packet_result
   1342 packet_ok (const char *buf, struct packet_config *config)
   1343 {
   1344   enum packet_result result;
   1345 
   1346   if (config->detect != AUTO_BOOLEAN_TRUE
   1347       && config->support == PACKET_DISABLE)
   1348     internal_error (__FILE__, __LINE__,
   1349 		    _("packet_ok: attempt to use a disabled packet"));
   1350 
   1351   result = packet_check_result (buf);
   1352   switch (result)
   1353     {
   1354     case PACKET_OK:
   1355     case PACKET_ERROR:
   1356       /* The stub recognized the packet request.  */
   1357       if (config->support == PACKET_SUPPORT_UNKNOWN)
   1358 	{
   1359 	  if (remote_debug)
   1360 	    fprintf_unfiltered (gdb_stdlog,
   1361 				"Packet %s (%s) is supported\n",
   1362 				config->name, config->title);
   1363 	  config->support = PACKET_ENABLE;
   1364 	}
   1365       break;
   1366     case PACKET_UNKNOWN:
   1367       /* The stub does not support the packet.  */
   1368       if (config->detect == AUTO_BOOLEAN_AUTO
   1369 	  && config->support == PACKET_ENABLE)
   1370 	{
   1371 	  /* If the stub previously indicated that the packet was
   1372 	     supported then there is a protocol error.  */
   1373 	  error (_("Protocol error: %s (%s) conflicting enabled responses."),
   1374 		 config->name, config->title);
   1375 	}
   1376       else if (config->detect == AUTO_BOOLEAN_TRUE)
   1377 	{
   1378 	  /* The user set it wrong.  */
   1379 	  error (_("Enabled packet %s (%s) not recognized by stub"),
   1380 		 config->name, config->title);
   1381 	}
   1382 
   1383       if (remote_debug)
   1384 	fprintf_unfiltered (gdb_stdlog,
   1385 			    "Packet %s (%s) is NOT supported\n",
   1386 			    config->name, config->title);
   1387       config->support = PACKET_DISABLE;
   1388       break;
   1389     }
   1390 
   1391   return result;
   1392 }
   1393 
   1394 enum {
   1395   PACKET_vCont = 0,
   1396   PACKET_X,
   1397   PACKET_qSymbol,
   1398   PACKET_P,
   1399   PACKET_p,
   1400   PACKET_Z0,
   1401   PACKET_Z1,
   1402   PACKET_Z2,
   1403   PACKET_Z3,
   1404   PACKET_Z4,
   1405   PACKET_vFile_setfs,
   1406   PACKET_vFile_open,
   1407   PACKET_vFile_pread,
   1408   PACKET_vFile_pwrite,
   1409   PACKET_vFile_close,
   1410   PACKET_vFile_unlink,
   1411   PACKET_vFile_readlink,
   1412   PACKET_vFile_fstat,
   1413   PACKET_qXfer_auxv,
   1414   PACKET_qXfer_features,
   1415   PACKET_qXfer_exec_file,
   1416   PACKET_qXfer_libraries,
   1417   PACKET_qXfer_libraries_svr4,
   1418   PACKET_qXfer_memory_map,
   1419   PACKET_qXfer_spu_read,
   1420   PACKET_qXfer_spu_write,
   1421   PACKET_qXfer_osdata,
   1422   PACKET_qXfer_threads,
   1423   PACKET_qXfer_statictrace_read,
   1424   PACKET_qXfer_traceframe_info,
   1425   PACKET_qXfer_uib,
   1426   PACKET_qGetTIBAddr,
   1427   PACKET_qGetTLSAddr,
   1428   PACKET_qSupported,
   1429   PACKET_qTStatus,
   1430   PACKET_QPassSignals,
   1431   PACKET_QCatchSyscalls,
   1432   PACKET_QProgramSignals,
   1433   PACKET_qCRC,
   1434   PACKET_qSearch_memory,
   1435   PACKET_vAttach,
   1436   PACKET_vRun,
   1437   PACKET_QStartNoAckMode,
   1438   PACKET_vKill,
   1439   PACKET_qXfer_siginfo_read,
   1440   PACKET_qXfer_siginfo_write,
   1441   PACKET_qAttached,
   1442 
   1443   /* Support for conditional tracepoints.  */
   1444   PACKET_ConditionalTracepoints,
   1445 
   1446   /* Support for target-side breakpoint conditions.  */
   1447   PACKET_ConditionalBreakpoints,
   1448 
   1449   /* Support for target-side breakpoint commands.  */
   1450   PACKET_BreakpointCommands,
   1451 
   1452   /* Support for fast tracepoints.  */
   1453   PACKET_FastTracepoints,
   1454 
   1455   /* Support for static tracepoints.  */
   1456   PACKET_StaticTracepoints,
   1457 
   1458   /* Support for installing tracepoints while a trace experiment is
   1459      running.  */
   1460   PACKET_InstallInTrace,
   1461 
   1462   PACKET_bc,
   1463   PACKET_bs,
   1464   PACKET_TracepointSource,
   1465   PACKET_QAllow,
   1466   PACKET_qXfer_fdpic,
   1467   PACKET_QDisableRandomization,
   1468   PACKET_QAgent,
   1469   PACKET_QTBuffer_size,
   1470   PACKET_Qbtrace_off,
   1471   PACKET_Qbtrace_bts,
   1472   PACKET_Qbtrace_pt,
   1473   PACKET_qXfer_btrace,
   1474 
   1475   /* Support for the QNonStop packet.  */
   1476   PACKET_QNonStop,
   1477 
   1478   /* Support for the QThreadEvents packet.  */
   1479   PACKET_QThreadEvents,
   1480 
   1481   /* Support for multi-process extensions.  */
   1482   PACKET_multiprocess_feature,
   1483 
   1484   /* Support for enabling and disabling tracepoints while a trace
   1485      experiment is running.  */
   1486   PACKET_EnableDisableTracepoints_feature,
   1487 
   1488   /* Support for collecting strings using the tracenz bytecode.  */
   1489   PACKET_tracenz_feature,
   1490 
   1491   /* Support for continuing to run a trace experiment while GDB is
   1492      disconnected.  */
   1493   PACKET_DisconnectedTracing_feature,
   1494 
   1495   /* Support for qXfer:libraries-svr4:read with a non-empty annex.  */
   1496   PACKET_augmented_libraries_svr4_read_feature,
   1497 
   1498   /* Support for the qXfer:btrace-conf:read packet.  */
   1499   PACKET_qXfer_btrace_conf,
   1500 
   1501   /* Support for the Qbtrace-conf:bts:size packet.  */
   1502   PACKET_Qbtrace_conf_bts_size,
   1503 
   1504   /* Support for swbreak+ feature.  */
   1505   PACKET_swbreak_feature,
   1506 
   1507   /* Support for hwbreak+ feature.  */
   1508   PACKET_hwbreak_feature,
   1509 
   1510   /* Support for fork events.  */
   1511   PACKET_fork_event_feature,
   1512 
   1513   /* Support for vfork events.  */
   1514   PACKET_vfork_event_feature,
   1515 
   1516   /* Support for the Qbtrace-conf:pt:size packet.  */
   1517   PACKET_Qbtrace_conf_pt_size,
   1518 
   1519   /* Support for exec events.  */
   1520   PACKET_exec_event_feature,
   1521 
   1522   /* Support for query supported vCont actions.  */
   1523   PACKET_vContSupported,
   1524 
   1525   /* Support remote CTRL-C.  */
   1526   PACKET_vCtrlC,
   1527 
   1528   /* Support TARGET_WAITKIND_NO_RESUMED.  */
   1529   PACKET_no_resumed,
   1530 
   1531   PACKET_MAX
   1532 };
   1533 
   1534 static struct packet_config remote_protocol_packets[PACKET_MAX];
   1535 
   1536 /* Returns the packet's corresponding "set remote foo-packet" command
   1537    state.  See struct packet_config for more details.  */
   1538 
   1539 static enum auto_boolean
   1540 packet_set_cmd_state (int packet)
   1541 {
   1542   return remote_protocol_packets[packet].detect;
   1543 }
   1544 
   1545 /* Returns whether a given packet or feature is supported.  This takes
   1546    into account the state of the corresponding "set remote foo-packet"
   1547    command, which may be used to bypass auto-detection.  */
   1548 
   1549 static enum packet_support
   1550 packet_config_support (struct packet_config *config)
   1551 {
   1552   switch (config->detect)
   1553     {
   1554     case AUTO_BOOLEAN_TRUE:
   1555       return PACKET_ENABLE;
   1556     case AUTO_BOOLEAN_FALSE:
   1557       return PACKET_DISABLE;
   1558     case AUTO_BOOLEAN_AUTO:
   1559       return config->support;
   1560     default:
   1561       gdb_assert_not_reached (_("bad switch"));
   1562     }
   1563 }
   1564 
   1565 /* Same as packet_config_support, but takes the packet's enum value as
   1566    argument.  */
   1567 
   1568 static enum packet_support
   1569 packet_support (int packet)
   1570 {
   1571   struct packet_config *config = &remote_protocol_packets[packet];
   1572 
   1573   return packet_config_support (config);
   1574 }
   1575 
   1576 static void
   1577 show_remote_protocol_packet_cmd (struct ui_file *file, int from_tty,
   1578 				 struct cmd_list_element *c,
   1579 				 const char *value)
   1580 {
   1581   struct packet_config *packet;
   1582 
   1583   for (packet = remote_protocol_packets;
   1584        packet < &remote_protocol_packets[PACKET_MAX];
   1585        packet++)
   1586     {
   1587       if (&packet->detect == c->var)
   1588 	{
   1589 	  show_packet_config_cmd (packet);
   1590 	  return;
   1591 	}
   1592     }
   1593   internal_error (__FILE__, __LINE__, _("Could not find config for %s"),
   1594 		  c->name);
   1595 }
   1596 
   1597 /* Should we try one of the 'Z' requests?  */
   1598 
   1599 enum Z_packet_type
   1600 {
   1601   Z_PACKET_SOFTWARE_BP,
   1602   Z_PACKET_HARDWARE_BP,
   1603   Z_PACKET_WRITE_WP,
   1604   Z_PACKET_READ_WP,
   1605   Z_PACKET_ACCESS_WP,
   1606   NR_Z_PACKET_TYPES
   1607 };
   1608 
   1609 /* For compatibility with older distributions.  Provide a ``set remote
   1610    Z-packet ...'' command that updates all the Z packet types.  */
   1611 
   1612 static enum auto_boolean remote_Z_packet_detect;
   1613 
   1614 static void
   1615 set_remote_protocol_Z_packet_cmd (char *args, int from_tty,
   1616 				  struct cmd_list_element *c)
   1617 {
   1618   int i;
   1619 
   1620   for (i = 0; i < NR_Z_PACKET_TYPES; i++)
   1621     remote_protocol_packets[PACKET_Z0 + i].detect = remote_Z_packet_detect;
   1622 }
   1623 
   1624 static void
   1625 show_remote_protocol_Z_packet_cmd (struct ui_file *file, int from_tty,
   1626 				   struct cmd_list_element *c,
   1627 				   const char *value)
   1628 {
   1629   int i;
   1630 
   1631   for (i = 0; i < NR_Z_PACKET_TYPES; i++)
   1632     {
   1633       show_packet_config_cmd (&remote_protocol_packets[PACKET_Z0 + i]);
   1634     }
   1635 }
   1636 
   1637 /* Returns true if the multi-process extensions are in effect.  */
   1638 
   1639 static int
   1640 remote_multi_process_p (struct remote_state *rs)
   1641 {
   1642   return packet_support (PACKET_multiprocess_feature) == PACKET_ENABLE;
   1643 }
   1644 
   1645 /* Returns true if fork events are supported.  */
   1646 
   1647 static int
   1648 remote_fork_event_p (struct remote_state *rs)
   1649 {
   1650   return packet_support (PACKET_fork_event_feature) == PACKET_ENABLE;
   1651 }
   1652 
   1653 /* Returns true if vfork events are supported.  */
   1654 
   1655 static int
   1656 remote_vfork_event_p (struct remote_state *rs)
   1657 {
   1658   return packet_support (PACKET_vfork_event_feature) == PACKET_ENABLE;
   1659 }
   1660 
   1661 /* Returns true if exec events are supported.  */
   1662 
   1663 static int
   1664 remote_exec_event_p (struct remote_state *rs)
   1665 {
   1666   return packet_support (PACKET_exec_event_feature) == PACKET_ENABLE;
   1667 }
   1668 
   1669 /* Insert fork catchpoint target routine.  If fork events are enabled
   1670    then return success, nothing more to do.  */
   1671 
   1672 static int
   1673 remote_insert_fork_catchpoint (struct target_ops *ops, int pid)
   1674 {
   1675   struct remote_state *rs = get_remote_state ();
   1676 
   1677   return !remote_fork_event_p (rs);
   1678 }
   1679 
   1680 /* Remove fork catchpoint target routine.  Nothing to do, just
   1681    return success.  */
   1682 
   1683 static int
   1684 remote_remove_fork_catchpoint (struct target_ops *ops, int pid)
   1685 {
   1686   return 0;
   1687 }
   1688 
   1689 /* Insert vfork catchpoint target routine.  If vfork events are enabled
   1690    then return success, nothing more to do.  */
   1691 
   1692 static int
   1693 remote_insert_vfork_catchpoint (struct target_ops *ops, int pid)
   1694 {
   1695   struct remote_state *rs = get_remote_state ();
   1696 
   1697   return !remote_vfork_event_p (rs);
   1698 }
   1699 
   1700 /* Remove vfork catchpoint target routine.  Nothing to do, just
   1701    return success.  */
   1702 
   1703 static int
   1704 remote_remove_vfork_catchpoint (struct target_ops *ops, int pid)
   1705 {
   1706   return 0;
   1707 }
   1708 
   1709 /* Insert exec catchpoint target routine.  If exec events are
   1710    enabled, just return success.  */
   1711 
   1712 static int
   1713 remote_insert_exec_catchpoint (struct target_ops *ops, int pid)
   1714 {
   1715   struct remote_state *rs = get_remote_state ();
   1716 
   1717   return !remote_exec_event_p (rs);
   1718 }
   1719 
   1720 /* Remove exec catchpoint target routine.  Nothing to do, just
   1721    return success.  */
   1722 
   1723 static int
   1724 remote_remove_exec_catchpoint (struct target_ops *ops, int pid)
   1725 {
   1726   return 0;
   1727 }
   1728 
   1729 
   1730 /* Asynchronous signal handle registered as event loop source for
   1732    when we have pending events ready to be passed to the core.  */
   1733 
   1734 static struct async_event_handler *remote_async_inferior_event_token;
   1735 
   1736 
   1737 
   1739 static ptid_t magic_null_ptid;
   1740 static ptid_t not_sent_ptid;
   1741 static ptid_t any_thread_ptid;
   1742 
   1743 /* Find out if the stub attached to PID (and hence GDB should offer to
   1744    detach instead of killing it when bailing out).  */
   1745 
   1746 static int
   1747 remote_query_attached (int pid)
   1748 {
   1749   struct remote_state *rs = get_remote_state ();
   1750   size_t size = get_remote_packet_size ();
   1751 
   1752   if (packet_support (PACKET_qAttached) == PACKET_DISABLE)
   1753     return 0;
   1754 
   1755   if (remote_multi_process_p (rs))
   1756     xsnprintf (rs->buf, size, "qAttached:%x", pid);
   1757   else
   1758     xsnprintf (rs->buf, size, "qAttached");
   1759 
   1760   putpkt (rs->buf);
   1761   getpkt (&rs->buf, &rs->buf_size, 0);
   1762 
   1763   switch (packet_ok (rs->buf,
   1764 		     &remote_protocol_packets[PACKET_qAttached]))
   1765     {
   1766     case PACKET_OK:
   1767       if (strcmp (rs->buf, "1") == 0)
   1768 	return 1;
   1769       break;
   1770     case PACKET_ERROR:
   1771       warning (_("Remote failure reply: %s"), rs->buf);
   1772       break;
   1773     case PACKET_UNKNOWN:
   1774       break;
   1775     }
   1776 
   1777   return 0;
   1778 }
   1779 
   1780 /* Add PID to GDB's inferior table.  If FAKE_PID_P is true, then PID
   1781    has been invented by GDB, instead of reported by the target.  Since
   1782    we can be connected to a remote system before before knowing about
   1783    any inferior, mark the target with execution when we find the first
   1784    inferior.  If ATTACHED is 1, then we had just attached to this
   1785    inferior.  If it is 0, then we just created this inferior.  If it
   1786    is -1, then try querying the remote stub to find out if it had
   1787    attached to the inferior or not.  If TRY_OPEN_EXEC is true then
   1788    attempt to open this inferior's executable as the main executable
   1789    if no main executable is open already.  */
   1790 
   1791 static struct inferior *
   1792 remote_add_inferior (int fake_pid_p, int pid, int attached,
   1793 		     int try_open_exec)
   1794 {
   1795   struct inferior *inf;
   1796 
   1797   /* Check whether this process we're learning about is to be
   1798      considered attached, or if is to be considered to have been
   1799      spawned by the stub.  */
   1800   if (attached == -1)
   1801     attached = remote_query_attached (pid);
   1802 
   1803   if (gdbarch_has_global_solist (target_gdbarch ()))
   1804     {
   1805       /* If the target shares code across all inferiors, then every
   1806 	 attach adds a new inferior.  */
   1807       inf = add_inferior (pid);
   1808 
   1809       /* ... and every inferior is bound to the same program space.
   1810 	 However, each inferior may still have its own address
   1811 	 space.  */
   1812       inf->aspace = maybe_new_address_space ();
   1813       inf->pspace = current_program_space;
   1814     }
   1815   else
   1816     {
   1817       /* In the traditional debugging scenario, there's a 1-1 match
   1818 	 between program/address spaces.  We simply bind the inferior
   1819 	 to the program space's address space.  */
   1820       inf = current_inferior ();
   1821       inferior_appeared (inf, pid);
   1822     }
   1823 
   1824   inf->attach_flag = attached;
   1825   inf->fake_pid_p = fake_pid_p;
   1826 
   1827   /* If no main executable is currently open then attempt to
   1828      open the file that was executed to create this inferior.  */
   1829   if (try_open_exec && get_exec_file (0) == NULL)
   1830     exec_file_locate_attach (pid, 0, 1);
   1831 
   1832   return inf;
   1833 }
   1834 
   1835 static struct private_thread_info *
   1836   get_private_info_thread (struct thread_info *info);
   1837 
   1838 /* Add thread PTID to GDB's thread list.  Tag it as executing/running
   1839    according to RUNNING.  */
   1840 
   1841 static void
   1842 remote_add_thread (ptid_t ptid, int running, int executing)
   1843 {
   1844   struct remote_state *rs = get_remote_state ();
   1845   struct thread_info *thread;
   1846 
   1847   /* GDB historically didn't pull threads in the initial connection
   1848      setup.  If the remote target doesn't even have a concept of
   1849      threads (e.g., a bare-metal target), even if internally we
   1850      consider that a single-threaded target, mentioning a new thread
   1851      might be confusing to the user.  Be silent then, preserving the
   1852      age old behavior.  */
   1853   if (rs->starting_up)
   1854     thread = add_thread_silent (ptid);
   1855   else
   1856     thread = add_thread (ptid);
   1857 
   1858   get_private_info_thread (thread)->vcont_resumed = executing;
   1859   set_executing (ptid, executing);
   1860   set_running (ptid, running);
   1861 }
   1862 
   1863 /* Come here when we learn about a thread id from the remote target.
   1864    It may be the first time we hear about such thread, so take the
   1865    opportunity to add it to GDB's thread list.  In case this is the
   1866    first time we're noticing its corresponding inferior, add it to
   1867    GDB's inferior list as well.  EXECUTING indicates whether the
   1868    thread is (internally) executing or stopped.  */
   1869 
   1870 static void
   1871 remote_notice_new_inferior (ptid_t currthread, int executing)
   1872 {
   1873   /* In non-stop mode, we assume new found threads are (externally)
   1874      running until proven otherwise with a stop reply.  In all-stop,
   1875      we can only get here if all threads are stopped.  */
   1876   int running = target_is_non_stop_p () ? 1 : 0;
   1877 
   1878   /* If this is a new thread, add it to GDB's thread list.
   1879      If we leave it up to WFI to do this, bad things will happen.  */
   1880 
   1881   if (in_thread_list (currthread) && is_exited (currthread))
   1882     {
   1883       /* We're seeing an event on a thread id we knew had exited.
   1884 	 This has to be a new thread reusing the old id.  Add it.  */
   1885       remote_add_thread (currthread, running, executing);
   1886       return;
   1887     }
   1888 
   1889   if (!in_thread_list (currthread))
   1890     {
   1891       struct inferior *inf = NULL;
   1892       int pid = ptid_get_pid (currthread);
   1893 
   1894       if (ptid_is_pid (inferior_ptid)
   1895 	  && pid == ptid_get_pid (inferior_ptid))
   1896 	{
   1897 	  /* inferior_ptid has no thread member yet.  This can happen
   1898 	     with the vAttach -> remote_wait,"TAAthread:" path if the
   1899 	     stub doesn't support qC.  This is the first stop reported
   1900 	     after an attach, so this is the main thread.  Update the
   1901 	     ptid in the thread list.  */
   1902 	  if (in_thread_list (pid_to_ptid (pid)))
   1903 	    thread_change_ptid (inferior_ptid, currthread);
   1904 	  else
   1905 	    {
   1906 	      remote_add_thread (currthread, running, executing);
   1907 	      inferior_ptid = currthread;
   1908 	    }
   1909 	  return;
   1910 	}
   1911 
   1912       if (ptid_equal (magic_null_ptid, inferior_ptid))
   1913 	{
   1914 	  /* inferior_ptid is not set yet.  This can happen with the
   1915 	     vRun -> remote_wait,"TAAthread:" path if the stub
   1916 	     doesn't support qC.  This is the first stop reported
   1917 	     after an attach, so this is the main thread.  Update the
   1918 	     ptid in the thread list.  */
   1919 	  thread_change_ptid (inferior_ptid, currthread);
   1920 	  return;
   1921 	}
   1922 
   1923       /* When connecting to a target remote, or to a target
   1924 	 extended-remote which already was debugging an inferior, we
   1925 	 may not know about it yet.  Add it before adding its child
   1926 	 thread, so notifications are emitted in a sensible order.  */
   1927       if (!in_inferior_list (ptid_get_pid (currthread)))
   1928 	{
   1929 	  struct remote_state *rs = get_remote_state ();
   1930 	  int fake_pid_p = !remote_multi_process_p (rs);
   1931 
   1932 	  inf = remote_add_inferior (fake_pid_p,
   1933 				     ptid_get_pid (currthread), -1, 1);
   1934 	}
   1935 
   1936       /* This is really a new thread.  Add it.  */
   1937       remote_add_thread (currthread, running, executing);
   1938 
   1939       /* If we found a new inferior, let the common code do whatever
   1940 	 it needs to with it (e.g., read shared libraries, insert
   1941 	 breakpoints), unless we're just setting up an all-stop
   1942 	 connection.  */
   1943       if (inf != NULL)
   1944 	{
   1945 	  struct remote_state *rs = get_remote_state ();
   1946 
   1947 	  if (!rs->starting_up)
   1948 	    notice_new_inferior (currthread, executing, 0);
   1949 	}
   1950     }
   1951 }
   1952 
   1953 /* Return THREAD's private thread data, creating it if necessary.  */
   1954 
   1955 static struct private_thread_info *
   1956 get_private_info_thread (struct thread_info *thread)
   1957 {
   1958   gdb_assert (thread != NULL);
   1959 
   1960   if (thread->priv == NULL)
   1961     {
   1962       struct private_thread_info *priv = XNEW (struct private_thread_info);
   1963 
   1964       thread->private_dtor = free_private_thread_info;
   1965       thread->priv = priv;
   1966 
   1967       priv->core = -1;
   1968       priv->extra = NULL;
   1969       priv->name = NULL;
   1970       priv->name = NULL;
   1971       priv->last_resume_step = 0;
   1972       priv->last_resume_sig = GDB_SIGNAL_0;
   1973       priv->vcont_resumed = 0;
   1974     }
   1975 
   1976   return thread->priv;
   1977 }
   1978 
   1979 /* Return PTID's private thread data, creating it if necessary.  */
   1980 
   1981 static struct private_thread_info *
   1982 get_private_info_ptid (ptid_t ptid)
   1983 {
   1984   struct thread_info *info = find_thread_ptid (ptid);
   1985 
   1986   return get_private_info_thread (info);
   1987 }
   1988 
   1989 /* Call this function as a result of
   1990    1) A halt indication (T packet) containing a thread id
   1991    2) A direct query of currthread
   1992    3) Successful execution of set thread */
   1993 
   1994 static void
   1995 record_currthread (struct remote_state *rs, ptid_t currthread)
   1996 {
   1997   rs->general_thread = currthread;
   1998 }
   1999 
   2000 /* If 'QPassSignals' is supported, tell the remote stub what signals
   2001    it can simply pass through to the inferior without reporting.  */
   2002 
   2003 static void
   2004 remote_pass_signals (struct target_ops *self,
   2005 		     int numsigs, unsigned char *pass_signals)
   2006 {
   2007   if (packet_support (PACKET_QPassSignals) != PACKET_DISABLE)
   2008     {
   2009       char *pass_packet, *p;
   2010       int count = 0, i;
   2011       struct remote_state *rs = get_remote_state ();
   2012 
   2013       gdb_assert (numsigs < 256);
   2014       for (i = 0; i < numsigs; i++)
   2015 	{
   2016 	  if (pass_signals[i])
   2017 	    count++;
   2018 	}
   2019       pass_packet = (char *) xmalloc (count * 3 + strlen ("QPassSignals:") + 1);
   2020       strcpy (pass_packet, "QPassSignals:");
   2021       p = pass_packet + strlen (pass_packet);
   2022       for (i = 0; i < numsigs; i++)
   2023 	{
   2024 	  if (pass_signals[i])
   2025 	    {
   2026 	      if (i >= 16)
   2027 		*p++ = tohex (i >> 4);
   2028 	      *p++ = tohex (i & 15);
   2029 	      if (count)
   2030 		*p++ = ';';
   2031 	      else
   2032 		break;
   2033 	      count--;
   2034 	    }
   2035 	}
   2036       *p = 0;
   2037       if (!rs->last_pass_packet || strcmp (rs->last_pass_packet, pass_packet))
   2038 	{
   2039 	  putpkt (pass_packet);
   2040 	  getpkt (&rs->buf, &rs->buf_size, 0);
   2041 	  packet_ok (rs->buf, &remote_protocol_packets[PACKET_QPassSignals]);
   2042 	  if (rs->last_pass_packet)
   2043 	    xfree (rs->last_pass_packet);
   2044 	  rs->last_pass_packet = pass_packet;
   2045 	}
   2046       else
   2047 	xfree (pass_packet);
   2048     }
   2049 }
   2050 
   2051 /* If 'QCatchSyscalls' is supported, tell the remote stub
   2052    to report syscalls to GDB.  */
   2053 
   2054 static int
   2055 remote_set_syscall_catchpoint (struct target_ops *self,
   2056 			       int pid, int needed, int any_count,
   2057 			       int table_size, int *table)
   2058 {
   2059   char *catch_packet;
   2060   enum packet_result result;
   2061   int n_sysno = 0;
   2062 
   2063   if (packet_support (PACKET_QCatchSyscalls) == PACKET_DISABLE)
   2064     {
   2065       /* Not supported.  */
   2066       return 1;
   2067     }
   2068 
   2069   if (needed && !any_count)
   2070     {
   2071       int i;
   2072 
   2073       /* Count how many syscalls are to be caught (table[sysno] != 0).  */
   2074       for (i = 0; i < table_size; i++)
   2075 	{
   2076 	  if (table[i] != 0)
   2077 	    n_sysno++;
   2078 	}
   2079     }
   2080 
   2081   if (remote_debug)
   2082     {
   2083       fprintf_unfiltered (gdb_stdlog,
   2084 			  "remote_set_syscall_catchpoint "
   2085 			  "pid %d needed %d any_count %d n_sysno %d\n",
   2086 			  pid, needed, any_count, n_sysno);
   2087     }
   2088 
   2089   if (needed)
   2090     {
   2091       /* Prepare a packet with the sysno list, assuming max 8+1
   2092 	 characters for a sysno.  If the resulting packet size is too
   2093 	 big, fallback on the non-selective packet.  */
   2094       const int maxpktsz = strlen ("QCatchSyscalls:1") + n_sysno * 9 + 1;
   2095 
   2096       catch_packet = (char *) xmalloc (maxpktsz);
   2097       strcpy (catch_packet, "QCatchSyscalls:1");
   2098       if (!any_count)
   2099 	{
   2100 	  int i;
   2101 	  char *p;
   2102 
   2103 	  p = catch_packet;
   2104 	  p += strlen (p);
   2105 
   2106 	  /* Add in catch_packet each syscall to be caught (table[i] != 0).  */
   2107 	  for (i = 0; i < table_size; i++)
   2108 	    {
   2109 	      if (table[i] != 0)
   2110 		p += xsnprintf (p, catch_packet + maxpktsz - p, ";%x", i);
   2111 	    }
   2112 	}
   2113       if (strlen (catch_packet) > get_remote_packet_size ())
   2114 	{
   2115 	  /* catch_packet too big.  Fallback to less efficient
   2116 	     non selective mode, with GDB doing the filtering.  */
   2117 	  catch_packet[sizeof ("QCatchSyscalls:1") - 1] = 0;
   2118 	}
   2119     }
   2120   else
   2121     catch_packet = xstrdup ("QCatchSyscalls:0");
   2122 
   2123   {
   2124     struct cleanup *old_chain = make_cleanup (xfree, catch_packet);
   2125     struct remote_state *rs = get_remote_state ();
   2126 
   2127     putpkt (catch_packet);
   2128     getpkt (&rs->buf, &rs->buf_size, 0);
   2129     result = packet_ok (rs->buf, &remote_protocol_packets[PACKET_QCatchSyscalls]);
   2130     do_cleanups (old_chain);
   2131     if (result == PACKET_OK)
   2132       return 0;
   2133     else
   2134       return -1;
   2135   }
   2136 }
   2137 
   2138 /* If 'QProgramSignals' is supported, tell the remote stub what
   2139    signals it should pass through to the inferior when detaching.  */
   2140 
   2141 static void
   2142 remote_program_signals (struct target_ops *self,
   2143 			int numsigs, unsigned char *signals)
   2144 {
   2145   if (packet_support (PACKET_QProgramSignals) != PACKET_DISABLE)
   2146     {
   2147       char *packet, *p;
   2148       int count = 0, i;
   2149       struct remote_state *rs = get_remote_state ();
   2150 
   2151       gdb_assert (numsigs < 256);
   2152       for (i = 0; i < numsigs; i++)
   2153 	{
   2154 	  if (signals[i])
   2155 	    count++;
   2156 	}
   2157       packet = (char *) xmalloc (count * 3 + strlen ("QProgramSignals:") + 1);
   2158       strcpy (packet, "QProgramSignals:");
   2159       p = packet + strlen (packet);
   2160       for (i = 0; i < numsigs; i++)
   2161 	{
   2162 	  if (signal_pass_state (i))
   2163 	    {
   2164 	      if (i >= 16)
   2165 		*p++ = tohex (i >> 4);
   2166 	      *p++ = tohex (i & 15);
   2167 	      if (count)
   2168 		*p++ = ';';
   2169 	      else
   2170 		break;
   2171 	      count--;
   2172 	    }
   2173 	}
   2174       *p = 0;
   2175       if (!rs->last_program_signals_packet
   2176 	  || strcmp (rs->last_program_signals_packet, packet) != 0)
   2177 	{
   2178 	  putpkt (packet);
   2179 	  getpkt (&rs->buf, &rs->buf_size, 0);
   2180 	  packet_ok (rs->buf, &remote_protocol_packets[PACKET_QProgramSignals]);
   2181 	  xfree (rs->last_program_signals_packet);
   2182 	  rs->last_program_signals_packet = packet;
   2183 	}
   2184       else
   2185 	xfree (packet);
   2186     }
   2187 }
   2188 
   2189 /* If PTID is MAGIC_NULL_PTID, don't set any thread.  If PTID is
   2190    MINUS_ONE_PTID, set the thread to -1, so the stub returns the
   2191    thread.  If GEN is set, set the general thread, if not, then set
   2192    the step/continue thread.  */
   2193 static void
   2194 set_thread (ptid_t ptid, int gen)
   2195 {
   2196   struct remote_state *rs = get_remote_state ();
   2197   ptid_t state = gen ? rs->general_thread : rs->continue_thread;
   2198   char *buf = rs->buf;
   2199   char *endbuf = rs->buf + get_remote_packet_size ();
   2200 
   2201   if (ptid_equal (state, ptid))
   2202     return;
   2203 
   2204   *buf++ = 'H';
   2205   *buf++ = gen ? 'g' : 'c';
   2206   if (ptid_equal (ptid, magic_null_ptid))
   2207     xsnprintf (buf, endbuf - buf, "0");
   2208   else if (ptid_equal (ptid, any_thread_ptid))
   2209     xsnprintf (buf, endbuf - buf, "0");
   2210   else if (ptid_equal (ptid, minus_one_ptid))
   2211     xsnprintf (buf, endbuf - buf, "-1");
   2212   else
   2213     write_ptid (buf, endbuf, ptid);
   2214   putpkt (rs->buf);
   2215   getpkt (&rs->buf, &rs->buf_size, 0);
   2216   if (gen)
   2217     rs->general_thread = ptid;
   2218   else
   2219     rs->continue_thread = ptid;
   2220 }
   2221 
   2222 static void
   2223 set_general_thread (ptid_t ptid)
   2224 {
   2225   set_thread (ptid, 1);
   2226 }
   2227 
   2228 static void
   2229 set_continue_thread (ptid_t ptid)
   2230 {
   2231   set_thread (ptid, 0);
   2232 }
   2233 
   2234 /* Change the remote current process.  Which thread within the process
   2235    ends up selected isn't important, as long as it is the same process
   2236    as what INFERIOR_PTID points to.
   2237 
   2238    This comes from that fact that there is no explicit notion of
   2239    "selected process" in the protocol.  The selected process for
   2240    general operations is the process the selected general thread
   2241    belongs to.  */
   2242 
   2243 static void
   2244 set_general_process (void)
   2245 {
   2246   struct remote_state *rs = get_remote_state ();
   2247 
   2248   /* If the remote can't handle multiple processes, don't bother.  */
   2249   if (!remote_multi_process_p (rs))
   2250     return;
   2251 
   2252   /* We only need to change the remote current thread if it's pointing
   2253      at some other process.  */
   2254   if (ptid_get_pid (rs->general_thread) != ptid_get_pid (inferior_ptid))
   2255     set_general_thread (inferior_ptid);
   2256 }
   2257 
   2258 
   2259 /* Return nonzero if this is the main thread that we made up ourselves
   2261    to model non-threaded targets as single-threaded.  */
   2262 
   2263 static int
   2264 remote_thread_always_alive (struct target_ops *ops, ptid_t ptid)
   2265 {
   2266   if (ptid_equal (ptid, magic_null_ptid))
   2267     /* The main thread is always alive.  */
   2268     return 1;
   2269 
   2270   if (ptid_get_pid (ptid) != 0 && ptid_get_lwp (ptid) == 0)
   2271     /* The main thread is always alive.  This can happen after a
   2272        vAttach, if the remote side doesn't support
   2273        multi-threading.  */
   2274     return 1;
   2275 
   2276   return 0;
   2277 }
   2278 
   2279 /* Return nonzero if the thread PTID is still alive on the remote
   2280    system.  */
   2281 
   2282 static int
   2283 remote_thread_alive (struct target_ops *ops, ptid_t ptid)
   2284 {
   2285   struct remote_state *rs = get_remote_state ();
   2286   char *p, *endp;
   2287 
   2288   /* Check if this is a thread that we made up ourselves to model
   2289      non-threaded targets as single-threaded.  */
   2290   if (remote_thread_always_alive (ops, ptid))
   2291     return 1;
   2292 
   2293   p = rs->buf;
   2294   endp = rs->buf + get_remote_packet_size ();
   2295 
   2296   *p++ = 'T';
   2297   write_ptid (p, endp, ptid);
   2298 
   2299   putpkt (rs->buf);
   2300   getpkt (&rs->buf, &rs->buf_size, 0);
   2301   return (rs->buf[0] == 'O' && rs->buf[1] == 'K');
   2302 }
   2303 
   2304 /* Return a pointer to a thread name if we know it and NULL otherwise.
   2305    The thread_info object owns the memory for the name.  */
   2306 
   2307 static const char *
   2308 remote_thread_name (struct target_ops *ops, struct thread_info *info)
   2309 {
   2310   if (info->priv != NULL)
   2311     return info->priv->name;
   2312 
   2313   return NULL;
   2314 }
   2315 
   2316 /* About these extended threadlist and threadinfo packets.  They are
   2317    variable length packets but, the fields within them are often fixed
   2318    length.  They are redundent enough to send over UDP as is the
   2319    remote protocol in general.  There is a matching unit test module
   2320    in libstub.  */
   2321 
   2322 /* WARNING: This threadref data structure comes from the remote O.S.,
   2323    libstub protocol encoding, and remote.c.  It is not particularly
   2324    changable.  */
   2325 
   2326 /* Right now, the internal structure is int. We want it to be bigger.
   2327    Plan to fix this.  */
   2328 
   2329 typedef int gdb_threadref;	/* Internal GDB thread reference.  */
   2330 
   2331 /* gdb_ext_thread_info is an internal GDB data structure which is
   2332    equivalent to the reply of the remote threadinfo packet.  */
   2333 
   2334 struct gdb_ext_thread_info
   2335   {
   2336     threadref threadid;		/* External form of thread reference.  */
   2337     int active;			/* Has state interesting to GDB?
   2338 				   regs, stack.  */
   2339     char display[256];		/* Brief state display, name,
   2340 				   blocked/suspended.  */
   2341     char shortname[32];		/* To be used to name threads.  */
   2342     char more_display[256];	/* Long info, statistics, queue depth,
   2343 				   whatever.  */
   2344   };
   2345 
   2346 /* The volume of remote transfers can be limited by submitting
   2347    a mask containing bits specifying the desired information.
   2348    Use a union of these values as the 'selection' parameter to
   2349    get_thread_info.  FIXME: Make these TAG names more thread specific.  */
   2350 
   2351 #define TAG_THREADID 1
   2352 #define TAG_EXISTS 2
   2353 #define TAG_DISPLAY 4
   2354 #define TAG_THREADNAME 8
   2355 #define TAG_MOREDISPLAY 16
   2356 
   2357 #define BUF_THREAD_ID_SIZE (OPAQUETHREADBYTES * 2)
   2358 
   2359 static char *unpack_nibble (char *buf, int *val);
   2360 
   2361 static char *unpack_byte (char *buf, int *value);
   2362 
   2363 static char *pack_int (char *buf, int value);
   2364 
   2365 static char *unpack_int (char *buf, int *value);
   2366 
   2367 static char *unpack_string (char *src, char *dest, int length);
   2368 
   2369 static char *pack_threadid (char *pkt, threadref *id);
   2370 
   2371 static char *unpack_threadid (char *inbuf, threadref *id);
   2372 
   2373 void int_to_threadref (threadref *id, int value);
   2374 
   2375 static int threadref_to_int (threadref *ref);
   2376 
   2377 static void copy_threadref (threadref *dest, threadref *src);
   2378 
   2379 static int threadmatch (threadref *dest, threadref *src);
   2380 
   2381 static char *pack_threadinfo_request (char *pkt, int mode,
   2382 				      threadref *id);
   2383 
   2384 static int remote_unpack_thread_info_response (char *pkt,
   2385 					       threadref *expectedref,
   2386 					       struct gdb_ext_thread_info
   2387 					       *info);
   2388 
   2389 
   2390 static int remote_get_threadinfo (threadref *threadid,
   2391 				  int fieldset,	/*TAG mask */
   2392 				  struct gdb_ext_thread_info *info);
   2393 
   2394 static char *pack_threadlist_request (char *pkt, int startflag,
   2395 				      int threadcount,
   2396 				      threadref *nextthread);
   2397 
   2398 static int parse_threadlist_response (char *pkt,
   2399 				      int result_limit,
   2400 				      threadref *original_echo,
   2401 				      threadref *resultlist,
   2402 				      int *doneflag);
   2403 
   2404 static int remote_get_threadlist (int startflag,
   2405 				  threadref *nextthread,
   2406 				  int result_limit,
   2407 				  int *done,
   2408 				  int *result_count,
   2409 				  threadref *threadlist);
   2410 
   2411 typedef int (*rmt_thread_action) (threadref *ref, void *context);
   2412 
   2413 static int remote_threadlist_iterator (rmt_thread_action stepfunction,
   2414 				       void *context, int looplimit);
   2415 
   2416 static int remote_newthread_step (threadref *ref, void *context);
   2417 
   2418 
   2419 /* Write a PTID to BUF.  ENDBUF points to one-passed-the-end of the
   2420    buffer we're allowed to write to.  Returns
   2421    BUF+CHARACTERS_WRITTEN.  */
   2422 
   2423 static char *
   2424 write_ptid (char *buf, const char *endbuf, ptid_t ptid)
   2425 {
   2426   int pid, tid;
   2427   struct remote_state *rs = get_remote_state ();
   2428 
   2429   if (remote_multi_process_p (rs))
   2430     {
   2431       pid = ptid_get_pid (ptid);
   2432       if (pid < 0)
   2433 	buf += xsnprintf (buf, endbuf - buf, "p-%x.", -pid);
   2434       else
   2435 	buf += xsnprintf (buf, endbuf - buf, "p%x.", pid);
   2436     }
   2437   tid = ptid_get_lwp (ptid);
   2438   if (tid < 0)
   2439     buf += xsnprintf (buf, endbuf - buf, "-%x", -tid);
   2440   else
   2441     buf += xsnprintf (buf, endbuf - buf, "%x", tid);
   2442 
   2443   return buf;
   2444 }
   2445 
   2446 /* Extract a PTID from BUF.  If non-null, OBUF is set to the to one
   2447    passed the last parsed char.  Returns null_ptid on error.  */
   2448 
   2449 static ptid_t
   2450 read_ptid (char *buf, char **obuf)
   2451 {
   2452   char *p = buf;
   2453   char *pp;
   2454   ULONGEST pid = 0, tid = 0;
   2455 
   2456   if (*p == 'p')
   2457     {
   2458       /* Multi-process ptid.  */
   2459       pp = unpack_varlen_hex (p + 1, &pid);
   2460       if (*pp != '.')
   2461 	error (_("invalid remote ptid: %s"), p);
   2462 
   2463       p = pp;
   2464       pp = unpack_varlen_hex (p + 1, &tid);
   2465       if (obuf)
   2466 	*obuf = pp;
   2467       return ptid_build (pid, tid, 0);
   2468     }
   2469 
   2470   /* No multi-process.  Just a tid.  */
   2471   pp = unpack_varlen_hex (p, &tid);
   2472 
   2473   /* Return null_ptid when no thread id is found.  */
   2474   if (p == pp)
   2475     {
   2476       if (obuf)
   2477 	*obuf = pp;
   2478       return null_ptid;
   2479     }
   2480 
   2481   /* Since the stub is not sending a process id, then default to
   2482      what's in inferior_ptid, unless it's null at this point.  If so,
   2483      then since there's no way to know the pid of the reported
   2484      threads, use the magic number.  */
   2485   if (ptid_equal (inferior_ptid, null_ptid))
   2486     pid = ptid_get_pid (magic_null_ptid);
   2487   else
   2488     pid = ptid_get_pid (inferior_ptid);
   2489 
   2490   if (obuf)
   2491     *obuf = pp;
   2492   return ptid_build (pid, tid, 0);
   2493 }
   2494 
   2495 static int
   2496 stubhex (int ch)
   2497 {
   2498   if (ch >= 'a' && ch <= 'f')
   2499     return ch - 'a' + 10;
   2500   if (ch >= '0' && ch <= '9')
   2501     return ch - '0';
   2502   if (ch >= 'A' && ch <= 'F')
   2503     return ch - 'A' + 10;
   2504   return -1;
   2505 }
   2506 
   2507 static int
   2508 stub_unpack_int (char *buff, int fieldlength)
   2509 {
   2510   int nibble;
   2511   int retval = 0;
   2512 
   2513   while (fieldlength)
   2514     {
   2515       nibble = stubhex (*buff++);
   2516       retval |= nibble;
   2517       fieldlength--;
   2518       if (fieldlength)
   2519 	retval = retval << 4;
   2520     }
   2521   return retval;
   2522 }
   2523 
   2524 static char *
   2525 unpack_nibble (char *buf, int *val)
   2526 {
   2527   *val = fromhex (*buf++);
   2528   return buf;
   2529 }
   2530 
   2531 static char *
   2532 unpack_byte (char *buf, int *value)
   2533 {
   2534   *value = stub_unpack_int (buf, 2);
   2535   return buf + 2;
   2536 }
   2537 
   2538 static char *
   2539 pack_int (char *buf, int value)
   2540 {
   2541   buf = pack_hex_byte (buf, (value >> 24) & 0xff);
   2542   buf = pack_hex_byte (buf, (value >> 16) & 0xff);
   2543   buf = pack_hex_byte (buf, (value >> 8) & 0x0ff);
   2544   buf = pack_hex_byte (buf, (value & 0xff));
   2545   return buf;
   2546 }
   2547 
   2548 static char *
   2549 unpack_int (char *buf, int *value)
   2550 {
   2551   *value = stub_unpack_int (buf, 8);
   2552   return buf + 8;
   2553 }
   2554 
   2555 #if 0			/* Currently unused, uncomment when needed.  */
   2556 static char *pack_string (char *pkt, char *string);
   2557 
   2558 static char *
   2559 pack_string (char *pkt, char *string)
   2560 {
   2561   char ch;
   2562   int len;
   2563 
   2564   len = strlen (string);
   2565   if (len > 200)
   2566     len = 200;		/* Bigger than most GDB packets, junk???  */
   2567   pkt = pack_hex_byte (pkt, len);
   2568   while (len-- > 0)
   2569     {
   2570       ch = *string++;
   2571       if ((ch == '\0') || (ch == '#'))
   2572 	ch = '*';		/* Protect encapsulation.  */
   2573       *pkt++ = ch;
   2574     }
   2575   return pkt;
   2576 }
   2577 #endif /* 0 (unused) */
   2578 
   2579 static char *
   2580 unpack_string (char *src, char *dest, int length)
   2581 {
   2582   while (length--)
   2583     *dest++ = *src++;
   2584   *dest = '\0';
   2585   return src;
   2586 }
   2587 
   2588 static char *
   2589 pack_threadid (char *pkt, threadref *id)
   2590 {
   2591   char *limit;
   2592   unsigned char *altid;
   2593 
   2594   altid = (unsigned char *) id;
   2595   limit = pkt + BUF_THREAD_ID_SIZE;
   2596   while (pkt < limit)
   2597     pkt = pack_hex_byte (pkt, *altid++);
   2598   return pkt;
   2599 }
   2600 
   2601 
   2602 static char *
   2603 unpack_threadid (char *inbuf, threadref *id)
   2604 {
   2605   char *altref;
   2606   char *limit = inbuf + BUF_THREAD_ID_SIZE;
   2607   int x, y;
   2608 
   2609   altref = (char *) id;
   2610 
   2611   while (inbuf < limit)
   2612     {
   2613       x = stubhex (*inbuf++);
   2614       y = stubhex (*inbuf++);
   2615       *altref++ = (x << 4) | y;
   2616     }
   2617   return inbuf;
   2618 }
   2619 
   2620 /* Externally, threadrefs are 64 bits but internally, they are still
   2621    ints.  This is due to a mismatch of specifications.  We would like
   2622    to use 64bit thread references internally.  This is an adapter
   2623    function.  */
   2624 
   2625 void
   2626 int_to_threadref (threadref *id, int value)
   2627 {
   2628   unsigned char *scan;
   2629 
   2630   scan = (unsigned char *) id;
   2631   {
   2632     int i = 4;
   2633     while (i--)
   2634       *scan++ = 0;
   2635   }
   2636   *scan++ = (value >> 24) & 0xff;
   2637   *scan++ = (value >> 16) & 0xff;
   2638   *scan++ = (value >> 8) & 0xff;
   2639   *scan++ = (value & 0xff);
   2640 }
   2641 
   2642 static int
   2643 threadref_to_int (threadref *ref)
   2644 {
   2645   int i, value = 0;
   2646   unsigned char *scan;
   2647 
   2648   scan = *ref;
   2649   scan += 4;
   2650   i = 4;
   2651   while (i-- > 0)
   2652     value = (value << 8) | ((*scan++) & 0xff);
   2653   return value;
   2654 }
   2655 
   2656 static void
   2657 copy_threadref (threadref *dest, threadref *src)
   2658 {
   2659   int i;
   2660   unsigned char *csrc, *cdest;
   2661 
   2662   csrc = (unsigned char *) src;
   2663   cdest = (unsigned char *) dest;
   2664   i = 8;
   2665   while (i--)
   2666     *cdest++ = *csrc++;
   2667 }
   2668 
   2669 static int
   2670 threadmatch (threadref *dest, threadref *src)
   2671 {
   2672   /* Things are broken right now, so just assume we got a match.  */
   2673 #if 0
   2674   unsigned char *srcp, *destp;
   2675   int i, result;
   2676   srcp = (char *) src;
   2677   destp = (char *) dest;
   2678 
   2679   result = 1;
   2680   while (i-- > 0)
   2681     result &= (*srcp++ == *destp++) ? 1 : 0;
   2682   return result;
   2683 #endif
   2684   return 1;
   2685 }
   2686 
   2687 /*
   2688    threadid:1,        # always request threadid
   2689    context_exists:2,
   2690    display:4,
   2691    unique_name:8,
   2692    more_display:16
   2693  */
   2694 
   2695 /* Encoding:  'Q':8,'P':8,mask:32,threadid:64 */
   2696 
   2697 static char *
   2698 pack_threadinfo_request (char *pkt, int mode, threadref *id)
   2699 {
   2700   *pkt++ = 'q';				/* Info Query */
   2701   *pkt++ = 'P';				/* process or thread info */
   2702   pkt = pack_int (pkt, mode);		/* mode */
   2703   pkt = pack_threadid (pkt, id);	/* threadid */
   2704   *pkt = '\0';				/* terminate */
   2705   return pkt;
   2706 }
   2707 
   2708 /* These values tag the fields in a thread info response packet.  */
   2709 /* Tagging the fields allows us to request specific fields and to
   2710    add more fields as time goes by.  */
   2711 
   2712 #define TAG_THREADID 1		/* Echo the thread identifier.  */
   2713 #define TAG_EXISTS 2		/* Is this process defined enough to
   2714 				   fetch registers and its stack?  */
   2715 #define TAG_DISPLAY 4		/* A short thing maybe to put on a window */
   2716 #define TAG_THREADNAME 8	/* string, maps 1-to-1 with a thread is.  */
   2717 #define TAG_MOREDISPLAY 16	/* Whatever the kernel wants to say about
   2718 				   the process.  */
   2719 
   2720 static int
   2721 remote_unpack_thread_info_response (char *pkt, threadref *expectedref,
   2722 				    struct gdb_ext_thread_info *info)
   2723 {
   2724   struct remote_state *rs = get_remote_state ();
   2725   int mask, length;
   2726   int tag;
   2727   threadref ref;
   2728   char *limit = pkt + rs->buf_size; /* Plausible parsing limit.  */
   2729   int retval = 1;
   2730 
   2731   /* info->threadid = 0; FIXME: implement zero_threadref.  */
   2732   info->active = 0;
   2733   info->display[0] = '\0';
   2734   info->shortname[0] = '\0';
   2735   info->more_display[0] = '\0';
   2736 
   2737   /* Assume the characters indicating the packet type have been
   2738      stripped.  */
   2739   pkt = unpack_int (pkt, &mask);	/* arg mask */
   2740   pkt = unpack_threadid (pkt, &ref);
   2741 
   2742   if (mask == 0)
   2743     warning (_("Incomplete response to threadinfo request."));
   2744   if (!threadmatch (&ref, expectedref))
   2745     {			/* This is an answer to a different request.  */
   2746       warning (_("ERROR RMT Thread info mismatch."));
   2747       return 0;
   2748     }
   2749   copy_threadref (&info->threadid, &ref);
   2750 
   2751   /* Loop on tagged fields , try to bail if somthing goes wrong.  */
   2752 
   2753   /* Packets are terminated with nulls.  */
   2754   while ((pkt < limit) && mask && *pkt)
   2755     {
   2756       pkt = unpack_int (pkt, &tag);	/* tag */
   2757       pkt = unpack_byte (pkt, &length);	/* length */
   2758       if (!(tag & mask))		/* Tags out of synch with mask.  */
   2759 	{
   2760 	  warning (_("ERROR RMT: threadinfo tag mismatch."));
   2761 	  retval = 0;
   2762 	  break;
   2763 	}
   2764       if (tag == TAG_THREADID)
   2765 	{
   2766 	  if (length != 16)
   2767 	    {
   2768 	      warning (_("ERROR RMT: length of threadid is not 16."));
   2769 	      retval = 0;
   2770 	      break;
   2771 	    }
   2772 	  pkt = unpack_threadid (pkt, &ref);
   2773 	  mask = mask & ~TAG_THREADID;
   2774 	  continue;
   2775 	}
   2776       if (tag == TAG_EXISTS)
   2777 	{
   2778 	  info->active = stub_unpack_int (pkt, length);
   2779 	  pkt += length;
   2780 	  mask = mask & ~(TAG_EXISTS);
   2781 	  if (length > 8)
   2782 	    {
   2783 	      warning (_("ERROR RMT: 'exists' length too long."));
   2784 	      retval = 0;
   2785 	      break;
   2786 	    }
   2787 	  continue;
   2788 	}
   2789       if (tag == TAG_THREADNAME)
   2790 	{
   2791 	  pkt = unpack_string (pkt, &info->shortname[0], length);
   2792 	  mask = mask & ~TAG_THREADNAME;
   2793 	  continue;
   2794 	}
   2795       if (tag == TAG_DISPLAY)
   2796 	{
   2797 	  pkt = unpack_string (pkt, &info->display[0], length);
   2798 	  mask = mask & ~TAG_DISPLAY;
   2799 	  continue;
   2800 	}
   2801       if (tag == TAG_MOREDISPLAY)
   2802 	{
   2803 	  pkt = unpack_string (pkt, &info->more_display[0], length);
   2804 	  mask = mask & ~TAG_MOREDISPLAY;
   2805 	  continue;
   2806 	}
   2807       warning (_("ERROR RMT: unknown thread info tag."));
   2808       break;			/* Not a tag we know about.  */
   2809     }
   2810   return retval;
   2811 }
   2812 
   2813 static int
   2814 remote_get_threadinfo (threadref *threadid, int fieldset,	/* TAG mask */
   2815 		       struct gdb_ext_thread_info *info)
   2816 {
   2817   struct remote_state *rs = get_remote_state ();
   2818   int result;
   2819 
   2820   pack_threadinfo_request (rs->buf, fieldset, threadid);
   2821   putpkt (rs->buf);
   2822   getpkt (&rs->buf, &rs->buf_size, 0);
   2823 
   2824   if (rs->buf[0] == '\0')
   2825     return 0;
   2826 
   2827   result = remote_unpack_thread_info_response (rs->buf + 2,
   2828 					       threadid, info);
   2829   return result;
   2830 }
   2831 
   2832 /*    Format: i'Q':8,i"L":8,initflag:8,batchsize:16,lastthreadid:32   */
   2833 
   2834 static char *
   2835 pack_threadlist_request (char *pkt, int startflag, int threadcount,
   2836 			 threadref *nextthread)
   2837 {
   2838   *pkt++ = 'q';			/* info query packet */
   2839   *pkt++ = 'L';			/* Process LIST or threadLIST request */
   2840   pkt = pack_nibble (pkt, startflag);		/* initflag 1 bytes */
   2841   pkt = pack_hex_byte (pkt, threadcount);	/* threadcount 2 bytes */
   2842   pkt = pack_threadid (pkt, nextthread);	/* 64 bit thread identifier */
   2843   *pkt = '\0';
   2844   return pkt;
   2845 }
   2846 
   2847 /* Encoding:   'q':8,'M':8,count:16,done:8,argthreadid:64,(threadid:64)* */
   2848 
   2849 static int
   2850 parse_threadlist_response (char *pkt, int result_limit,
   2851 			   threadref *original_echo, threadref *resultlist,
   2852 			   int *doneflag)
   2853 {
   2854   struct remote_state *rs = get_remote_state ();
   2855   char *limit;
   2856   int count, resultcount, done;
   2857 
   2858   resultcount = 0;
   2859   /* Assume the 'q' and 'M chars have been stripped.  */
   2860   limit = pkt + (rs->buf_size - BUF_THREAD_ID_SIZE);
   2861   /* done parse past here */
   2862   pkt = unpack_byte (pkt, &count);	/* count field */
   2863   pkt = unpack_nibble (pkt, &done);
   2864   /* The first threadid is the argument threadid.  */
   2865   pkt = unpack_threadid (pkt, original_echo);	/* should match query packet */
   2866   while ((count-- > 0) && (pkt < limit))
   2867     {
   2868       pkt = unpack_threadid (pkt, resultlist++);
   2869       if (resultcount++ >= result_limit)
   2870 	break;
   2871     }
   2872   if (doneflag)
   2873     *doneflag = done;
   2874   return resultcount;
   2875 }
   2876 
   2877 /* Fetch the next batch of threads from the remote.  Returns -1 if the
   2878    qL packet is not supported, 0 on error and 1 on success.  */
   2879 
   2880 static int
   2881 remote_get_threadlist (int startflag, threadref *nextthread, int result_limit,
   2882 		       int *done, int *result_count, threadref *threadlist)
   2883 {
   2884   struct remote_state *rs = get_remote_state ();
   2885   int result = 1;
   2886 
   2887   /* Trancate result limit to be smaller than the packet size.  */
   2888   if ((((result_limit + 1) * BUF_THREAD_ID_SIZE) + 10)
   2889       >= get_remote_packet_size ())
   2890     result_limit = (get_remote_packet_size () / BUF_THREAD_ID_SIZE) - 2;
   2891 
   2892   pack_threadlist_request (rs->buf, startflag, result_limit, nextthread);
   2893   putpkt (rs->buf);
   2894   getpkt (&rs->buf, &rs->buf_size, 0);
   2895   if (*rs->buf == '\0')
   2896     {
   2897       /* Packet not supported.  */
   2898       return -1;
   2899     }
   2900 
   2901   *result_count =
   2902     parse_threadlist_response (rs->buf + 2, result_limit,
   2903 			       &rs->echo_nextthread, threadlist, done);
   2904 
   2905   if (!threadmatch (&rs->echo_nextthread, nextthread))
   2906     {
   2907       /* FIXME: This is a good reason to drop the packet.  */
   2908       /* Possably, there is a duplicate response.  */
   2909       /* Possabilities :
   2910          retransmit immediatly - race conditions
   2911          retransmit after timeout - yes
   2912          exit
   2913          wait for packet, then exit
   2914        */
   2915       warning (_("HMM: threadlist did not echo arg thread, dropping it."));
   2916       return 0;			/* I choose simply exiting.  */
   2917     }
   2918   if (*result_count <= 0)
   2919     {
   2920       if (*done != 1)
   2921 	{
   2922 	  warning (_("RMT ERROR : failed to get remote thread list."));
   2923 	  result = 0;
   2924 	}
   2925       return result;		/* break; */
   2926     }
   2927   if (*result_count > result_limit)
   2928     {
   2929       *result_count = 0;
   2930       warning (_("RMT ERROR: threadlist response longer than requested."));
   2931       return 0;
   2932     }
   2933   return result;
   2934 }
   2935 
   2936 /* Fetch the list of remote threads, with the qL packet, and call
   2937    STEPFUNCTION for each thread found.  Stops iterating and returns 1
   2938    if STEPFUNCTION returns true.  Stops iterating and returns 0 if the
   2939    STEPFUNCTION returns false.  If the packet is not supported,
   2940    returns -1.  */
   2941 
   2942 static int
   2943 remote_threadlist_iterator (rmt_thread_action stepfunction, void *context,
   2944 			    int looplimit)
   2945 {
   2946   struct remote_state *rs = get_remote_state ();
   2947   int done, i, result_count;
   2948   int startflag = 1;
   2949   int result = 1;
   2950   int loopcount = 0;
   2951 
   2952   done = 0;
   2953   while (!done)
   2954     {
   2955       if (loopcount++ > looplimit)
   2956 	{
   2957 	  result = 0;
   2958 	  warning (_("Remote fetch threadlist -infinite loop-."));
   2959 	  break;
   2960 	}
   2961       result = remote_get_threadlist (startflag, &rs->nextthread,
   2962 				      MAXTHREADLISTRESULTS,
   2963 				      &done, &result_count,
   2964 				      rs->resultthreadlist);
   2965       if (result <= 0)
   2966 	break;
   2967       /* Clear for later iterations.  */
   2968       startflag = 0;
   2969       /* Setup to resume next batch of thread references, set nextthread.  */
   2970       if (result_count >= 1)
   2971 	copy_threadref (&rs->nextthread,
   2972 			&rs->resultthreadlist[result_count - 1]);
   2973       i = 0;
   2974       while (result_count--)
   2975 	{
   2976 	  if (!(*stepfunction) (&rs->resultthreadlist[i++], context))
   2977 	    {
   2978 	      result = 0;
   2979 	      break;
   2980 	    }
   2981 	}
   2982     }
   2983   return result;
   2984 }
   2985 
   2986 /* A thread found on the remote target.  */
   2987 
   2988 typedef struct thread_item
   2989 {
   2990   /* The thread's PTID.  */
   2991   ptid_t ptid;
   2992 
   2993   /* The thread's extra info.  May be NULL.  */
   2994   char *extra;
   2995 
   2996   /* The thread's name.  May be NULL.  */
   2997   char *name;
   2998 
   2999   /* The core the thread was running on.  -1 if not known.  */
   3000   int core;
   3001 } thread_item_t;
   3002 DEF_VEC_O(thread_item_t);
   3003 
   3004 /* Context passed around to the various methods listing remote
   3005    threads.  As new threads are found, they're added to the ITEMS
   3006    vector.  */
   3007 
   3008 struct threads_listing_context
   3009 {
   3010   /* The threads found on the remote target.  */
   3011   VEC (thread_item_t) *items;
   3012 };
   3013 
   3014 /* Discard the contents of the constructed thread listing context.  */
   3015 
   3016 static void
   3017 clear_threads_listing_context (void *p)
   3018 {
   3019   struct threads_listing_context *context
   3020     = (struct threads_listing_context *) p;
   3021   int i;
   3022   struct thread_item *item;
   3023 
   3024   for (i = 0; VEC_iterate (thread_item_t, context->items, i, item); ++i)
   3025     {
   3026       xfree (item->extra);
   3027       xfree (item->name);
   3028     }
   3029 
   3030   VEC_free (thread_item_t, context->items);
   3031 }
   3032 
   3033 /* Remove the thread specified as the related_pid field of WS
   3034    from the CONTEXT list.  */
   3035 
   3036 static void
   3037 threads_listing_context_remove (struct target_waitstatus *ws,
   3038 				struct threads_listing_context *context)
   3039 {
   3040   struct thread_item *item;
   3041   int i;
   3042   ptid_t child_ptid = ws->value.related_pid;
   3043 
   3044   for (i = 0; VEC_iterate (thread_item_t, context->items, i, item); ++i)
   3045     {
   3046       if (ptid_equal (item->ptid, child_ptid))
   3047 	{
   3048 	  VEC_ordered_remove (thread_item_t, context->items, i);
   3049 	  break;
   3050 	}
   3051     }
   3052 }
   3053 
   3054 static int
   3055 remote_newthread_step (threadref *ref, void *data)
   3056 {
   3057   struct threads_listing_context *context
   3058     = (struct threads_listing_context *) data;
   3059   struct thread_item item;
   3060   int pid = ptid_get_pid (inferior_ptid);
   3061 
   3062   item.ptid = ptid_build (pid, threadref_to_int (ref), 0);
   3063   item.core = -1;
   3064   item.name = NULL;
   3065   item.extra = NULL;
   3066 
   3067   VEC_safe_push (thread_item_t, context->items, &item);
   3068 
   3069   return 1;			/* continue iterator */
   3070 }
   3071 
   3072 #define CRAZY_MAX_THREADS 1000
   3073 
   3074 static ptid_t
   3075 remote_current_thread (ptid_t oldpid)
   3076 {
   3077   struct remote_state *rs = get_remote_state ();
   3078 
   3079   putpkt ("qC");
   3080   getpkt (&rs->buf, &rs->buf_size, 0);
   3081   if (rs->buf[0] == 'Q' && rs->buf[1] == 'C')
   3082     {
   3083       char *obuf;
   3084       ptid_t result;
   3085 
   3086       result = read_ptid (&rs->buf[2], &obuf);
   3087       if (*obuf != '\0' && remote_debug)
   3088         fprintf_unfiltered (gdb_stdlog,
   3089 	                    "warning: garbage in qC reply\n");
   3090 
   3091       return result;
   3092     }
   3093   else
   3094     return oldpid;
   3095 }
   3096 
   3097 /* List remote threads using the deprecated qL packet.  */
   3098 
   3099 static int
   3100 remote_get_threads_with_ql (struct target_ops *ops,
   3101 			    struct threads_listing_context *context)
   3102 {
   3103   if (remote_threadlist_iterator (remote_newthread_step, context,
   3104 				  CRAZY_MAX_THREADS) >= 0)
   3105     return 1;
   3106 
   3107   return 0;
   3108 }
   3109 
   3110 #if defined(HAVE_LIBEXPAT)
   3111 
   3112 static void
   3113 start_thread (struct gdb_xml_parser *parser,
   3114 	      const struct gdb_xml_element *element,
   3115 	      void *user_data, VEC(gdb_xml_value_s) *attributes)
   3116 {
   3117   struct threads_listing_context *data
   3118     = (struct threads_listing_context *) user_data;
   3119 
   3120   struct thread_item item;
   3121   char *id;
   3122   struct gdb_xml_value *attr;
   3123 
   3124   id = (char *) xml_find_attribute (attributes, "id")->value;
   3125   item.ptid = read_ptid (id, NULL);
   3126 
   3127   attr = xml_find_attribute (attributes, "core");
   3128   if (attr != NULL)
   3129     item.core = *(ULONGEST *) attr->value;
   3130   else
   3131     item.core = -1;
   3132 
   3133   attr = xml_find_attribute (attributes, "name");
   3134   item.name = attr != NULL ? xstrdup ((const char *) attr->value) : NULL;
   3135 
   3136   item.extra = 0;
   3137 
   3138   VEC_safe_push (thread_item_t, data->items, &item);
   3139 }
   3140 
   3141 static void
   3142 end_thread (struct gdb_xml_parser *parser,
   3143 	    const struct gdb_xml_element *element,
   3144 	    void *user_data, const char *body_text)
   3145 {
   3146   struct threads_listing_context *data
   3147     = (struct threads_listing_context *) user_data;
   3148 
   3149   if (body_text && *body_text)
   3150     VEC_last (thread_item_t, data->items)->extra = xstrdup (body_text);
   3151 }
   3152 
   3153 const struct gdb_xml_attribute thread_attributes[] = {
   3154   { "id", GDB_XML_AF_NONE, NULL, NULL },
   3155   { "core", GDB_XML_AF_OPTIONAL, gdb_xml_parse_attr_ulongest, NULL },
   3156   { "name", GDB_XML_AF_OPTIONAL, NULL, NULL },
   3157   { NULL, GDB_XML_AF_NONE, NULL, NULL }
   3158 };
   3159 
   3160 const struct gdb_xml_element thread_children[] = {
   3161   { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
   3162 };
   3163 
   3164 const struct gdb_xml_element threads_children[] = {
   3165   { "thread", thread_attributes, thread_children,
   3166     GDB_XML_EF_REPEATABLE | GDB_XML_EF_OPTIONAL,
   3167     start_thread, end_thread },
   3168   { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
   3169 };
   3170 
   3171 const struct gdb_xml_element threads_elements[] = {
   3172   { "threads", NULL, threads_children,
   3173     GDB_XML_EF_NONE, NULL, NULL },
   3174   { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
   3175 };
   3176 
   3177 #endif
   3178 
   3179 /* List remote threads using qXfer:threads:read.  */
   3180 
   3181 static int
   3182 remote_get_threads_with_qxfer (struct target_ops *ops,
   3183 			       struct threads_listing_context *context)
   3184 {
   3185 #if defined(HAVE_LIBEXPAT)
   3186   if (packet_support (PACKET_qXfer_threads) == PACKET_ENABLE)
   3187     {
   3188       char *xml = target_read_stralloc (ops, TARGET_OBJECT_THREADS, NULL);
   3189       struct cleanup *back_to = make_cleanup (xfree, xml);
   3190 
   3191       if (xml != NULL && *xml != '\0')
   3192 	{
   3193 	  gdb_xml_parse_quick (_("threads"), "threads.dtd",
   3194 			       threads_elements, xml, context);
   3195 	}
   3196 
   3197       do_cleanups (back_to);
   3198       return 1;
   3199     }
   3200 #endif
   3201 
   3202   return 0;
   3203 }
   3204 
   3205 /* List remote threads using qfThreadInfo/qsThreadInfo.  */
   3206 
   3207 static int
   3208 remote_get_threads_with_qthreadinfo (struct target_ops *ops,
   3209 				     struct threads_listing_context *context)
   3210 {
   3211   struct remote_state *rs = get_remote_state ();
   3212 
   3213   if (rs->use_threadinfo_query)
   3214     {
   3215       char *bufp;
   3216 
   3217       putpkt ("qfThreadInfo");
   3218       getpkt (&rs->buf, &rs->buf_size, 0);
   3219       bufp = rs->buf;
   3220       if (bufp[0] != '\0')		/* q packet recognized */
   3221 	{
   3222 	  while (*bufp++ == 'm')	/* reply contains one or more TID */
   3223 	    {
   3224 	      do
   3225 		{
   3226 		  struct thread_item item;
   3227 
   3228 		  item.ptid = read_ptid (bufp, &bufp);
   3229 		  item.core = -1;
   3230 		  item.name = NULL;
   3231 		  item.extra = NULL;
   3232 
   3233 		  VEC_safe_push (thread_item_t, context->items, &item);
   3234 		}
   3235 	      while (*bufp++ == ',');	/* comma-separated list */
   3236 	      putpkt ("qsThreadInfo");
   3237 	      getpkt (&rs->buf, &rs->buf_size, 0);
   3238 	      bufp = rs->buf;
   3239 	    }
   3240 	  return 1;
   3241 	}
   3242       else
   3243 	{
   3244 	  /* Packet not recognized.  */
   3245 	  rs->use_threadinfo_query = 0;
   3246 	}
   3247     }
   3248 
   3249   return 0;
   3250 }
   3251 
   3252 /* Implement the to_update_thread_list function for the remote
   3253    targets.  */
   3254 
   3255 static void
   3256 remote_update_thread_list (struct target_ops *ops)
   3257 {
   3258   struct threads_listing_context context;
   3259   struct cleanup *old_chain;
   3260   int got_list = 0;
   3261 
   3262   context.items = NULL;
   3263   old_chain = make_cleanup (clear_threads_listing_context, &context);
   3264 
   3265   /* We have a few different mechanisms to fetch the thread list.  Try
   3266      them all, starting with the most preferred one first, falling
   3267      back to older methods.  */
   3268   if (remote_get_threads_with_qxfer (ops, &context)
   3269       || remote_get_threads_with_qthreadinfo (ops, &context)
   3270       || remote_get_threads_with_ql (ops, &context))
   3271     {
   3272       int i;
   3273       struct thread_item *item;
   3274       struct thread_info *tp, *tmp;
   3275 
   3276       got_list = 1;
   3277 
   3278       if (VEC_empty (thread_item_t, context.items)
   3279 	  && remote_thread_always_alive (ops, inferior_ptid))
   3280 	{
   3281 	  /* Some targets don't really support threads, but still
   3282 	     reply an (empty) thread list in response to the thread
   3283 	     listing packets, instead of replying "packet not
   3284 	     supported".  Exit early so we don't delete the main
   3285 	     thread.  */
   3286 	  do_cleanups (old_chain);
   3287 	  return;
   3288 	}
   3289 
   3290       /* CONTEXT now holds the current thread list on the remote
   3291 	 target end.  Delete GDB-side threads no longer found on the
   3292 	 target.  */
   3293       ALL_THREADS_SAFE (tp, tmp)
   3294 	{
   3295 	  for (i = 0;
   3296 	       VEC_iterate (thread_item_t, context.items, i, item);
   3297 	       ++i)
   3298 	    {
   3299 	      if (ptid_equal (item->ptid, tp->ptid))
   3300 		break;
   3301 	    }
   3302 
   3303 	  if (i == VEC_length (thread_item_t, context.items))
   3304 	    {
   3305 	      /* Not found.  */
   3306 	      delete_thread (tp->ptid);
   3307 	    }
   3308 	}
   3309 
   3310       /* Remove any unreported fork child threads from CONTEXT so
   3311 	 that we don't interfere with follow fork, which is where
   3312 	 creation of such threads is handled.  */
   3313       remove_new_fork_children (&context);
   3314 
   3315       /* And now add threads we don't know about yet to our list.  */
   3316       for (i = 0;
   3317 	   VEC_iterate (thread_item_t, context.items, i, item);
   3318 	   ++i)
   3319 	{
   3320 	  if (!ptid_equal (item->ptid, null_ptid))
   3321 	    {
   3322 	      struct private_thread_info *info;
   3323 	      /* In non-stop mode, we assume new found threads are
   3324 		 executing until proven otherwise with a stop reply.
   3325 		 In all-stop, we can only get here if all threads are
   3326 		 stopped.  */
   3327 	      int executing = target_is_non_stop_p () ? 1 : 0;
   3328 
   3329 	      remote_notice_new_inferior (item->ptid, executing);
   3330 
   3331 	      info = get_private_info_ptid (item->ptid);
   3332 	      info->core = item->core;
   3333 	      info->extra = item->extra;
   3334 	      item->extra = NULL;
   3335 	      info->name = item->name;
   3336 	      item->name = NULL;
   3337 	    }
   3338 	}
   3339     }
   3340 
   3341   if (!got_list)
   3342     {
   3343       /* If no thread listing method is supported, then query whether
   3344 	 each known thread is alive, one by one, with the T packet.
   3345 	 If the target doesn't support threads at all, then this is a
   3346 	 no-op.  See remote_thread_alive.  */
   3347       prune_threads ();
   3348     }
   3349 
   3350   do_cleanups (old_chain);
   3351 }
   3352 
   3353 /*
   3354  * Collect a descriptive string about the given thread.
   3355  * The target may say anything it wants to about the thread
   3356  * (typically info about its blocked / runnable state, name, etc.).
   3357  * This string will appear in the info threads display.
   3358  *
   3359  * Optional: targets are not required to implement this function.
   3360  */
   3361 
   3362 static const char *
   3363 remote_threads_extra_info (struct target_ops *self, struct thread_info *tp)
   3364 {
   3365   struct remote_state *rs = get_remote_state ();
   3366   int result;
   3367   int set;
   3368   threadref id;
   3369   struct gdb_ext_thread_info threadinfo;
   3370   static char display_buf[100];	/* arbitrary...  */
   3371   int n = 0;                    /* position in display_buf */
   3372 
   3373   if (rs->remote_desc == 0)		/* paranoia */
   3374     internal_error (__FILE__, __LINE__,
   3375 		    _("remote_threads_extra_info"));
   3376 
   3377   if (ptid_equal (tp->ptid, magic_null_ptid)
   3378       || (ptid_get_pid (tp->ptid) != 0 && ptid_get_lwp (tp->ptid) == 0))
   3379     /* This is the main thread which was added by GDB.  The remote
   3380        server doesn't know about it.  */
   3381     return NULL;
   3382 
   3383   if (packet_support (PACKET_qXfer_threads) == PACKET_ENABLE)
   3384     {
   3385       struct thread_info *info = find_thread_ptid (tp->ptid);
   3386 
   3387       if (info && info->priv)
   3388 	return info->priv->extra;
   3389       else
   3390 	return NULL;
   3391     }
   3392 
   3393   if (rs->use_threadextra_query)
   3394     {
   3395       char *b = rs->buf;
   3396       char *endb = rs->buf + get_remote_packet_size ();
   3397 
   3398       xsnprintf (b, endb - b, "qThreadExtraInfo,");
   3399       b += strlen (b);
   3400       write_ptid (b, endb, tp->ptid);
   3401 
   3402       putpkt (rs->buf);
   3403       getpkt (&rs->buf, &rs->buf_size, 0);
   3404       if (rs->buf[0] != 0)
   3405 	{
   3406 	  n = std::min (strlen (rs->buf) / 2, sizeof (display_buf));
   3407 	  result = hex2bin (rs->buf, (gdb_byte *) display_buf, n);
   3408 	  display_buf [result] = '\0';
   3409 	  return display_buf;
   3410 	}
   3411     }
   3412 
   3413   /* If the above query fails, fall back to the old method.  */
   3414   rs->use_threadextra_query = 0;
   3415   set = TAG_THREADID | TAG_EXISTS | TAG_THREADNAME
   3416     | TAG_MOREDISPLAY | TAG_DISPLAY;
   3417   int_to_threadref (&id, ptid_get_lwp (tp->ptid));
   3418   if (remote_get_threadinfo (&id, set, &threadinfo))
   3419     if (threadinfo.active)
   3420       {
   3421 	if (*threadinfo.shortname)
   3422 	  n += xsnprintf (&display_buf[0], sizeof (display_buf) - n,
   3423 			  " Name: %s,", threadinfo.shortname);
   3424 	if (*threadinfo.display)
   3425 	  n += xsnprintf (&display_buf[n], sizeof (display_buf) - n,
   3426 			  " State: %s,", threadinfo.display);
   3427 	if (*threadinfo.more_display)
   3428 	  n += xsnprintf (&display_buf[n], sizeof (display_buf) - n,
   3429 			  " Priority: %s", threadinfo.more_display);
   3430 
   3431 	if (n > 0)
   3432 	  {
   3433 	    /* For purely cosmetic reasons, clear up trailing commas.  */
   3434 	    if (',' == display_buf[n-1])
   3435 	      display_buf[n-1] = ' ';
   3436 	    return display_buf;
   3437 	  }
   3438       }
   3439   return NULL;
   3440 }
   3441 
   3442 
   3444 static int
   3445 remote_static_tracepoint_marker_at (struct target_ops *self, CORE_ADDR addr,
   3446 				    struct static_tracepoint_marker *marker)
   3447 {
   3448   struct remote_state *rs = get_remote_state ();
   3449   char *p = rs->buf;
   3450 
   3451   xsnprintf (p, get_remote_packet_size (), "qTSTMat:");
   3452   p += strlen (p);
   3453   p += hexnumstr (p, addr);
   3454   putpkt (rs->buf);
   3455   getpkt (&rs->buf, &rs->buf_size, 0);
   3456   p = rs->buf;
   3457 
   3458   if (*p == 'E')
   3459     error (_("Remote failure reply: %s"), p);
   3460 
   3461   if (*p++ == 'm')
   3462     {
   3463       parse_static_tracepoint_marker_definition (p, &p, marker);
   3464       return 1;
   3465     }
   3466 
   3467   return 0;
   3468 }
   3469 
   3470 static VEC(static_tracepoint_marker_p) *
   3471 remote_static_tracepoint_markers_by_strid (struct target_ops *self,
   3472 					   const char *strid)
   3473 {
   3474   struct remote_state *rs = get_remote_state ();
   3475   VEC(static_tracepoint_marker_p) *markers = NULL;
   3476   struct static_tracepoint_marker *marker = NULL;
   3477   struct cleanup *old_chain;
   3478   char *p;
   3479 
   3480   /* Ask for a first packet of static tracepoint marker
   3481      definition.  */
   3482   putpkt ("qTfSTM");
   3483   getpkt (&rs->buf, &rs->buf_size, 0);
   3484   p = rs->buf;
   3485   if (*p == 'E')
   3486     error (_("Remote failure reply: %s"), p);
   3487 
   3488   old_chain = make_cleanup (free_current_marker, &marker);
   3489 
   3490   while (*p++ == 'm')
   3491     {
   3492       if (marker == NULL)
   3493 	marker = XCNEW (struct static_tracepoint_marker);
   3494 
   3495       do
   3496 	{
   3497 	  parse_static_tracepoint_marker_definition (p, &p, marker);
   3498 
   3499 	  if (strid == NULL || strcmp (strid, marker->str_id) == 0)
   3500 	    {
   3501 	      VEC_safe_push (static_tracepoint_marker_p,
   3502 			     markers, marker);
   3503 	      marker = NULL;
   3504 	    }
   3505 	  else
   3506 	    {
   3507 	      release_static_tracepoint_marker (marker);
   3508 	      memset (marker, 0, sizeof (*marker));
   3509 	    }
   3510 	}
   3511       while (*p++ == ',');	/* comma-separated list */
   3512       /* Ask for another packet of static tracepoint definition.  */
   3513       putpkt ("qTsSTM");
   3514       getpkt (&rs->buf, &rs->buf_size, 0);
   3515       p = rs->buf;
   3516     }
   3517 
   3518   do_cleanups (old_chain);
   3519   return markers;
   3520 }
   3521 
   3522 
   3523 /* Implement the to_get_ada_task_ptid function for the remote targets.  */
   3525 
   3526 static ptid_t
   3527 remote_get_ada_task_ptid (struct target_ops *self, long lwp, long thread)
   3528 {
   3529   return ptid_build (ptid_get_pid (inferior_ptid), lwp, 0);
   3530 }
   3531 
   3532 
   3534 /* Restart the remote side; this is an extended protocol operation.  */
   3535 
   3536 static void
   3537 extended_remote_restart (void)
   3538 {
   3539   struct remote_state *rs = get_remote_state ();
   3540 
   3541   /* Send the restart command; for reasons I don't understand the
   3542      remote side really expects a number after the "R".  */
   3543   xsnprintf (rs->buf, get_remote_packet_size (), "R%x", 0);
   3544   putpkt (rs->buf);
   3545 
   3546   remote_fileio_reset ();
   3547 }
   3548 
   3549 /* Clean up connection to a remote debugger.  */
   3551 
   3552 static void
   3553 remote_close (struct target_ops *self)
   3554 {
   3555   struct remote_state *rs = get_remote_state ();
   3556 
   3557   if (rs->remote_desc == NULL)
   3558     return; /* already closed */
   3559 
   3560   /* Make sure we leave stdin registered in the event loop.  */
   3561   remote_terminal_ours (self);
   3562 
   3563   serial_close (rs->remote_desc);
   3564   rs->remote_desc = NULL;
   3565 
   3566   /* We don't have a connection to the remote stub anymore.  Get rid
   3567      of all the inferiors and their threads we were controlling.
   3568      Reset inferior_ptid to null_ptid first, as otherwise has_stack_frame
   3569      will be unable to find the thread corresponding to (pid, 0, 0).  */
   3570   inferior_ptid = null_ptid;
   3571   discard_all_inferiors ();
   3572 
   3573   /* We are closing the remote target, so we should discard
   3574      everything of this target.  */
   3575   discard_pending_stop_replies_in_queue (rs);
   3576 
   3577   if (remote_async_inferior_event_token)
   3578     delete_async_event_handler (&remote_async_inferior_event_token);
   3579 
   3580   remote_notif_state_xfree (rs->notif_state);
   3581 
   3582   trace_reset_local_state ();
   3583 }
   3584 
   3585 /* Query the remote side for the text, data and bss offsets.  */
   3586 
   3587 static void
   3588 get_offsets (void)
   3589 {
   3590   struct remote_state *rs = get_remote_state ();
   3591   char *buf;
   3592   char *ptr;
   3593   int lose, num_segments = 0, do_sections, do_segments;
   3594   CORE_ADDR text_addr, data_addr, bss_addr, segments[2];
   3595   struct section_offsets *offs;
   3596   struct symfile_segment_data *data;
   3597 
   3598   if (symfile_objfile == NULL)
   3599     return;
   3600 
   3601   putpkt ("qOffsets");
   3602   getpkt (&rs->buf, &rs->buf_size, 0);
   3603   buf = rs->buf;
   3604 
   3605   if (buf[0] == '\000')
   3606     return;			/* Return silently.  Stub doesn't support
   3607 				   this command.  */
   3608   if (buf[0] == 'E')
   3609     {
   3610       warning (_("Remote failure reply: %s"), buf);
   3611       return;
   3612     }
   3613 
   3614   /* Pick up each field in turn.  This used to be done with scanf, but
   3615      scanf will make trouble if CORE_ADDR size doesn't match
   3616      conversion directives correctly.  The following code will work
   3617      with any size of CORE_ADDR.  */
   3618   text_addr = data_addr = bss_addr = 0;
   3619   ptr = buf;
   3620   lose = 0;
   3621 
   3622   if (startswith (ptr, "Text="))
   3623     {
   3624       ptr += 5;
   3625       /* Don't use strtol, could lose on big values.  */
   3626       while (*ptr && *ptr != ';')
   3627 	text_addr = (text_addr << 4) + fromhex (*ptr++);
   3628 
   3629       if (startswith (ptr, ";Data="))
   3630 	{
   3631 	  ptr += 6;
   3632 	  while (*ptr && *ptr != ';')
   3633 	    data_addr = (data_addr << 4) + fromhex (*ptr++);
   3634 	}
   3635       else
   3636 	lose = 1;
   3637 
   3638       if (!lose && startswith (ptr, ";Bss="))
   3639 	{
   3640 	  ptr += 5;
   3641 	  while (*ptr && *ptr != ';')
   3642 	    bss_addr = (bss_addr << 4) + fromhex (*ptr++);
   3643 
   3644 	  if (bss_addr != data_addr)
   3645 	    warning (_("Target reported unsupported offsets: %s"), buf);
   3646 	}
   3647       else
   3648 	lose = 1;
   3649     }
   3650   else if (startswith (ptr, "TextSeg="))
   3651     {
   3652       ptr += 8;
   3653       /* Don't use strtol, could lose on big values.  */
   3654       while (*ptr && *ptr != ';')
   3655 	text_addr = (text_addr << 4) + fromhex (*ptr++);
   3656       num_segments = 1;
   3657 
   3658       if (startswith (ptr, ";DataSeg="))
   3659 	{
   3660 	  ptr += 9;
   3661 	  while (*ptr && *ptr != ';')
   3662 	    data_addr = (data_addr << 4) + fromhex (*ptr++);
   3663 	  num_segments++;
   3664 	}
   3665     }
   3666   else
   3667     lose = 1;
   3668 
   3669   if (lose)
   3670     error (_("Malformed response to offset query, %s"), buf);
   3671   else if (*ptr != '\0')
   3672     warning (_("Target reported unsupported offsets: %s"), buf);
   3673 
   3674   offs = ((struct section_offsets *)
   3675 	  alloca (SIZEOF_N_SECTION_OFFSETS (symfile_objfile->num_sections)));
   3676   memcpy (offs, symfile_objfile->section_offsets,
   3677 	  SIZEOF_N_SECTION_OFFSETS (symfile_objfile->num_sections));
   3678 
   3679   data = get_symfile_segment_data (symfile_objfile->obfd);
   3680   do_segments = (data != NULL);
   3681   do_sections = num_segments == 0;
   3682 
   3683   if (num_segments > 0)
   3684     {
   3685       segments[0] = text_addr;
   3686       segments[1] = data_addr;
   3687     }
   3688   /* If we have two segments, we can still try to relocate everything
   3689      by assuming that the .text and .data offsets apply to the whole
   3690      text and data segments.  Convert the offsets given in the packet
   3691      to base addresses for symfile_map_offsets_to_segments.  */
   3692   else if (data && data->num_segments == 2)
   3693     {
   3694       segments[0] = data->segment_bases[0] + text_addr;
   3695       segments[1] = data->segment_bases[1] + data_addr;
   3696       num_segments = 2;
   3697     }
   3698   /* If the object file has only one segment, assume that it is text
   3699      rather than data; main programs with no writable data are rare,
   3700      but programs with no code are useless.  Of course the code might
   3701      have ended up in the data segment... to detect that we would need
   3702      the permissions here.  */
   3703   else if (data && data->num_segments == 1)
   3704     {
   3705       segments[0] = data->segment_bases[0] + text_addr;
   3706       num_segments = 1;
   3707     }
   3708   /* There's no way to relocate by segment.  */
   3709   else
   3710     do_segments = 0;
   3711 
   3712   if (do_segments)
   3713     {
   3714       int ret = symfile_map_offsets_to_segments (symfile_objfile->obfd, data,
   3715 						 offs, num_segments, segments);
   3716 
   3717       if (ret == 0 && !do_sections)
   3718 	error (_("Can not handle qOffsets TextSeg "
   3719 		 "response with this symbol file"));
   3720 
   3721       if (ret > 0)
   3722 	do_sections = 0;
   3723     }
   3724 
   3725   if (data)
   3726     free_symfile_segment_data (data);
   3727 
   3728   if (do_sections)
   3729     {
   3730       offs->offsets[SECT_OFF_TEXT (symfile_objfile)] = text_addr;
   3731 
   3732       /* This is a temporary kludge to force data and bss to use the
   3733 	 same offsets because that's what nlmconv does now.  The real
   3734 	 solution requires changes to the stub and remote.c that I
   3735 	 don't have time to do right now.  */
   3736 
   3737       offs->offsets[SECT_OFF_DATA (symfile_objfile)] = data_addr;
   3738       offs->offsets[SECT_OFF_BSS (symfile_objfile)] = data_addr;
   3739     }
   3740 
   3741   objfile_relocate (symfile_objfile, offs);
   3742 }
   3743 
   3744 /* Send interrupt_sequence to remote target.  */
   3745 static void
   3746 send_interrupt_sequence (void)
   3747 {
   3748   struct remote_state *rs = get_remote_state ();
   3749 
   3750   if (interrupt_sequence_mode == interrupt_sequence_control_c)
   3751     remote_serial_write ("\x03", 1);
   3752   else if (interrupt_sequence_mode == interrupt_sequence_break)
   3753     serial_send_break (rs->remote_desc);
   3754   else if (interrupt_sequence_mode == interrupt_sequence_break_g)
   3755     {
   3756       serial_send_break (rs->remote_desc);
   3757       remote_serial_write ("g", 1);
   3758     }
   3759   else
   3760     internal_error (__FILE__, __LINE__,
   3761 		    _("Invalid value for interrupt_sequence_mode: %s."),
   3762 		    interrupt_sequence_mode);
   3763 }
   3764 
   3765 
   3766 /* If STOP_REPLY is a T stop reply, look for the "thread" register,
   3767    and extract the PTID.  Returns NULL_PTID if not found.  */
   3768 
   3769 static ptid_t
   3770 stop_reply_extract_thread (char *stop_reply)
   3771 {
   3772   if (stop_reply[0] == 'T' && strlen (stop_reply) > 3)
   3773     {
   3774       char *p;
   3775 
   3776       /* Txx r:val ; r:val (...)  */
   3777       p = &stop_reply[3];
   3778 
   3779       /* Look for "register" named "thread".  */
   3780       while (*p != '\0')
   3781 	{
   3782 	  char *p1;
   3783 
   3784 	  p1 = strchr (p, ':');
   3785 	  if (p1 == NULL)
   3786 	    return null_ptid;
   3787 
   3788 	  if (strncmp (p, "thread", p1 - p) == 0)
   3789 	    return read_ptid (++p1, &p);
   3790 
   3791 	  p1 = strchr (p, ';');
   3792 	  if (p1 == NULL)
   3793 	    return null_ptid;
   3794 	  p1++;
   3795 
   3796 	  p = p1;
   3797 	}
   3798     }
   3799 
   3800   return null_ptid;
   3801 }
   3802 
   3803 /* Determine the remote side's current thread.  If we have a stop
   3804    reply handy (in WAIT_STATUS), maybe it's a T stop reply with a
   3805    "thread" register we can extract the current thread from.  If not,
   3806    ask the remote which is the current thread with qC.  The former
   3807    method avoids a roundtrip.  */
   3808 
   3809 static ptid_t
   3810 get_current_thread (char *wait_status)
   3811 {
   3812   ptid_t ptid = null_ptid;
   3813 
   3814   /* Note we don't use remote_parse_stop_reply as that makes use of
   3815      the target architecture, which we haven't yet fully determined at
   3816      this point.  */
   3817   if (wait_status != NULL)
   3818     ptid = stop_reply_extract_thread (wait_status);
   3819   if (ptid_equal (ptid, null_ptid))
   3820     ptid = remote_current_thread (inferior_ptid);
   3821 
   3822   return ptid;
   3823 }
   3824 
   3825 /* Query the remote target for which is the current thread/process,
   3826    add it to our tables, and update INFERIOR_PTID.  The caller is
   3827    responsible for setting the state such that the remote end is ready
   3828    to return the current thread.
   3829 
   3830    This function is called after handling the '?' or 'vRun' packets,
   3831    whose response is a stop reply from which we can also try
   3832    extracting the thread.  If the target doesn't support the explicit
   3833    qC query, we infer the current thread from that stop reply, passed
   3834    in in WAIT_STATUS, which may be NULL.  */
   3835 
   3836 static void
   3837 add_current_inferior_and_thread (char *wait_status)
   3838 {
   3839   struct remote_state *rs = get_remote_state ();
   3840   int fake_pid_p = 0;
   3841   ptid_t ptid;
   3842 
   3843   inferior_ptid = null_ptid;
   3844 
   3845   /* Now, if we have thread information, update inferior_ptid.  */
   3846   ptid = get_current_thread (wait_status);
   3847 
   3848   if (!ptid_equal (ptid, null_ptid))
   3849     {
   3850       if (!remote_multi_process_p (rs))
   3851 	fake_pid_p = 1;
   3852 
   3853       inferior_ptid = ptid;
   3854     }
   3855   else
   3856     {
   3857       /* Without this, some commands which require an active target
   3858 	 (such as kill) won't work.  This variable serves (at least)
   3859 	 double duty as both the pid of the target process (if it has
   3860 	 such), and as a flag indicating that a target is active.  */
   3861       inferior_ptid = magic_null_ptid;
   3862       fake_pid_p = 1;
   3863     }
   3864 
   3865   remote_add_inferior (fake_pid_p, ptid_get_pid (inferior_ptid), -1, 1);
   3866 
   3867   /* Add the main thread.  */
   3868   add_thread_silent (inferior_ptid);
   3869 }
   3870 
   3871 /* Print info about a thread that was found already stopped on
   3872    connection.  */
   3873 
   3874 static void
   3875 print_one_stopped_thread (struct thread_info *thread)
   3876 {
   3877   struct target_waitstatus *ws = &thread->suspend.waitstatus;
   3878 
   3879   switch_to_thread (thread->ptid);
   3880   stop_pc = get_frame_pc (get_current_frame ());
   3881   set_current_sal_from_frame (get_current_frame ());
   3882 
   3883   thread->suspend.waitstatus_pending_p = 0;
   3884 
   3885   if (ws->kind == TARGET_WAITKIND_STOPPED)
   3886     {
   3887       enum gdb_signal sig = ws->value.sig;
   3888 
   3889       if (signal_print_state (sig))
   3890 	observer_notify_signal_received (sig);
   3891     }
   3892   observer_notify_normal_stop (NULL, 1);
   3893 }
   3894 
   3895 /* Process all initial stop replies the remote side sent in response
   3896    to the ? packet.  These indicate threads that were already stopped
   3897    on initial connection.  We mark these threads as stopped and print
   3898    their current frame before giving the user the prompt.  */
   3899 
   3900 static void
   3901 process_initial_stop_replies (int from_tty)
   3902 {
   3903   int pending_stop_replies = stop_reply_queue_length ();
   3904   struct inferior *inf;
   3905   struct thread_info *thread;
   3906   struct thread_info *selected = NULL;
   3907   struct thread_info *lowest_stopped = NULL;
   3908   struct thread_info *first = NULL;
   3909 
   3910   /* Consume the initial pending events.  */
   3911   while (pending_stop_replies-- > 0)
   3912     {
   3913       ptid_t waiton_ptid = minus_one_ptid;
   3914       ptid_t event_ptid;
   3915       struct target_waitstatus ws;
   3916       int ignore_event = 0;
   3917       struct thread_info *thread;
   3918 
   3919       memset (&ws, 0, sizeof (ws));
   3920       event_ptid = target_wait (waiton_ptid, &ws, TARGET_WNOHANG);
   3921       if (remote_debug)
   3922 	print_target_wait_results (waiton_ptid, event_ptid, &ws);
   3923 
   3924       switch (ws.kind)
   3925 	{
   3926 	case TARGET_WAITKIND_IGNORE:
   3927 	case TARGET_WAITKIND_NO_RESUMED:
   3928 	case TARGET_WAITKIND_SIGNALLED:
   3929 	case TARGET_WAITKIND_EXITED:
   3930 	  /* We shouldn't see these, but if we do, just ignore.  */
   3931 	  if (remote_debug)
   3932 	    fprintf_unfiltered (gdb_stdlog, "remote: event ignored\n");
   3933 	  ignore_event = 1;
   3934 	  break;
   3935 
   3936 	case TARGET_WAITKIND_EXECD:
   3937 	  xfree (ws.value.execd_pathname);
   3938 	  break;
   3939 	default:
   3940 	  break;
   3941 	}
   3942 
   3943       if (ignore_event)
   3944 	continue;
   3945 
   3946       thread = find_thread_ptid (event_ptid);
   3947 
   3948       if (ws.kind == TARGET_WAITKIND_STOPPED)
   3949 	{
   3950 	  enum gdb_signal sig = ws.value.sig;
   3951 
   3952 	  /* Stubs traditionally report SIGTRAP as initial signal,
   3953 	     instead of signal 0.  Suppress it.  */
   3954 	  if (sig == GDB_SIGNAL_TRAP)
   3955 	    sig = GDB_SIGNAL_0;
   3956 	  thread->suspend.stop_signal = sig;
   3957 	  ws.value.sig = sig;
   3958 	}
   3959 
   3960       thread->suspend.waitstatus = ws;
   3961 
   3962       if (ws.kind != TARGET_WAITKIND_STOPPED
   3963 	  || ws.value.sig != GDB_SIGNAL_0)
   3964 	thread->suspend.waitstatus_pending_p = 1;
   3965 
   3966       set_executing (event_ptid, 0);
   3967       set_running (event_ptid, 0);
   3968       thread->priv->vcont_resumed = 0;
   3969     }
   3970 
   3971   /* "Notice" the new inferiors before anything related to
   3972      registers/memory.  */
   3973   ALL_INFERIORS (inf)
   3974     {
   3975       if (inf->pid == 0)
   3976 	continue;
   3977 
   3978       inf->needs_setup = 1;
   3979 
   3980       if (non_stop)
   3981 	{
   3982 	  thread = any_live_thread_of_process (inf->pid);
   3983 	  notice_new_inferior (thread->ptid,
   3984 			       thread->state == THREAD_RUNNING,
   3985 			       from_tty);
   3986 	}
   3987     }
   3988 
   3989   /* If all-stop on top of non-stop, pause all threads.  Note this
   3990      records the threads' stop pc, so must be done after "noticing"
   3991      the inferiors.  */
   3992   if (!non_stop)
   3993     {
   3994       stop_all_threads ();
   3995 
   3996       /* If all threads of an inferior were already stopped, we
   3997 	 haven't setup the inferior yet.  */
   3998       ALL_INFERIORS (inf)
   3999 	{
   4000 	  if (inf->pid == 0)
   4001 	    continue;
   4002 
   4003 	  if (inf->needs_setup)
   4004 	    {
   4005 	      thread = any_live_thread_of_process (inf->pid);
   4006 	      switch_to_thread_no_regs (thread);
   4007 	      setup_inferior (0);
   4008 	    }
   4009 	}
   4010     }
   4011 
   4012   /* Now go over all threads that are stopped, and print their current
   4013      frame.  If all-stop, then if there's a signalled thread, pick
   4014      that as current.  */
   4015   ALL_NON_EXITED_THREADS (thread)
   4016     {
   4017       if (first == NULL)
   4018 	first = thread;
   4019 
   4020       if (!non_stop)
   4021 	set_running (thread->ptid, 0);
   4022       else if (thread->state != THREAD_STOPPED)
   4023 	continue;
   4024 
   4025       if (selected == NULL
   4026 	  && thread->suspend.waitstatus_pending_p)
   4027 	selected = thread;
   4028 
   4029       if (lowest_stopped == NULL
   4030 	  || thread->inf->num < lowest_stopped->inf->num
   4031 	  || thread->per_inf_num < lowest_stopped->per_inf_num)
   4032 	lowest_stopped = thread;
   4033 
   4034       if (non_stop)
   4035 	print_one_stopped_thread (thread);
   4036     }
   4037 
   4038   /* In all-stop, we only print the status of one thread, and leave
   4039      others with their status pending.  */
   4040   if (!non_stop)
   4041     {
   4042       thread = selected;
   4043       if (thread == NULL)
   4044 	thread = lowest_stopped;
   4045       if (thread == NULL)
   4046 	thread = first;
   4047 
   4048       print_one_stopped_thread (thread);
   4049     }
   4050 
   4051   /* For "info program".  */
   4052   thread = inferior_thread ();
   4053   if (thread->state == THREAD_STOPPED)
   4054     set_last_target_status (inferior_ptid, thread->suspend.waitstatus);
   4055 }
   4056 
   4057 /* Start the remote connection and sync state.  */
   4058 
   4059 static void
   4060 remote_start_remote (int from_tty, struct target_ops *target, int extended_p)
   4061 {
   4062   struct remote_state *rs = get_remote_state ();
   4063   struct packet_config *noack_config;
   4064   char *wait_status = NULL;
   4065 
   4066   /* Signal other parts that we're going through the initial setup,
   4067      and so things may not be stable yet.  E.g., we don't try to
   4068      install tracepoints until we've relocated symbols.  Also, a
   4069      Ctrl-C before we're connected and synced up can't interrupt the
   4070      target.  Instead, it offers to drop the (potentially wedged)
   4071      connection.  */
   4072   rs->starting_up = 1;
   4073 
   4074   QUIT;
   4075 
   4076   if (interrupt_on_connect)
   4077     send_interrupt_sequence ();
   4078 
   4079   /* Ack any packet which the remote side has already sent.  */
   4080   remote_serial_write ("+", 1);
   4081 
   4082   /* The first packet we send to the target is the optional "supported
   4083      packets" request.  If the target can answer this, it will tell us
   4084      which later probes to skip.  */
   4085   remote_query_supported ();
   4086 
   4087   /* If the stub wants to get a QAllow, compose one and send it.  */
   4088   if (packet_support (PACKET_QAllow) != PACKET_DISABLE)
   4089     remote_set_permissions (target);
   4090 
   4091   /* gdbserver < 7.7 (before its fix from 2013-12-11) did reply to any
   4092      unknown 'v' packet with string "OK".  "OK" gets interpreted by GDB
   4093      as a reply to known packet.  For packet "vFile:setfs:" it is an
   4094      invalid reply and GDB would return error in
   4095      remote_hostio_set_filesystem, making remote files access impossible.
   4096      Disable "vFile:setfs:" in such case.  Do not disable other 'v' packets as
   4097      other "vFile" packets get correctly detected even on gdbserver < 7.7.  */
   4098   {
   4099     const char v_mustreplyempty[] = "vMustReplyEmpty";
   4100 
   4101     putpkt (v_mustreplyempty);
   4102     getpkt (&rs->buf, &rs->buf_size, 0);
   4103     if (strcmp (rs->buf, "OK") == 0)
   4104       remote_protocol_packets[PACKET_vFile_setfs].support = PACKET_DISABLE;
   4105     else if (strcmp (rs->buf, "") != 0)
   4106       error (_("Remote replied unexpectedly to '%s': %s"), v_mustreplyempty,
   4107 	     rs->buf);
   4108   }
   4109 
   4110   /* Next, we possibly activate noack mode.
   4111 
   4112      If the QStartNoAckMode packet configuration is set to AUTO,
   4113      enable noack mode if the stub reported a wish for it with
   4114      qSupported.
   4115 
   4116      If set to TRUE, then enable noack mode even if the stub didn't
   4117      report it in qSupported.  If the stub doesn't reply OK, the
   4118      session ends with an error.
   4119 
   4120      If FALSE, then don't activate noack mode, regardless of what the
   4121      stub claimed should be the default with qSupported.  */
   4122 
   4123   noack_config = &remote_protocol_packets[PACKET_QStartNoAckMode];
   4124   if (packet_config_support (noack_config) != PACKET_DISABLE)
   4125     {
   4126       putpkt ("QStartNoAckMode");
   4127       getpkt (&rs->buf, &rs->buf_size, 0);
   4128       if (packet_ok (rs->buf, noack_config) == PACKET_OK)
   4129 	rs->noack_mode = 1;
   4130     }
   4131 
   4132   if (extended_p)
   4133     {
   4134       /* Tell the remote that we are using the extended protocol.  */
   4135       putpkt ("!");
   4136       getpkt (&rs->buf, &rs->buf_size, 0);
   4137     }
   4138 
   4139   /* Let the target know which signals it is allowed to pass down to
   4140      the program.  */
   4141   update_signals_program_target ();
   4142 
   4143   /* Next, if the target can specify a description, read it.  We do
   4144      this before anything involving memory or registers.  */
   4145   target_find_description ();
   4146 
   4147   /* Next, now that we know something about the target, update the
   4148      address spaces in the program spaces.  */
   4149   update_address_spaces ();
   4150 
   4151   /* On OSs where the list of libraries is global to all
   4152      processes, we fetch them early.  */
   4153   if (gdbarch_has_global_solist (target_gdbarch ()))
   4154     solib_add (NULL, from_tty, auto_solib_add);
   4155 
   4156   if (target_is_non_stop_p ())
   4157     {
   4158       if (packet_support (PACKET_QNonStop) != PACKET_ENABLE)
   4159 	error (_("Non-stop mode requested, but remote "
   4160 		 "does not support non-stop"));
   4161 
   4162       putpkt ("QNonStop:1");
   4163       getpkt (&rs->buf, &rs->buf_size, 0);
   4164 
   4165       if (strcmp (rs->buf, "OK") != 0)
   4166 	error (_("Remote refused setting non-stop mode with: %s"), rs->buf);
   4167 
   4168       /* Find about threads and processes the stub is already
   4169 	 controlling.  We default to adding them in the running state.
   4170 	 The '?' query below will then tell us about which threads are
   4171 	 stopped.  */
   4172       remote_update_thread_list (target);
   4173     }
   4174   else if (packet_support (PACKET_QNonStop) == PACKET_ENABLE)
   4175     {
   4176       /* Don't assume that the stub can operate in all-stop mode.
   4177 	 Request it explicitly.  */
   4178       putpkt ("QNonStop:0");
   4179       getpkt (&rs->buf, &rs->buf_size, 0);
   4180 
   4181       if (strcmp (rs->buf, "OK") != 0)
   4182 	error (_("Remote refused setting all-stop mode with: %s"), rs->buf);
   4183     }
   4184 
   4185   /* Upload TSVs regardless of whether the target is running or not.  The
   4186      remote stub, such as GDBserver, may have some predefined or builtin
   4187      TSVs, even if the target is not running.  */
   4188   if (remote_get_trace_status (target, current_trace_status ()) != -1)
   4189     {
   4190       struct uploaded_tsv *uploaded_tsvs = NULL;
   4191 
   4192       remote_upload_trace_state_variables (target, &uploaded_tsvs);
   4193       merge_uploaded_trace_state_variables (&uploaded_tsvs);
   4194     }
   4195 
   4196   /* Check whether the target is running now.  */
   4197   putpkt ("?");
   4198   getpkt (&rs->buf, &rs->buf_size, 0);
   4199 
   4200   if (!target_is_non_stop_p ())
   4201     {
   4202       if (rs->buf[0] == 'W' || rs->buf[0] == 'X')
   4203 	{
   4204 	  if (!extended_p)
   4205 	    error (_("The target is not running (try extended-remote?)"));
   4206 
   4207 	  /* We're connected, but not running.  Drop out before we
   4208 	     call start_remote.  */
   4209 	  rs->starting_up = 0;
   4210 	  return;
   4211 	}
   4212       else
   4213 	{
   4214 	  /* Save the reply for later.  */
   4215 	  wait_status = (char *) alloca (strlen (rs->buf) + 1);
   4216 	  strcpy (wait_status, rs->buf);
   4217 	}
   4218 
   4219       /* Fetch thread list.  */
   4220       target_update_thread_list ();
   4221 
   4222       /* Let the stub know that we want it to return the thread.  */
   4223       set_continue_thread (minus_one_ptid);
   4224 
   4225       if (thread_count () == 0)
   4226 	{
   4227 	  /* Target has no concept of threads at all.  GDB treats
   4228 	     non-threaded target as single-threaded; add a main
   4229 	     thread.  */
   4230 	  add_current_inferior_and_thread (wait_status);
   4231 	}
   4232       else
   4233 	{
   4234 	  /* We have thread information; select the thread the target
   4235 	     says should be current.  If we're reconnecting to a
   4236 	     multi-threaded program, this will ideally be the thread
   4237 	     that last reported an event before GDB disconnected.  */
   4238 	  inferior_ptid = get_current_thread (wait_status);
   4239 	  if (ptid_equal (inferior_ptid, null_ptid))
   4240 	    {
   4241 	      /* Odd... The target was able to list threads, but not
   4242 		 tell us which thread was current (no "thread"
   4243 		 register in T stop reply?).  Just pick the first
   4244 		 thread in the thread list then.  */
   4245 
   4246 	      if (remote_debug)
   4247 		fprintf_unfiltered (gdb_stdlog,
   4248 		                    "warning: couldn't determine remote "
   4249 				    "current thread; picking first in list.\n");
   4250 
   4251 	      inferior_ptid = thread_list->ptid;
   4252 	    }
   4253 	}
   4254 
   4255       /* init_wait_for_inferior should be called before get_offsets in order
   4256 	 to manage `inserted' flag in bp loc in a correct state.
   4257 	 breakpoint_init_inferior, called from init_wait_for_inferior, set
   4258 	 `inserted' flag to 0, while before breakpoint_re_set, called from
   4259 	 start_remote, set `inserted' flag to 1.  In the initialization of
   4260 	 inferior, breakpoint_init_inferior should be called first, and then
   4261 	 breakpoint_re_set can be called.  If this order is broken, state of
   4262 	 `inserted' flag is wrong, and cause some problems on breakpoint
   4263 	 manipulation.  */
   4264       init_wait_for_inferior ();
   4265 
   4266       get_offsets ();		/* Get text, data & bss offsets.  */
   4267 
   4268       /* If we could not find a description using qXfer, and we know
   4269 	 how to do it some other way, try again.  This is not
   4270 	 supported for non-stop; it could be, but it is tricky if
   4271 	 there are no stopped threads when we connect.  */
   4272       if (remote_read_description_p (target)
   4273 	  && gdbarch_target_desc (target_gdbarch ()) == NULL)
   4274 	{
   4275 	  target_clear_description ();
   4276 	  target_find_description ();
   4277 	}
   4278 
   4279       /* Use the previously fetched status.  */
   4280       gdb_assert (wait_status != NULL);
   4281       strcpy (rs->buf, wait_status);
   4282       rs->cached_wait_status = 1;
   4283 
   4284       start_remote (from_tty); /* Initialize gdb process mechanisms.  */
   4285     }
   4286   else
   4287     {
   4288       /* Clear WFI global state.  Do this before finding about new
   4289 	 threads and inferiors, and setting the current inferior.
   4290 	 Otherwise we would clear the proceed status of the current
   4291 	 inferior when we want its stop_soon state to be preserved
   4292 	 (see notice_new_inferior).  */
   4293       init_wait_for_inferior ();
   4294 
   4295       /* In non-stop, we will either get an "OK", meaning that there
   4296 	 are no stopped threads at this time; or, a regular stop
   4297 	 reply.  In the latter case, there may be more than one thread
   4298 	 stopped --- we pull them all out using the vStopped
   4299 	 mechanism.  */
   4300       if (strcmp (rs->buf, "OK") != 0)
   4301 	{
   4302 	  struct notif_client *notif = &notif_client_stop;
   4303 
   4304 	  /* remote_notif_get_pending_replies acks this one, and gets
   4305 	     the rest out.  */
   4306 	  rs->notif_state->pending_event[notif_client_stop.id]
   4307 	    = remote_notif_parse (notif, rs->buf);
   4308 	  remote_notif_get_pending_events (notif);
   4309 	}
   4310 
   4311       if (thread_count () == 0)
   4312 	{
   4313 	  if (!extended_p)
   4314 	    error (_("The target is not running (try extended-remote?)"));
   4315 
   4316 	  /* We're connected, but not running.  Drop out before we
   4317 	     call start_remote.  */
   4318 	  rs->starting_up = 0;
   4319 	  return;
   4320 	}
   4321 
   4322       /* In non-stop mode, any cached wait status will be stored in
   4323 	 the stop reply queue.  */
   4324       gdb_assert (wait_status == NULL);
   4325 
   4326       /* Report all signals during attach/startup.  */
   4327       remote_pass_signals (target, 0, NULL);
   4328 
   4329       /* If there are already stopped threads, mark them stopped and
   4330 	 report their stops before giving the prompt to the user.  */
   4331       process_initial_stop_replies (from_tty);
   4332 
   4333       if (target_can_async_p ())
   4334 	target_async (1);
   4335     }
   4336 
   4337   /* If we connected to a live target, do some additional setup.  */
   4338   if (target_has_execution)
   4339     {
   4340       if (symfile_objfile) 	/* No use without a symbol-file.  */
   4341 	remote_check_symbols ();
   4342     }
   4343 
   4344   /* Possibly the target has been engaged in a trace run started
   4345      previously; find out where things are at.  */
   4346   if (remote_get_trace_status (target, current_trace_status ()) != -1)
   4347     {
   4348       struct uploaded_tp *uploaded_tps = NULL;
   4349 
   4350       if (current_trace_status ()->running)
   4351 	printf_filtered (_("Trace is already running on the target.\n"));
   4352 
   4353       remote_upload_tracepoints (target, &uploaded_tps);
   4354 
   4355       merge_uploaded_tracepoints (&uploaded_tps);
   4356     }
   4357 
   4358   /* Possibly the target has been engaged in a btrace record started
   4359      previously; find out where things are at.  */
   4360   remote_btrace_maybe_reopen ();
   4361 
   4362   /* The thread and inferior lists are now synchronized with the
   4363      target, our symbols have been relocated, and we're merged the
   4364      target's tracepoints with ours.  We're done with basic start
   4365      up.  */
   4366   rs->starting_up = 0;
   4367 
   4368   /* Maybe breakpoints are global and need to be inserted now.  */
   4369   if (breakpoints_should_be_inserted_now ())
   4370     insert_breakpoints ();
   4371 }
   4372 
   4373 /* Open a connection to a remote debugger.
   4374    NAME is the filename used for communication.  */
   4375 
   4376 static void
   4377 remote_open (const char *name, int from_tty)
   4378 {
   4379   remote_open_1 (name, from_tty, &remote_ops, 0);
   4380 }
   4381 
   4382 /* Open a connection to a remote debugger using the extended
   4383    remote gdb protocol.  NAME is the filename used for communication.  */
   4384 
   4385 static void
   4386 extended_remote_open (const char *name, int from_tty)
   4387 {
   4388   remote_open_1 (name, from_tty, &extended_remote_ops, 1 /*extended_p */);
   4389 }
   4390 
   4391 /* Reset all packets back to "unknown support".  Called when opening a
   4392    new connection to a remote target.  */
   4393 
   4394 static void
   4395 reset_all_packet_configs_support (void)
   4396 {
   4397   int i;
   4398 
   4399   for (i = 0; i < PACKET_MAX; i++)
   4400     remote_protocol_packets[i].support = PACKET_SUPPORT_UNKNOWN;
   4401 }
   4402 
   4403 /* Initialize all packet configs.  */
   4404 
   4405 static void
   4406 init_all_packet_configs (void)
   4407 {
   4408   int i;
   4409 
   4410   for (i = 0; i < PACKET_MAX; i++)
   4411     {
   4412       remote_protocol_packets[i].detect = AUTO_BOOLEAN_AUTO;
   4413       remote_protocol_packets[i].support = PACKET_SUPPORT_UNKNOWN;
   4414     }
   4415 }
   4416 
   4417 /* Symbol look-up.  */
   4418 
   4419 static void
   4420 remote_check_symbols (void)
   4421 {
   4422   struct remote_state *rs = get_remote_state ();
   4423   char *msg, *reply, *tmp;
   4424   int end;
   4425   long reply_size;
   4426   struct cleanup *old_chain;
   4427 
   4428   /* The remote side has no concept of inferiors that aren't running
   4429      yet, it only knows about running processes.  If we're connected
   4430      but our current inferior is not running, we should not invite the
   4431      remote target to request symbol lookups related to its
   4432      (unrelated) current process.  */
   4433   if (!target_has_execution)
   4434     return;
   4435 
   4436   if (packet_support (PACKET_qSymbol) == PACKET_DISABLE)
   4437     return;
   4438 
   4439   /* Make sure the remote is pointing at the right process.  Note
   4440      there's no way to select "no process".  */
   4441   set_general_process ();
   4442 
   4443   /* Allocate a message buffer.  We can't reuse the input buffer in RS,
   4444      because we need both at the same time.  */
   4445   msg = (char *) xmalloc (get_remote_packet_size ());
   4446   old_chain = make_cleanup (xfree, msg);
   4447   reply = (char *) xmalloc (get_remote_packet_size ());
   4448   make_cleanup (free_current_contents, &reply);
   4449   reply_size = get_remote_packet_size ();
   4450 
   4451   /* Invite target to request symbol lookups.  */
   4452 
   4453   putpkt ("qSymbol::");
   4454   getpkt (&reply, &reply_size, 0);
   4455   packet_ok (reply, &remote_protocol_packets[PACKET_qSymbol]);
   4456 
   4457   while (startswith (reply, "qSymbol:"))
   4458     {
   4459       struct bound_minimal_symbol sym;
   4460 
   4461       tmp = &reply[8];
   4462       end = hex2bin (tmp, (gdb_byte *) msg, strlen (tmp) / 2);
   4463       msg[end] = '\0';
   4464       sym = lookup_minimal_symbol (msg, NULL, NULL);
   4465       if (sym.minsym == NULL)
   4466 	xsnprintf (msg, get_remote_packet_size (), "qSymbol::%s", &reply[8]);
   4467       else
   4468 	{
   4469 	  int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
   4470 	  CORE_ADDR sym_addr = BMSYMBOL_VALUE_ADDRESS (sym);
   4471 
   4472 	  /* If this is a function address, return the start of code
   4473 	     instead of any data function descriptor.  */
   4474 	  sym_addr = gdbarch_convert_from_func_ptr_addr (target_gdbarch (),
   4475 							 sym_addr,
   4476 							 &current_target);
   4477 
   4478 	  xsnprintf (msg, get_remote_packet_size (), "qSymbol:%s:%s",
   4479 		     phex_nz (sym_addr, addr_size), &reply[8]);
   4480 	}
   4481 
   4482       putpkt (msg);
   4483       getpkt (&reply, &reply_size, 0);
   4484     }
   4485 
   4486   do_cleanups (old_chain);
   4487 }
   4488 
   4489 static struct serial *
   4490 remote_serial_open (const char *name)
   4491 {
   4492   static int udp_warning = 0;
   4493 
   4494   /* FIXME: Parsing NAME here is a hack.  But we want to warn here instead
   4495      of in ser-tcp.c, because it is the remote protocol assuming that the
   4496      serial connection is reliable and not the serial connection promising
   4497      to be.  */
   4498   if (!udp_warning && startswith (name, "udp:"))
   4499     {
   4500       warning (_("The remote protocol may be unreliable over UDP.\n"
   4501 		 "Some events may be lost, rendering further debugging "
   4502 		 "impossible."));
   4503       udp_warning = 1;
   4504     }
   4505 
   4506   return serial_open (name);
   4507 }
   4508 
   4509 /* Inform the target of our permission settings.  The permission flags
   4510    work without this, but if the target knows the settings, it can do
   4511    a couple things.  First, it can add its own check, to catch cases
   4512    that somehow manage to get by the permissions checks in target
   4513    methods.  Second, if the target is wired to disallow particular
   4514    settings (for instance, a system in the field that is not set up to
   4515    be able to stop at a breakpoint), it can object to any unavailable
   4516    permissions.  */
   4517 
   4518 void
   4519 remote_set_permissions (struct target_ops *self)
   4520 {
   4521   struct remote_state *rs = get_remote_state ();
   4522 
   4523   xsnprintf (rs->buf, get_remote_packet_size (), "QAllow:"
   4524 	     "WriteReg:%x;WriteMem:%x;"
   4525 	     "InsertBreak:%x;InsertTrace:%x;"
   4526 	     "InsertFastTrace:%x;Stop:%x",
   4527 	     may_write_registers, may_write_memory,
   4528 	     may_insert_breakpoints, may_insert_tracepoints,
   4529 	     may_insert_fast_tracepoints, may_stop);
   4530   putpkt (rs->buf);
   4531   getpkt (&rs->buf, &rs->buf_size, 0);
   4532 
   4533   /* If the target didn't like the packet, warn the user.  Do not try
   4534      to undo the user's settings, that would just be maddening.  */
   4535   if (strcmp (rs->buf, "OK") != 0)
   4536     warning (_("Remote refused setting permissions with: %s"), rs->buf);
   4537 }
   4538 
   4539 /* This type describes each known response to the qSupported
   4540    packet.  */
   4541 struct protocol_feature
   4542 {
   4543   /* The name of this protocol feature.  */
   4544   const char *name;
   4545 
   4546   /* The default for this protocol feature.  */
   4547   enum packet_support default_support;
   4548 
   4549   /* The function to call when this feature is reported, or after
   4550      qSupported processing if the feature is not supported.
   4551      The first argument points to this structure.  The second
   4552      argument indicates whether the packet requested support be
   4553      enabled, disabled, or probed (or the default, if this function
   4554      is being called at the end of processing and this feature was
   4555      not reported).  The third argument may be NULL; if not NULL, it
   4556      is a NUL-terminated string taken from the packet following
   4557      this feature's name and an equals sign.  */
   4558   void (*func) (const struct protocol_feature *, enum packet_support,
   4559 		const char *);
   4560 
   4561   /* The corresponding packet for this feature.  Only used if
   4562      FUNC is remote_supported_packet.  */
   4563   int packet;
   4564 };
   4565 
   4566 static void
   4567 remote_supported_packet (const struct protocol_feature *feature,
   4568 			 enum packet_support support,
   4569 			 const char *argument)
   4570 {
   4571   if (argument)
   4572     {
   4573       warning (_("Remote qSupported response supplied an unexpected value for"
   4574 		 " \"%s\"."), feature->name);
   4575       return;
   4576     }
   4577 
   4578   remote_protocol_packets[feature->packet].support = support;
   4579 }
   4580 
   4581 static void
   4582 remote_packet_size (const struct protocol_feature *feature,
   4583 		    enum packet_support support, const char *value)
   4584 {
   4585   struct remote_state *rs = get_remote_state ();
   4586 
   4587   int packet_size;
   4588   char *value_end;
   4589 
   4590   if (support != PACKET_ENABLE)
   4591     return;
   4592 
   4593   if (value == NULL || *value == '\0')
   4594     {
   4595       warning (_("Remote target reported \"%s\" without a size."),
   4596 	       feature->name);
   4597       return;
   4598     }
   4599 
   4600   errno = 0;
   4601   packet_size = strtol (value, &value_end, 16);
   4602   if (errno != 0 || *value_end != '\0' || packet_size < 0)
   4603     {
   4604       warning (_("Remote target reported \"%s\" with a bad size: \"%s\"."),
   4605 	       feature->name, value);
   4606       return;
   4607     }
   4608 
   4609   /* Record the new maximum packet size.  */
   4610   rs->explicit_packet_size = packet_size;
   4611 }
   4612 
   4613 static const struct protocol_feature remote_protocol_features[] = {
   4614   { "PacketSize", PACKET_DISABLE, remote_packet_size, -1 },
   4615   { "qXfer:auxv:read", PACKET_DISABLE, remote_supported_packet,
   4616     PACKET_qXfer_auxv },
   4617   { "qXfer:exec-file:read", PACKET_DISABLE, remote_supported_packet,
   4618     PACKET_qXfer_exec_file },
   4619   { "qXfer:features:read", PACKET_DISABLE, remote_supported_packet,
   4620     PACKET_qXfer_features },
   4621   { "qXfer:libraries:read", PACKET_DISABLE, remote_supported_packet,
   4622     PACKET_qXfer_libraries },
   4623   { "qXfer:libraries-svr4:read", PACKET_DISABLE, remote_supported_packet,
   4624     PACKET_qXfer_libraries_svr4 },
   4625   { "augmented-libraries-svr4-read", PACKET_DISABLE,
   4626     remote_supported_packet, PACKET_augmented_libraries_svr4_read_feature },
   4627   { "qXfer:memory-map:read", PACKET_DISABLE, remote_supported_packet,
   4628     PACKET_qXfer_memory_map },
   4629   { "qXfer:spu:read", PACKET_DISABLE, remote_supported_packet,
   4630     PACKET_qXfer_spu_read },
   4631   { "qXfer:spu:write", PACKET_DISABLE, remote_supported_packet,
   4632     PACKET_qXfer_spu_write },
   4633   { "qXfer:osdata:read", PACKET_DISABLE, remote_supported_packet,
   4634     PACKET_qXfer_osdata },
   4635   { "qXfer:threads:read", PACKET_DISABLE, remote_supported_packet,
   4636     PACKET_qXfer_threads },
   4637   { "qXfer:traceframe-info:read", PACKET_DISABLE, remote_supported_packet,
   4638     PACKET_qXfer_traceframe_info },
   4639   { "QPassSignals", PACKET_DISABLE, remote_supported_packet,
   4640     PACKET_QPassSignals },
   4641   { "QCatchSyscalls", PACKET_DISABLE, remote_supported_packet,
   4642     PACKET_QCatchSyscalls },
   4643   { "QProgramSignals", PACKET_DISABLE, remote_supported_packet,
   4644     PACKET_QProgramSignals },
   4645   { "QStartNoAckMode", PACKET_DISABLE, remote_supported_packet,
   4646     PACKET_QStartNoAckMode },
   4647   { "multiprocess", PACKET_DISABLE, remote_supported_packet,
   4648     PACKET_multiprocess_feature },
   4649   { "QNonStop", PACKET_DISABLE, remote_supported_packet, PACKET_QNonStop },
   4650   { "qXfer:siginfo:read", PACKET_DISABLE, remote_supported_packet,
   4651     PACKET_qXfer_siginfo_read },
   4652   { "qXfer:siginfo:write", PACKET_DISABLE, remote_supported_packet,
   4653     PACKET_qXfer_siginfo_write },
   4654   { "ConditionalTracepoints", PACKET_DISABLE, remote_supported_packet,
   4655     PACKET_ConditionalTracepoints },
   4656   { "ConditionalBreakpoints", PACKET_DISABLE, remote_supported_packet,
   4657     PACKET_ConditionalBreakpoints },
   4658   { "BreakpointCommands", PACKET_DISABLE, remote_supported_packet,
   4659     PACKET_BreakpointCommands },
   4660   { "FastTracepoints", PACKET_DISABLE, remote_supported_packet,
   4661     PACKET_FastTracepoints },
   4662   { "StaticTracepoints", PACKET_DISABLE, remote_supported_packet,
   4663     PACKET_StaticTracepoints },
   4664   {"InstallInTrace", PACKET_DISABLE, remote_supported_packet,
   4665    PACKET_InstallInTrace},
   4666   { "DisconnectedTracing", PACKET_DISABLE, remote_supported_packet,
   4667     PACKET_DisconnectedTracing_feature },
   4668   { "ReverseContinue", PACKET_DISABLE, remote_supported_packet,
   4669     PACKET_bc },
   4670   { "ReverseStep", PACKET_DISABLE, remote_supported_packet,
   4671     PACKET_bs },
   4672   { "TracepointSource", PACKET_DISABLE, remote_supported_packet,
   4673     PACKET_TracepointSource },
   4674   { "QAllow", PACKET_DISABLE, remote_supported_packet,
   4675     PACKET_QAllow },
   4676   { "EnableDisableTracepoints", PACKET_DISABLE, remote_supported_packet,
   4677     PACKET_EnableDisableTracepoints_feature },
   4678   { "qXfer:fdpic:read", PACKET_DISABLE, remote_supported_packet,
   4679     PACKET_qXfer_fdpic },
   4680   { "qXfer:uib:read", PACKET_DISABLE, remote_supported_packet,
   4681     PACKET_qXfer_uib },
   4682   { "QDisableRandomization", PACKET_DISABLE, remote_supported_packet,
   4683     PACKET_QDisableRandomization },
   4684   { "QAgent", PACKET_DISABLE, remote_supported_packet, PACKET_QAgent},
   4685   { "QTBuffer:size", PACKET_DISABLE,
   4686     remote_supported_packet, PACKET_QTBuffer_size},
   4687   { "tracenz", PACKET_DISABLE, remote_supported_packet, PACKET_tracenz_feature },
   4688   { "Qbtrace:off", PACKET_DISABLE, remote_supported_packet, PACKET_Qbtrace_off },
   4689   { "Qbtrace:bts", PACKET_DISABLE, remote_supported_packet, PACKET_Qbtrace_bts },
   4690   { "Qbtrace:pt", PACKET_DISABLE, remote_supported_packet, PACKET_Qbtrace_pt },
   4691   { "qXfer:btrace:read", PACKET_DISABLE, remote_supported_packet,
   4692     PACKET_qXfer_btrace },
   4693   { "qXfer:btrace-conf:read", PACKET_DISABLE, remote_supported_packet,
   4694     PACKET_qXfer_btrace_conf },
   4695   { "Qbtrace-conf:bts:size", PACKET_DISABLE, remote_supported_packet,
   4696     PACKET_Qbtrace_conf_bts_size },
   4697   { "swbreak", PACKET_DISABLE, remote_supported_packet, PACKET_swbreak_feature },
   4698   { "hwbreak", PACKET_DISABLE, remote_supported_packet, PACKET_hwbreak_feature },
   4699   { "fork-events", PACKET_DISABLE, remote_supported_packet,
   4700     PACKET_fork_event_feature },
   4701   { "vfork-events", PACKET_DISABLE, remote_supported_packet,
   4702     PACKET_vfork_event_feature },
   4703   { "exec-events", PACKET_DISABLE, remote_supported_packet,
   4704     PACKET_exec_event_feature },
   4705   { "Qbtrace-conf:pt:size", PACKET_DISABLE, remote_supported_packet,
   4706     PACKET_Qbtrace_conf_pt_size },
   4707   { "vContSupported", PACKET_DISABLE, remote_supported_packet, PACKET_vContSupported },
   4708   { "QThreadEvents", PACKET_DISABLE, remote_supported_packet, PACKET_QThreadEvents },
   4709   { "no-resumed", PACKET_DISABLE, remote_supported_packet, PACKET_no_resumed },
   4710 };
   4711 
   4712 static char *remote_support_xml;
   4713 
   4714 /* Register string appended to "xmlRegisters=" in qSupported query.  */
   4715 
   4716 void
   4717 register_remote_support_xml (const char *xml)
   4718 {
   4719 #if defined(HAVE_LIBEXPAT)
   4720   if (remote_support_xml == NULL)
   4721     remote_support_xml = concat ("xmlRegisters=", xml, (char *) NULL);
   4722   else
   4723     {
   4724       char *copy = xstrdup (remote_support_xml + 13);
   4725       char *p = strtok (copy, ",");
   4726 
   4727       do
   4728 	{
   4729 	  if (strcmp (p, xml) == 0)
   4730 	    {
   4731 	      /* already there */
   4732 	      xfree (copy);
   4733 	      return;
   4734 	    }
   4735 	}
   4736       while ((p = strtok (NULL, ",")) != NULL);
   4737       xfree (copy);
   4738 
   4739       remote_support_xml = reconcat (remote_support_xml,
   4740 				     remote_support_xml, ",", xml,
   4741 				     (char *) NULL);
   4742     }
   4743 #endif
   4744 }
   4745 
   4746 static char *
   4747 remote_query_supported_append (char *msg, const char *append)
   4748 {
   4749   if (msg)
   4750     return reconcat (msg, msg, ";", append, (char *) NULL);
   4751   else
   4752     return xstrdup (append);
   4753 }
   4754 
   4755 static void
   4756 remote_query_supported (void)
   4757 {
   4758   struct remote_state *rs = get_remote_state ();
   4759   char *next;
   4760   int i;
   4761   unsigned char seen [ARRAY_SIZE (remote_protocol_features)];
   4762 
   4763   /* The packet support flags are handled differently for this packet
   4764      than for most others.  We treat an error, a disabled packet, and
   4765      an empty response identically: any features which must be reported
   4766      to be used will be automatically disabled.  An empty buffer
   4767      accomplishes this, since that is also the representation for a list
   4768      containing no features.  */
   4769 
   4770   rs->buf[0] = 0;
   4771   if (packet_support (PACKET_qSupported) != PACKET_DISABLE)
   4772     {
   4773       char *q = NULL;
   4774       struct cleanup *old_chain = make_cleanup (free_current_contents, &q);
   4775 
   4776       if (packet_set_cmd_state (PACKET_multiprocess_feature) != AUTO_BOOLEAN_FALSE)
   4777 	q = remote_query_supported_append (q, "multiprocess+");
   4778 
   4779       if (packet_set_cmd_state (PACKET_swbreak_feature) != AUTO_BOOLEAN_FALSE)
   4780 	q = remote_query_supported_append (q, "swbreak+");
   4781       if (packet_set_cmd_state (PACKET_hwbreak_feature) != AUTO_BOOLEAN_FALSE)
   4782 	q = remote_query_supported_append (q, "hwbreak+");
   4783 
   4784       q = remote_query_supported_append (q, "qRelocInsn+");
   4785 
   4786       if (packet_set_cmd_state (PACKET_fork_event_feature)
   4787 	  != AUTO_BOOLEAN_FALSE)
   4788 	q = remote_query_supported_append (q, "fork-events+");
   4789       if (packet_set_cmd_state (PACKET_vfork_event_feature)
   4790 	  != AUTO_BOOLEAN_FALSE)
   4791 	q = remote_query_supported_append (q, "vfork-events+");
   4792       if (packet_set_cmd_state (PACKET_exec_event_feature)
   4793 	  != AUTO_BOOLEAN_FALSE)
   4794 	q = remote_query_supported_append (q, "exec-events+");
   4795 
   4796       if (packet_set_cmd_state (PACKET_vContSupported) != AUTO_BOOLEAN_FALSE)
   4797 	q = remote_query_supported_append (q, "vContSupported+");
   4798 
   4799       if (packet_set_cmd_state (PACKET_QThreadEvents) != AUTO_BOOLEAN_FALSE)
   4800 	q = remote_query_supported_append (q, "QThreadEvents+");
   4801 
   4802       if (packet_set_cmd_state (PACKET_no_resumed) != AUTO_BOOLEAN_FALSE)
   4803 	q = remote_query_supported_append (q, "no-resumed+");
   4804 
   4805       /* Keep this one last to work around a gdbserver <= 7.10 bug in
   4806 	 the qSupported:xmlRegisters=i386 handling.  */
   4807       if (remote_support_xml != NULL)
   4808 	q = remote_query_supported_append (q, remote_support_xml);
   4809 
   4810       q = reconcat (q, "qSupported:", q, (char *) NULL);
   4811       putpkt (q);
   4812 
   4813       do_cleanups (old_chain);
   4814 
   4815       getpkt (&rs->buf, &rs->buf_size, 0);
   4816 
   4817       /* If an error occured, warn, but do not return - just reset the
   4818 	 buffer to empty and go on to disable features.  */
   4819       if (packet_ok (rs->buf, &remote_protocol_packets[PACKET_qSupported])
   4820 	  == PACKET_ERROR)
   4821 	{
   4822 	  warning (_("Remote failure reply: %s"), rs->buf);
   4823 	  rs->buf[0] = 0;
   4824 	}
   4825     }
   4826 
   4827   memset (seen, 0, sizeof (seen));
   4828 
   4829   next = rs->buf;
   4830   while (*next)
   4831     {
   4832       enum packet_support is_supported;
   4833       char *p, *end, *name_end, *value;
   4834 
   4835       /* First separate out this item from the rest of the packet.  If
   4836 	 there's another item after this, we overwrite the separator
   4837 	 (terminated strings are much easier to work with).  */
   4838       p = next;
   4839       end = strchr (p, ';');
   4840       if (end == NULL)
   4841 	{
   4842 	  end = p + strlen (p);
   4843 	  next = end;
   4844 	}
   4845       else
   4846 	{
   4847 	  *end = '\0';
   4848 	  next = end + 1;
   4849 
   4850 	  if (end == p)
   4851 	    {
   4852 	      warning (_("empty item in \"qSupported\" response"));
   4853 	      continue;
   4854 	    }
   4855 	}
   4856 
   4857       name_end = strchr (p, '=');
   4858       if (name_end)
   4859 	{
   4860 	  /* This is a name=value entry.  */
   4861 	  is_supported = PACKET_ENABLE;
   4862 	  value = name_end + 1;
   4863 	  *name_end = '\0';
   4864 	}
   4865       else
   4866 	{
   4867 	  value = NULL;
   4868 	  switch (end[-1])
   4869 	    {
   4870 	    case '+':
   4871 	      is_supported = PACKET_ENABLE;
   4872 	      break;
   4873 
   4874 	    case '-':
   4875 	      is_supported = PACKET_DISABLE;
   4876 	      break;
   4877 
   4878 	    case '?':
   4879 	      is_supported = PACKET_SUPPORT_UNKNOWN;
   4880 	      break;
   4881 
   4882 	    default:
   4883 	      warning (_("unrecognized item \"%s\" "
   4884 			 "in \"qSupported\" response"), p);
   4885 	      continue;
   4886 	    }
   4887 	  end[-1] = '\0';
   4888 	}
   4889 
   4890       for (i = 0; i < ARRAY_SIZE (remote_protocol_features); i++)
   4891 	if (strcmp (remote_protocol_features[i].name, p) == 0)
   4892 	  {
   4893 	    const struct protocol_feature *feature;
   4894 
   4895 	    seen[i] = 1;
   4896 	    feature = &remote_protocol_features[i];
   4897 	    feature->func (feature, is_supported, value);
   4898 	    break;
   4899 	  }
   4900     }
   4901 
   4902   /* If we increased the packet size, make sure to increase the global
   4903      buffer size also.  We delay this until after parsing the entire
   4904      qSupported packet, because this is the same buffer we were
   4905      parsing.  */
   4906   if (rs->buf_size < rs->explicit_packet_size)
   4907     {
   4908       rs->buf_size = rs->explicit_packet_size;
   4909       rs->buf = (char *) xrealloc (rs->buf, rs->buf_size);
   4910     }
   4911 
   4912   /* Handle the defaults for unmentioned features.  */
   4913   for (i = 0; i < ARRAY_SIZE (remote_protocol_features); i++)
   4914     if (!seen[i])
   4915       {
   4916 	const struct protocol_feature *feature;
   4917 
   4918 	feature = &remote_protocol_features[i];
   4919 	feature->func (feature, feature->default_support, NULL);
   4920       }
   4921 }
   4922 
   4923 /* Serial QUIT handler for the remote serial descriptor.
   4924 
   4925    Defers handling a Ctrl-C until we're done with the current
   4926    command/response packet sequence, unless:
   4927 
   4928    - We're setting up the connection.  Don't send a remote interrupt
   4929      request, as we're not fully synced yet.  Quit immediately
   4930      instead.
   4931 
   4932    - The target has been resumed in the foreground
   4933      (target_terminal_is_ours is false) with a synchronous resume
   4934      packet, and we're blocked waiting for the stop reply, thus a
   4935      Ctrl-C should be immediately sent to the target.
   4936 
   4937    - We get a second Ctrl-C while still within the same serial read or
   4938      write.  In that case the serial is seemingly wedged --- offer to
   4939      quit/disconnect.
   4940 
   4941    - We see a second Ctrl-C without target response, after having
   4942      previously interrupted the target.  In that case the target/stub
   4943      is probably wedged --- offer to quit/disconnect.
   4944 */
   4945 
   4946 static void
   4947 remote_serial_quit_handler (void)
   4948 {
   4949   struct remote_state *rs = get_remote_state ();
   4950 
   4951   if (check_quit_flag ())
   4952     {
   4953       /* If we're starting up, we're not fully synced yet.  Quit
   4954 	 immediately.  */
   4955       if (rs->starting_up)
   4956 	quit ();
   4957       else if (rs->got_ctrlc_during_io)
   4958 	{
   4959 	  if (query (_("The target is not responding to GDB commands.\n"
   4960 		       "Stop debugging it? ")))
   4961 	    remote_unpush_and_throw ();
   4962 	}
   4963       /* If ^C has already been sent once, offer to disconnect.  */
   4964       else if (!target_terminal_is_ours () && rs->ctrlc_pending_p)
   4965 	interrupt_query ();
   4966       /* All-stop protocol, and blocked waiting for stop reply.  Send
   4967 	 an interrupt request.  */
   4968       else if (!target_terminal_is_ours () && rs->waiting_for_stop_reply)
   4969 	target_interrupt (inferior_ptid);
   4970       else
   4971 	rs->got_ctrlc_during_io = 1;
   4972     }
   4973 }
   4974 
   4975 /* Remove any of the remote.c targets from target stack.  Upper targets depend
   4976    on it so remove them first.  */
   4977 
   4978 static void
   4979 remote_unpush_target (void)
   4980 {
   4981   pop_all_targets_at_and_above (process_stratum);
   4982 }
   4983 
   4984 static void
   4985 remote_unpush_and_throw (void)
   4986 {
   4987   remote_unpush_target ();
   4988   throw_error (TARGET_CLOSE_ERROR, _("Disconnected from target."));
   4989 }
   4990 
   4991 static void
   4992 remote_open_1 (const char *name, int from_tty,
   4993 	       struct target_ops *target, int extended_p)
   4994 {
   4995   struct remote_state *rs = get_remote_state ();
   4996 
   4997   if (name == 0)
   4998     error (_("To open a remote debug connection, you need to specify what\n"
   4999 	   "serial device is attached to the remote system\n"
   5000 	   "(e.g. /dev/ttyS0, /dev/ttya, COM1, etc.)."));
   5001 
   5002   /* See FIXME above.  */
   5003   if (!target_async_permitted)
   5004     wait_forever_enabled_p = 1;
   5005 
   5006   /* If we're connected to a running target, target_preopen will kill it.
   5007      Ask this question first, before target_preopen has a chance to kill
   5008      anything.  */
   5009   if (rs->remote_desc != NULL && !have_inferiors ())
   5010     {
   5011       if (from_tty
   5012 	  && !query (_("Already connected to a remote target.  Disconnect? ")))
   5013 	error (_("Still connected."));
   5014     }
   5015 
   5016   /* Here the possibly existing remote target gets unpushed.  */
   5017   target_preopen (from_tty);
   5018 
   5019   /* Make sure we send the passed signals list the next time we resume.  */
   5020   xfree (rs->last_pass_packet);
   5021   rs->last_pass_packet = NULL;
   5022 
   5023   /* Make sure we send the program signals list the next time we
   5024      resume.  */
   5025   xfree (rs->last_program_signals_packet);
   5026   rs->last_program_signals_packet = NULL;
   5027 
   5028   remote_fileio_reset ();
   5029   reopen_exec_file ();
   5030   reread_symbols ();
   5031 
   5032   rs->remote_desc = remote_serial_open (name);
   5033   if (!rs->remote_desc)
   5034     perror_with_name (name);
   5035 
   5036   if (baud_rate != -1)
   5037     {
   5038       if (serial_setbaudrate (rs->remote_desc, baud_rate))
   5039 	{
   5040 	  /* The requested speed could not be set.  Error out to
   5041 	     top level after closing remote_desc.  Take care to
   5042 	     set remote_desc to NULL to avoid closing remote_desc
   5043 	     more than once.  */
   5044 	  serial_close (rs->remote_desc);
   5045 	  rs->remote_desc = NULL;
   5046 	  perror_with_name (name);
   5047 	}
   5048     }
   5049 
   5050   serial_setparity (rs->remote_desc, serial_parity);
   5051   serial_raw (rs->remote_desc);
   5052 
   5053   /* If there is something sitting in the buffer we might take it as a
   5054      response to a command, which would be bad.  */
   5055   serial_flush_input (rs->remote_desc);
   5056 
   5057   if (from_tty)
   5058     {
   5059       puts_filtered ("Remote debugging using ");
   5060       puts_filtered (name);
   5061       puts_filtered ("\n");
   5062     }
   5063   push_target (target);		/* Switch to using remote target now.  */
   5064 
   5065   /* Register extra event sources in the event loop.  */
   5066   remote_async_inferior_event_token
   5067     = create_async_event_handler (remote_async_inferior_event_handler,
   5068 				  NULL);
   5069   rs->notif_state = remote_notif_state_allocate ();
   5070 
   5071   /* Reset the target state; these things will be queried either by
   5072      remote_query_supported or as they are needed.  */
   5073   reset_all_packet_configs_support ();
   5074   rs->cached_wait_status = 0;
   5075   rs->explicit_packet_size = 0;
   5076   rs->noack_mode = 0;
   5077   rs->extended = extended_p;
   5078   rs->waiting_for_stop_reply = 0;
   5079   rs->ctrlc_pending_p = 0;
   5080   rs->got_ctrlc_during_io = 0;
   5081 
   5082   rs->general_thread = not_sent_ptid;
   5083   rs->continue_thread = not_sent_ptid;
   5084   rs->remote_traceframe_number = -1;
   5085 
   5086   rs->last_resume_exec_dir = EXEC_FORWARD;
   5087 
   5088   /* Probe for ability to use "ThreadInfo" query, as required.  */
   5089   rs->use_threadinfo_query = 1;
   5090   rs->use_threadextra_query = 1;
   5091 
   5092   readahead_cache_invalidate ();
   5093 
   5094   /* Start out by owning the terminal.  */
   5095   remote_async_terminal_ours_p = 1;
   5096 
   5097   if (target_async_permitted)
   5098     {
   5099       /* FIXME: cagney/1999-09-23: During the initial connection it is
   5100 	 assumed that the target is already ready and able to respond to
   5101 	 requests.  Unfortunately remote_start_remote() eventually calls
   5102 	 wait_for_inferior() with no timeout.  wait_forever_enabled_p gets
   5103 	 around this.  Eventually a mechanism that allows
   5104 	 wait_for_inferior() to expect/get timeouts will be
   5105 	 implemented.  */
   5106       wait_forever_enabled_p = 0;
   5107     }
   5108 
   5109   /* First delete any symbols previously loaded from shared libraries.  */
   5110   no_shared_libraries (NULL, 0);
   5111 
   5112   /* Start afresh.  */
   5113   init_thread_list ();
   5114 
   5115   /* Start the remote connection.  If error() or QUIT, discard this
   5116      target (we'd otherwise be in an inconsistent state) and then
   5117      propogate the error on up the exception chain.  This ensures that
   5118      the caller doesn't stumble along blindly assuming that the
   5119      function succeeded.  The CLI doesn't have this problem but other
   5120      UI's, such as MI do.
   5121 
   5122      FIXME: cagney/2002-05-19: Instead of re-throwing the exception,
   5123      this function should return an error indication letting the
   5124      caller restore the previous state.  Unfortunately the command
   5125      ``target remote'' is directly wired to this function making that
   5126      impossible.  On a positive note, the CLI side of this problem has
   5127      been fixed - the function set_cmd_context() makes it possible for
   5128      all the ``target ....'' commands to share a common callback
   5129      function.  See cli-dump.c.  */
   5130   {
   5131 
   5132     TRY
   5133       {
   5134 	remote_start_remote (from_tty, target, extended_p);
   5135       }
   5136     CATCH (ex, RETURN_MASK_ALL)
   5137       {
   5138 	/* Pop the partially set up target - unless something else did
   5139 	   already before throwing the exception.  */
   5140 	if (rs->remote_desc != NULL)
   5141 	  remote_unpush_target ();
   5142 	if (target_async_permitted)
   5143 	  wait_forever_enabled_p = 1;
   5144 	throw_exception (ex);
   5145       }
   5146     END_CATCH
   5147   }
   5148 
   5149   remote_btrace_reset ();
   5150 
   5151   if (target_async_permitted)
   5152     wait_forever_enabled_p = 1;
   5153 }
   5154 
   5155 /* Detach the specified process.  */
   5156 
   5157 static void
   5158 remote_detach_pid (int pid)
   5159 {
   5160   struct remote_state *rs = get_remote_state ();
   5161 
   5162   if (remote_multi_process_p (rs))
   5163     xsnprintf (rs->buf, get_remote_packet_size (), "D;%x", pid);
   5164   else
   5165     strcpy (rs->buf, "D");
   5166 
   5167   putpkt (rs->buf);
   5168   getpkt (&rs->buf, &rs->buf_size, 0);
   5169 
   5170   if (rs->buf[0] == 'O' && rs->buf[1] == 'K')
   5171     ;
   5172   else if (rs->buf[0] == '\0')
   5173     error (_("Remote doesn't know how to detach"));
   5174   else
   5175     error (_("Can't detach process."));
   5176 }
   5177 
   5178 /* This detaches a program to which we previously attached, using
   5179    inferior_ptid to identify the process.  After this is done, GDB
   5180    can be used to debug some other program.  We better not have left
   5181    any breakpoints in the target program or it'll die when it hits
   5182    one.  */
   5183 
   5184 static void
   5185 remote_detach_1 (const char *args, int from_tty)
   5186 {
   5187   int pid = ptid_get_pid (inferior_ptid);
   5188   struct remote_state *rs = get_remote_state ();
   5189   struct thread_info *tp = find_thread_ptid (inferior_ptid);
   5190   int is_fork_parent;
   5191 
   5192   if (args)
   5193     error (_("Argument given to \"detach\" when remotely debugging."));
   5194 
   5195   if (!target_has_execution)
   5196     error (_("No process to detach from."));
   5197 
   5198   target_announce_detach (from_tty);
   5199 
   5200   /* Tell the remote target to detach.  */
   5201   remote_detach_pid (pid);
   5202 
   5203   /* Exit only if this is the only active inferior.  */
   5204   if (from_tty && !rs->extended && number_of_live_inferiors () == 1)
   5205     puts_filtered (_("Ending remote debugging.\n"));
   5206 
   5207   /* Check to see if we are detaching a fork parent.  Note that if we
   5208      are detaching a fork child, tp == NULL.  */
   5209   is_fork_parent = (tp != NULL
   5210 		    && tp->pending_follow.kind == TARGET_WAITKIND_FORKED);
   5211 
   5212   /* If doing detach-on-fork, we don't mourn, because that will delete
   5213      breakpoints that should be available for the followed inferior.  */
   5214   if (!is_fork_parent)
   5215     target_mourn_inferior (inferior_ptid);
   5216   else
   5217     {
   5218       inferior_ptid = null_ptid;
   5219       detach_inferior (pid);
   5220     }
   5221 }
   5222 
   5223 static void
   5224 remote_detach (struct target_ops *ops, const char *args, int from_tty)
   5225 {
   5226   remote_detach_1 (args, from_tty);
   5227 }
   5228 
   5229 static void
   5230 extended_remote_detach (struct target_ops *ops, const char *args, int from_tty)
   5231 {
   5232   remote_detach_1 (args, from_tty);
   5233 }
   5234 
   5235 /* Target follow-fork function for remote targets.  On entry, and
   5236    at return, the current inferior is the fork parent.
   5237 
   5238    Note that although this is currently only used for extended-remote,
   5239    it is named remote_follow_fork in anticipation of using it for the
   5240    remote target as well.  */
   5241 
   5242 static int
   5243 remote_follow_fork (struct target_ops *ops, int follow_child,
   5244 		    int detach_fork)
   5245 {
   5246   struct remote_state *rs = get_remote_state ();
   5247   enum target_waitkind kind = inferior_thread ()->pending_follow.kind;
   5248 
   5249   if ((kind == TARGET_WAITKIND_FORKED && remote_fork_event_p (rs))
   5250       || (kind == TARGET_WAITKIND_VFORKED && remote_vfork_event_p (rs)))
   5251     {
   5252       /* When following the parent and detaching the child, we detach
   5253 	 the child here.  For the case of following the child and
   5254 	 detaching the parent, the detach is done in the target-
   5255 	 independent follow fork code in infrun.c.  We can't use
   5256 	 target_detach when detaching an unfollowed child because
   5257 	 the client side doesn't know anything about the child.  */
   5258       if (detach_fork && !follow_child)
   5259 	{
   5260 	  /* Detach the fork child.  */
   5261 	  ptid_t child_ptid;
   5262 	  pid_t child_pid;
   5263 
   5264 	  child_ptid = inferior_thread ()->pending_follow.value.related_pid;
   5265 	  child_pid = ptid_get_pid (child_ptid);
   5266 
   5267 	  remote_detach_pid (child_pid);
   5268 	  detach_inferior (child_pid);
   5269 	}
   5270     }
   5271   return 0;
   5272 }
   5273 
   5274 /* Target follow-exec function for remote targets.  Save EXECD_PATHNAME
   5275    in the program space of the new inferior.  On entry and at return the
   5276    current inferior is the exec'ing inferior.  INF is the new exec'd
   5277    inferior, which may be the same as the exec'ing inferior unless
   5278    follow-exec-mode is "new".  */
   5279 
   5280 static void
   5281 remote_follow_exec (struct target_ops *ops,
   5282 		    struct inferior *inf, char *execd_pathname)
   5283 {
   5284   /* We know that this is a target file name, so if it has the "target:"
   5285      prefix we strip it off before saving it in the program space.  */
   5286   if (is_target_filename (execd_pathname))
   5287     execd_pathname += strlen (TARGET_SYSROOT_PREFIX);
   5288 
   5289   set_pspace_remote_exec_file (inf->pspace, execd_pathname);
   5290 }
   5291 
   5292 /* Same as remote_detach, but don't send the "D" packet; just disconnect.  */
   5293 
   5294 static void
   5295 remote_disconnect (struct target_ops *target, const char *args, int from_tty)
   5296 {
   5297   if (args)
   5298     error (_("Argument given to \"disconnect\" when remotely debugging."));
   5299 
   5300   /* Make sure we unpush even the extended remote targets.  Calling
   5301      target_mourn_inferior won't unpush, and remote_mourn won't
   5302      unpush if there is more than one inferior left.  */
   5303   unpush_target (target);
   5304   generic_mourn_inferior ();
   5305 
   5306   if (from_tty)
   5307     puts_filtered ("Ending remote debugging.\n");
   5308 }
   5309 
   5310 /* Attach to the process specified by ARGS.  If FROM_TTY is non-zero,
   5311    be chatty about it.  */
   5312 
   5313 static void
   5314 extended_remote_attach (struct target_ops *target, const char *args,
   5315 			int from_tty)
   5316 {
   5317   struct remote_state *rs = get_remote_state ();
   5318   int pid;
   5319   char *wait_status = NULL;
   5320 
   5321   pid = parse_pid_to_attach (args);
   5322 
   5323   /* Remote PID can be freely equal to getpid, do not check it here the same
   5324      way as in other targets.  */
   5325 
   5326   if (packet_support (PACKET_vAttach) == PACKET_DISABLE)
   5327     error (_("This target does not support attaching to a process"));
   5328 
   5329   if (from_tty)
   5330     {
   5331       char *exec_file = get_exec_file (0);
   5332 
   5333       if (exec_file)
   5334 	printf_unfiltered (_("Attaching to program: %s, %s\n"), exec_file,
   5335 			   target_pid_to_str (pid_to_ptid (pid)));
   5336       else
   5337 	printf_unfiltered (_("Attaching to %s\n"),
   5338 			   target_pid_to_str (pid_to_ptid (pid)));
   5339 
   5340       gdb_flush (gdb_stdout);
   5341     }
   5342 
   5343   xsnprintf (rs->buf, get_remote_packet_size (), "vAttach;%x", pid);
   5344   putpkt (rs->buf);
   5345   getpkt (&rs->buf, &rs->buf_size, 0);
   5346 
   5347   switch (packet_ok (rs->buf,
   5348 		     &remote_protocol_packets[PACKET_vAttach]))
   5349     {
   5350     case PACKET_OK:
   5351       if (!target_is_non_stop_p ())
   5352 	{
   5353 	  /* Save the reply for later.  */
   5354 	  wait_status = (char *) alloca (strlen (rs->buf) + 1);
   5355 	  strcpy (wait_status, rs->buf);
   5356 	}
   5357       else if (strcmp (rs->buf, "OK") != 0)
   5358 	error (_("Attaching to %s failed with: %s"),
   5359 	       target_pid_to_str (pid_to_ptid (pid)),
   5360 	       rs->buf);
   5361       break;
   5362     case PACKET_UNKNOWN:
   5363       error (_("This target does not support attaching to a process"));
   5364     default:
   5365       error (_("Attaching to %s failed"),
   5366 	     target_pid_to_str (pid_to_ptid (pid)));
   5367     }
   5368 
   5369   set_current_inferior (remote_add_inferior (0, pid, 1, 0));
   5370 
   5371   inferior_ptid = pid_to_ptid (pid);
   5372 
   5373   if (target_is_non_stop_p ())
   5374     {
   5375       struct thread_info *thread;
   5376 
   5377       /* Get list of threads.  */
   5378       remote_update_thread_list (target);
   5379 
   5380       thread = first_thread_of_process (pid);
   5381       if (thread)
   5382 	inferior_ptid = thread->ptid;
   5383       else
   5384 	inferior_ptid = pid_to_ptid (pid);
   5385 
   5386       /* Invalidate our notion of the remote current thread.  */
   5387       record_currthread (rs, minus_one_ptid);
   5388     }
   5389   else
   5390     {
   5391       /* Now, if we have thread information, update inferior_ptid.  */
   5392       inferior_ptid = remote_current_thread (inferior_ptid);
   5393 
   5394       /* Add the main thread to the thread list.  */
   5395       add_thread_silent (inferior_ptid);
   5396     }
   5397 
   5398   /* Next, if the target can specify a description, read it.  We do
   5399      this before anything involving memory or registers.  */
   5400   target_find_description ();
   5401 
   5402   if (!target_is_non_stop_p ())
   5403     {
   5404       /* Use the previously fetched status.  */
   5405       gdb_assert (wait_status != NULL);
   5406 
   5407       if (target_can_async_p ())
   5408 	{
   5409 	  struct notif_event *reply
   5410 	    =  remote_notif_parse (&notif_client_stop, wait_status);
   5411 
   5412 	  push_stop_reply ((struct stop_reply *) reply);
   5413 
   5414 	  target_async (1);
   5415 	}
   5416       else
   5417 	{
   5418 	  gdb_assert (wait_status != NULL);
   5419 	  strcpy (rs->buf, wait_status);
   5420 	  rs->cached_wait_status = 1;
   5421 	}
   5422     }
   5423   else
   5424     gdb_assert (wait_status == NULL);
   5425 }
   5426 
   5427 /* Implementation of the to_post_attach method.  */
   5428 
   5429 static void
   5430 extended_remote_post_attach (struct target_ops *ops, int pid)
   5431 {
   5432   /* Get text, data & bss offsets.  */
   5433   get_offsets ();
   5434 
   5435   /* In certain cases GDB might not have had the chance to start
   5436      symbol lookup up until now.  This could happen if the debugged
   5437      binary is not using shared libraries, the vsyscall page is not
   5438      present (on Linux) and the binary itself hadn't changed since the
   5439      debugging process was started.  */
   5440   if (symfile_objfile != NULL)
   5441     remote_check_symbols();
   5442 }
   5443 
   5444 
   5445 /* Check for the availability of vCont.  This function should also check
   5447    the response.  */
   5448 
   5449 static void
   5450 remote_vcont_probe (struct remote_state *rs)
   5451 {
   5452   char *buf;
   5453 
   5454   strcpy (rs->buf, "vCont?");
   5455   putpkt (rs->buf);
   5456   getpkt (&rs->buf, &rs->buf_size, 0);
   5457   buf = rs->buf;
   5458 
   5459   /* Make sure that the features we assume are supported.  */
   5460   if (startswith (buf, "vCont"))
   5461     {
   5462       char *p = &buf[5];
   5463       int support_c, support_C;
   5464 
   5465       rs->supports_vCont.s = 0;
   5466       rs->supports_vCont.S = 0;
   5467       support_c = 0;
   5468       support_C = 0;
   5469       rs->supports_vCont.t = 0;
   5470       rs->supports_vCont.r = 0;
   5471       while (p && *p == ';')
   5472 	{
   5473 	  p++;
   5474 	  if (*p == 's' && (*(p + 1) == ';' || *(p + 1) == 0))
   5475 	    rs->supports_vCont.s = 1;
   5476 	  else if (*p == 'S' && (*(p + 1) == ';' || *(p + 1) == 0))
   5477 	    rs->supports_vCont.S = 1;
   5478 	  else if (*p == 'c' && (*(p + 1) == ';' || *(p + 1) == 0))
   5479 	    support_c = 1;
   5480 	  else if (*p == 'C' && (*(p + 1) == ';' || *(p + 1) == 0))
   5481 	    support_C = 1;
   5482 	  else if (*p == 't' && (*(p + 1) == ';' || *(p + 1) == 0))
   5483 	    rs->supports_vCont.t = 1;
   5484 	  else if (*p == 'r' && (*(p + 1) == ';' || *(p + 1) == 0))
   5485 	    rs->supports_vCont.r = 1;
   5486 
   5487 	  p = strchr (p, ';');
   5488 	}
   5489 
   5490       /* If c, and C are not all supported, we can't use vCont.  Clearing
   5491 	 BUF will make packet_ok disable the packet.  */
   5492       if (!support_c || !support_C)
   5493 	buf[0] = 0;
   5494     }
   5495 
   5496   packet_ok (buf, &remote_protocol_packets[PACKET_vCont]);
   5497 }
   5498 
   5499 /* Helper function for building "vCont" resumptions.  Write a
   5500    resumption to P.  ENDP points to one-passed-the-end of the buffer
   5501    we're allowed to write to.  Returns BUF+CHARACTERS_WRITTEN.  The
   5502    thread to be resumed is PTID; STEP and SIGGNAL indicate whether the
   5503    resumed thread should be single-stepped and/or signalled.  If PTID
   5504    equals minus_one_ptid, then all threads are resumed; if PTID
   5505    represents a process, then all threads of the process are resumed;
   5506    the thread to be stepped and/or signalled is given in the global
   5507    INFERIOR_PTID.  */
   5508 
   5509 static char *
   5510 append_resumption (char *p, char *endp,
   5511 		   ptid_t ptid, int step, enum gdb_signal siggnal)
   5512 {
   5513   struct remote_state *rs = get_remote_state ();
   5514 
   5515   if (step && siggnal != GDB_SIGNAL_0)
   5516     p += xsnprintf (p, endp - p, ";S%02x", siggnal);
   5517   else if (step
   5518 	   /* GDB is willing to range step.  */
   5519 	   && use_range_stepping
   5520 	   /* Target supports range stepping.  */
   5521 	   && rs->supports_vCont.r
   5522 	   /* We don't currently support range stepping multiple
   5523 	      threads with a wildcard (though the protocol allows it,
   5524 	      so stubs shouldn't make an active effort to forbid
   5525 	      it).  */
   5526 	   && !(remote_multi_process_p (rs) && ptid_is_pid (ptid)))
   5527     {
   5528       struct thread_info *tp;
   5529 
   5530       if (ptid_equal (ptid, minus_one_ptid))
   5531 	{
   5532 	  /* If we don't know about the target thread's tid, then
   5533 	     we're resuming magic_null_ptid (see caller).  */
   5534 	  tp = find_thread_ptid (magic_null_ptid);
   5535 	}
   5536       else
   5537 	tp = find_thread_ptid (ptid);
   5538       gdb_assert (tp != NULL);
   5539 
   5540       if (tp->control.may_range_step)
   5541 	{
   5542 	  int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
   5543 
   5544 	  p += xsnprintf (p, endp - p, ";r%s,%s",
   5545 			  phex_nz (tp->control.step_range_start,
   5546 				   addr_size),
   5547 			  phex_nz (tp->control.step_range_end,
   5548 				   addr_size));
   5549 	}
   5550       else
   5551 	p += xsnprintf (p, endp - p, ";s");
   5552     }
   5553   else if (step)
   5554     p += xsnprintf (p, endp - p, ";s");
   5555   else if (siggnal != GDB_SIGNAL_0)
   5556     p += xsnprintf (p, endp - p, ";C%02x", siggnal);
   5557   else
   5558     p += xsnprintf (p, endp - p, ";c");
   5559 
   5560   if (remote_multi_process_p (rs) && ptid_is_pid (ptid))
   5561     {
   5562       ptid_t nptid;
   5563 
   5564       /* All (-1) threads of process.  */
   5565       nptid = ptid_build (ptid_get_pid (ptid), -1, 0);
   5566 
   5567       p += xsnprintf (p, endp - p, ":");
   5568       p = write_ptid (p, endp, nptid);
   5569     }
   5570   else if (!ptid_equal (ptid, minus_one_ptid))
   5571     {
   5572       p += xsnprintf (p, endp - p, ":");
   5573       p = write_ptid (p, endp, ptid);
   5574     }
   5575 
   5576   return p;
   5577 }
   5578 
   5579 /* Clear the thread's private info on resume.  */
   5580 
   5581 static void
   5582 resume_clear_thread_private_info (struct thread_info *thread)
   5583 {
   5584   if (thread->priv != NULL)
   5585     {
   5586       thread->priv->stop_reason = TARGET_STOPPED_BY_NO_REASON;
   5587       thread->priv->watch_data_address = 0;
   5588     }
   5589 }
   5590 
   5591 /* Append a vCont continue-with-signal action for threads that have a
   5592    non-zero stop signal.  */
   5593 
   5594 static char *
   5595 append_pending_thread_resumptions (char *p, char *endp, ptid_t ptid)
   5596 {
   5597   struct thread_info *thread;
   5598 
   5599   ALL_NON_EXITED_THREADS (thread)
   5600     if (ptid_match (thread->ptid, ptid)
   5601 	&& !ptid_equal (inferior_ptid, thread->ptid)
   5602 	&& thread->suspend.stop_signal != GDB_SIGNAL_0)
   5603       {
   5604 	p = append_resumption (p, endp, thread->ptid,
   5605 			       0, thread->suspend.stop_signal);
   5606 	thread->suspend.stop_signal = GDB_SIGNAL_0;
   5607 	resume_clear_thread_private_info (thread);
   5608       }
   5609 
   5610   return p;
   5611 }
   5612 
   5613 /* Set the target running, using the packets that use Hc
   5614    (c/s/C/S).  */
   5615 
   5616 static void
   5617 remote_resume_with_hc (struct target_ops *ops,
   5618 		       ptid_t ptid, int step, enum gdb_signal siggnal)
   5619 {
   5620   struct remote_state *rs = get_remote_state ();
   5621   struct thread_info *thread;
   5622   char *buf;
   5623 
   5624   rs->last_sent_signal = siggnal;
   5625   rs->last_sent_step = step;
   5626 
   5627   /* The c/s/C/S resume packets use Hc, so set the continue
   5628      thread.  */
   5629   if (ptid_equal (ptid, minus_one_ptid))
   5630     set_continue_thread (any_thread_ptid);
   5631   else
   5632     set_continue_thread (ptid);
   5633 
   5634   ALL_NON_EXITED_THREADS (thread)
   5635     resume_clear_thread_private_info (thread);
   5636 
   5637   buf = rs->buf;
   5638   if (execution_direction == EXEC_REVERSE)
   5639     {
   5640       /* We don't pass signals to the target in reverse exec mode.  */
   5641       if (info_verbose && siggnal != GDB_SIGNAL_0)
   5642 	warning (_(" - Can't pass signal %d to target in reverse: ignored."),
   5643 		 siggnal);
   5644 
   5645       if (step && packet_support (PACKET_bs) == PACKET_DISABLE)
   5646 	error (_("Remote reverse-step not supported."));
   5647       if (!step && packet_support (PACKET_bc) == PACKET_DISABLE)
   5648 	error (_("Remote reverse-continue not supported."));
   5649 
   5650       strcpy (buf, step ? "bs" : "bc");
   5651     }
   5652   else if (siggnal != GDB_SIGNAL_0)
   5653     {
   5654       buf[0] = step ? 'S' : 'C';
   5655       buf[1] = tohex (((int) siggnal >> 4) & 0xf);
   5656       buf[2] = tohex (((int) siggnal) & 0xf);
   5657       buf[3] = '\0';
   5658     }
   5659   else
   5660     strcpy (buf, step ? "s" : "c");
   5661 
   5662   putpkt (buf);
   5663 }
   5664 
   5665 /* Resume the remote inferior by using a "vCont" packet.  The thread
   5666    to be resumed is PTID; STEP and SIGGNAL indicate whether the
   5667    resumed thread should be single-stepped and/or signalled.  If PTID
   5668    equals minus_one_ptid, then all threads are resumed; the thread to
   5669    be stepped and/or signalled is given in the global INFERIOR_PTID.
   5670    This function returns non-zero iff it resumes the inferior.
   5671 
   5672    This function issues a strict subset of all possible vCont commands
   5673    at the moment.  */
   5674 
   5675 static int
   5676 remote_resume_with_vcont (ptid_t ptid, int step, enum gdb_signal siggnal)
   5677 {
   5678   struct remote_state *rs = get_remote_state ();
   5679   char *p;
   5680   char *endp;
   5681 
   5682   /* No reverse execution actions defined for vCont.  */
   5683   if (execution_direction == EXEC_REVERSE)
   5684     return 0;
   5685 
   5686   if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
   5687     remote_vcont_probe (rs);
   5688 
   5689   if (packet_support (PACKET_vCont) == PACKET_DISABLE)
   5690     return 0;
   5691 
   5692   p = rs->buf;
   5693   endp = rs->buf + get_remote_packet_size ();
   5694 
   5695   /* If we could generate a wider range of packets, we'd have to worry
   5696      about overflowing BUF.  Should there be a generic
   5697      "multi-part-packet" packet?  */
   5698 
   5699   p += xsnprintf (p, endp - p, "vCont");
   5700 
   5701   if (ptid_equal (ptid, magic_null_ptid))
   5702     {
   5703       /* MAGIC_NULL_PTID means that we don't have any active threads,
   5704 	 so we don't have any TID numbers the inferior will
   5705 	 understand.  Make sure to only send forms that do not specify
   5706 	 a TID.  */
   5707       append_resumption (p, endp, minus_one_ptid, step, siggnal);
   5708     }
   5709   else if (ptid_equal (ptid, minus_one_ptid) || ptid_is_pid (ptid))
   5710     {
   5711       /* Resume all threads (of all processes, or of a single
   5712 	 process), with preference for INFERIOR_PTID.  This assumes
   5713 	 inferior_ptid belongs to the set of all threads we are about
   5714 	 to resume.  */
   5715       if (step || siggnal != GDB_SIGNAL_0)
   5716 	{
   5717 	  /* Step inferior_ptid, with or without signal.  */
   5718 	  p = append_resumption (p, endp, inferior_ptid, step, siggnal);
   5719 	}
   5720 
   5721       /* Also pass down any pending signaled resumption for other
   5722 	 threads not the current.  */
   5723       p = append_pending_thread_resumptions (p, endp, ptid);
   5724 
   5725       /* And continue others without a signal.  */
   5726       append_resumption (p, endp, ptid, /*step=*/ 0, GDB_SIGNAL_0);
   5727     }
   5728   else
   5729     {
   5730       /* Scheduler locking; resume only PTID.  */
   5731       append_resumption (p, endp, ptid, step, siggnal);
   5732     }
   5733 
   5734   gdb_assert (strlen (rs->buf) < get_remote_packet_size ());
   5735   putpkt (rs->buf);
   5736 
   5737   if (target_is_non_stop_p ())
   5738     {
   5739       /* In non-stop, the stub replies to vCont with "OK".  The stop
   5740 	 reply will be reported asynchronously by means of a `%Stop'
   5741 	 notification.  */
   5742       getpkt (&rs->buf, &rs->buf_size, 0);
   5743       if (strcmp (rs->buf, "OK") != 0)
   5744 	error (_("Unexpected vCont reply in non-stop mode: %s"), rs->buf);
   5745     }
   5746 
   5747   return 1;
   5748 }
   5749 
   5750 /* Tell the remote machine to resume.  */
   5751 
   5752 static void
   5753 remote_resume (struct target_ops *ops,
   5754 	       ptid_t ptid, int step, enum gdb_signal siggnal)
   5755 {
   5756   struct remote_state *rs = get_remote_state ();
   5757 
   5758   /* When connected in non-stop mode, the core resumes threads
   5759      individually.  Resuming remote threads directly in target_resume
   5760      would thus result in sending one packet per thread.  Instead, to
   5761      minimize roundtrip latency, here we just store the resume
   5762      request; the actual remote resumption will be done in
   5763      target_commit_resume / remote_commit_resume, where we'll be able
   5764      to do vCont action coalescing.  */
   5765   if (target_is_non_stop_p () && execution_direction != EXEC_REVERSE)
   5766     {
   5767       struct private_thread_info *remote_thr;
   5768 
   5769       if (ptid_equal (minus_one_ptid, ptid) || ptid_is_pid (ptid))
   5770 	remote_thr = get_private_info_ptid (inferior_ptid);
   5771       else
   5772 	remote_thr = get_private_info_ptid (ptid);
   5773       remote_thr->last_resume_step = step;
   5774       remote_thr->last_resume_sig = siggnal;
   5775       return;
   5776     }
   5777 
   5778   /* In all-stop, we can't mark REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN
   5779      (explained in remote-notif.c:handle_notification) so
   5780      remote_notif_process is not called.  We need find a place where
   5781      it is safe to start a 'vNotif' sequence.  It is good to do it
   5782      before resuming inferior, because inferior was stopped and no RSP
   5783      traffic at that moment.  */
   5784   if (!target_is_non_stop_p ())
   5785     remote_notif_process (rs->notif_state, &notif_client_stop);
   5786 
   5787   rs->last_resume_exec_dir = execution_direction;
   5788 
   5789   /* Prefer vCont, and fallback to s/c/S/C, which use Hc.  */
   5790   if (!remote_resume_with_vcont (ptid, step, siggnal))
   5791     remote_resume_with_hc (ops, ptid, step, siggnal);
   5792 
   5793   /* We are about to start executing the inferior, let's register it
   5794      with the event loop.  NOTE: this is the one place where all the
   5795      execution commands end up.  We could alternatively do this in each
   5796      of the execution commands in infcmd.c.  */
   5797   /* FIXME: ezannoni 1999-09-28: We may need to move this out of here
   5798      into infcmd.c in order to allow inferior function calls to work
   5799      NOT asynchronously.  */
   5800   if (target_can_async_p ())
   5801     target_async (1);
   5802 
   5803   /* We've just told the target to resume.  The remote server will
   5804      wait for the inferior to stop, and then send a stop reply.  In
   5805      the mean time, we can't start another command/query ourselves
   5806      because the stub wouldn't be ready to process it.  This applies
   5807      only to the base all-stop protocol, however.  In non-stop (which
   5808      only supports vCont), the stub replies with an "OK", and is
   5809      immediate able to process further serial input.  */
   5810   if (!target_is_non_stop_p ())
   5811     rs->waiting_for_stop_reply = 1;
   5812 }
   5813 
   5814 static void check_pending_events_prevent_wildcard_vcont
   5815   (int *may_global_wildcard_vcont);
   5816 static int is_pending_fork_parent_thread (struct thread_info *thread);
   5817 
   5818 /* Private per-inferior info for target remote processes.  */
   5819 
   5820 struct private_inferior
   5821 {
   5822   /* Whether we can send a wildcard vCont for this process.  */
   5823   int may_wildcard_vcont;
   5824 };
   5825 
   5826 /* Structure used to track the construction of a vCont packet in the
   5827    outgoing packet buffer.  This is used to send multiple vCont
   5828    packets if we have more actions than would fit a single packet.  */
   5829 
   5830 struct vcont_builder
   5831 {
   5832   /* Pointer to the first action.  P points here if no action has been
   5833      appended yet.  */
   5834   char *first_action;
   5835 
   5836   /* Where the next action will be appended.  */
   5837   char *p;
   5838 
   5839   /* The end of the buffer.  Must never write past this.  */
   5840   char *endp;
   5841 };
   5842 
   5843 /* Prepare the outgoing buffer for a new vCont packet.  */
   5844 
   5845 static void
   5846 vcont_builder_restart (struct vcont_builder *builder)
   5847 {
   5848   struct remote_state *rs = get_remote_state ();
   5849 
   5850   builder->p = rs->buf;
   5851   builder->endp = rs->buf + get_remote_packet_size ();
   5852   builder->p += xsnprintf (builder->p, builder->endp - builder->p, "vCont");
   5853   builder->first_action = builder->p;
   5854 }
   5855 
   5856 /* If the vCont packet being built has any action, send it to the
   5857    remote end.  */
   5858 
   5859 static void
   5860 vcont_builder_flush (struct vcont_builder *builder)
   5861 {
   5862   struct remote_state *rs;
   5863 
   5864   if (builder->p == builder->first_action)
   5865     return;
   5866 
   5867   rs = get_remote_state ();
   5868   putpkt (rs->buf);
   5869   getpkt (&rs->buf, &rs->buf_size, 0);
   5870   if (strcmp (rs->buf, "OK") != 0)
   5871     error (_("Unexpected vCont reply in non-stop mode: %s"), rs->buf);
   5872 }
   5873 
   5874 /* The largest action is range-stepping, with its two addresses.  This
   5875    is more than sufficient.  If a new, bigger action is created, it'll
   5876    quickly trigger a failed assertion in append_resumption (and we'll
   5877    just bump this).  */
   5878 #define MAX_ACTION_SIZE 200
   5879 
   5880 /* Append a new vCont action in the outgoing packet being built.  If
   5881    the action doesn't fit the packet along with previous actions, push
   5882    what we've got so far to the remote end and start over a new vCont
   5883    packet (with the new action).  */
   5884 
   5885 static void
   5886 vcont_builder_push_action (struct vcont_builder *builder,
   5887 			   ptid_t ptid, int step, enum gdb_signal siggnal)
   5888 {
   5889   char buf[MAX_ACTION_SIZE + 1];
   5890   char *endp;
   5891   size_t rsize;
   5892 
   5893   endp = append_resumption (buf, buf + sizeof (buf),
   5894 			    ptid, step, siggnal);
   5895 
   5896   /* Check whether this new action would fit in the vCont packet along
   5897      with previous actions.  If not, send what we've got so far and
   5898      start a new vCont packet.  */
   5899   rsize = endp - buf;
   5900   if (rsize > builder->endp - builder->p)
   5901     {
   5902       vcont_builder_flush (builder);
   5903       vcont_builder_restart (builder);
   5904 
   5905       /* Should now fit.  */
   5906       gdb_assert (rsize <= builder->endp - builder->p);
   5907     }
   5908 
   5909   memcpy (builder->p, buf, rsize);
   5910   builder->p += rsize;
   5911   *builder->p = '\0';
   5912 }
   5913 
   5914 /* to_commit_resume implementation.  */
   5915 
   5916 static void
   5917 remote_commit_resume (struct target_ops *ops)
   5918 {
   5919   struct remote_state *rs = get_remote_state ();
   5920   struct inferior *inf;
   5921   struct thread_info *tp;
   5922   int any_process_wildcard;
   5923   int may_global_wildcard_vcont;
   5924   struct vcont_builder vcont_builder;
   5925 
   5926   /* If connected in all-stop mode, we'd send the remote resume
   5927      request directly from remote_resume.  Likewise if
   5928      reverse-debugging, as there are no defined vCont actions for
   5929      reverse execution.  */
   5930   if (!target_is_non_stop_p () || execution_direction == EXEC_REVERSE)
   5931     return;
   5932 
   5933   /* Try to send wildcard actions ("vCont;c" or "vCont;c:pPID.-1")
   5934      instead of resuming all threads of each process individually.
   5935      However, if any thread of a process must remain halted, we can't
   5936      send wildcard resumes and must send one action per thread.
   5937 
   5938      Care must be taken to not resume threads/processes the server
   5939      side already told us are stopped, but the core doesn't know about
   5940      yet, because the events are still in the vStopped notification
   5941      queue.  For example:
   5942 
   5943        #1 => vCont s:p1.1;c
   5944        #2 <= OK
   5945        #3 <= %Stopped T05 p1.1
   5946        #4 => vStopped
   5947        #5 <= T05 p1.2
   5948        #6 => vStopped
   5949        #7 <= OK
   5950        #8 (infrun handles the stop for p1.1 and continues stepping)
   5951        #9 => vCont s:p1.1;c
   5952 
   5953      The last vCont above would resume thread p1.2 by mistake, because
   5954      the server has no idea that the event for p1.2 had not been
   5955      handled yet.
   5956 
   5957      The server side must similarly ignore resume actions for the
   5958      thread that has a pending %Stopped notification (and any other
   5959      threads with events pending), until GDB acks the notification
   5960      with vStopped.  Otherwise, e.g., the following case is
   5961      mishandled:
   5962 
   5963        #1 => g  (or any other packet)
   5964        #2 <= [registers]
   5965        #3 <= %Stopped T05 p1.2
   5966        #4 => vCont s:p1.1;c
   5967        #5 <= OK
   5968 
   5969      Above, the server must not resume thread p1.2.  GDB can't know
   5970      that p1.2 stopped until it acks the %Stopped notification, and
   5971      since from GDB's perspective all threads should be running, it
   5972      sends a "c" action.
   5973 
   5974      Finally, special care must also be given to handling fork/vfork
   5975      events.  A (v)fork event actually tells us that two processes
   5976      stopped -- the parent and the child.  Until we follow the fork,
   5977      we must not resume the child.  Therefore, if we have a pending
   5978      fork follow, we must not send a global wildcard resume action
   5979      (vCont;c).  We can still send process-wide wildcards though.  */
   5980 
   5981   /* Start by assuming a global wildcard (vCont;c) is possible.  */
   5982   may_global_wildcard_vcont = 1;
   5983 
   5984   /* And assume every process is individually wildcard-able too.  */
   5985   ALL_NON_EXITED_INFERIORS (inf)
   5986     {
   5987       if (inf->priv == NULL)
   5988 	inf->priv = XNEW (struct private_inferior);
   5989       inf->priv->may_wildcard_vcont = 1;
   5990     }
   5991 
   5992   /* Check for any pending events (not reported or processed yet) and
   5993      disable process and global wildcard resumes appropriately.  */
   5994   check_pending_events_prevent_wildcard_vcont (&may_global_wildcard_vcont);
   5995 
   5996   ALL_NON_EXITED_THREADS (tp)
   5997     {
   5998       /* If a thread of a process is not meant to be resumed, then we
   5999 	 can't wildcard that process.  */
   6000       if (!tp->executing)
   6001 	{
   6002 	  tp->inf->priv->may_wildcard_vcont = 0;
   6003 
   6004 	  /* And if we can't wildcard a process, we can't wildcard
   6005 	     everything either.  */
   6006 	  may_global_wildcard_vcont = 0;
   6007 	  continue;
   6008 	}
   6009 
   6010       /* If a thread is the parent of an unfollowed fork, then we
   6011 	 can't do a global wildcard, as that would resume the fork
   6012 	 child.  */
   6013       if (is_pending_fork_parent_thread (tp))
   6014 	may_global_wildcard_vcont = 0;
   6015     }
   6016 
   6017   /* Now let's build the vCont packet(s).  Actions must be appended
   6018      from narrower to wider scopes (thread -> process -> global).  If
   6019      we end up with too many actions for a single packet vcont_builder
   6020      flushes the current vCont packet to the remote side and starts a
   6021      new one.  */
   6022   vcont_builder_restart (&vcont_builder);
   6023 
   6024   /* Threads first.  */
   6025   ALL_NON_EXITED_THREADS (tp)
   6026     {
   6027       struct private_thread_info *remote_thr = tp->priv;
   6028 
   6029       if (!tp->executing || remote_thr->vcont_resumed)
   6030 	continue;
   6031 
   6032       gdb_assert (!thread_is_in_step_over_chain (tp));
   6033 
   6034       if (!remote_thr->last_resume_step
   6035 	  && remote_thr->last_resume_sig == GDB_SIGNAL_0
   6036 	  && tp->inf->priv->may_wildcard_vcont)
   6037 	{
   6038 	  /* We'll send a wildcard resume instead.  */
   6039 	  remote_thr->vcont_resumed = 1;
   6040 	  continue;
   6041 	}
   6042 
   6043       vcont_builder_push_action (&vcont_builder, tp->ptid,
   6044 				 remote_thr->last_resume_step,
   6045 				 remote_thr->last_resume_sig);
   6046       remote_thr->vcont_resumed = 1;
   6047     }
   6048 
   6049   /* Now check whether we can send any process-wide wildcard.  This is
   6050      to avoid sending a global wildcard in the case nothing is
   6051      supposed to be resumed.  */
   6052   any_process_wildcard = 0;
   6053 
   6054   ALL_NON_EXITED_INFERIORS (inf)
   6055     {
   6056       if (inf->priv->may_wildcard_vcont)
   6057 	{
   6058 	  any_process_wildcard = 1;
   6059 	  break;
   6060 	}
   6061     }
   6062 
   6063   if (any_process_wildcard)
   6064     {
   6065       /* If all processes are wildcard-able, then send a single "c"
   6066 	 action, otherwise, send an "all (-1) threads of process"
   6067 	 continue action for each running process, if any.  */
   6068       if (may_global_wildcard_vcont)
   6069 	{
   6070 	  vcont_builder_push_action (&vcont_builder, minus_one_ptid,
   6071 				     0, GDB_SIGNAL_0);
   6072 	}
   6073       else
   6074 	{
   6075 	  ALL_NON_EXITED_INFERIORS (inf)
   6076 	    {
   6077 	      if (inf->priv->may_wildcard_vcont)
   6078 		{
   6079 		  vcont_builder_push_action (&vcont_builder,
   6080 					     pid_to_ptid (inf->pid),
   6081 					     0, GDB_SIGNAL_0);
   6082 		}
   6083 	    }
   6084 	}
   6085     }
   6086 
   6087   vcont_builder_flush (&vcont_builder);
   6088 }
   6089 
   6090 
   6091 
   6093 /* Non-stop version of target_stop.  Uses `vCont;t' to stop a remote
   6094    thread, all threads of a remote process, or all threads of all
   6095    processes.  */
   6096 
   6097 static void
   6098 remote_stop_ns (ptid_t ptid)
   6099 {
   6100   struct remote_state *rs = get_remote_state ();
   6101   char *p = rs->buf;
   6102   char *endp = rs->buf + get_remote_packet_size ();
   6103 
   6104   if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
   6105     remote_vcont_probe (rs);
   6106 
   6107   if (!rs->supports_vCont.t)
   6108     error (_("Remote server does not support stopping threads"));
   6109 
   6110   if (ptid_equal (ptid, minus_one_ptid)
   6111       || (!remote_multi_process_p (rs) && ptid_is_pid (ptid)))
   6112     p += xsnprintf (p, endp - p, "vCont;t");
   6113   else
   6114     {
   6115       ptid_t nptid;
   6116 
   6117       p += xsnprintf (p, endp - p, "vCont;t:");
   6118 
   6119       if (ptid_is_pid (ptid))
   6120 	  /* All (-1) threads of process.  */
   6121 	nptid = ptid_build (ptid_get_pid (ptid), -1, 0);
   6122       else
   6123 	{
   6124 	  /* Small optimization: if we already have a stop reply for
   6125 	     this thread, no use in telling the stub we want this
   6126 	     stopped.  */
   6127 	  if (peek_stop_reply (ptid))
   6128 	    return;
   6129 
   6130 	  nptid = ptid;
   6131 	}
   6132 
   6133       write_ptid (p, endp, nptid);
   6134     }
   6135 
   6136   /* In non-stop, we get an immediate OK reply.  The stop reply will
   6137      come in asynchronously by notification.  */
   6138   putpkt (rs->buf);
   6139   getpkt (&rs->buf, &rs->buf_size, 0);
   6140   if (strcmp (rs->buf, "OK") != 0)
   6141     error (_("Stopping %s failed: %s"), target_pid_to_str (ptid), rs->buf);
   6142 }
   6143 
   6144 /* All-stop version of target_interrupt.  Sends a break or a ^C to
   6145    interrupt the remote target.  It is undefined which thread of which
   6146    process reports the interrupt.  */
   6147 
   6148 static void
   6149 remote_interrupt_as (void)
   6150 {
   6151   struct remote_state *rs = get_remote_state ();
   6152 
   6153   rs->ctrlc_pending_p = 1;
   6154 
   6155   /* If the inferior is stopped already, but the core didn't know
   6156      about it yet, just ignore the request.  The cached wait status
   6157      will be collected in remote_wait.  */
   6158   if (rs->cached_wait_status)
   6159     return;
   6160 
   6161   /* Send interrupt_sequence to remote target.  */
   6162   send_interrupt_sequence ();
   6163 }
   6164 
   6165 /* Non-stop version of target_interrupt.  Uses `vCtrlC' to interrupt
   6166    the remote target.  It is undefined which thread of which process
   6167    reports the interrupt.  Throws an error if the packet is not
   6168    supported by the server.  */
   6169 
   6170 static void
   6171 remote_interrupt_ns (void)
   6172 {
   6173   struct remote_state *rs = get_remote_state ();
   6174   char *p = rs->buf;
   6175   char *endp = rs->buf + get_remote_packet_size ();
   6176 
   6177   xsnprintf (p, endp - p, "vCtrlC");
   6178 
   6179   /* In non-stop, we get an immediate OK reply.  The stop reply will
   6180      come in asynchronously by notification.  */
   6181   putpkt (rs->buf);
   6182   getpkt (&rs->buf, &rs->buf_size, 0);
   6183 
   6184   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_vCtrlC]))
   6185     {
   6186     case PACKET_OK:
   6187       break;
   6188     case PACKET_UNKNOWN:
   6189       error (_("No support for interrupting the remote target."));
   6190     case PACKET_ERROR:
   6191       error (_("Interrupting target failed: %s"), rs->buf);
   6192     }
   6193 }
   6194 
   6195 /* Implement the to_stop function for the remote targets.  */
   6196 
   6197 static void
   6198 remote_stop (struct target_ops *self, ptid_t ptid)
   6199 {
   6200   if (remote_debug)
   6201     fprintf_unfiltered (gdb_stdlog, "remote_stop called\n");
   6202 
   6203   if (target_is_non_stop_p ())
   6204     remote_stop_ns (ptid);
   6205   else
   6206     {
   6207       /* We don't currently have a way to transparently pause the
   6208 	 remote target in all-stop mode.  Interrupt it instead.  */
   6209       remote_interrupt_as ();
   6210     }
   6211 }
   6212 
   6213 /* Implement the to_interrupt function for the remote targets.  */
   6214 
   6215 static void
   6216 remote_interrupt (struct target_ops *self, ptid_t ptid)
   6217 {
   6218   struct remote_state *rs = get_remote_state ();
   6219 
   6220   if (remote_debug)
   6221     fprintf_unfiltered (gdb_stdlog, "remote_interrupt called\n");
   6222 
   6223   if (target_is_non_stop_p ())
   6224     remote_interrupt_ns ();
   6225   else
   6226     remote_interrupt_as ();
   6227 }
   6228 
   6229 /* Implement the to_pass_ctrlc function for the remote targets.  */
   6230 
   6231 static void
   6232 remote_pass_ctrlc (struct target_ops *self)
   6233 {
   6234   struct remote_state *rs = get_remote_state ();
   6235 
   6236   if (remote_debug)
   6237     fprintf_unfiltered (gdb_stdlog, "remote_pass_ctrlc called\n");
   6238 
   6239   /* If we're starting up, we're not fully synced yet.  Quit
   6240      immediately.  */
   6241   if (rs->starting_up)
   6242     quit ();
   6243   /* If ^C has already been sent once, offer to disconnect.  */
   6244   else if (rs->ctrlc_pending_p)
   6245     interrupt_query ();
   6246   else
   6247     target_interrupt (inferior_ptid);
   6248 }
   6249 
   6250 /* Ask the user what to do when an interrupt is received.  */
   6251 
   6252 static void
   6253 interrupt_query (void)
   6254 {
   6255   struct remote_state *rs = get_remote_state ();
   6256 
   6257   if (rs->waiting_for_stop_reply && rs->ctrlc_pending_p)
   6258     {
   6259       if (query (_("The target is not responding to interrupt requests.\n"
   6260 		   "Stop debugging it? ")))
   6261 	{
   6262 	  remote_unpush_target ();
   6263 	  throw_error (TARGET_CLOSE_ERROR, _("Disconnected from target."));
   6264 	}
   6265     }
   6266   else
   6267     {
   6268       if (query (_("Interrupted while waiting for the program.\n"
   6269 		   "Give up waiting? ")))
   6270 	quit ();
   6271     }
   6272 }
   6273 
   6274 /* Enable/disable target terminal ownership.  Most targets can use
   6275    terminal groups to control terminal ownership.  Remote targets are
   6276    different in that explicit transfer of ownership to/from GDB/target
   6277    is required.  */
   6278 
   6279 static void
   6280 remote_terminal_inferior (struct target_ops *self)
   6281 {
   6282   /* FIXME: cagney/1999-09-27: Make calls to target_terminal_*()
   6283      idempotent.  The event-loop GDB talking to an asynchronous target
   6284      with a synchronous command calls this function from both
   6285      event-top.c and infrun.c/infcmd.c.  Once GDB stops trying to
   6286      transfer the terminal to the target when it shouldn't this guard
   6287      can go away.  */
   6288   if (!remote_async_terminal_ours_p)
   6289     return;
   6290   remote_async_terminal_ours_p = 0;
   6291   /* NOTE: At this point we could also register our selves as the
   6292      recipient of all input.  Any characters typed could then be
   6293      passed on down to the target.  */
   6294 }
   6295 
   6296 static void
   6297 remote_terminal_ours (struct target_ops *self)
   6298 {
   6299   /* See FIXME in remote_terminal_inferior.  */
   6300   if (remote_async_terminal_ours_p)
   6301     return;
   6302   remote_async_terminal_ours_p = 1;
   6303 }
   6304 
   6305 static void
   6306 remote_console_output (char *msg)
   6307 {
   6308   char *p;
   6309 
   6310   for (p = msg; p[0] && p[1]; p += 2)
   6311     {
   6312       char tb[2];
   6313       char c = fromhex (p[0]) * 16 + fromhex (p[1]);
   6314 
   6315       tb[0] = c;
   6316       tb[1] = 0;
   6317       fputs_unfiltered (tb, gdb_stdtarg);
   6318     }
   6319   gdb_flush (gdb_stdtarg);
   6320 }
   6321 
   6322 typedef struct cached_reg
   6323 {
   6324   int num;
   6325   gdb_byte *data;
   6326 } cached_reg_t;
   6327 
   6328 DEF_VEC_O(cached_reg_t);
   6329 
   6330 typedef struct stop_reply
   6331 {
   6332   struct notif_event base;
   6333 
   6334   /* The identifier of the thread about this event  */
   6335   ptid_t ptid;
   6336 
   6337   /* The remote state this event is associated with.  When the remote
   6338      connection, represented by a remote_state object, is closed,
   6339      all the associated stop_reply events should be released.  */
   6340   struct remote_state *rs;
   6341 
   6342   struct target_waitstatus ws;
   6343 
   6344   /* Expedited registers.  This makes remote debugging a bit more
   6345      efficient for those targets that provide critical registers as
   6346      part of their normal status mechanism (as another roundtrip to
   6347      fetch them is avoided).  */
   6348   VEC(cached_reg_t) *regcache;
   6349 
   6350   enum target_stop_reason stop_reason;
   6351 
   6352   CORE_ADDR watch_data_address;
   6353 
   6354   int core;
   6355 } *stop_reply_p;
   6356 
   6357 DECLARE_QUEUE_P (stop_reply_p);
   6358 DEFINE_QUEUE_P (stop_reply_p);
   6359 /* The list of already fetched and acknowledged stop events.  This
   6360    queue is used for notification Stop, and other notifications
   6361    don't need queue for their events, because the notification events
   6362    of Stop can't be consumed immediately, so that events should be
   6363    queued first, and be consumed by remote_wait_{ns,as} one per
   6364    time.  Other notifications can consume their events immediately,
   6365    so queue is not needed for them.  */
   6366 static QUEUE (stop_reply_p) *stop_reply_queue;
   6367 
   6368 static void
   6369 stop_reply_xfree (struct stop_reply *r)
   6370 {
   6371   notif_event_xfree ((struct notif_event *) r);
   6372 }
   6373 
   6374 /* Return the length of the stop reply queue.  */
   6375 
   6376 static int
   6377 stop_reply_queue_length (void)
   6378 {
   6379   return QUEUE_length (stop_reply_p, stop_reply_queue);
   6380 }
   6381 
   6382 static void
   6383 remote_notif_stop_parse (struct notif_client *self, char *buf,
   6384 			 struct notif_event *event)
   6385 {
   6386   remote_parse_stop_reply (buf, (struct stop_reply *) event);
   6387 }
   6388 
   6389 static void
   6390 remote_notif_stop_ack (struct notif_client *self, char *buf,
   6391 		       struct notif_event *event)
   6392 {
   6393   struct stop_reply *stop_reply = (struct stop_reply *) event;
   6394 
   6395   /* acknowledge */
   6396   putpkt (self->ack_command);
   6397 
   6398   if (stop_reply->ws.kind == TARGET_WAITKIND_IGNORE)
   6399       /* We got an unknown stop reply.  */
   6400       error (_("Unknown stop reply"));
   6401 
   6402   push_stop_reply (stop_reply);
   6403 }
   6404 
   6405 static int
   6406 remote_notif_stop_can_get_pending_events (struct notif_client *self)
   6407 {
   6408   /* We can't get pending events in remote_notif_process for
   6409      notification stop, and we have to do this in remote_wait_ns
   6410      instead.  If we fetch all queued events from stub, remote stub
   6411      may exit and we have no chance to process them back in
   6412      remote_wait_ns.  */
   6413   mark_async_event_handler (remote_async_inferior_event_token);
   6414   return 0;
   6415 }
   6416 
   6417 static void
   6418 stop_reply_dtr (struct notif_event *event)
   6419 {
   6420   struct stop_reply *r = (struct stop_reply *) event;
   6421   cached_reg_t *reg;
   6422   int ix;
   6423 
   6424   for (ix = 0;
   6425        VEC_iterate (cached_reg_t, r->regcache, ix, reg);
   6426        ix++)
   6427     xfree (reg->data);
   6428 
   6429   VEC_free (cached_reg_t, r->regcache);
   6430 }
   6431 
   6432 static struct notif_event *
   6433 remote_notif_stop_alloc_reply (void)
   6434 {
   6435   /* We cast to a pointer to the "base class".  */
   6436   struct notif_event *r = (struct notif_event *) XNEW (struct stop_reply);
   6437 
   6438   r->dtr = stop_reply_dtr;
   6439 
   6440   return r;
   6441 }
   6442 
   6443 /* A client of notification Stop.  */
   6444 
   6445 struct notif_client notif_client_stop =
   6446 {
   6447   "Stop",
   6448   "vStopped",
   6449   remote_notif_stop_parse,
   6450   remote_notif_stop_ack,
   6451   remote_notif_stop_can_get_pending_events,
   6452   remote_notif_stop_alloc_reply,
   6453   REMOTE_NOTIF_STOP,
   6454 };
   6455 
   6456 /* A parameter to pass data in and out.  */
   6457 
   6458 struct queue_iter_param
   6459 {
   6460   void *input;
   6461   struct stop_reply *output;
   6462 };
   6463 
   6464 /* Determine if THREAD_PTID is a pending fork parent thread.  ARG contains
   6465    the pid of the process that owns the threads we want to check, or
   6466    -1 if we want to check all threads.  */
   6467 
   6468 static int
   6469 is_pending_fork_parent (struct target_waitstatus *ws, int event_pid,
   6470 			ptid_t thread_ptid)
   6471 {
   6472   if (ws->kind == TARGET_WAITKIND_FORKED
   6473       || ws->kind == TARGET_WAITKIND_VFORKED)
   6474     {
   6475       if (event_pid == -1 || event_pid == ptid_get_pid (thread_ptid))
   6476 	return 1;
   6477     }
   6478 
   6479   return 0;
   6480 }
   6481 
   6482 /* Return the thread's pending status used to determine whether the
   6483    thread is a fork parent stopped at a fork event.  */
   6484 
   6485 static struct target_waitstatus *
   6486 thread_pending_fork_status (struct thread_info *thread)
   6487 {
   6488   if (thread->suspend.waitstatus_pending_p)
   6489     return &thread->suspend.waitstatus;
   6490   else
   6491     return &thread->pending_follow;
   6492 }
   6493 
   6494 /* Determine if THREAD is a pending fork parent thread.  */
   6495 
   6496 static int
   6497 is_pending_fork_parent_thread (struct thread_info *thread)
   6498 {
   6499   struct target_waitstatus *ws = thread_pending_fork_status (thread);
   6500   int pid = -1;
   6501 
   6502   return is_pending_fork_parent (ws, pid, thread->ptid);
   6503 }
   6504 
   6505 /* Check whether EVENT is a fork event, and if it is, remove the
   6506    fork child from the context list passed in DATA.  */
   6507 
   6508 static int
   6509 remove_child_of_pending_fork (QUEUE (stop_reply_p) *q,
   6510 			      QUEUE_ITER (stop_reply_p) *iter,
   6511 			      stop_reply_p event,
   6512 			      void *data)
   6513 {
   6514   struct queue_iter_param *param = (struct queue_iter_param *) data;
   6515   struct threads_listing_context *context
   6516     = (struct threads_listing_context *) param->input;
   6517 
   6518   if (event->ws.kind == TARGET_WAITKIND_FORKED
   6519       || event->ws.kind == TARGET_WAITKIND_VFORKED
   6520       || event->ws.kind == TARGET_WAITKIND_THREAD_EXITED)
   6521     threads_listing_context_remove (&event->ws, context);
   6522 
   6523   return 1;
   6524 }
   6525 
   6526 /* If CONTEXT contains any fork child threads that have not been
   6527    reported yet, remove them from the CONTEXT list.  If such a
   6528    thread exists it is because we are stopped at a fork catchpoint
   6529    and have not yet called follow_fork, which will set up the
   6530    host-side data structures for the new process.  */
   6531 
   6532 static void
   6533 remove_new_fork_children (struct threads_listing_context *context)
   6534 {
   6535   struct thread_info * thread;
   6536   int pid = -1;
   6537   struct notif_client *notif = &notif_client_stop;
   6538   struct queue_iter_param param;
   6539 
   6540   /* For any threads stopped at a fork event, remove the corresponding
   6541      fork child threads from the CONTEXT list.  */
   6542   ALL_NON_EXITED_THREADS (thread)
   6543     {
   6544       struct target_waitstatus *ws = thread_pending_fork_status (thread);
   6545 
   6546       if (is_pending_fork_parent (ws, pid, thread->ptid))
   6547 	{
   6548 	  threads_listing_context_remove (ws, context);
   6549 	}
   6550     }
   6551 
   6552   /* Check for any pending fork events (not reported or processed yet)
   6553      in process PID and remove those fork child threads from the
   6554      CONTEXT list as well.  */
   6555   remote_notif_get_pending_events (notif);
   6556   param.input = context;
   6557   param.output = NULL;
   6558   QUEUE_iterate (stop_reply_p, stop_reply_queue,
   6559 		 remove_child_of_pending_fork, &param);
   6560 }
   6561 
   6562 /* Check whether EVENT would prevent a global or process wildcard
   6563    vCont action.  */
   6564 
   6565 static int
   6566 check_pending_event_prevents_wildcard_vcont_callback
   6567   (QUEUE (stop_reply_p) *q,
   6568    QUEUE_ITER (stop_reply_p) *iter,
   6569    stop_reply_p event,
   6570    void *data)
   6571 {
   6572   struct inferior *inf;
   6573   int *may_global_wildcard_vcont = (int *) data;
   6574 
   6575   if (event->ws.kind == TARGET_WAITKIND_NO_RESUMED
   6576       || event->ws.kind == TARGET_WAITKIND_NO_HISTORY)
   6577     return 1;
   6578 
   6579   if (event->ws.kind == TARGET_WAITKIND_FORKED
   6580       || event->ws.kind == TARGET_WAITKIND_VFORKED)
   6581     *may_global_wildcard_vcont = 0;
   6582 
   6583   inf = find_inferior_ptid (event->ptid);
   6584 
   6585   /* This may be the first time we heard about this process.
   6586      Regardless, we must not do a global wildcard resume, otherwise
   6587      we'd resume this process too.  */
   6588   *may_global_wildcard_vcont = 0;
   6589   if (inf != NULL)
   6590     inf->priv->may_wildcard_vcont = 0;
   6591 
   6592   return 1;
   6593 }
   6594 
   6595 /* Check whether any event pending in the vStopped queue would prevent
   6596    a global or process wildcard vCont action.  Clear
   6597    *may_global_wildcard if we can't do a global wildcard (vCont;c),
   6598    and clear the event inferior's may_wildcard_vcont flag if we can't
   6599    do a process-wide wildcard resume (vCont;c:pPID.-1).  */
   6600 
   6601 static void
   6602 check_pending_events_prevent_wildcard_vcont (int *may_global_wildcard)
   6603 {
   6604   struct notif_client *notif = &notif_client_stop;
   6605 
   6606   remote_notif_get_pending_events (notif);
   6607   QUEUE_iterate (stop_reply_p, stop_reply_queue,
   6608 		 check_pending_event_prevents_wildcard_vcont_callback,
   6609 		 may_global_wildcard);
   6610 }
   6611 
   6612 /* Remove stop replies in the queue if its pid is equal to the given
   6613    inferior's pid.  */
   6614 
   6615 static int
   6616 remove_stop_reply_for_inferior (QUEUE (stop_reply_p) *q,
   6617 				QUEUE_ITER (stop_reply_p) *iter,
   6618 				stop_reply_p event,
   6619 				void *data)
   6620 {
   6621   struct queue_iter_param *param = (struct queue_iter_param *) data;
   6622   struct inferior *inf = (struct inferior *) param->input;
   6623 
   6624   if (ptid_get_pid (event->ptid) == inf->pid)
   6625     {
   6626       stop_reply_xfree (event);
   6627       QUEUE_remove_elem (stop_reply_p, q, iter);
   6628     }
   6629 
   6630   return 1;
   6631 }
   6632 
   6633 /* Discard all pending stop replies of inferior INF.  */
   6634 
   6635 static void
   6636 discard_pending_stop_replies (struct inferior *inf)
   6637 {
   6638   struct queue_iter_param param;
   6639   struct stop_reply *reply;
   6640   struct remote_state *rs = get_remote_state ();
   6641   struct remote_notif_state *rns = rs->notif_state;
   6642 
   6643   /* This function can be notified when an inferior exists.  When the
   6644      target is not remote, the notification state is NULL.  */
   6645   if (rs->remote_desc == NULL)
   6646     return;
   6647 
   6648   reply = (struct stop_reply *) rns->pending_event[notif_client_stop.id];
   6649 
   6650   /* Discard the in-flight notification.  */
   6651   if (reply != NULL && ptid_get_pid (reply->ptid) == inf->pid)
   6652     {
   6653       stop_reply_xfree (reply);
   6654       rns->pending_event[notif_client_stop.id] = NULL;
   6655     }
   6656 
   6657   param.input = inf;
   6658   param.output = NULL;
   6659   /* Discard the stop replies we have already pulled with
   6660      vStopped.  */
   6661   QUEUE_iterate (stop_reply_p, stop_reply_queue,
   6662 		 remove_stop_reply_for_inferior, &param);
   6663 }
   6664 
   6665 /* If its remote state is equal to the given remote state,
   6666    remove EVENT from the stop reply queue.  */
   6667 
   6668 static int
   6669 remove_stop_reply_of_remote_state (QUEUE (stop_reply_p) *q,
   6670 				   QUEUE_ITER (stop_reply_p) *iter,
   6671 				   stop_reply_p event,
   6672 				   void *data)
   6673 {
   6674   struct queue_iter_param *param = (struct queue_iter_param *) data;
   6675   struct remote_state *rs = (struct remote_state *) param->input;
   6676 
   6677   if (event->rs == rs)
   6678     {
   6679       stop_reply_xfree (event);
   6680       QUEUE_remove_elem (stop_reply_p, q, iter);
   6681     }
   6682 
   6683   return 1;
   6684 }
   6685 
   6686 /* Discard the stop replies for RS in stop_reply_queue.  */
   6687 
   6688 static void
   6689 discard_pending_stop_replies_in_queue (struct remote_state *rs)
   6690 {
   6691   struct queue_iter_param param;
   6692 
   6693   param.input = rs;
   6694   param.output = NULL;
   6695   /* Discard the stop replies we have already pulled with
   6696      vStopped.  */
   6697   QUEUE_iterate (stop_reply_p, stop_reply_queue,
   6698 		 remove_stop_reply_of_remote_state, &param);
   6699 }
   6700 
   6701 /* A parameter to pass data in and out.  */
   6702 
   6703 static int
   6704 remote_notif_remove_once_on_match (QUEUE (stop_reply_p) *q,
   6705 				   QUEUE_ITER (stop_reply_p) *iter,
   6706 				   stop_reply_p event,
   6707 				   void *data)
   6708 {
   6709   struct queue_iter_param *param = (struct queue_iter_param *) data;
   6710   ptid_t *ptid = (ptid_t *) param->input;
   6711 
   6712   if (ptid_match (event->ptid, *ptid))
   6713     {
   6714       param->output = event;
   6715       QUEUE_remove_elem (stop_reply_p, q, iter);
   6716       return 0;
   6717     }
   6718 
   6719   return 1;
   6720 }
   6721 
   6722 /* Remove the first reply in 'stop_reply_queue' which matches
   6723    PTID.  */
   6724 
   6725 static struct stop_reply *
   6726 remote_notif_remove_queued_reply (ptid_t ptid)
   6727 {
   6728   struct queue_iter_param param;
   6729 
   6730   param.input = &ptid;
   6731   param.output = NULL;
   6732 
   6733   QUEUE_iterate (stop_reply_p, stop_reply_queue,
   6734 		 remote_notif_remove_once_on_match, &param);
   6735   if (notif_debug)
   6736     fprintf_unfiltered (gdb_stdlog,
   6737 			"notif: discard queued event: 'Stop' in %s\n",
   6738 			target_pid_to_str (ptid));
   6739 
   6740   return param.output;
   6741 }
   6742 
   6743 /* Look for a queued stop reply belonging to PTID.  If one is found,
   6744    remove it from the queue, and return it.  Returns NULL if none is
   6745    found.  If there are still queued events left to process, tell the
   6746    event loop to get back to target_wait soon.  */
   6747 
   6748 static struct stop_reply *
   6749 queued_stop_reply (ptid_t ptid)
   6750 {
   6751   struct stop_reply *r = remote_notif_remove_queued_reply (ptid);
   6752 
   6753   if (!QUEUE_is_empty (stop_reply_p, stop_reply_queue))
   6754     /* There's still at least an event left.  */
   6755     mark_async_event_handler (remote_async_inferior_event_token);
   6756 
   6757   return r;
   6758 }
   6759 
   6760 /* Push a fully parsed stop reply in the stop reply queue.  Since we
   6761    know that we now have at least one queued event left to pass to the
   6762    core side, tell the event loop to get back to target_wait soon.  */
   6763 
   6764 static void
   6765 push_stop_reply (struct stop_reply *new_event)
   6766 {
   6767   QUEUE_enque (stop_reply_p, stop_reply_queue, new_event);
   6768 
   6769   if (notif_debug)
   6770     fprintf_unfiltered (gdb_stdlog,
   6771 			"notif: push 'Stop' %s to queue %d\n",
   6772 			target_pid_to_str (new_event->ptid),
   6773 			QUEUE_length (stop_reply_p,
   6774 				      stop_reply_queue));
   6775 
   6776   mark_async_event_handler (remote_async_inferior_event_token);
   6777 }
   6778 
   6779 static int
   6780 stop_reply_match_ptid_and_ws (QUEUE (stop_reply_p) *q,
   6781 			      QUEUE_ITER (stop_reply_p) *iter,
   6782 			      struct stop_reply *event,
   6783 			      void *data)
   6784 {
   6785   ptid_t *ptid = (ptid_t *) data;
   6786 
   6787   return !(ptid_equal (*ptid, event->ptid)
   6788 	   && event->ws.kind == TARGET_WAITKIND_STOPPED);
   6789 }
   6790 
   6791 /* Returns true if we have a stop reply for PTID.  */
   6792 
   6793 static int
   6794 peek_stop_reply (ptid_t ptid)
   6795 {
   6796   return !QUEUE_iterate (stop_reply_p, stop_reply_queue,
   6797 			 stop_reply_match_ptid_and_ws, &ptid);
   6798 }
   6799 
   6800 /* Helper for remote_parse_stop_reply.  Return nonzero if the substring
   6801    starting with P and ending with PEND matches PREFIX.  */
   6802 
   6803 static int
   6804 strprefix (const char *p, const char *pend, const char *prefix)
   6805 {
   6806   for ( ; p < pend; p++, prefix++)
   6807     if (*p != *prefix)
   6808       return 0;
   6809   return *prefix == '\0';
   6810 }
   6811 
   6812 /* Parse the stop reply in BUF.  Either the function succeeds, and the
   6813    result is stored in EVENT, or throws an error.  */
   6814 
   6815 static void
   6816 remote_parse_stop_reply (char *buf, struct stop_reply *event)
   6817 {
   6818   struct remote_arch_state *rsa = get_remote_arch_state ();
   6819   ULONGEST addr;
   6820   char *p;
   6821   int skipregs = 0;
   6822 
   6823   event->ptid = null_ptid;
   6824   event->rs = get_remote_state ();
   6825   event->ws.kind = TARGET_WAITKIND_IGNORE;
   6826   event->ws.value.integer = 0;
   6827   event->stop_reason = TARGET_STOPPED_BY_NO_REASON;
   6828   event->regcache = NULL;
   6829   event->core = -1;
   6830 
   6831   switch (buf[0])
   6832     {
   6833     case 'T':		/* Status with PC, SP, FP, ...	*/
   6834       /* Expedited reply, containing Signal, {regno, reg} repeat.  */
   6835       /*  format is:  'Tssn...:r...;n...:r...;n...:r...;#cc', where
   6836 	    ss = signal number
   6837 	    n... = register number
   6838 	    r... = register contents
   6839       */
   6840 
   6841       p = &buf[3];	/* after Txx */
   6842       while (*p)
   6843 	{
   6844 	  char *p1;
   6845 	  int fieldsize;
   6846 
   6847 	  p1 = strchr (p, ':');
   6848 	  if (p1 == NULL)
   6849 	    error (_("Malformed packet(a) (missing colon): %s\n\
   6850 Packet: '%s'\n"),
   6851 		   p, buf);
   6852 	  if (p == p1)
   6853 	    error (_("Malformed packet(a) (missing register number): %s\n\
   6854 Packet: '%s'\n"),
   6855 		   p, buf);
   6856 
   6857 	  /* Some "registers" are actually extended stop information.
   6858 	     Note if you're adding a new entry here: GDB 7.9 and
   6859 	     earlier assume that all register "numbers" that start
   6860 	     with an hex digit are real register numbers.  Make sure
   6861 	     the server only sends such a packet if it knows the
   6862 	     client understands it.  */
   6863 
   6864 	  if (strprefix (p, p1, "thread"))
   6865 	    event->ptid = read_ptid (++p1, &p);
   6866 	  else if (strprefix (p, p1, "syscall_entry"))
   6867 	    {
   6868 	      ULONGEST sysno;
   6869 
   6870 	      event->ws.kind = TARGET_WAITKIND_SYSCALL_ENTRY;
   6871 	      p = unpack_varlen_hex (++p1, &sysno);
   6872 	      event->ws.value.syscall_number = (int) sysno;
   6873 	    }
   6874 	  else if (strprefix (p, p1, "syscall_return"))
   6875 	    {
   6876 	      ULONGEST sysno;
   6877 
   6878 	      event->ws.kind = TARGET_WAITKIND_SYSCALL_RETURN;
   6879 	      p = unpack_varlen_hex (++p1, &sysno);
   6880 	      event->ws.value.syscall_number = (int) sysno;
   6881 	    }
   6882 	  else if (strprefix (p, p1, "watch")
   6883 		   || strprefix (p, p1, "rwatch")
   6884 		   || strprefix (p, p1, "awatch"))
   6885 	    {
   6886 	      event->stop_reason = TARGET_STOPPED_BY_WATCHPOINT;
   6887 	      p = unpack_varlen_hex (++p1, &addr);
   6888 	      event->watch_data_address = (CORE_ADDR) addr;
   6889 	    }
   6890 	  else if (strprefix (p, p1, "swbreak"))
   6891 	    {
   6892 	      event->stop_reason = TARGET_STOPPED_BY_SW_BREAKPOINT;
   6893 
   6894 	      /* Make sure the stub doesn't forget to indicate support
   6895 		 with qSupported.  */
   6896 	      if (packet_support (PACKET_swbreak_feature) != PACKET_ENABLE)
   6897 		error (_("Unexpected swbreak stop reason"));
   6898 
   6899 	      /* The value part is documented as "must be empty",
   6900 		 though we ignore it, in case we ever decide to make
   6901 		 use of it in a backward compatible way.  */
   6902 	      p = strchrnul (p1 + 1, ';');
   6903 	    }
   6904 	  else if (strprefix (p, p1, "hwbreak"))
   6905 	    {
   6906 	      event->stop_reason = TARGET_STOPPED_BY_HW_BREAKPOINT;
   6907 
   6908 	      /* Make sure the stub doesn't forget to indicate support
   6909 		 with qSupported.  */
   6910 	      if (packet_support (PACKET_hwbreak_feature) != PACKET_ENABLE)
   6911 		error (_("Unexpected hwbreak stop reason"));
   6912 
   6913 	      /* See above.  */
   6914 	      p = strchrnul (p1 + 1, ';');
   6915 	    }
   6916 	  else if (strprefix (p, p1, "library"))
   6917 	    {
   6918 	      event->ws.kind = TARGET_WAITKIND_LOADED;
   6919 	      p = strchrnul (p1 + 1, ';');
   6920 	    }
   6921 	  else if (strprefix (p, p1, "replaylog"))
   6922 	    {
   6923 	      event->ws.kind = TARGET_WAITKIND_NO_HISTORY;
   6924 	      /* p1 will indicate "begin" or "end", but it makes
   6925 		 no difference for now, so ignore it.  */
   6926 	      p = strchrnul (p1 + 1, ';');
   6927 	    }
   6928 	  else if (strprefix (p, p1, "core"))
   6929 	    {
   6930 	      ULONGEST c;
   6931 
   6932 	      p = unpack_varlen_hex (++p1, &c);
   6933 	      event->core = c;
   6934 	    }
   6935 	  else if (strprefix (p, p1, "fork"))
   6936 	    {
   6937 	      event->ws.value.related_pid = read_ptid (++p1, &p);
   6938 	      event->ws.kind = TARGET_WAITKIND_FORKED;
   6939 	    }
   6940 	  else if (strprefix (p, p1, "vfork"))
   6941 	    {
   6942 	      event->ws.value.related_pid = read_ptid (++p1, &p);
   6943 	      event->ws.kind = TARGET_WAITKIND_VFORKED;
   6944 	    }
   6945 	  else if (strprefix (p, p1, "vforkdone"))
   6946 	    {
   6947 	      event->ws.kind = TARGET_WAITKIND_VFORK_DONE;
   6948 	      p = strchrnul (p1 + 1, ';');
   6949 	    }
   6950 	  else if (strprefix (p, p1, "exec"))
   6951 	    {
   6952 	      ULONGEST ignored;
   6953 	      char pathname[PATH_MAX];
   6954 	      int pathlen;
   6955 
   6956 	      /* Determine the length of the execd pathname.  */
   6957 	      p = unpack_varlen_hex (++p1, &ignored);
   6958 	      pathlen = (p - p1) / 2;
   6959 
   6960 	      /* Save the pathname for event reporting and for
   6961 		 the next run command.  */
   6962 	      hex2bin (p1, (gdb_byte *) pathname, pathlen);
   6963 	      pathname[pathlen] = '\0';
   6964 
   6965 	      /* This is freed during event handling.  */
   6966 	      event->ws.value.execd_pathname = xstrdup (pathname);
   6967 	      event->ws.kind = TARGET_WAITKIND_EXECD;
   6968 
   6969 	      /* Skip the registers included in this packet, since
   6970 		 they may be for an architecture different from the
   6971 		 one used by the original program.  */
   6972 	      skipregs = 1;
   6973 	    }
   6974 	  else if (strprefix (p, p1, "create"))
   6975 	    {
   6976 	      event->ws.kind = TARGET_WAITKIND_THREAD_CREATED;
   6977 	      p = strchrnul (p1 + 1, ';');
   6978 	    }
   6979 	  else
   6980 	    {
   6981 	      ULONGEST pnum;
   6982 	      char *p_temp;
   6983 
   6984 	      if (skipregs)
   6985 		{
   6986 		  p = strchrnul (p1 + 1, ';');
   6987 		  p++;
   6988 		  continue;
   6989 		}
   6990 
   6991 	      /* Maybe a real ``P'' register number.  */
   6992 	      p_temp = unpack_varlen_hex (p, &pnum);
   6993 	      /* If the first invalid character is the colon, we got a
   6994 		 register number.  Otherwise, it's an unknown stop
   6995 		 reason.  */
   6996 	      if (p_temp == p1)
   6997 		{
   6998 		  struct packet_reg *reg = packet_reg_from_pnum (rsa, pnum);
   6999 		  cached_reg_t cached_reg;
   7000 		  struct gdbarch *gdbarch = target_gdbarch ();
   7001 
   7002 		  if (reg == NULL)
   7003 		    error (_("Remote sent bad register number %s: %s\n\
   7004 Packet: '%s'\n"),
   7005 			   hex_string (pnum), p, buf);
   7006 
   7007 		  cached_reg.num = reg->regnum;
   7008 		  cached_reg.data = (gdb_byte *)
   7009 		    xmalloc (register_size (gdbarch, reg->regnum));
   7010 
   7011 		  p = p1 + 1;
   7012 		  fieldsize = hex2bin (p, cached_reg.data,
   7013 				       register_size (gdbarch, reg->regnum));
   7014 		  p += 2 * fieldsize;
   7015 		  if (fieldsize < register_size (gdbarch, reg->regnum))
   7016 		    warning (_("Remote reply is too short: %s"), buf);
   7017 
   7018 		  VEC_safe_push (cached_reg_t, event->regcache, &cached_reg);
   7019 		}
   7020 	      else
   7021 		{
   7022 		  /* Not a number.  Silently skip unknown optional
   7023 		     info.  */
   7024 		  p = strchrnul (p1 + 1, ';');
   7025 		}
   7026 	    }
   7027 
   7028 	  if (*p != ';')
   7029 	    error (_("Remote register badly formatted: %s\nhere: %s"),
   7030 		   buf, p);
   7031 	  ++p;
   7032 	}
   7033 
   7034       if (event->ws.kind != TARGET_WAITKIND_IGNORE)
   7035 	break;
   7036 
   7037       /* fall through */
   7038     case 'S':		/* Old style status, just signal only.  */
   7039       {
   7040 	int sig;
   7041 
   7042 	event->ws.kind = TARGET_WAITKIND_STOPPED;
   7043 	sig = (fromhex (buf[1]) << 4) + fromhex (buf[2]);
   7044 	if (GDB_SIGNAL_FIRST <= sig && sig < GDB_SIGNAL_LAST)
   7045 	  event->ws.value.sig = (enum gdb_signal) sig;
   7046 	else
   7047 	  event->ws.value.sig = GDB_SIGNAL_UNKNOWN;
   7048       }
   7049       break;
   7050     case 'w':		/* Thread exited.  */
   7051       {
   7052 	char *p;
   7053 	ULONGEST value;
   7054 
   7055 	event->ws.kind = TARGET_WAITKIND_THREAD_EXITED;
   7056 	p = unpack_varlen_hex (&buf[1], &value);
   7057 	event->ws.value.integer = value;
   7058 	if (*p != ';')
   7059 	  error (_("stop reply packet badly formatted: %s"), buf);
   7060 	event->ptid = read_ptid (++p, NULL);
   7061 	break;
   7062       }
   7063     case 'W':		/* Target exited.  */
   7064     case 'X':
   7065       {
   7066 	char *p;
   7067 	int pid;
   7068 	ULONGEST value;
   7069 
   7070 	/* GDB used to accept only 2 hex chars here.  Stubs should
   7071 	   only send more if they detect GDB supports multi-process
   7072 	   support.  */
   7073 	p = unpack_varlen_hex (&buf[1], &value);
   7074 
   7075 	if (buf[0] == 'W')
   7076 	  {
   7077 	    /* The remote process exited.  */
   7078 	    event->ws.kind = TARGET_WAITKIND_EXITED;
   7079 	    event->ws.value.integer = value;
   7080 	  }
   7081 	else
   7082 	  {
   7083 	    /* The remote process exited with a signal.  */
   7084 	    event->ws.kind = TARGET_WAITKIND_SIGNALLED;
   7085 	    if (GDB_SIGNAL_FIRST <= value && value < GDB_SIGNAL_LAST)
   7086 	      event->ws.value.sig = (enum gdb_signal) value;
   7087 	    else
   7088 	      event->ws.value.sig = GDB_SIGNAL_UNKNOWN;
   7089 	  }
   7090 
   7091 	/* If no process is specified, assume inferior_ptid.  */
   7092 	pid = ptid_get_pid (inferior_ptid);
   7093 	if (*p == '\0')
   7094 	  ;
   7095 	else if (*p == ';')
   7096 	  {
   7097 	    p++;
   7098 
   7099 	    if (*p == '\0')
   7100 	      ;
   7101 	    else if (startswith (p, "process:"))
   7102 	      {
   7103 		ULONGEST upid;
   7104 
   7105 		p += sizeof ("process:") - 1;
   7106 		unpack_varlen_hex (p, &upid);
   7107 		pid = upid;
   7108 	      }
   7109 	    else
   7110 	      error (_("unknown stop reply packet: %s"), buf);
   7111 	  }
   7112 	else
   7113 	  error (_("unknown stop reply packet: %s"), buf);
   7114 	event->ptid = pid_to_ptid (pid);
   7115       }
   7116       break;
   7117     case 'N':
   7118       event->ws.kind = TARGET_WAITKIND_NO_RESUMED;
   7119       event->ptid = minus_one_ptid;
   7120       break;
   7121     }
   7122 
   7123   if (target_is_non_stop_p () && ptid_equal (event->ptid, null_ptid))
   7124     error (_("No process or thread specified in stop reply: %s"), buf);
   7125 }
   7126 
   7127 /* When the stub wants to tell GDB about a new notification reply, it
   7128    sends a notification (%Stop, for example).  Those can come it at
   7129    any time, hence, we have to make sure that any pending
   7130    putpkt/getpkt sequence we're making is finished, before querying
   7131    the stub for more events with the corresponding ack command
   7132    (vStopped, for example).  E.g., if we started a vStopped sequence
   7133    immediately upon receiving the notification, something like this
   7134    could happen:
   7135 
   7136     1.1) --> Hg 1
   7137     1.2) <-- OK
   7138     1.3) --> g
   7139     1.4) <-- %Stop
   7140     1.5) --> vStopped
   7141     1.6) <-- (registers reply to step #1.3)
   7142 
   7143    Obviously, the reply in step #1.6 would be unexpected to a vStopped
   7144    query.
   7145 
   7146    To solve this, whenever we parse a %Stop notification successfully,
   7147    we mark the REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN, and carry on
   7148    doing whatever we were doing:
   7149 
   7150     2.1) --> Hg 1
   7151     2.2) <-- OK
   7152     2.3) --> g
   7153     2.4) <-- %Stop
   7154       <GDB marks the REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN>
   7155     2.5) <-- (registers reply to step #2.3)
   7156 
   7157    Eventualy after step #2.5, we return to the event loop, which
   7158    notices there's an event on the
   7159    REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN event and calls the
   7160    associated callback --- the function below.  At this point, we're
   7161    always safe to start a vStopped sequence. :
   7162 
   7163     2.6) --> vStopped
   7164     2.7) <-- T05 thread:2
   7165     2.8) --> vStopped
   7166     2.9) --> OK
   7167 */
   7168 
   7169 void
   7170 remote_notif_get_pending_events (struct notif_client *nc)
   7171 {
   7172   struct remote_state *rs = get_remote_state ();
   7173 
   7174   if (rs->notif_state->pending_event[nc->id] != NULL)
   7175     {
   7176       if (notif_debug)
   7177 	fprintf_unfiltered (gdb_stdlog,
   7178 			    "notif: process: '%s' ack pending event\n",
   7179 			    nc->name);
   7180 
   7181       /* acknowledge */
   7182       nc->ack (nc, rs->buf, rs->notif_state->pending_event[nc->id]);
   7183       rs->notif_state->pending_event[nc->id] = NULL;
   7184 
   7185       while (1)
   7186 	{
   7187 	  getpkt (&rs->buf, &rs->buf_size, 0);
   7188 	  if (strcmp (rs->buf, "OK") == 0)
   7189 	    break;
   7190 	  else
   7191 	    remote_notif_ack (nc, rs->buf);
   7192 	}
   7193     }
   7194   else
   7195     {
   7196       if (notif_debug)
   7197 	fprintf_unfiltered (gdb_stdlog,
   7198 			    "notif: process: '%s' no pending reply\n",
   7199 			    nc->name);
   7200     }
   7201 }
   7202 
   7203 /* Called when it is decided that STOP_REPLY holds the info of the
   7204    event that is to be returned to the core.  This function always
   7205    destroys STOP_REPLY.  */
   7206 
   7207 static ptid_t
   7208 process_stop_reply (struct stop_reply *stop_reply,
   7209 		    struct target_waitstatus *status)
   7210 {
   7211   ptid_t ptid;
   7212 
   7213   *status = stop_reply->ws;
   7214   ptid = stop_reply->ptid;
   7215 
   7216   /* If no thread/process was reported by the stub, assume the current
   7217      inferior.  */
   7218   if (ptid_equal (ptid, null_ptid))
   7219     ptid = inferior_ptid;
   7220 
   7221   if (status->kind != TARGET_WAITKIND_EXITED
   7222       && status->kind != TARGET_WAITKIND_SIGNALLED
   7223       && status->kind != TARGET_WAITKIND_NO_RESUMED)
   7224     {
   7225       struct private_thread_info *remote_thr;
   7226 
   7227       /* Expedited registers.  */
   7228       if (stop_reply->regcache)
   7229 	{
   7230 	  struct regcache *regcache
   7231 	    = get_thread_arch_regcache (ptid, target_gdbarch ());
   7232 	  cached_reg_t *reg;
   7233 	  int ix;
   7234 
   7235 	  for (ix = 0;
   7236 	       VEC_iterate (cached_reg_t, stop_reply->regcache, ix, reg);
   7237 	       ix++)
   7238 	  {
   7239 	    regcache_raw_supply (regcache, reg->num, reg->data);
   7240 	    xfree (reg->data);
   7241 	  }
   7242 
   7243 	  VEC_free (cached_reg_t, stop_reply->regcache);
   7244 	}
   7245 
   7246       remote_notice_new_inferior (ptid, 0);
   7247       remote_thr = get_private_info_ptid (ptid);
   7248       remote_thr->core = stop_reply->core;
   7249       remote_thr->stop_reason = stop_reply->stop_reason;
   7250       remote_thr->watch_data_address = stop_reply->watch_data_address;
   7251       remote_thr->vcont_resumed = 0;
   7252     }
   7253 
   7254   stop_reply_xfree (stop_reply);
   7255   return ptid;
   7256 }
   7257 
   7258 /* The non-stop mode version of target_wait.  */
   7259 
   7260 static ptid_t
   7261 remote_wait_ns (ptid_t ptid, struct target_waitstatus *status, int options)
   7262 {
   7263   struct remote_state *rs = get_remote_state ();
   7264   struct stop_reply *stop_reply;
   7265   int ret;
   7266   int is_notif = 0;
   7267 
   7268   /* If in non-stop mode, get out of getpkt even if a
   7269      notification is received.	*/
   7270 
   7271   ret = getpkt_or_notif_sane (&rs->buf, &rs->buf_size,
   7272 			      0 /* forever */, &is_notif);
   7273   while (1)
   7274     {
   7275       if (ret != -1 && !is_notif)
   7276 	switch (rs->buf[0])
   7277 	  {
   7278 	  case 'E':		/* Error of some sort.	*/
   7279 	    /* We're out of sync with the target now.  Did it continue
   7280 	       or not?  We can't tell which thread it was in non-stop,
   7281 	       so just ignore this.  */
   7282 	    warning (_("Remote failure reply: %s"), rs->buf);
   7283 	    break;
   7284 	  case 'O':		/* Console output.  */
   7285 	    remote_console_output (rs->buf + 1);
   7286 	    break;
   7287 	  default:
   7288 	    warning (_("Invalid remote reply: %s"), rs->buf);
   7289 	    break;
   7290 	  }
   7291 
   7292       /* Acknowledge a pending stop reply that may have arrived in the
   7293 	 mean time.  */
   7294       if (rs->notif_state->pending_event[notif_client_stop.id] != NULL)
   7295 	remote_notif_get_pending_events (&notif_client_stop);
   7296 
   7297       /* If indeed we noticed a stop reply, we're done.  */
   7298       stop_reply = queued_stop_reply (ptid);
   7299       if (stop_reply != NULL)
   7300 	return process_stop_reply (stop_reply, status);
   7301 
   7302       /* Still no event.  If we're just polling for an event, then
   7303 	 return to the event loop.  */
   7304       if (options & TARGET_WNOHANG)
   7305 	{
   7306 	  status->kind = TARGET_WAITKIND_IGNORE;
   7307 	  return minus_one_ptid;
   7308 	}
   7309 
   7310       /* Otherwise do a blocking wait.  */
   7311       ret = getpkt_or_notif_sane (&rs->buf, &rs->buf_size,
   7312 				  1 /* forever */, &is_notif);
   7313     }
   7314 }
   7315 
   7316 /* Wait until the remote machine stops, then return, storing status in
   7317    STATUS just as `wait' would.  */
   7318 
   7319 static ptid_t
   7320 remote_wait_as (ptid_t ptid, struct target_waitstatus *status, int options)
   7321 {
   7322   struct remote_state *rs = get_remote_state ();
   7323   ptid_t event_ptid = null_ptid;
   7324   char *buf;
   7325   struct stop_reply *stop_reply;
   7326 
   7327  again:
   7328 
   7329   status->kind = TARGET_WAITKIND_IGNORE;
   7330   status->value.integer = 0;
   7331 
   7332   stop_reply = queued_stop_reply (ptid);
   7333   if (stop_reply != NULL)
   7334     return process_stop_reply (stop_reply, status);
   7335 
   7336   if (rs->cached_wait_status)
   7337     /* Use the cached wait status, but only once.  */
   7338     rs->cached_wait_status = 0;
   7339   else
   7340     {
   7341       int ret;
   7342       int is_notif;
   7343       int forever = ((options & TARGET_WNOHANG) == 0
   7344 		     && wait_forever_enabled_p);
   7345 
   7346       if (!rs->waiting_for_stop_reply)
   7347 	{
   7348 	  status->kind = TARGET_WAITKIND_NO_RESUMED;
   7349 	  return minus_one_ptid;
   7350 	}
   7351 
   7352       /* FIXME: cagney/1999-09-27: If we're in async mode we should
   7353 	 _never_ wait for ever -> test on target_is_async_p().
   7354 	 However, before we do that we need to ensure that the caller
   7355 	 knows how to take the target into/out of async mode.  */
   7356       ret = getpkt_or_notif_sane (&rs->buf, &rs->buf_size,
   7357 				  forever, &is_notif);
   7358 
   7359       /* GDB gets a notification.  Return to core as this event is
   7360 	 not interesting.  */
   7361       if (ret != -1 && is_notif)
   7362 	return minus_one_ptid;
   7363 
   7364       if (ret == -1 && (options & TARGET_WNOHANG) != 0)
   7365 	return minus_one_ptid;
   7366     }
   7367 
   7368   buf = rs->buf;
   7369 
   7370   /* Assume that the target has acknowledged Ctrl-C unless we receive
   7371      an 'F' or 'O' packet.  */
   7372   if (buf[0] != 'F' && buf[0] != 'O')
   7373     rs->ctrlc_pending_p = 0;
   7374 
   7375   switch (buf[0])
   7376     {
   7377     case 'E':		/* Error of some sort.	*/
   7378       /* We're out of sync with the target now.  Did it continue or
   7379 	 not?  Not is more likely, so report a stop.  */
   7380       rs->waiting_for_stop_reply = 0;
   7381 
   7382       warning (_("Remote failure reply: %s"), buf);
   7383       status->kind = TARGET_WAITKIND_STOPPED;
   7384       status->value.sig = GDB_SIGNAL_0;
   7385       break;
   7386     case 'F':		/* File-I/O request.  */
   7387       /* GDB may access the inferior memory while handling the File-I/O
   7388 	 request, but we don't want GDB accessing memory while waiting
   7389 	 for a stop reply.  See the comments in putpkt_binary.  Set
   7390 	 waiting_for_stop_reply to 0 temporarily.  */
   7391       rs->waiting_for_stop_reply = 0;
   7392       remote_fileio_request (buf, rs->ctrlc_pending_p);
   7393       rs->ctrlc_pending_p = 0;
   7394       /* GDB handled the File-I/O request, and the target is running
   7395 	 again.  Keep waiting for events.  */
   7396       rs->waiting_for_stop_reply = 1;
   7397       break;
   7398     case 'N': case 'T': case 'S': case 'X': case 'W':
   7399       {
   7400 	struct stop_reply *stop_reply;
   7401 
   7402 	/* There is a stop reply to handle.  */
   7403 	rs->waiting_for_stop_reply = 0;
   7404 
   7405 	stop_reply
   7406 	  = (struct stop_reply *) remote_notif_parse (&notif_client_stop,
   7407 						      rs->buf);
   7408 
   7409 	event_ptid = process_stop_reply (stop_reply, status);
   7410 	break;
   7411       }
   7412     case 'O':		/* Console output.  */
   7413       remote_console_output (buf + 1);
   7414       break;
   7415     case '\0':
   7416       if (rs->last_sent_signal != GDB_SIGNAL_0)
   7417 	{
   7418 	  /* Zero length reply means that we tried 'S' or 'C' and the
   7419 	     remote system doesn't support it.  */
   7420 	  target_terminal_ours_for_output ();
   7421 	  printf_filtered
   7422 	    ("Can't send signals to this remote system.  %s not sent.\n",
   7423 	     gdb_signal_to_name (rs->last_sent_signal));
   7424 	  rs->last_sent_signal = GDB_SIGNAL_0;
   7425 	  target_terminal_inferior ();
   7426 
   7427 	  strcpy (buf, rs->last_sent_step ? "s" : "c");
   7428 	  putpkt (buf);
   7429 	  break;
   7430 	}
   7431       /* else fallthrough */
   7432     default:
   7433       warning (_("Invalid remote reply: %s"), buf);
   7434       break;
   7435     }
   7436 
   7437   if (status->kind == TARGET_WAITKIND_NO_RESUMED)
   7438     return minus_one_ptid;
   7439   else if (status->kind == TARGET_WAITKIND_IGNORE)
   7440     {
   7441       /* Nothing interesting happened.  If we're doing a non-blocking
   7442 	 poll, we're done.  Otherwise, go back to waiting.  */
   7443       if (options & TARGET_WNOHANG)
   7444 	return minus_one_ptid;
   7445       else
   7446 	goto again;
   7447     }
   7448   else if (status->kind != TARGET_WAITKIND_EXITED
   7449 	   && status->kind != TARGET_WAITKIND_SIGNALLED)
   7450     {
   7451       if (!ptid_equal (event_ptid, null_ptid))
   7452 	record_currthread (rs, event_ptid);
   7453       else
   7454 	event_ptid = inferior_ptid;
   7455     }
   7456   else
   7457     /* A process exit.  Invalidate our notion of current thread.  */
   7458     record_currthread (rs, minus_one_ptid);
   7459 
   7460   return event_ptid;
   7461 }
   7462 
   7463 /* Wait until the remote machine stops, then return, storing status in
   7464    STATUS just as `wait' would.  */
   7465 
   7466 static ptid_t
   7467 remote_wait (struct target_ops *ops,
   7468 	     ptid_t ptid, struct target_waitstatus *status, int options)
   7469 {
   7470   ptid_t event_ptid;
   7471 
   7472   if (target_is_non_stop_p ())
   7473     event_ptid = remote_wait_ns (ptid, status, options);
   7474   else
   7475     event_ptid = remote_wait_as (ptid, status, options);
   7476 
   7477   if (target_is_async_p ())
   7478     {
   7479       /* If there are are events left in the queue tell the event loop
   7480 	 to return here.  */
   7481       if (!QUEUE_is_empty (stop_reply_p, stop_reply_queue))
   7482 	mark_async_event_handler (remote_async_inferior_event_token);
   7483     }
   7484 
   7485   return event_ptid;
   7486 }
   7487 
   7488 /* Fetch a single register using a 'p' packet.  */
   7489 
   7490 static int
   7491 fetch_register_using_p (struct regcache *regcache, struct packet_reg *reg)
   7492 {
   7493   struct gdbarch *gdbarch = get_regcache_arch (regcache);
   7494   struct remote_state *rs = get_remote_state ();
   7495   char *buf, *p;
   7496   gdb_byte *regp = (gdb_byte *) alloca (register_size (gdbarch, reg->regnum));
   7497   int i;
   7498 
   7499   if (packet_support (PACKET_p) == PACKET_DISABLE)
   7500     return 0;
   7501 
   7502   if (reg->pnum == -1)
   7503     return 0;
   7504 
   7505   p = rs->buf;
   7506   *p++ = 'p';
   7507   p += hexnumstr (p, reg->pnum);
   7508   *p++ = '\0';
   7509   putpkt (rs->buf);
   7510   getpkt (&rs->buf, &rs->buf_size, 0);
   7511 
   7512   buf = rs->buf;
   7513 
   7514   switch (packet_ok (buf, &remote_protocol_packets[PACKET_p]))
   7515     {
   7516     case PACKET_OK:
   7517       break;
   7518     case PACKET_UNKNOWN:
   7519       return 0;
   7520     case PACKET_ERROR:
   7521       error (_("Could not fetch register \"%s\"; remote failure reply '%s'"),
   7522 	     gdbarch_register_name (get_regcache_arch (regcache),
   7523 				    reg->regnum),
   7524 	     buf);
   7525     }
   7526 
   7527   /* If this register is unfetchable, tell the regcache.  */
   7528   if (buf[0] == 'x')
   7529     {
   7530       regcache_raw_supply (regcache, reg->regnum, NULL);
   7531       return 1;
   7532     }
   7533 
   7534   /* Otherwise, parse and supply the value.  */
   7535   p = buf;
   7536   i = 0;
   7537   while (p[0] != 0)
   7538     {
   7539       if (p[1] == 0)
   7540 	error (_("fetch_register_using_p: early buf termination"));
   7541 
   7542       regp[i++] = fromhex (p[0]) * 16 + fromhex (p[1]);
   7543       p += 2;
   7544     }
   7545   regcache_raw_supply (regcache, reg->regnum, regp);
   7546   return 1;
   7547 }
   7548 
   7549 /* Fetch the registers included in the target's 'g' packet.  */
   7550 
   7551 static int
   7552 send_g_packet (void)
   7553 {
   7554   struct remote_state *rs = get_remote_state ();
   7555   int buf_len;
   7556 
   7557   xsnprintf (rs->buf, get_remote_packet_size (), "g");
   7558   remote_send (&rs->buf, &rs->buf_size);
   7559 
   7560   /* We can get out of synch in various cases.  If the first character
   7561      in the buffer is not a hex character, assume that has happened
   7562      and try to fetch another packet to read.  */
   7563   while ((rs->buf[0] < '0' || rs->buf[0] > '9')
   7564 	 && (rs->buf[0] < 'A' || rs->buf[0] > 'F')
   7565 	 && (rs->buf[0] < 'a' || rs->buf[0] > 'f')
   7566 	 && rs->buf[0] != 'x')	/* New: unavailable register value.  */
   7567     {
   7568       if (remote_debug)
   7569 	fprintf_unfiltered (gdb_stdlog,
   7570 			    "Bad register packet; fetching a new packet\n");
   7571       getpkt (&rs->buf, &rs->buf_size, 0);
   7572     }
   7573 
   7574   buf_len = strlen (rs->buf);
   7575 
   7576   /* Sanity check the received packet.  */
   7577   if (buf_len % 2 != 0)
   7578     error (_("Remote 'g' packet reply is of odd length: %s"), rs->buf);
   7579 
   7580   return buf_len / 2;
   7581 }
   7582 
   7583 static void
   7584 process_g_packet (struct regcache *regcache)
   7585 {
   7586   struct gdbarch *gdbarch = get_regcache_arch (regcache);
   7587   struct remote_state *rs = get_remote_state ();
   7588   struct remote_arch_state *rsa = get_remote_arch_state ();
   7589   int i, buf_len;
   7590   char *p;
   7591   char *regs;
   7592 
   7593   buf_len = strlen (rs->buf);
   7594 
   7595   /* Further sanity checks, with knowledge of the architecture.  */
   7596   if (buf_len > 2 * rsa->sizeof_g_packet)
   7597     error (_("Remote 'g' packet reply is too long (expected %ld bytes, got %d "
   7598 	     "bytes): %s"), rsa->sizeof_g_packet, buf_len / 2, rs->buf);
   7599 
   7600   /* Save the size of the packet sent to us by the target.  It is used
   7601      as a heuristic when determining the max size of packets that the
   7602      target can safely receive.  */
   7603   if (rsa->actual_register_packet_size == 0)
   7604     rsa->actual_register_packet_size = buf_len;
   7605 
   7606   /* If this is smaller than we guessed the 'g' packet would be,
   7607      update our records.  A 'g' reply that doesn't include a register's
   7608      value implies either that the register is not available, or that
   7609      the 'p' packet must be used.  */
   7610   if (buf_len < 2 * rsa->sizeof_g_packet)
   7611     {
   7612       long sizeof_g_packet = buf_len / 2;
   7613 
   7614       for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
   7615 	{
   7616 	  long offset = rsa->regs[i].offset;
   7617 	  long reg_size = register_size (gdbarch, i);
   7618 
   7619 	  if (rsa->regs[i].pnum == -1)
   7620 	    continue;
   7621 
   7622 	  if (offset >= sizeof_g_packet)
   7623 	    rsa->regs[i].in_g_packet = 0;
   7624 	  else if (offset + reg_size > sizeof_g_packet)
   7625 	    error (_("Truncated register %d in remote 'g' packet"), i);
   7626 	  else
   7627 	    rsa->regs[i].in_g_packet = 1;
   7628 	}
   7629 
   7630       /* Looks valid enough, we can assume this is the correct length
   7631          for a 'g' packet.  It's important not to adjust
   7632          rsa->sizeof_g_packet if we have truncated registers otherwise
   7633          this "if" won't be run the next time the method is called
   7634          with a packet of the same size and one of the internal errors
   7635          below will trigger instead.  */
   7636       rsa->sizeof_g_packet = sizeof_g_packet;
   7637     }
   7638 
   7639   regs = (char *) alloca (rsa->sizeof_g_packet);
   7640 
   7641   /* Unimplemented registers read as all bits zero.  */
   7642   memset (regs, 0, rsa->sizeof_g_packet);
   7643 
   7644   /* Reply describes registers byte by byte, each byte encoded as two
   7645      hex characters.  Suck them all up, then supply them to the
   7646      register cacheing/storage mechanism.  */
   7647 
   7648   p = rs->buf;
   7649   for (i = 0; i < rsa->sizeof_g_packet; i++)
   7650     {
   7651       if (p[0] == 0 || p[1] == 0)
   7652 	/* This shouldn't happen - we adjusted sizeof_g_packet above.  */
   7653 	internal_error (__FILE__, __LINE__,
   7654 			_("unexpected end of 'g' packet reply"));
   7655 
   7656       if (p[0] == 'x' && p[1] == 'x')
   7657 	regs[i] = 0;		/* 'x' */
   7658       else
   7659 	regs[i] = fromhex (p[0]) * 16 + fromhex (p[1]);
   7660       p += 2;
   7661     }
   7662 
   7663   for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
   7664     {
   7665       struct packet_reg *r = &rsa->regs[i];
   7666       long reg_size = register_size (gdbarch, i);
   7667 
   7668       if (r->in_g_packet)
   7669 	{
   7670 	  if ((r->offset + reg_size) * 2 > strlen (rs->buf))
   7671 	    /* This shouldn't happen - we adjusted in_g_packet above.  */
   7672 	    internal_error (__FILE__, __LINE__,
   7673 			    _("unexpected end of 'g' packet reply"));
   7674 	  else if (rs->buf[r->offset * 2] == 'x')
   7675 	    {
   7676 	      gdb_assert (r->offset * 2 < strlen (rs->buf));
   7677 	      /* The register isn't available, mark it as such (at
   7678 		 the same time setting the value to zero).  */
   7679 	      regcache_raw_supply (regcache, r->regnum, NULL);
   7680 	    }
   7681 	  else
   7682 	    regcache_raw_supply (regcache, r->regnum,
   7683 				 regs + r->offset);
   7684 	}
   7685     }
   7686 }
   7687 
   7688 static void
   7689 fetch_registers_using_g (struct regcache *regcache)
   7690 {
   7691   send_g_packet ();
   7692   process_g_packet (regcache);
   7693 }
   7694 
   7695 /* Make the remote selected traceframe match GDB's selected
   7696    traceframe.  */
   7697 
   7698 static void
   7699 set_remote_traceframe (void)
   7700 {
   7701   int newnum;
   7702   struct remote_state *rs = get_remote_state ();
   7703 
   7704   if (rs->remote_traceframe_number == get_traceframe_number ())
   7705     return;
   7706 
   7707   /* Avoid recursion, remote_trace_find calls us again.  */
   7708   rs->remote_traceframe_number = get_traceframe_number ();
   7709 
   7710   newnum = target_trace_find (tfind_number,
   7711 			      get_traceframe_number (), 0, 0, NULL);
   7712 
   7713   /* Should not happen.  If it does, all bets are off.  */
   7714   if (newnum != get_traceframe_number ())
   7715     warning (_("could not set remote traceframe"));
   7716 }
   7717 
   7718 static void
   7719 remote_fetch_registers (struct target_ops *ops,
   7720 			struct regcache *regcache, int regnum)
   7721 {
   7722   struct remote_arch_state *rsa = get_remote_arch_state ();
   7723   int i;
   7724 
   7725   set_remote_traceframe ();
   7726   set_general_thread (regcache_get_ptid (regcache));
   7727 
   7728   if (regnum >= 0)
   7729     {
   7730       struct packet_reg *reg = packet_reg_from_regnum (rsa, regnum);
   7731 
   7732       gdb_assert (reg != NULL);
   7733 
   7734       /* If this register might be in the 'g' packet, try that first -
   7735 	 we are likely to read more than one register.  If this is the
   7736 	 first 'g' packet, we might be overly optimistic about its
   7737 	 contents, so fall back to 'p'.  */
   7738       if (reg->in_g_packet)
   7739 	{
   7740 	  fetch_registers_using_g (regcache);
   7741 	  if (reg->in_g_packet)
   7742 	    return;
   7743 	}
   7744 
   7745       if (fetch_register_using_p (regcache, reg))
   7746 	return;
   7747 
   7748       /* This register is not available.  */
   7749       regcache_raw_supply (regcache, reg->regnum, NULL);
   7750 
   7751       return;
   7752     }
   7753 
   7754   fetch_registers_using_g (regcache);
   7755 
   7756   for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++)
   7757     if (!rsa->regs[i].in_g_packet)
   7758       if (!fetch_register_using_p (regcache, &rsa->regs[i]))
   7759 	{
   7760 	  /* This register is not available.  */
   7761 	  regcache_raw_supply (regcache, i, NULL);
   7762 	}
   7763 }
   7764 
   7765 /* Prepare to store registers.  Since we may send them all (using a
   7766    'G' request), we have to read out the ones we don't want to change
   7767    first.  */
   7768 
   7769 static void
   7770 remote_prepare_to_store (struct target_ops *self, struct regcache *regcache)
   7771 {
   7772   struct remote_arch_state *rsa = get_remote_arch_state ();
   7773   int i;
   7774 
   7775   /* Make sure the entire registers array is valid.  */
   7776   switch (packet_support (PACKET_P))
   7777     {
   7778     case PACKET_DISABLE:
   7779     case PACKET_SUPPORT_UNKNOWN:
   7780       /* Make sure all the necessary registers are cached.  */
   7781       for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++)
   7782 	if (rsa->regs[i].in_g_packet)
   7783 	  regcache_raw_update (regcache, rsa->regs[i].regnum);
   7784       break;
   7785     case PACKET_ENABLE:
   7786       break;
   7787     }
   7788 }
   7789 
   7790 /* Helper: Attempt to store REGNUM using the P packet.  Return fail IFF
   7791    packet was not recognized.  */
   7792 
   7793 static int
   7794 store_register_using_P (const struct regcache *regcache,
   7795 			struct packet_reg *reg)
   7796 {
   7797   struct gdbarch *gdbarch = get_regcache_arch (regcache);
   7798   struct remote_state *rs = get_remote_state ();
   7799   /* Try storing a single register.  */
   7800   char *buf = rs->buf;
   7801   gdb_byte *regp = (gdb_byte *) alloca (register_size (gdbarch, reg->regnum));
   7802   char *p;
   7803 
   7804   if (packet_support (PACKET_P) == PACKET_DISABLE)
   7805     return 0;
   7806 
   7807   if (reg->pnum == -1)
   7808     return 0;
   7809 
   7810   xsnprintf (buf, get_remote_packet_size (), "P%s=", phex_nz (reg->pnum, 0));
   7811   p = buf + strlen (buf);
   7812   regcache_raw_collect (regcache, reg->regnum, regp);
   7813   bin2hex (regp, p, register_size (gdbarch, reg->regnum));
   7814   putpkt (rs->buf);
   7815   getpkt (&rs->buf, &rs->buf_size, 0);
   7816 
   7817   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_P]))
   7818     {
   7819     case PACKET_OK:
   7820       return 1;
   7821     case PACKET_ERROR:
   7822       error (_("Could not write register \"%s\"; remote failure reply '%s'"),
   7823 	     gdbarch_register_name (gdbarch, reg->regnum), rs->buf);
   7824     case PACKET_UNKNOWN:
   7825       return 0;
   7826     default:
   7827       internal_error (__FILE__, __LINE__, _("Bad result from packet_ok"));
   7828     }
   7829 }
   7830 
   7831 /* Store register REGNUM, or all registers if REGNUM == -1, from the
   7832    contents of the register cache buffer.  FIXME: ignores errors.  */
   7833 
   7834 static void
   7835 store_registers_using_G (const struct regcache *regcache)
   7836 {
   7837   struct remote_state *rs = get_remote_state ();
   7838   struct remote_arch_state *rsa = get_remote_arch_state ();
   7839   gdb_byte *regs;
   7840   char *p;
   7841 
   7842   /* Extract all the registers in the regcache copying them into a
   7843      local buffer.  */
   7844   {
   7845     int i;
   7846 
   7847     regs = (gdb_byte *) alloca (rsa->sizeof_g_packet);
   7848     memset (regs, 0, rsa->sizeof_g_packet);
   7849     for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++)
   7850       {
   7851 	struct packet_reg *r = &rsa->regs[i];
   7852 
   7853 	if (r->in_g_packet)
   7854 	  regcache_raw_collect (regcache, r->regnum, regs + r->offset);
   7855       }
   7856   }
   7857 
   7858   /* Command describes registers byte by byte,
   7859      each byte encoded as two hex characters.  */
   7860   p = rs->buf;
   7861   *p++ = 'G';
   7862   /* remote_prepare_to_store insures that rsa->sizeof_g_packet gets
   7863      updated.  */
   7864   bin2hex (regs, p, rsa->sizeof_g_packet);
   7865   putpkt (rs->buf);
   7866   getpkt (&rs->buf, &rs->buf_size, 0);
   7867   if (packet_check_result (rs->buf) == PACKET_ERROR)
   7868     error (_("Could not write registers; remote failure reply '%s'"),
   7869 	   rs->buf);
   7870 }
   7871 
   7872 /* Store register REGNUM, or all registers if REGNUM == -1, from the contents
   7873    of the register cache buffer.  FIXME: ignores errors.  */
   7874 
   7875 static void
   7876 remote_store_registers (struct target_ops *ops,
   7877 			struct regcache *regcache, int regnum)
   7878 {
   7879   struct remote_arch_state *rsa = get_remote_arch_state ();
   7880   int i;
   7881 
   7882   set_remote_traceframe ();
   7883   set_general_thread (regcache_get_ptid (regcache));
   7884 
   7885   if (regnum >= 0)
   7886     {
   7887       struct packet_reg *reg = packet_reg_from_regnum (rsa, regnum);
   7888 
   7889       gdb_assert (reg != NULL);
   7890 
   7891       /* Always prefer to store registers using the 'P' packet if
   7892 	 possible; we often change only a small number of registers.
   7893 	 Sometimes we change a larger number; we'd need help from a
   7894 	 higher layer to know to use 'G'.  */
   7895       if (store_register_using_P (regcache, reg))
   7896 	return;
   7897 
   7898       /* For now, don't complain if we have no way to write the
   7899 	 register.  GDB loses track of unavailable registers too
   7900 	 easily.  Some day, this may be an error.  We don't have
   7901 	 any way to read the register, either...  */
   7902       if (!reg->in_g_packet)
   7903 	return;
   7904 
   7905       store_registers_using_G (regcache);
   7906       return;
   7907     }
   7908 
   7909   store_registers_using_G (regcache);
   7910 
   7911   for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++)
   7912     if (!rsa->regs[i].in_g_packet)
   7913       if (!store_register_using_P (regcache, &rsa->regs[i]))
   7914 	/* See above for why we do not issue an error here.  */
   7915 	continue;
   7916 }
   7917 
   7918 
   7920 /* Return the number of hex digits in num.  */
   7921 
   7922 static int
   7923 hexnumlen (ULONGEST num)
   7924 {
   7925   int i;
   7926 
   7927   for (i = 0; num != 0; i++)
   7928     num >>= 4;
   7929 
   7930   return std::max (i, 1);
   7931 }
   7932 
   7933 /* Set BUF to the minimum number of hex digits representing NUM.  */
   7934 
   7935 static int
   7936 hexnumstr (char *buf, ULONGEST num)
   7937 {
   7938   int len = hexnumlen (num);
   7939 
   7940   return hexnumnstr (buf, num, len);
   7941 }
   7942 
   7943 
   7944 /* Set BUF to the hex digits representing NUM, padded to WIDTH characters.  */
   7945 
   7946 static int
   7947 hexnumnstr (char *buf, ULONGEST num, int width)
   7948 {
   7949   int i;
   7950 
   7951   buf[width] = '\0';
   7952 
   7953   for (i = width - 1; i >= 0; i--)
   7954     {
   7955       buf[i] = "0123456789abcdef"[(num & 0xf)];
   7956       num >>= 4;
   7957     }
   7958 
   7959   return width;
   7960 }
   7961 
   7962 /* Mask all but the least significant REMOTE_ADDRESS_SIZE bits.  */
   7963 
   7964 static CORE_ADDR
   7965 remote_address_masked (CORE_ADDR addr)
   7966 {
   7967   unsigned int address_size = remote_address_size;
   7968 
   7969   /* If "remoteaddresssize" was not set, default to target address size.  */
   7970   if (!address_size)
   7971     address_size = gdbarch_addr_bit (target_gdbarch ());
   7972 
   7973   if (address_size > 0
   7974       && address_size < (sizeof (ULONGEST) * 8))
   7975     {
   7976       /* Only create a mask when that mask can safely be constructed
   7977          in a ULONGEST variable.  */
   7978       ULONGEST mask = 1;
   7979 
   7980       mask = (mask << address_size) - 1;
   7981       addr &= mask;
   7982     }
   7983   return addr;
   7984 }
   7985 
   7986 /* Determine whether the remote target supports binary downloading.
   7987    This is accomplished by sending a no-op memory write of zero length
   7988    to the target at the specified address. It does not suffice to send
   7989    the whole packet, since many stubs strip the eighth bit and
   7990    subsequently compute a wrong checksum, which causes real havoc with
   7991    remote_write_bytes.
   7992 
   7993    NOTE: This can still lose if the serial line is not eight-bit
   7994    clean.  In cases like this, the user should clear "remote
   7995    X-packet".  */
   7996 
   7997 static void
   7998 check_binary_download (CORE_ADDR addr)
   7999 {
   8000   struct remote_state *rs = get_remote_state ();
   8001 
   8002   switch (packet_support (PACKET_X))
   8003     {
   8004     case PACKET_DISABLE:
   8005       break;
   8006     case PACKET_ENABLE:
   8007       break;
   8008     case PACKET_SUPPORT_UNKNOWN:
   8009       {
   8010 	char *p;
   8011 
   8012 	p = rs->buf;
   8013 	*p++ = 'X';
   8014 	p += hexnumstr (p, (ULONGEST) addr);
   8015 	*p++ = ',';
   8016 	p += hexnumstr (p, (ULONGEST) 0);
   8017 	*p++ = ':';
   8018 	*p = '\0';
   8019 
   8020 	putpkt_binary (rs->buf, (int) (p - rs->buf));
   8021 	getpkt (&rs->buf, &rs->buf_size, 0);
   8022 
   8023 	if (rs->buf[0] == '\0')
   8024 	  {
   8025 	    if (remote_debug)
   8026 	      fprintf_unfiltered (gdb_stdlog,
   8027 				  "binary downloading NOT "
   8028 				  "supported by target\n");
   8029 	    remote_protocol_packets[PACKET_X].support = PACKET_DISABLE;
   8030 	  }
   8031 	else
   8032 	  {
   8033 	    if (remote_debug)
   8034 	      fprintf_unfiltered (gdb_stdlog,
   8035 				  "binary downloading supported by target\n");
   8036 	    remote_protocol_packets[PACKET_X].support = PACKET_ENABLE;
   8037 	  }
   8038 	break;
   8039       }
   8040     }
   8041 }
   8042 
   8043 /* Helper function to resize the payload in order to try to get a good
   8044    alignment.  We try to write an amount of data such that the next write will
   8045    start on an address aligned on REMOTE_ALIGN_WRITES.  */
   8046 
   8047 static int
   8048 align_for_efficient_write (int todo, CORE_ADDR memaddr)
   8049 {
   8050   return ((memaddr + todo) & ~(REMOTE_ALIGN_WRITES - 1)) - memaddr;
   8051 }
   8052 
   8053 /* Write memory data directly to the remote machine.
   8054    This does not inform the data cache; the data cache uses this.
   8055    HEADER is the starting part of the packet.
   8056    MEMADDR is the address in the remote memory space.
   8057    MYADDR is the address of the buffer in our space.
   8058    LEN_UNITS is the number of addressable units to write.
   8059    UNIT_SIZE is the length in bytes of an addressable unit.
   8060    PACKET_FORMAT should be either 'X' or 'M', and indicates if we
   8061    should send data as binary ('X'), or hex-encoded ('M').
   8062 
   8063    The function creates packet of the form
   8064        <HEADER><ADDRESS>,<LENGTH>:<DATA>
   8065 
   8066    where encoding of <DATA> is terminated by PACKET_FORMAT.
   8067 
   8068    If USE_LENGTH is 0, then the <LENGTH> field and the preceding comma
   8069    are omitted.
   8070 
   8071    Return the transferred status, error or OK (an
   8072    'enum target_xfer_status' value).  Save the number of addressable units
   8073    transferred in *XFERED_LEN_UNITS.  Only transfer a single packet.
   8074 
   8075    On a platform with an addressable memory size of 2 bytes (UNIT_SIZE == 2), an
   8076    exchange between gdb and the stub could look like (?? in place of the
   8077    checksum):
   8078 
   8079    -> $m1000,4#??
   8080    <- aaaabbbbccccdddd
   8081 
   8082    -> $M1000,3:eeeeffffeeee#??
   8083    <- OK
   8084 
   8085    -> $m1000,4#??
   8086    <- eeeeffffeeeedddd  */
   8087 
   8088 static enum target_xfer_status
   8089 remote_write_bytes_aux (const char *header, CORE_ADDR memaddr,
   8090 			const gdb_byte *myaddr, ULONGEST len_units,
   8091 			int unit_size, ULONGEST *xfered_len_units,
   8092 			char packet_format, int use_length)
   8093 {
   8094   struct remote_state *rs = get_remote_state ();
   8095   char *p;
   8096   char *plen = NULL;
   8097   int plenlen = 0;
   8098   int todo_units;
   8099   int units_written;
   8100   int payload_capacity_bytes;
   8101   int payload_length_bytes;
   8102 
   8103   if (packet_format != 'X' && packet_format != 'M')
   8104     internal_error (__FILE__, __LINE__,
   8105 		    _("remote_write_bytes_aux: bad packet format"));
   8106 
   8107   if (len_units == 0)
   8108     return TARGET_XFER_EOF;
   8109 
   8110   payload_capacity_bytes = get_memory_write_packet_size ();
   8111 
   8112   /* The packet buffer will be large enough for the payload;
   8113      get_memory_packet_size ensures this.  */
   8114   rs->buf[0] = '\0';
   8115 
   8116   /* Compute the size of the actual payload by subtracting out the
   8117      packet header and footer overhead: "$M<memaddr>,<len>:...#nn".  */
   8118 
   8119   payload_capacity_bytes -= strlen ("$,:#NN");
   8120   if (!use_length)
   8121     /* The comma won't be used.  */
   8122     payload_capacity_bytes += 1;
   8123   payload_capacity_bytes -= strlen (header);
   8124   payload_capacity_bytes -= hexnumlen (memaddr);
   8125 
   8126   /* Construct the packet excluding the data: "<header><memaddr>,<len>:".  */
   8127 
   8128   strcat (rs->buf, header);
   8129   p = rs->buf + strlen (header);
   8130 
   8131   /* Compute a best guess of the number of bytes actually transfered.  */
   8132   if (packet_format == 'X')
   8133     {
   8134       /* Best guess at number of bytes that will fit.  */
   8135       todo_units = std::min (len_units,
   8136 			     (ULONGEST) payload_capacity_bytes / unit_size);
   8137       if (use_length)
   8138 	payload_capacity_bytes -= hexnumlen (todo_units);
   8139       todo_units = std::min (todo_units, payload_capacity_bytes / unit_size);
   8140     }
   8141   else
   8142     {
   8143       /* Number of bytes that will fit.  */
   8144       todo_units
   8145 	= std::min (len_units,
   8146 		    (ULONGEST) (payload_capacity_bytes / unit_size) / 2);
   8147       if (use_length)
   8148 	payload_capacity_bytes -= hexnumlen (todo_units);
   8149       todo_units = std::min (todo_units,
   8150 			     (payload_capacity_bytes / unit_size) / 2);
   8151     }
   8152 
   8153   if (todo_units <= 0)
   8154     internal_error (__FILE__, __LINE__,
   8155 		    _("minimum packet size too small to write data"));
   8156 
   8157   /* If we already need another packet, then try to align the end
   8158      of this packet to a useful boundary.  */
   8159   if (todo_units > 2 * REMOTE_ALIGN_WRITES && todo_units < len_units)
   8160     todo_units = align_for_efficient_write (todo_units, memaddr);
   8161 
   8162   /* Append "<memaddr>".  */
   8163   memaddr = remote_address_masked (memaddr);
   8164   p += hexnumstr (p, (ULONGEST) memaddr);
   8165 
   8166   if (use_length)
   8167     {
   8168       /* Append ",".  */
   8169       *p++ = ',';
   8170 
   8171       /* Append the length and retain its location and size.  It may need to be
   8172          adjusted once the packet body has been created.  */
   8173       plen = p;
   8174       plenlen = hexnumstr (p, (ULONGEST) todo_units);
   8175       p += plenlen;
   8176     }
   8177 
   8178   /* Append ":".  */
   8179   *p++ = ':';
   8180   *p = '\0';
   8181 
   8182   /* Append the packet body.  */
   8183   if (packet_format == 'X')
   8184     {
   8185       /* Binary mode.  Send target system values byte by byte, in
   8186 	 increasing byte addresses.  Only escape certain critical
   8187 	 characters.  */
   8188       payload_length_bytes =
   8189 	  remote_escape_output (myaddr, todo_units, unit_size, (gdb_byte *) p,
   8190 				&units_written, payload_capacity_bytes);
   8191 
   8192       /* If not all TODO units fit, then we'll need another packet.  Make
   8193 	 a second try to keep the end of the packet aligned.  Don't do
   8194 	 this if the packet is tiny.  */
   8195       if (units_written < todo_units && units_written > 2 * REMOTE_ALIGN_WRITES)
   8196 	{
   8197 	  int new_todo_units;
   8198 
   8199 	  new_todo_units = align_for_efficient_write (units_written, memaddr);
   8200 
   8201 	  if (new_todo_units != units_written)
   8202 	    payload_length_bytes =
   8203 		remote_escape_output (myaddr, new_todo_units, unit_size,
   8204 				      (gdb_byte *) p, &units_written,
   8205 				      payload_capacity_bytes);
   8206 	}
   8207 
   8208       p += payload_length_bytes;
   8209       if (use_length && units_written < todo_units)
   8210 	{
   8211 	  /* Escape chars have filled up the buffer prematurely,
   8212 	     and we have actually sent fewer units than planned.
   8213 	     Fix-up the length field of the packet.  Use the same
   8214 	     number of characters as before.  */
   8215 	  plen += hexnumnstr (plen, (ULONGEST) units_written,
   8216 			      plenlen);
   8217 	  *plen = ':';  /* overwrite \0 from hexnumnstr() */
   8218 	}
   8219     }
   8220   else
   8221     {
   8222       /* Normal mode: Send target system values byte by byte, in
   8223 	 increasing byte addresses.  Each byte is encoded as a two hex
   8224 	 value.  */
   8225       p += 2 * bin2hex (myaddr, p, todo_units * unit_size);
   8226       units_written = todo_units;
   8227     }
   8228 
   8229   putpkt_binary (rs->buf, (int) (p - rs->buf));
   8230   getpkt (&rs->buf, &rs->buf_size, 0);
   8231 
   8232   if (rs->buf[0] == 'E')
   8233     return TARGET_XFER_E_IO;
   8234 
   8235   /* Return UNITS_WRITTEN, not TODO_UNITS, in case escape chars caused us to
   8236      send fewer units than we'd planned.  */
   8237   *xfered_len_units = (ULONGEST) units_written;
   8238   return TARGET_XFER_OK;
   8239 }
   8240 
   8241 /* Write memory data directly to the remote machine.
   8242    This does not inform the data cache; the data cache uses this.
   8243    MEMADDR is the address in the remote memory space.
   8244    MYADDR is the address of the buffer in our space.
   8245    LEN is the number of bytes.
   8246 
   8247    Return the transferred status, error or OK (an
   8248    'enum target_xfer_status' value).  Save the number of bytes
   8249    transferred in *XFERED_LEN.  Only transfer a single packet.  */
   8250 
   8251 static enum target_xfer_status
   8252 remote_write_bytes (CORE_ADDR memaddr, const gdb_byte *myaddr, ULONGEST len,
   8253 		    int unit_size, ULONGEST *xfered_len)
   8254 {
   8255   const char *packet_format = NULL;
   8256 
   8257   /* Check whether the target supports binary download.  */
   8258   check_binary_download (memaddr);
   8259 
   8260   switch (packet_support (PACKET_X))
   8261     {
   8262     case PACKET_ENABLE:
   8263       packet_format = "X";
   8264       break;
   8265     case PACKET_DISABLE:
   8266       packet_format = "M";
   8267       break;
   8268     case PACKET_SUPPORT_UNKNOWN:
   8269       internal_error (__FILE__, __LINE__,
   8270 		      _("remote_write_bytes: bad internal state"));
   8271     default:
   8272       internal_error (__FILE__, __LINE__, _("bad switch"));
   8273     }
   8274 
   8275   return remote_write_bytes_aux (packet_format,
   8276 				 memaddr, myaddr, len, unit_size, xfered_len,
   8277 				 packet_format[0], 1);
   8278 }
   8279 
   8280 /* Read memory data directly from the remote machine.
   8281    This does not use the data cache; the data cache uses this.
   8282    MEMADDR is the address in the remote memory space.
   8283    MYADDR is the address of the buffer in our space.
   8284    LEN_UNITS is the number of addressable memory units to read..
   8285    UNIT_SIZE is the length in bytes of an addressable unit.
   8286 
   8287    Return the transferred status, error or OK (an
   8288    'enum target_xfer_status' value).  Save the number of bytes
   8289    transferred in *XFERED_LEN_UNITS.
   8290 
   8291    See the comment of remote_write_bytes_aux for an example of
   8292    memory read/write exchange between gdb and the stub.  */
   8293 
   8294 static enum target_xfer_status
   8295 remote_read_bytes_1 (CORE_ADDR memaddr, gdb_byte *myaddr, ULONGEST len_units,
   8296 		     int unit_size, ULONGEST *xfered_len_units)
   8297 {
   8298   struct remote_state *rs = get_remote_state ();
   8299   int buf_size_bytes;		/* Max size of packet output buffer.  */
   8300   char *p;
   8301   int todo_units;
   8302   int decoded_bytes;
   8303 
   8304   buf_size_bytes = get_memory_read_packet_size ();
   8305   /* The packet buffer will be large enough for the payload;
   8306      get_memory_packet_size ensures this.  */
   8307 
   8308   /* Number of units that will fit.  */
   8309   todo_units = std::min (len_units,
   8310 			 (ULONGEST) (buf_size_bytes / unit_size) / 2);
   8311 
   8312   /* Construct "m"<memaddr>","<len>".  */
   8313   memaddr = remote_address_masked (memaddr);
   8314   p = rs->buf;
   8315   *p++ = 'm';
   8316   p += hexnumstr (p, (ULONGEST) memaddr);
   8317   *p++ = ',';
   8318   p += hexnumstr (p, (ULONGEST) todo_units);
   8319   *p = '\0';
   8320   putpkt (rs->buf);
   8321   getpkt (&rs->buf, &rs->buf_size, 0);
   8322   if (rs->buf[0] == 'E'
   8323       && isxdigit (rs->buf[1]) && isxdigit (rs->buf[2])
   8324       && rs->buf[3] == '\0')
   8325     return TARGET_XFER_E_IO;
   8326   /* Reply describes memory byte by byte, each byte encoded as two hex
   8327      characters.  */
   8328   p = rs->buf;
   8329   decoded_bytes = hex2bin (p, myaddr, todo_units * unit_size);
   8330   /* Return what we have.  Let higher layers handle partial reads.  */
   8331   *xfered_len_units = (ULONGEST) (decoded_bytes / unit_size);
   8332   return TARGET_XFER_OK;
   8333 }
   8334 
   8335 /* Using the set of read-only target sections of remote, read live
   8336    read-only memory.
   8337 
   8338    For interface/parameters/return description see target.h,
   8339    to_xfer_partial.  */
   8340 
   8341 static enum target_xfer_status
   8342 remote_xfer_live_readonly_partial (struct target_ops *ops, gdb_byte *readbuf,
   8343 				   ULONGEST memaddr, ULONGEST len,
   8344 				   int unit_size, ULONGEST *xfered_len)
   8345 {
   8346   struct target_section *secp;
   8347   struct target_section_table *table;
   8348 
   8349   secp = target_section_by_addr (ops, memaddr);
   8350   if (secp != NULL
   8351       && (bfd_get_section_flags (secp->the_bfd_section->owner,
   8352 				 secp->the_bfd_section)
   8353 	  & SEC_READONLY))
   8354     {
   8355       struct target_section *p;
   8356       ULONGEST memend = memaddr + len;
   8357 
   8358       table = target_get_section_table (ops);
   8359 
   8360       for (p = table->sections; p < table->sections_end; p++)
   8361 	{
   8362 	  if (memaddr >= p->addr)
   8363 	    {
   8364 	      if (memend <= p->endaddr)
   8365 		{
   8366 		  /* Entire transfer is within this section.  */
   8367 		  return remote_read_bytes_1 (memaddr, readbuf, len, unit_size,
   8368 					      xfered_len);
   8369 		}
   8370 	      else if (memaddr >= p->endaddr)
   8371 		{
   8372 		  /* This section ends before the transfer starts.  */
   8373 		  continue;
   8374 		}
   8375 	      else
   8376 		{
   8377 		  /* This section overlaps the transfer.  Just do half.  */
   8378 		  len = p->endaddr - memaddr;
   8379 		  return remote_read_bytes_1 (memaddr, readbuf, len, unit_size,
   8380 					      xfered_len);
   8381 		}
   8382 	    }
   8383 	}
   8384     }
   8385 
   8386   return TARGET_XFER_EOF;
   8387 }
   8388 
   8389 /* Similar to remote_read_bytes_1, but it reads from the remote stub
   8390    first if the requested memory is unavailable in traceframe.
   8391    Otherwise, fall back to remote_read_bytes_1.  */
   8392 
   8393 static enum target_xfer_status
   8394 remote_read_bytes (struct target_ops *ops, CORE_ADDR memaddr,
   8395 		   gdb_byte *myaddr, ULONGEST len, int unit_size,
   8396 		   ULONGEST *xfered_len)
   8397 {
   8398   if (len == 0)
   8399     return TARGET_XFER_EOF;
   8400 
   8401   if (get_traceframe_number () != -1)
   8402     {
   8403       VEC(mem_range_s) *available;
   8404 
   8405       /* If we fail to get the set of available memory, then the
   8406 	 target does not support querying traceframe info, and so we
   8407 	 attempt reading from the traceframe anyway (assuming the
   8408 	 target implements the old QTro packet then).  */
   8409       if (traceframe_available_memory (&available, memaddr, len))
   8410 	{
   8411 	  struct cleanup *old_chain;
   8412 
   8413 	  old_chain = make_cleanup (VEC_cleanup(mem_range_s), &available);
   8414 
   8415 	  if (VEC_empty (mem_range_s, available)
   8416 	      || VEC_index (mem_range_s, available, 0)->start != memaddr)
   8417 	    {
   8418 	      enum target_xfer_status res;
   8419 
   8420 	      /* Don't read into the traceframe's available
   8421 		 memory.  */
   8422 	      if (!VEC_empty (mem_range_s, available))
   8423 		{
   8424 		  LONGEST oldlen = len;
   8425 
   8426 		  len = VEC_index (mem_range_s, available, 0)->start - memaddr;
   8427 		  gdb_assert (len <= oldlen);
   8428 		}
   8429 
   8430 	      do_cleanups (old_chain);
   8431 
   8432 	      /* This goes through the topmost target again.  */
   8433 	      res = remote_xfer_live_readonly_partial (ops, myaddr, memaddr,
   8434 						       len, unit_size, xfered_len);
   8435 	      if (res == TARGET_XFER_OK)
   8436 		return TARGET_XFER_OK;
   8437 	      else
   8438 		{
   8439 		  /* No use trying further, we know some memory starting
   8440 		     at MEMADDR isn't available.  */
   8441 		  *xfered_len = len;
   8442 		  return TARGET_XFER_UNAVAILABLE;
   8443 		}
   8444 	    }
   8445 
   8446 	  /* Don't try to read more than how much is available, in
   8447 	     case the target implements the deprecated QTro packet to
   8448 	     cater for older GDBs (the target's knowledge of read-only
   8449 	     sections may be outdated by now).  */
   8450 	  len = VEC_index (mem_range_s, available, 0)->length;
   8451 
   8452 	  do_cleanups (old_chain);
   8453 	}
   8454     }
   8455 
   8456   return remote_read_bytes_1 (memaddr, myaddr, len, unit_size, xfered_len);
   8457 }
   8458 
   8459 
   8460 
   8462 /* Sends a packet with content determined by the printf format string
   8463    FORMAT and the remaining arguments, then gets the reply.  Returns
   8464    whether the packet was a success, a failure, or unknown.  */
   8465 
   8466 static enum packet_result remote_send_printf (const char *format, ...)
   8467   ATTRIBUTE_PRINTF (1, 2);
   8468 
   8469 static enum packet_result
   8470 remote_send_printf (const char *format, ...)
   8471 {
   8472   struct remote_state *rs = get_remote_state ();
   8473   int max_size = get_remote_packet_size ();
   8474   va_list ap;
   8475 
   8476   va_start (ap, format);
   8477 
   8478   rs->buf[0] = '\0';
   8479   if (vsnprintf (rs->buf, max_size, format, ap) >= max_size)
   8480     internal_error (__FILE__, __LINE__, _("Too long remote packet."));
   8481 
   8482   if (putpkt (rs->buf) < 0)
   8483     error (_("Communication problem with target."));
   8484 
   8485   rs->buf[0] = '\0';
   8486   getpkt (&rs->buf, &rs->buf_size, 0);
   8487 
   8488   return packet_check_result (rs->buf);
   8489 }
   8490 
   8491 static void
   8492 restore_remote_timeout (void *p)
   8493 {
   8494   int value = *(int *)p;
   8495 
   8496   remote_timeout = value;
   8497 }
   8498 
   8499 /* Flash writing can take quite some time.  We'll set
   8500    effectively infinite timeout for flash operations.
   8501    In future, we'll need to decide on a better approach.  */
   8502 static const int remote_flash_timeout = 1000;
   8503 
   8504 static void
   8505 remote_flash_erase (struct target_ops *ops,
   8506                     ULONGEST address, LONGEST length)
   8507 {
   8508   int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
   8509   int saved_remote_timeout = remote_timeout;
   8510   enum packet_result ret;
   8511   struct cleanup *back_to = make_cleanup (restore_remote_timeout,
   8512                                           &saved_remote_timeout);
   8513 
   8514   remote_timeout = remote_flash_timeout;
   8515 
   8516   ret = remote_send_printf ("vFlashErase:%s,%s",
   8517 			    phex (address, addr_size),
   8518 			    phex (length, 4));
   8519   switch (ret)
   8520     {
   8521     case PACKET_UNKNOWN:
   8522       error (_("Remote target does not support flash erase"));
   8523     case PACKET_ERROR:
   8524       error (_("Error erasing flash with vFlashErase packet"));
   8525     default:
   8526       break;
   8527     }
   8528 
   8529   do_cleanups (back_to);
   8530 }
   8531 
   8532 static enum target_xfer_status
   8533 remote_flash_write (struct target_ops *ops, ULONGEST address,
   8534 		    ULONGEST length, ULONGEST *xfered_len,
   8535 		    const gdb_byte *data)
   8536 {
   8537   int saved_remote_timeout = remote_timeout;
   8538   enum target_xfer_status ret;
   8539   struct cleanup *back_to = make_cleanup (restore_remote_timeout,
   8540 					  &saved_remote_timeout);
   8541 
   8542   remote_timeout = remote_flash_timeout;
   8543   ret = remote_write_bytes_aux ("vFlashWrite:", address, data, length, 1,
   8544 				xfered_len,'X', 0);
   8545   do_cleanups (back_to);
   8546 
   8547   return ret;
   8548 }
   8549 
   8550 static void
   8551 remote_flash_done (struct target_ops *ops)
   8552 {
   8553   int saved_remote_timeout = remote_timeout;
   8554   int ret;
   8555   struct cleanup *back_to = make_cleanup (restore_remote_timeout,
   8556                                           &saved_remote_timeout);
   8557 
   8558   remote_timeout = remote_flash_timeout;
   8559   ret = remote_send_printf ("vFlashDone");
   8560   do_cleanups (back_to);
   8561 
   8562   switch (ret)
   8563     {
   8564     case PACKET_UNKNOWN:
   8565       error (_("Remote target does not support vFlashDone"));
   8566     case PACKET_ERROR:
   8567       error (_("Error finishing flash operation"));
   8568     default:
   8569       break;
   8570     }
   8571 }
   8572 
   8573 static void
   8574 remote_files_info (struct target_ops *ignore)
   8575 {
   8576   puts_filtered ("Debugging a target over a serial line.\n");
   8577 }
   8578 
   8579 /* Stuff for dealing with the packets which are part of this protocol.
   8581    See comment at top of file for details.  */
   8582 
   8583 /* Close/unpush the remote target, and throw a TARGET_CLOSE_ERROR
   8584    error to higher layers.  Called when a serial error is detected.
   8585    The exception message is STRING, followed by a colon and a blank,
   8586    the system error message for errno at function entry and final dot
   8587    for output compatibility with throw_perror_with_name.  */
   8588 
   8589 static void
   8590 unpush_and_perror (const char *string)
   8591 {
   8592   int saved_errno = errno;
   8593 
   8594   remote_unpush_target ();
   8595   throw_error (TARGET_CLOSE_ERROR, "%s: %s.", string,
   8596 	       safe_strerror (saved_errno));
   8597 }
   8598 
   8599 /* Read a single character from the remote end.  The current quit
   8600    handler is overridden to avoid quitting in the middle of packet
   8601    sequence, as that would break communication with the remote server.
   8602    See remote_serial_quit_handler for more detail.  */
   8603 
   8604 static int
   8605 readchar (int timeout)
   8606 {
   8607   int ch;
   8608   struct remote_state *rs = get_remote_state ();
   8609   struct cleanup *old_chain;
   8610 
   8611   old_chain = make_cleanup_override_quit_handler (remote_serial_quit_handler);
   8612 
   8613   rs->got_ctrlc_during_io = 0;
   8614 
   8615   ch = serial_readchar (rs->remote_desc, timeout);
   8616 
   8617   if (rs->got_ctrlc_during_io)
   8618     set_quit_flag ();
   8619 
   8620   do_cleanups (old_chain);
   8621 
   8622   if (ch >= 0)
   8623     return ch;
   8624 
   8625   switch ((enum serial_rc) ch)
   8626     {
   8627     case SERIAL_EOF:
   8628       remote_unpush_target ();
   8629       throw_error (TARGET_CLOSE_ERROR, _("Remote connection closed"));
   8630       /* no return */
   8631     case SERIAL_ERROR:
   8632       unpush_and_perror (_("Remote communication error.  "
   8633 			   "Target disconnected."));
   8634       /* no return */
   8635     case SERIAL_TIMEOUT:
   8636       break;
   8637     }
   8638   return ch;
   8639 }
   8640 
   8641 /* Wrapper for serial_write that closes the target and throws if
   8642    writing fails.  The current quit handler is overridden to avoid
   8643    quitting in the middle of packet sequence, as that would break
   8644    communication with the remote server.  See
   8645    remote_serial_quit_handler for more detail.  */
   8646 
   8647 static void
   8648 remote_serial_write (const char *str, int len)
   8649 {
   8650   struct remote_state *rs = get_remote_state ();
   8651   struct cleanup *old_chain;
   8652 
   8653   old_chain = make_cleanup_override_quit_handler (remote_serial_quit_handler);
   8654 
   8655   rs->got_ctrlc_during_io = 0;
   8656 
   8657   if (serial_write (rs->remote_desc, str, len))
   8658     {
   8659       unpush_and_perror (_("Remote communication error.  "
   8660 			   "Target disconnected."));
   8661     }
   8662 
   8663   if (rs->got_ctrlc_during_io)
   8664     set_quit_flag ();
   8665 
   8666   do_cleanups (old_chain);
   8667 }
   8668 
   8669 /* Send the command in *BUF to the remote machine, and read the reply
   8670    into *BUF.  Report an error if we get an error reply.  Resize
   8671    *BUF using xrealloc if necessary to hold the result, and update
   8672    *SIZEOF_BUF.  */
   8673 
   8674 static void
   8675 remote_send (char **buf,
   8676 	     long *sizeof_buf)
   8677 {
   8678   putpkt (*buf);
   8679   getpkt (buf, sizeof_buf, 0);
   8680 
   8681   if ((*buf)[0] == 'E')
   8682     error (_("Remote failure reply: %s"), *buf);
   8683 }
   8684 
   8685 /* Return a string representing an escaped version of BUF, of len N.
   8686    E.g. \n is converted to \\n, \t to \\t, etc.  */
   8687 
   8688 static std::string
   8689 escape_buffer (const char *buf, int n)
   8690 {
   8691   string_file stb;
   8692 
   8693   stb.putstrn (buf, n, '\\');
   8694   return std::move (stb.string ());
   8695 }
   8696 
   8697 /* Display a null-terminated packet on stdout, for debugging, using C
   8698    string notation.  */
   8699 
   8700 static void
   8701 print_packet (const char *buf)
   8702 {
   8703   puts_filtered ("\"");
   8704   fputstr_filtered (buf, '"', gdb_stdout);
   8705   puts_filtered ("\"");
   8706 }
   8707 
   8708 int
   8709 putpkt (const char *buf)
   8710 {
   8711   return putpkt_binary (buf, strlen (buf));
   8712 }
   8713 
   8714 /* Send a packet to the remote machine, with error checking.  The data
   8715    of the packet is in BUF.  The string in BUF can be at most
   8716    get_remote_packet_size () - 5 to account for the $, # and checksum,
   8717    and for a possible /0 if we are debugging (remote_debug) and want
   8718    to print the sent packet as a string.  */
   8719 
   8720 static int
   8721 putpkt_binary (const char *buf, int cnt)
   8722 {
   8723   struct remote_state *rs = get_remote_state ();
   8724   int i;
   8725   unsigned char csum = 0;
   8726   char *buf2 = (char *) xmalloc (cnt + 6);
   8727   struct cleanup *old_chain = make_cleanup (xfree, buf2);
   8728 
   8729   int ch;
   8730   int tcount = 0;
   8731   char *p;
   8732 
   8733   /* Catch cases like trying to read memory or listing threads while
   8734      we're waiting for a stop reply.  The remote server wouldn't be
   8735      ready to handle this request, so we'd hang and timeout.  We don't
   8736      have to worry about this in synchronous mode, because in that
   8737      case it's not possible to issue a command while the target is
   8738      running.  This is not a problem in non-stop mode, because in that
   8739      case, the stub is always ready to process serial input.  */
   8740   if (!target_is_non_stop_p ()
   8741       && target_is_async_p ()
   8742       && rs->waiting_for_stop_reply)
   8743     {
   8744       error (_("Cannot execute this command while the target is running.\n"
   8745 	       "Use the \"interrupt\" command to stop the target\n"
   8746 	       "and then try again."));
   8747     }
   8748 
   8749   /* We're sending out a new packet.  Make sure we don't look at a
   8750      stale cached response.  */
   8751   rs->cached_wait_status = 0;
   8752 
   8753   /* Copy the packet into buffer BUF2, encapsulating it
   8754      and giving it a checksum.  */
   8755 
   8756   p = buf2;
   8757   *p++ = '$';
   8758 
   8759   for (i = 0; i < cnt; i++)
   8760     {
   8761       csum += buf[i];
   8762       *p++ = buf[i];
   8763     }
   8764   *p++ = '#';
   8765   *p++ = tohex ((csum >> 4) & 0xf);
   8766   *p++ = tohex (csum & 0xf);
   8767 
   8768   /* Send it over and over until we get a positive ack.  */
   8769 
   8770   while (1)
   8771     {
   8772       int started_error_output = 0;
   8773 
   8774       if (remote_debug)
   8775 	{
   8776 	  *p = '\0';
   8777 
   8778 	  int len = (int) (p - buf2);
   8779 
   8780 	  std::string str
   8781 	    = escape_buffer (buf2, std::min (len, REMOTE_DEBUG_MAX_CHAR));
   8782 
   8783 	  fprintf_unfiltered (gdb_stdlog, "Sending packet: %s", str.c_str ());
   8784 
   8785 	  if (str.length () > REMOTE_DEBUG_MAX_CHAR)
   8786 	    {
   8787 	      fprintf_unfiltered (gdb_stdlog, "[%zu bytes omitted]",
   8788 				  str.length () - REMOTE_DEBUG_MAX_CHAR);
   8789 	    }
   8790 
   8791 	  fprintf_unfiltered (gdb_stdlog, "...");
   8792 
   8793 	  gdb_flush (gdb_stdlog);
   8794 	}
   8795       remote_serial_write (buf2, p - buf2);
   8796 
   8797       /* If this is a no acks version of the remote protocol, send the
   8798 	 packet and move on.  */
   8799       if (rs->noack_mode)
   8800         break;
   8801 
   8802       /* Read until either a timeout occurs (-2) or '+' is read.
   8803 	 Handle any notification that arrives in the mean time.  */
   8804       while (1)
   8805 	{
   8806 	  ch = readchar (remote_timeout);
   8807 
   8808 	  if (remote_debug)
   8809 	    {
   8810 	      switch (ch)
   8811 		{
   8812 		case '+':
   8813 		case '-':
   8814 		case SERIAL_TIMEOUT:
   8815 		case '$':
   8816 		case '%':
   8817 		  if (started_error_output)
   8818 		    {
   8819 		      putchar_unfiltered ('\n');
   8820 		      started_error_output = 0;
   8821 		    }
   8822 		}
   8823 	    }
   8824 
   8825 	  switch (ch)
   8826 	    {
   8827 	    case '+':
   8828 	      if (remote_debug)
   8829 		fprintf_unfiltered (gdb_stdlog, "Ack\n");
   8830 	      do_cleanups (old_chain);
   8831 	      return 1;
   8832 	    case '-':
   8833 	      if (remote_debug)
   8834 		fprintf_unfiltered (gdb_stdlog, "Nak\n");
   8835 	      /* FALLTHROUGH */
   8836 	    case SERIAL_TIMEOUT:
   8837 	      tcount++;
   8838 	      if (tcount > 3)
   8839 		{
   8840 		  do_cleanups (old_chain);
   8841 		  return 0;
   8842 		}
   8843 	      break;		/* Retransmit buffer.  */
   8844 	    case '$':
   8845 	      {
   8846 	        if (remote_debug)
   8847 		  fprintf_unfiltered (gdb_stdlog,
   8848 				      "Packet instead of Ack, ignoring it\n");
   8849 		/* It's probably an old response sent because an ACK
   8850 		   was lost.  Gobble up the packet and ack it so it
   8851 		   doesn't get retransmitted when we resend this
   8852 		   packet.  */
   8853 		skip_frame ();
   8854 		remote_serial_write ("+", 1);
   8855 		continue;	/* Now, go look for +.  */
   8856 	      }
   8857 
   8858 	    case '%':
   8859 	      {
   8860 		int val;
   8861 
   8862 		/* If we got a notification, handle it, and go back to looking
   8863 		   for an ack.  */
   8864 		/* We've found the start of a notification.  Now
   8865 		   collect the data.  */
   8866 		val = read_frame (&rs->buf, &rs->buf_size);
   8867 		if (val >= 0)
   8868 		  {
   8869 		    if (remote_debug)
   8870 		      {
   8871 			std::string str = escape_buffer (rs->buf, val);
   8872 
   8873 			fprintf_unfiltered (gdb_stdlog,
   8874 					    "  Notification received: %s\n",
   8875 					    str.c_str ());
   8876 		      }
   8877 		    handle_notification (rs->notif_state, rs->buf);
   8878 		    /* We're in sync now, rewait for the ack.  */
   8879 		    tcount = 0;
   8880 		  }
   8881 		else
   8882 		  {
   8883 		    if (remote_debug)
   8884 		      {
   8885 			if (!started_error_output)
   8886 			  {
   8887 			    started_error_output = 1;
   8888 			    fprintf_unfiltered (gdb_stdlog, "putpkt: Junk: ");
   8889 			  }
   8890 			fputc_unfiltered (ch & 0177, gdb_stdlog);
   8891 			fprintf_unfiltered (gdb_stdlog, "%s", rs->buf);
   8892 		      }
   8893 		  }
   8894 		continue;
   8895 	      }
   8896 	      /* fall-through */
   8897 	    default:
   8898 	      if (remote_debug)
   8899 		{
   8900 		  if (!started_error_output)
   8901 		    {
   8902 		      started_error_output = 1;
   8903 		      fprintf_unfiltered (gdb_stdlog, "putpkt: Junk: ");
   8904 		    }
   8905 		  fputc_unfiltered (ch & 0177, gdb_stdlog);
   8906 		}
   8907 	      continue;
   8908 	    }
   8909 	  break;		/* Here to retransmit.  */
   8910 	}
   8911 
   8912 #if 0
   8913       /* This is wrong.  If doing a long backtrace, the user should be
   8914          able to get out next time we call QUIT, without anything as
   8915          violent as interrupt_query.  If we want to provide a way out of
   8916          here without getting to the next QUIT, it should be based on
   8917          hitting ^C twice as in remote_wait.  */
   8918       if (quit_flag)
   8919 	{
   8920 	  quit_flag = 0;
   8921 	  interrupt_query ();
   8922 	}
   8923 #endif
   8924     }
   8925 
   8926   do_cleanups (old_chain);
   8927   return 0;
   8928 }
   8929 
   8930 /* Come here after finding the start of a frame when we expected an
   8931    ack.  Do our best to discard the rest of this packet.  */
   8932 
   8933 static void
   8934 skip_frame (void)
   8935 {
   8936   int c;
   8937 
   8938   while (1)
   8939     {
   8940       c = readchar (remote_timeout);
   8941       switch (c)
   8942 	{
   8943 	case SERIAL_TIMEOUT:
   8944 	  /* Nothing we can do.  */
   8945 	  return;
   8946 	case '#':
   8947 	  /* Discard the two bytes of checksum and stop.  */
   8948 	  c = readchar (remote_timeout);
   8949 	  if (c >= 0)
   8950 	    c = readchar (remote_timeout);
   8951 
   8952 	  return;
   8953 	case '*':		/* Run length encoding.  */
   8954 	  /* Discard the repeat count.  */
   8955 	  c = readchar (remote_timeout);
   8956 	  if (c < 0)
   8957 	    return;
   8958 	  break;
   8959 	default:
   8960 	  /* A regular character.  */
   8961 	  break;
   8962 	}
   8963     }
   8964 }
   8965 
   8966 /* Come here after finding the start of the frame.  Collect the rest
   8967    into *BUF, verifying the checksum, length, and handling run-length
   8968    compression.  NUL terminate the buffer.  If there is not enough room,
   8969    expand *BUF using xrealloc.
   8970 
   8971    Returns -1 on error, number of characters in buffer (ignoring the
   8972    trailing NULL) on success. (could be extended to return one of the
   8973    SERIAL status indications).  */
   8974 
   8975 static long
   8976 read_frame (char **buf_p,
   8977 	    long *sizeof_buf)
   8978 {
   8979   unsigned char csum;
   8980   long bc;
   8981   int c;
   8982   char *buf = *buf_p;
   8983   struct remote_state *rs = get_remote_state ();
   8984 
   8985   csum = 0;
   8986   bc = 0;
   8987 
   8988   while (1)
   8989     {
   8990       c = readchar (remote_timeout);
   8991       switch (c)
   8992 	{
   8993 	case SERIAL_TIMEOUT:
   8994 	  if (remote_debug)
   8995 	    fputs_filtered ("Timeout in mid-packet, retrying\n", gdb_stdlog);
   8996 	  return -1;
   8997 	case '$':
   8998 	  if (remote_debug)
   8999 	    fputs_filtered ("Saw new packet start in middle of old one\n",
   9000 			    gdb_stdlog);
   9001 	  return -1;		/* Start a new packet, count retries.  */
   9002 	case '#':
   9003 	  {
   9004 	    unsigned char pktcsum;
   9005 	    int check_0 = 0;
   9006 	    int check_1 = 0;
   9007 
   9008 	    buf[bc] = '\0';
   9009 
   9010 	    check_0 = readchar (remote_timeout);
   9011 	    if (check_0 >= 0)
   9012 	      check_1 = readchar (remote_timeout);
   9013 
   9014 	    if (check_0 == SERIAL_TIMEOUT || check_1 == SERIAL_TIMEOUT)
   9015 	      {
   9016 		if (remote_debug)
   9017 		  fputs_filtered ("Timeout in checksum, retrying\n",
   9018 				  gdb_stdlog);
   9019 		return -1;
   9020 	      }
   9021 	    else if (check_0 < 0 || check_1 < 0)
   9022 	      {
   9023 		if (remote_debug)
   9024 		  fputs_filtered ("Communication error in checksum\n",
   9025 				  gdb_stdlog);
   9026 		return -1;
   9027 	      }
   9028 
   9029 	    /* Don't recompute the checksum; with no ack packets we
   9030 	       don't have any way to indicate a packet retransmission
   9031 	       is necessary.  */
   9032 	    if (rs->noack_mode)
   9033 	      return bc;
   9034 
   9035 	    pktcsum = (fromhex (check_0) << 4) | fromhex (check_1);
   9036 	    if (csum == pktcsum)
   9037               return bc;
   9038 
   9039 	    if (remote_debug)
   9040 	      {
   9041 		std::string str = escape_buffer (buf, bc);
   9042 
   9043 		fprintf_unfiltered (gdb_stdlog,
   9044 				    "Bad checksum, sentsum=0x%x, "
   9045 				    "csum=0x%x, buf=%s\n",
   9046 				    pktcsum, csum, str.c_str ());
   9047 	      }
   9048 	    /* Number of characters in buffer ignoring trailing
   9049                NULL.  */
   9050 	    return -1;
   9051 	  }
   9052 	case '*':		/* Run length encoding.  */
   9053           {
   9054 	    int repeat;
   9055 
   9056  	    csum += c;
   9057 	    c = readchar (remote_timeout);
   9058 	    csum += c;
   9059 	    repeat = c - ' ' + 3;	/* Compute repeat count.  */
   9060 
   9061 	    /* The character before ``*'' is repeated.  */
   9062 
   9063 	    if (repeat > 0 && repeat <= 255 && bc > 0)
   9064 	      {
   9065 		if (bc + repeat - 1 >= *sizeof_buf - 1)
   9066 		  {
   9067 		    /* Make some more room in the buffer.  */
   9068 		    *sizeof_buf += repeat;
   9069 		    *buf_p = (char *) xrealloc (*buf_p, *sizeof_buf);
   9070 		    buf = *buf_p;
   9071 		  }
   9072 
   9073 		memset (&buf[bc], buf[bc - 1], repeat);
   9074 		bc += repeat;
   9075 		continue;
   9076 	      }
   9077 
   9078 	    buf[bc] = '\0';
   9079 	    printf_filtered (_("Invalid run length encoding: %s\n"), buf);
   9080 	    return -1;
   9081 	  }
   9082 	default:
   9083 	  if (bc >= *sizeof_buf - 1)
   9084 	    {
   9085 	      /* Make some more room in the buffer.  */
   9086 	      *sizeof_buf *= 2;
   9087 	      *buf_p = (char *) xrealloc (*buf_p, *sizeof_buf);
   9088 	      buf = *buf_p;
   9089 	    }
   9090 
   9091 	  buf[bc++] = c;
   9092 	  csum += c;
   9093 	  continue;
   9094 	}
   9095     }
   9096 }
   9097 
   9098 /* Read a packet from the remote machine, with error checking, and
   9099    store it in *BUF.  Resize *BUF using xrealloc if necessary to hold
   9100    the result, and update *SIZEOF_BUF.  If FOREVER, wait forever
   9101    rather than timing out; this is used (in synchronous mode) to wait
   9102    for a target that is is executing user code to stop.  */
   9103 /* FIXME: ezannoni 2000-02-01 this wrapper is necessary so that we
   9104    don't have to change all the calls to getpkt to deal with the
   9105    return value, because at the moment I don't know what the right
   9106    thing to do it for those.  */
   9107 void
   9108 getpkt (char **buf,
   9109 	long *sizeof_buf,
   9110 	int forever)
   9111 {
   9112   getpkt_sane (buf, sizeof_buf, forever);
   9113 }
   9114 
   9115 
   9116 /* Read a packet from the remote machine, with error checking, and
   9117    store it in *BUF.  Resize *BUF using xrealloc if necessary to hold
   9118    the result, and update *SIZEOF_BUF.  If FOREVER, wait forever
   9119    rather than timing out; this is used (in synchronous mode) to wait
   9120    for a target that is is executing user code to stop.  If FOREVER ==
   9121    0, this function is allowed to time out gracefully and return an
   9122    indication of this to the caller.  Otherwise return the number of
   9123    bytes read.  If EXPECTING_NOTIF, consider receiving a notification
   9124    enough reason to return to the caller.  *IS_NOTIF is an output
   9125    boolean that indicates whether *BUF holds a notification or not
   9126    (a regular packet).  */
   9127 
   9128 static int
   9129 getpkt_or_notif_sane_1 (char **buf, long *sizeof_buf, int forever,
   9130 			int expecting_notif, int *is_notif)
   9131 {
   9132   struct remote_state *rs = get_remote_state ();
   9133   int c;
   9134   int tries;
   9135   int timeout;
   9136   int val = -1;
   9137 
   9138   /* We're reading a new response.  Make sure we don't look at a
   9139      previously cached response.  */
   9140   rs->cached_wait_status = 0;
   9141 
   9142   strcpy (*buf, "timeout");
   9143 
   9144   if (forever)
   9145     timeout = watchdog > 0 ? watchdog : -1;
   9146   else if (expecting_notif)
   9147     timeout = 0; /* There should already be a char in the buffer.  If
   9148 		    not, bail out.  */
   9149   else
   9150     timeout = remote_timeout;
   9151 
   9152 #define MAX_TRIES 3
   9153 
   9154   /* Process any number of notifications, and then return when
   9155      we get a packet.  */
   9156   for (;;)
   9157     {
   9158       /* If we get a timeout or bad checksum, retry up to MAX_TRIES
   9159 	 times.  */
   9160       for (tries = 1; tries <= MAX_TRIES; tries++)
   9161 	{
   9162 	  /* This can loop forever if the remote side sends us
   9163 	     characters continuously, but if it pauses, we'll get
   9164 	     SERIAL_TIMEOUT from readchar because of timeout.  Then
   9165 	     we'll count that as a retry.
   9166 
   9167 	     Note that even when forever is set, we will only wait
   9168 	     forever prior to the start of a packet.  After that, we
   9169 	     expect characters to arrive at a brisk pace.  They should
   9170 	     show up within remote_timeout intervals.  */
   9171 	  do
   9172 	    c = readchar (timeout);
   9173 	  while (c != SERIAL_TIMEOUT && c != '$' && c != '%');
   9174 
   9175 	  if (c == SERIAL_TIMEOUT)
   9176 	    {
   9177 	      if (expecting_notif)
   9178 		return -1; /* Don't complain, it's normal to not get
   9179 			      anything in this case.  */
   9180 
   9181 	      if (forever)	/* Watchdog went off?  Kill the target.  */
   9182 		{
   9183 		  remote_unpush_target ();
   9184 		  throw_error (TARGET_CLOSE_ERROR,
   9185 			       _("Watchdog timeout has expired.  "
   9186 				 "Target detached."));
   9187 		}
   9188 	      if (remote_debug)
   9189 		fputs_filtered ("Timed out.\n", gdb_stdlog);
   9190 	    }
   9191 	  else
   9192 	    {
   9193 	      /* We've found the start of a packet or notification.
   9194 		 Now collect the data.  */
   9195 	      val = read_frame (buf, sizeof_buf);
   9196 	      if (val >= 0)
   9197 		break;
   9198 	    }
   9199 
   9200 	  remote_serial_write ("-", 1);
   9201 	}
   9202 
   9203       if (tries > MAX_TRIES)
   9204 	{
   9205 	  /* We have tried hard enough, and just can't receive the
   9206 	     packet/notification.  Give up.  */
   9207 	  printf_unfiltered (_("Ignoring packet error, continuing...\n"));
   9208 
   9209 	  /* Skip the ack char if we're in no-ack mode.  */
   9210 	  if (!rs->noack_mode)
   9211 	    remote_serial_write ("+", 1);
   9212 	  return -1;
   9213 	}
   9214 
   9215       /* If we got an ordinary packet, return that to our caller.  */
   9216       if (c == '$')
   9217 	{
   9218 	  if (remote_debug)
   9219 	    {
   9220 	      std::string str
   9221 		= escape_buffer (*buf,
   9222 				 std::min (val, REMOTE_DEBUG_MAX_CHAR));
   9223 
   9224 	      fprintf_unfiltered (gdb_stdlog, "Packet received: %s",
   9225 				  str.c_str ());
   9226 
   9227 	      if (str.length () >  REMOTE_DEBUG_MAX_CHAR)
   9228 		{
   9229 		  fprintf_unfiltered (gdb_stdlog, "[%zu bytes omitted]",
   9230 				      str.length () - REMOTE_DEBUG_MAX_CHAR);
   9231 		}
   9232 
   9233 	      fprintf_unfiltered (gdb_stdlog, "\n");
   9234 	    }
   9235 
   9236 	  /* Skip the ack char if we're in no-ack mode.  */
   9237 	  if (!rs->noack_mode)
   9238 	    remote_serial_write ("+", 1);
   9239 	  if (is_notif != NULL)
   9240 	    *is_notif = 0;
   9241 	  return val;
   9242 	}
   9243 
   9244        /* If we got a notification, handle it, and go back to looking
   9245 	 for a packet.  */
   9246       else
   9247 	{
   9248 	  gdb_assert (c == '%');
   9249 
   9250 	  if (remote_debug)
   9251 	    {
   9252 	      std::string str = escape_buffer (*buf, val);
   9253 
   9254 	      fprintf_unfiltered (gdb_stdlog,
   9255 				  "  Notification received: %s\n",
   9256 				  str.c_str ());
   9257 	    }
   9258 	  if (is_notif != NULL)
   9259 	    *is_notif = 1;
   9260 
   9261 	  handle_notification (rs->notif_state, *buf);
   9262 
   9263 	  /* Notifications require no acknowledgement.  */
   9264 
   9265 	  if (expecting_notif)
   9266 	    return val;
   9267 	}
   9268     }
   9269 }
   9270 
   9271 static int
   9272 getpkt_sane (char **buf, long *sizeof_buf, int forever)
   9273 {
   9274   return getpkt_or_notif_sane_1 (buf, sizeof_buf, forever, 0, NULL);
   9275 }
   9276 
   9277 static int
   9278 getpkt_or_notif_sane (char **buf, long *sizeof_buf, int forever,
   9279 		      int *is_notif)
   9280 {
   9281   return getpkt_or_notif_sane_1 (buf, sizeof_buf, forever, 1,
   9282 				 is_notif);
   9283 }
   9284 
   9285 /* Check whether EVENT is a fork event for the process specified
   9286    by the pid passed in DATA, and if it is, kill the fork child.  */
   9287 
   9288 static int
   9289 kill_child_of_pending_fork (QUEUE (stop_reply_p) *q,
   9290 			    QUEUE_ITER (stop_reply_p) *iter,
   9291 			    stop_reply_p event,
   9292 			    void *data)
   9293 {
   9294   struct queue_iter_param *param = (struct queue_iter_param *) data;
   9295   int parent_pid = *(int *) param->input;
   9296 
   9297   if (is_pending_fork_parent (&event->ws, parent_pid, event->ptid))
   9298     {
   9299       struct remote_state *rs = get_remote_state ();
   9300       int child_pid = ptid_get_pid (event->ws.value.related_pid);
   9301       int res;
   9302 
   9303       res = remote_vkill (child_pid, rs);
   9304       if (res != 0)
   9305 	error (_("Can't kill fork child process %d"), child_pid);
   9306     }
   9307 
   9308   return 1;
   9309 }
   9310 
   9311 /* Kill any new fork children of process PID that haven't been
   9312    processed by follow_fork.  */
   9313 
   9314 static void
   9315 kill_new_fork_children (int pid, struct remote_state *rs)
   9316 {
   9317   struct thread_info *thread;
   9318   struct notif_client *notif = &notif_client_stop;
   9319   struct queue_iter_param param;
   9320 
   9321   /* Kill the fork child threads of any threads in process PID
   9322      that are stopped at a fork event.  */
   9323   ALL_NON_EXITED_THREADS (thread)
   9324     {
   9325       struct target_waitstatus *ws = &thread->pending_follow;
   9326 
   9327       if (is_pending_fork_parent (ws, pid, thread->ptid))
   9328 	{
   9329 	  struct remote_state *rs = get_remote_state ();
   9330 	  int child_pid = ptid_get_pid (ws->value.related_pid);
   9331 	  int res;
   9332 
   9333 	  res = remote_vkill (child_pid, rs);
   9334 	  if (res != 0)
   9335 	    error (_("Can't kill fork child process %d"), child_pid);
   9336 	}
   9337     }
   9338 
   9339   /* Check for any pending fork events (not reported or processed yet)
   9340      in process PID and kill those fork child threads as well.  */
   9341   remote_notif_get_pending_events (notif);
   9342   param.input = &pid;
   9343   param.output = NULL;
   9344   QUEUE_iterate (stop_reply_p, stop_reply_queue,
   9345 		 kill_child_of_pending_fork, &param);
   9346 }
   9347 
   9348 
   9349 /* Target hook to kill the current inferior.  */
   9351 
   9352 static void
   9353 remote_kill (struct target_ops *ops)
   9354 {
   9355   int res = -1;
   9356   int pid = ptid_get_pid (inferior_ptid);
   9357   struct remote_state *rs = get_remote_state ();
   9358 
   9359   if (packet_support (PACKET_vKill) != PACKET_DISABLE)
   9360     {
   9361       /* If we're stopped while forking and we haven't followed yet,
   9362 	 kill the child task.  We need to do this before killing the
   9363 	 parent task because if this is a vfork then the parent will
   9364 	 be sleeping.  */
   9365       kill_new_fork_children (pid, rs);
   9366 
   9367       res = remote_vkill (pid, rs);
   9368       if (res == 0)
   9369 	{
   9370 	  target_mourn_inferior (inferior_ptid);
   9371 	  return;
   9372 	}
   9373     }
   9374 
   9375   /* If we are in 'target remote' mode and we are killing the only
   9376      inferior, then we will tell gdbserver to exit and unpush the
   9377      target.  */
   9378   if (res == -1 && !remote_multi_process_p (rs)
   9379       && number_of_live_inferiors () == 1)
   9380     {
   9381       remote_kill_k ();
   9382 
   9383       /* We've killed the remote end, we get to mourn it.  If we are
   9384 	 not in extended mode, mourning the inferior also unpushes
   9385 	 remote_ops from the target stack, which closes the remote
   9386 	 connection.  */
   9387       target_mourn_inferior (inferior_ptid);
   9388 
   9389       return;
   9390     }
   9391 
   9392   error (_("Can't kill process"));
   9393 }
   9394 
   9395 /* Send a kill request to the target using the 'vKill' packet.  */
   9396 
   9397 static int
   9398 remote_vkill (int pid, struct remote_state *rs)
   9399 {
   9400   if (packet_support (PACKET_vKill) == PACKET_DISABLE)
   9401     return -1;
   9402 
   9403   /* Tell the remote target to detach.  */
   9404   xsnprintf (rs->buf, get_remote_packet_size (), "vKill;%x", pid);
   9405   putpkt (rs->buf);
   9406   getpkt (&rs->buf, &rs->buf_size, 0);
   9407 
   9408   switch (packet_ok (rs->buf,
   9409 		     &remote_protocol_packets[PACKET_vKill]))
   9410     {
   9411     case PACKET_OK:
   9412       return 0;
   9413     case PACKET_ERROR:
   9414       return 1;
   9415     case PACKET_UNKNOWN:
   9416       return -1;
   9417     default:
   9418       internal_error (__FILE__, __LINE__, _("Bad result from packet_ok"));
   9419     }
   9420 }
   9421 
   9422 /* Send a kill request to the target using the 'k' packet.  */
   9423 
   9424 static void
   9425 remote_kill_k (void)
   9426 {
   9427   /* Catch errors so the user can quit from gdb even when we
   9428      aren't on speaking terms with the remote system.  */
   9429   TRY
   9430     {
   9431       putpkt ("k");
   9432     }
   9433   CATCH (ex, RETURN_MASK_ERROR)
   9434     {
   9435       if (ex.error == TARGET_CLOSE_ERROR)
   9436 	{
   9437 	  /* If we got an (EOF) error that caused the target
   9438 	     to go away, then we're done, that's what we wanted.
   9439 	     "k" is susceptible to cause a premature EOF, given
   9440 	     that the remote server isn't actually required to
   9441 	     reply to "k", and it can happen that it doesn't
   9442 	     even get to reply ACK to the "k".  */
   9443 	  return;
   9444 	}
   9445 
   9446       /* Otherwise, something went wrong.  We didn't actually kill
   9447 	 the target.  Just propagate the exception, and let the
   9448 	 user or higher layers decide what to do.  */
   9449       throw_exception (ex);
   9450     }
   9451   END_CATCH
   9452 }
   9453 
   9454 static void
   9455 remote_mourn (struct target_ops *target)
   9456 {
   9457   struct remote_state *rs = get_remote_state ();
   9458 
   9459   /* In 'target remote' mode with one inferior, we close the connection.  */
   9460   if (!rs->extended && number_of_live_inferiors () <= 1)
   9461     {
   9462       unpush_target (target);
   9463 
   9464       /* remote_close takes care of doing most of the clean up.  */
   9465       generic_mourn_inferior ();
   9466       return;
   9467     }
   9468 
   9469   /* In case we got here due to an error, but we're going to stay
   9470      connected.  */
   9471   rs->waiting_for_stop_reply = 0;
   9472 
   9473   /* If the current general thread belonged to the process we just
   9474      detached from or has exited, the remote side current general
   9475      thread becomes undefined.  Considering a case like this:
   9476 
   9477      - We just got here due to a detach.
   9478      - The process that we're detaching from happens to immediately
   9479        report a global breakpoint being hit in non-stop mode, in the
   9480        same thread we had selected before.
   9481      - GDB attaches to this process again.
   9482      - This event happens to be the next event we handle.
   9483 
   9484      GDB would consider that the current general thread didn't need to
   9485      be set on the stub side (with Hg), since for all it knew,
   9486      GENERAL_THREAD hadn't changed.
   9487 
   9488      Notice that although in all-stop mode, the remote server always
   9489      sets the current thread to the thread reporting the stop event,
   9490      that doesn't happen in non-stop mode; in non-stop, the stub *must
   9491      not* change the current thread when reporting a breakpoint hit,
   9492      due to the decoupling of event reporting and event handling.
   9493 
   9494      To keep things simple, we always invalidate our notion of the
   9495      current thread.  */
   9496   record_currthread (rs, minus_one_ptid);
   9497 
   9498   /* Call common code to mark the inferior as not running.  */
   9499   generic_mourn_inferior ();
   9500 
   9501   if (!have_inferiors ())
   9502     {
   9503       if (!remote_multi_process_p (rs))
   9504 	{
   9505 	  /* Check whether the target is running now - some remote stubs
   9506 	     automatically restart after kill.	*/
   9507 	  putpkt ("?");
   9508 	  getpkt (&rs->buf, &rs->buf_size, 0);
   9509 
   9510 	  if (rs->buf[0] == 'S' || rs->buf[0] == 'T')
   9511 	    {
   9512 	      /* Assume that the target has been restarted.  Set
   9513 		 inferior_ptid so that bits of core GDB realizes
   9514 		 there's something here, e.g., so that the user can
   9515 		 say "kill" again.  */
   9516 	      inferior_ptid = magic_null_ptid;
   9517 	    }
   9518 	}
   9519     }
   9520 }
   9521 
   9522 static int
   9523 extended_remote_supports_disable_randomization (struct target_ops *self)
   9524 {
   9525   return packet_support (PACKET_QDisableRandomization) == PACKET_ENABLE;
   9526 }
   9527 
   9528 static void
   9529 extended_remote_disable_randomization (int val)
   9530 {
   9531   struct remote_state *rs = get_remote_state ();
   9532   char *reply;
   9533 
   9534   xsnprintf (rs->buf, get_remote_packet_size (), "QDisableRandomization:%x",
   9535 	     val);
   9536   putpkt (rs->buf);
   9537   reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
   9538   if (*reply == '\0')
   9539     error (_("Target does not support QDisableRandomization."));
   9540   if (strcmp (reply, "OK") != 0)
   9541     error (_("Bogus QDisableRandomization reply from target: %s"), reply);
   9542 }
   9543 
   9544 static int
   9545 extended_remote_run (const std::string &args)
   9546 {
   9547   struct remote_state *rs = get_remote_state ();
   9548   int len;
   9549   const char *remote_exec_file = get_remote_exec_file ();
   9550 
   9551   /* If the user has disabled vRun support, or we have detected that
   9552      support is not available, do not try it.  */
   9553   if (packet_support (PACKET_vRun) == PACKET_DISABLE)
   9554     return -1;
   9555 
   9556   strcpy (rs->buf, "vRun;");
   9557   len = strlen (rs->buf);
   9558 
   9559   if (strlen (remote_exec_file) * 2 + len >= get_remote_packet_size ())
   9560     error (_("Remote file name too long for run packet"));
   9561   len += 2 * bin2hex ((gdb_byte *) remote_exec_file, rs->buf + len,
   9562 		      strlen (remote_exec_file));
   9563 
   9564   if (!args.empty ())
   9565     {
   9566       struct cleanup *back_to;
   9567       int i;
   9568       char **argv;
   9569 
   9570       argv = gdb_buildargv (args.c_str ());
   9571       back_to = make_cleanup_freeargv (argv);
   9572       for (i = 0; argv[i] != NULL; i++)
   9573 	{
   9574 	  if (strlen (argv[i]) * 2 + 1 + len >= get_remote_packet_size ())
   9575 	    error (_("Argument list too long for run packet"));
   9576 	  rs->buf[len++] = ';';
   9577 	  len += 2 * bin2hex ((gdb_byte *) argv[i], rs->buf + len,
   9578 			      strlen (argv[i]));
   9579 	}
   9580       do_cleanups (back_to);
   9581     }
   9582 
   9583   rs->buf[len++] = '\0';
   9584 
   9585   putpkt (rs->buf);
   9586   getpkt (&rs->buf, &rs->buf_size, 0);
   9587 
   9588   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_vRun]))
   9589     {
   9590     case PACKET_OK:
   9591       /* We have a wait response.  All is well.  */
   9592       return 0;
   9593     case PACKET_UNKNOWN:
   9594       return -1;
   9595     case PACKET_ERROR:
   9596       if (remote_exec_file[0] == '\0')
   9597 	error (_("Running the default executable on the remote target failed; "
   9598 		 "try \"set remote exec-file\"?"));
   9599       else
   9600 	error (_("Running \"%s\" on the remote target failed"),
   9601 	       remote_exec_file);
   9602     default:
   9603       gdb_assert_not_reached (_("bad switch"));
   9604     }
   9605 }
   9606 
   9607 /* In the extended protocol we want to be able to do things like
   9608    "run" and have them basically work as expected.  So we need
   9609    a special create_inferior function.  We support changing the
   9610    executable file and the command line arguments, but not the
   9611    environment.  */
   9612 
   9613 static void
   9614 extended_remote_create_inferior (struct target_ops *ops,
   9615 				 const char *exec_file,
   9616 				 const std::string &args,
   9617 				 char **env, int from_tty)
   9618 {
   9619   int run_worked;
   9620   char *stop_reply;
   9621   struct remote_state *rs = get_remote_state ();
   9622   const char *remote_exec_file = get_remote_exec_file ();
   9623 
   9624   /* If running asynchronously, register the target file descriptor
   9625      with the event loop.  */
   9626   if (target_can_async_p ())
   9627     target_async (1);
   9628 
   9629   /* Disable address space randomization if requested (and supported).  */
   9630   if (extended_remote_supports_disable_randomization (ops))
   9631     extended_remote_disable_randomization (disable_randomization);
   9632 
   9633   /* Now restart the remote server.  */
   9634   run_worked = extended_remote_run (args) != -1;
   9635   if (!run_worked)
   9636     {
   9637       /* vRun was not supported.  Fail if we need it to do what the
   9638 	 user requested.  */
   9639       if (remote_exec_file[0])
   9640 	error (_("Remote target does not support \"set remote exec-file\""));
   9641       if (!args.empty ())
   9642 	error (_("Remote target does not support \"set args\" or run <ARGS>"));
   9643 
   9644       /* Fall back to "R".  */
   9645       extended_remote_restart ();
   9646     }
   9647 
   9648   if (!have_inferiors ())
   9649     {
   9650       /* Clean up from the last time we ran, before we mark the target
   9651 	 running again.  This will mark breakpoints uninserted, and
   9652 	 get_offsets may insert breakpoints.  */
   9653       init_thread_list ();
   9654       init_wait_for_inferior ();
   9655     }
   9656 
   9657   /* vRun's success return is a stop reply.  */
   9658   stop_reply = run_worked ? rs->buf : NULL;
   9659   add_current_inferior_and_thread (stop_reply);
   9660 
   9661   /* Get updated offsets, if the stub uses qOffsets.  */
   9662   get_offsets ();
   9663 }
   9664 
   9665 
   9667 /* Given a location's target info BP_TGT and the packet buffer BUF,  output
   9668    the list of conditions (in agent expression bytecode format), if any, the
   9669    target needs to evaluate.  The output is placed into the packet buffer
   9670    started from BUF and ended at BUF_END.  */
   9671 
   9672 static int
   9673 remote_add_target_side_condition (struct gdbarch *gdbarch,
   9674 				  struct bp_target_info *bp_tgt, char *buf,
   9675 				  char *buf_end)
   9676 {
   9677   if (bp_tgt->conditions.empty ())
   9678     return 0;
   9679 
   9680   buf += strlen (buf);
   9681   xsnprintf (buf, buf_end - buf, "%s", ";");
   9682   buf++;
   9683 
   9684   /* Send conditions to the target.  */
   9685   for (agent_expr *aexpr : bp_tgt->conditions)
   9686     {
   9687       xsnprintf (buf, buf_end - buf, "X%x,", aexpr->len);
   9688       buf += strlen (buf);
   9689       for (int i = 0; i < aexpr->len; ++i)
   9690 	buf = pack_hex_byte (buf, aexpr->buf[i]);
   9691       *buf = '\0';
   9692     }
   9693   return 0;
   9694 }
   9695 
   9696 static void
   9697 remote_add_target_side_commands (struct gdbarch *gdbarch,
   9698 				 struct bp_target_info *bp_tgt, char *buf)
   9699 {
   9700   if (bp_tgt->tcommands.empty ())
   9701     return;
   9702 
   9703   buf += strlen (buf);
   9704 
   9705   sprintf (buf, ";cmds:%x,", bp_tgt->persist);
   9706   buf += strlen (buf);
   9707 
   9708   /* Concatenate all the agent expressions that are commands into the
   9709      cmds parameter.  */
   9710   for (agent_expr *aexpr : bp_tgt->tcommands)
   9711     {
   9712       sprintf (buf, "X%x,", aexpr->len);
   9713       buf += strlen (buf);
   9714       for (int i = 0; i < aexpr->len; ++i)
   9715 	buf = pack_hex_byte (buf, aexpr->buf[i]);
   9716       *buf = '\0';
   9717     }
   9718 }
   9719 
   9720 /* Insert a breakpoint.  On targets that have software breakpoint
   9721    support, we ask the remote target to do the work; on targets
   9722    which don't, we insert a traditional memory breakpoint.  */
   9723 
   9724 static int
   9725 remote_insert_breakpoint (struct target_ops *ops,
   9726 			  struct gdbarch *gdbarch,
   9727 			  struct bp_target_info *bp_tgt)
   9728 {
   9729   /* Try the "Z" s/w breakpoint packet if it is not already disabled.
   9730      If it succeeds, then set the support to PACKET_ENABLE.  If it
   9731      fails, and the user has explicitly requested the Z support then
   9732      report an error, otherwise, mark it disabled and go on.  */
   9733 
   9734   if (packet_support (PACKET_Z0) != PACKET_DISABLE)
   9735     {
   9736       CORE_ADDR addr = bp_tgt->reqstd_address;
   9737       struct remote_state *rs;
   9738       char *p, *endbuf;
   9739       int bpsize;
   9740 
   9741       /* Make sure the remote is pointing at the right process, if
   9742 	 necessary.  */
   9743       if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
   9744 	set_general_process ();
   9745 
   9746       rs = get_remote_state ();
   9747       p = rs->buf;
   9748       endbuf = rs->buf + get_remote_packet_size ();
   9749 
   9750       *(p++) = 'Z';
   9751       *(p++) = '0';
   9752       *(p++) = ',';
   9753       addr = (ULONGEST) remote_address_masked (addr);
   9754       p += hexnumstr (p, addr);
   9755       xsnprintf (p, endbuf - p, ",%d", bp_tgt->kind);
   9756 
   9757       if (remote_supports_cond_breakpoints (ops))
   9758 	remote_add_target_side_condition (gdbarch, bp_tgt, p, endbuf);
   9759 
   9760       if (remote_can_run_breakpoint_commands (ops))
   9761 	remote_add_target_side_commands (gdbarch, bp_tgt, p);
   9762 
   9763       putpkt (rs->buf);
   9764       getpkt (&rs->buf, &rs->buf_size, 0);
   9765 
   9766       switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0]))
   9767 	{
   9768 	case PACKET_ERROR:
   9769 	  return -1;
   9770 	case PACKET_OK:
   9771 	  return 0;
   9772 	case PACKET_UNKNOWN:
   9773 	  break;
   9774 	}
   9775     }
   9776 
   9777   /* If this breakpoint has target-side commands but this stub doesn't
   9778      support Z0 packets, throw error.  */
   9779   if (!bp_tgt->tcommands.empty ())
   9780     throw_error (NOT_SUPPORTED_ERROR, _("\
   9781 Target doesn't support breakpoints that have target side commands."));
   9782 
   9783   return memory_insert_breakpoint (ops, gdbarch, bp_tgt);
   9784 }
   9785 
   9786 static int
   9787 remote_remove_breakpoint (struct target_ops *ops,
   9788 			  struct gdbarch *gdbarch,
   9789 			  struct bp_target_info *bp_tgt,
   9790 			  enum remove_bp_reason reason)
   9791 {
   9792   CORE_ADDR addr = bp_tgt->placed_address;
   9793   struct remote_state *rs = get_remote_state ();
   9794 
   9795   if (packet_support (PACKET_Z0) != PACKET_DISABLE)
   9796     {
   9797       char *p = rs->buf;
   9798       char *endbuf = rs->buf + get_remote_packet_size ();
   9799 
   9800       /* Make sure the remote is pointing at the right process, if
   9801 	 necessary.  */
   9802       if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
   9803 	set_general_process ();
   9804 
   9805       *(p++) = 'z';
   9806       *(p++) = '0';
   9807       *(p++) = ',';
   9808 
   9809       addr = (ULONGEST) remote_address_masked (bp_tgt->placed_address);
   9810       p += hexnumstr (p, addr);
   9811       xsnprintf (p, endbuf - p, ",%d", bp_tgt->kind);
   9812 
   9813       putpkt (rs->buf);
   9814       getpkt (&rs->buf, &rs->buf_size, 0);
   9815 
   9816       return (rs->buf[0] == 'E');
   9817     }
   9818 
   9819   return memory_remove_breakpoint (ops, gdbarch, bp_tgt, reason);
   9820 }
   9821 
   9822 static enum Z_packet_type
   9823 watchpoint_to_Z_packet (int type)
   9824 {
   9825   switch (type)
   9826     {
   9827     case hw_write:
   9828       return Z_PACKET_WRITE_WP;
   9829       break;
   9830     case hw_read:
   9831       return Z_PACKET_READ_WP;
   9832       break;
   9833     case hw_access:
   9834       return Z_PACKET_ACCESS_WP;
   9835       break;
   9836     default:
   9837       internal_error (__FILE__, __LINE__,
   9838 		      _("hw_bp_to_z: bad watchpoint type %d"), type);
   9839     }
   9840 }
   9841 
   9842 static int
   9843 remote_insert_watchpoint (struct target_ops *self, CORE_ADDR addr, int len,
   9844 			  enum target_hw_bp_type type, struct expression *cond)
   9845 {
   9846   struct remote_state *rs = get_remote_state ();
   9847   char *endbuf = rs->buf + get_remote_packet_size ();
   9848   char *p;
   9849   enum Z_packet_type packet = watchpoint_to_Z_packet (type);
   9850 
   9851   if (packet_support (PACKET_Z0 + packet) == PACKET_DISABLE)
   9852     return 1;
   9853 
   9854   /* Make sure the remote is pointing at the right process, if
   9855      necessary.  */
   9856   if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
   9857     set_general_process ();
   9858 
   9859   xsnprintf (rs->buf, endbuf - rs->buf, "Z%x,", packet);
   9860   p = strchr (rs->buf, '\0');
   9861   addr = remote_address_masked (addr);
   9862   p += hexnumstr (p, (ULONGEST) addr);
   9863   xsnprintf (p, endbuf - p, ",%x", len);
   9864 
   9865   putpkt (rs->buf);
   9866   getpkt (&rs->buf, &rs->buf_size, 0);
   9867 
   9868   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0 + packet]))
   9869     {
   9870     case PACKET_ERROR:
   9871       return -1;
   9872     case PACKET_UNKNOWN:
   9873       return 1;
   9874     case PACKET_OK:
   9875       return 0;
   9876     }
   9877   internal_error (__FILE__, __LINE__,
   9878 		  _("remote_insert_watchpoint: reached end of function"));
   9879 }
   9880 
   9881 static int
   9882 remote_watchpoint_addr_within_range (struct target_ops *target, CORE_ADDR addr,
   9883 				     CORE_ADDR start, int length)
   9884 {
   9885   CORE_ADDR diff = remote_address_masked (addr - start);
   9886 
   9887   return diff < length;
   9888 }
   9889 
   9890 
   9891 static int
   9892 remote_remove_watchpoint (struct target_ops *self, CORE_ADDR addr, int len,
   9893 			  enum target_hw_bp_type type, struct expression *cond)
   9894 {
   9895   struct remote_state *rs = get_remote_state ();
   9896   char *endbuf = rs->buf + get_remote_packet_size ();
   9897   char *p;
   9898   enum Z_packet_type packet = watchpoint_to_Z_packet (type);
   9899 
   9900   if (packet_support (PACKET_Z0 + packet) == PACKET_DISABLE)
   9901     return -1;
   9902 
   9903   /* Make sure the remote is pointing at the right process, if
   9904      necessary.  */
   9905   if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
   9906     set_general_process ();
   9907 
   9908   xsnprintf (rs->buf, endbuf - rs->buf, "z%x,", packet);
   9909   p = strchr (rs->buf, '\0');
   9910   addr = remote_address_masked (addr);
   9911   p += hexnumstr (p, (ULONGEST) addr);
   9912   xsnprintf (p, endbuf - p, ",%x", len);
   9913   putpkt (rs->buf);
   9914   getpkt (&rs->buf, &rs->buf_size, 0);
   9915 
   9916   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0 + packet]))
   9917     {
   9918     case PACKET_ERROR:
   9919     case PACKET_UNKNOWN:
   9920       return -1;
   9921     case PACKET_OK:
   9922       return 0;
   9923     }
   9924   internal_error (__FILE__, __LINE__,
   9925 		  _("remote_remove_watchpoint: reached end of function"));
   9926 }
   9927 
   9928 
   9929 int remote_hw_watchpoint_limit = -1;
   9930 int remote_hw_watchpoint_length_limit = -1;
   9931 int remote_hw_breakpoint_limit = -1;
   9932 
   9933 static int
   9934 remote_region_ok_for_hw_watchpoint (struct target_ops *self,
   9935 				    CORE_ADDR addr, int len)
   9936 {
   9937   if (remote_hw_watchpoint_length_limit == 0)
   9938     return 0;
   9939   else if (remote_hw_watchpoint_length_limit < 0)
   9940     return 1;
   9941   else if (len <= remote_hw_watchpoint_length_limit)
   9942     return 1;
   9943   else
   9944     return 0;
   9945 }
   9946 
   9947 static int
   9948 remote_check_watch_resources (struct target_ops *self,
   9949 			      enum bptype type, int cnt, int ot)
   9950 {
   9951   if (type == bp_hardware_breakpoint)
   9952     {
   9953       if (remote_hw_breakpoint_limit == 0)
   9954 	return 0;
   9955       else if (remote_hw_breakpoint_limit < 0)
   9956 	return 1;
   9957       else if (cnt <= remote_hw_breakpoint_limit)
   9958 	return 1;
   9959     }
   9960   else
   9961     {
   9962       if (remote_hw_watchpoint_limit == 0)
   9963 	return 0;
   9964       else if (remote_hw_watchpoint_limit < 0)
   9965 	return 1;
   9966       else if (ot)
   9967 	return -1;
   9968       else if (cnt <= remote_hw_watchpoint_limit)
   9969 	return 1;
   9970     }
   9971   return -1;
   9972 }
   9973 
   9974 /* The to_stopped_by_sw_breakpoint method of target remote.  */
   9975 
   9976 static int
   9977 remote_stopped_by_sw_breakpoint (struct target_ops *ops)
   9978 {
   9979   struct thread_info *thread = inferior_thread ();
   9980 
   9981   return (thread->priv != NULL
   9982 	  && thread->priv->stop_reason == TARGET_STOPPED_BY_SW_BREAKPOINT);
   9983 }
   9984 
   9985 /* The to_supports_stopped_by_sw_breakpoint method of target
   9986    remote.  */
   9987 
   9988 static int
   9989 remote_supports_stopped_by_sw_breakpoint (struct target_ops *ops)
   9990 {
   9991   return (packet_support (PACKET_swbreak_feature) == PACKET_ENABLE);
   9992 }
   9993 
   9994 /* The to_stopped_by_hw_breakpoint method of target remote.  */
   9995 
   9996 static int
   9997 remote_stopped_by_hw_breakpoint (struct target_ops *ops)
   9998 {
   9999   struct thread_info *thread = inferior_thread ();
   10000 
   10001   return (thread->priv != NULL
   10002 	  && thread->priv->stop_reason == TARGET_STOPPED_BY_HW_BREAKPOINT);
   10003 }
   10004 
   10005 /* The to_supports_stopped_by_hw_breakpoint method of target
   10006    remote.  */
   10007 
   10008 static int
   10009 remote_supports_stopped_by_hw_breakpoint (struct target_ops *ops)
   10010 {
   10011   return (packet_support (PACKET_hwbreak_feature) == PACKET_ENABLE);
   10012 }
   10013 
   10014 static int
   10015 remote_stopped_by_watchpoint (struct target_ops *ops)
   10016 {
   10017   struct thread_info *thread = inferior_thread ();
   10018 
   10019   return (thread->priv != NULL
   10020 	  && thread->priv->stop_reason == TARGET_STOPPED_BY_WATCHPOINT);
   10021 }
   10022 
   10023 static int
   10024 remote_stopped_data_address (struct target_ops *target, CORE_ADDR *addr_p)
   10025 {
   10026   struct thread_info *thread = inferior_thread ();
   10027 
   10028   if (thread->priv != NULL
   10029       && thread->priv->stop_reason == TARGET_STOPPED_BY_WATCHPOINT)
   10030     {
   10031       *addr_p = thread->priv->watch_data_address;
   10032       return 1;
   10033     }
   10034 
   10035   return 0;
   10036 }
   10037 
   10038 
   10039 static int
   10040 remote_insert_hw_breakpoint (struct target_ops *self, struct gdbarch *gdbarch,
   10041 			     struct bp_target_info *bp_tgt)
   10042 {
   10043   CORE_ADDR addr = bp_tgt->reqstd_address;
   10044   struct remote_state *rs;
   10045   char *p, *endbuf;
   10046   char *message;
   10047 
   10048   if (packet_support (PACKET_Z1) == PACKET_DISABLE)
   10049     return -1;
   10050 
   10051   /* Make sure the remote is pointing at the right process, if
   10052      necessary.  */
   10053   if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
   10054     set_general_process ();
   10055 
   10056   rs = get_remote_state ();
   10057   p = rs->buf;
   10058   endbuf = rs->buf + get_remote_packet_size ();
   10059 
   10060   *(p++) = 'Z';
   10061   *(p++) = '1';
   10062   *(p++) = ',';
   10063 
   10064   addr = remote_address_masked (addr);
   10065   p += hexnumstr (p, (ULONGEST) addr);
   10066   xsnprintf (p, endbuf - p, ",%x", bp_tgt->kind);
   10067 
   10068   if (remote_supports_cond_breakpoints (self))
   10069     remote_add_target_side_condition (gdbarch, bp_tgt, p, endbuf);
   10070 
   10071   if (remote_can_run_breakpoint_commands (self))
   10072     remote_add_target_side_commands (gdbarch, bp_tgt, p);
   10073 
   10074   putpkt (rs->buf);
   10075   getpkt (&rs->buf, &rs->buf_size, 0);
   10076 
   10077   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z1]))
   10078     {
   10079     case PACKET_ERROR:
   10080       if (rs->buf[1] == '.')
   10081         {
   10082           message = strchr (rs->buf + 2, '.');
   10083           if (message)
   10084             error (_("Remote failure reply: %s"), message + 1);
   10085         }
   10086       return -1;
   10087     case PACKET_UNKNOWN:
   10088       return -1;
   10089     case PACKET_OK:
   10090       return 0;
   10091     }
   10092   internal_error (__FILE__, __LINE__,
   10093 		  _("remote_insert_hw_breakpoint: reached end of function"));
   10094 }
   10095 
   10096 
   10097 static int
   10098 remote_remove_hw_breakpoint (struct target_ops *self, struct gdbarch *gdbarch,
   10099 			     struct bp_target_info *bp_tgt)
   10100 {
   10101   CORE_ADDR addr;
   10102   struct remote_state *rs = get_remote_state ();
   10103   char *p = rs->buf;
   10104   char *endbuf = rs->buf + get_remote_packet_size ();
   10105 
   10106   if (packet_support (PACKET_Z1) == PACKET_DISABLE)
   10107     return -1;
   10108 
   10109   /* Make sure the remote is pointing at the right process, if
   10110      necessary.  */
   10111   if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
   10112     set_general_process ();
   10113 
   10114   *(p++) = 'z';
   10115   *(p++) = '1';
   10116   *(p++) = ',';
   10117 
   10118   addr = remote_address_masked (bp_tgt->placed_address);
   10119   p += hexnumstr (p, (ULONGEST) addr);
   10120   xsnprintf (p, endbuf  - p, ",%x", bp_tgt->kind);
   10121 
   10122   putpkt (rs->buf);
   10123   getpkt (&rs->buf, &rs->buf_size, 0);
   10124 
   10125   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z1]))
   10126     {
   10127     case PACKET_ERROR:
   10128     case PACKET_UNKNOWN:
   10129       return -1;
   10130     case PACKET_OK:
   10131       return 0;
   10132     }
   10133   internal_error (__FILE__, __LINE__,
   10134 		  _("remote_remove_hw_breakpoint: reached end of function"));
   10135 }
   10136 
   10137 /* Verify memory using the "qCRC:" request.  */
   10138 
   10139 static int
   10140 remote_verify_memory (struct target_ops *ops,
   10141 		      const gdb_byte *data, CORE_ADDR lma, ULONGEST size)
   10142 {
   10143   struct remote_state *rs = get_remote_state ();
   10144   unsigned long host_crc, target_crc;
   10145   char *tmp;
   10146 
   10147   /* It doesn't make sense to use qCRC if the remote target is
   10148      connected but not running.  */
   10149   if (target_has_execution && packet_support (PACKET_qCRC) != PACKET_DISABLE)
   10150     {
   10151       enum packet_result result;
   10152 
   10153       /* Make sure the remote is pointing at the right process.  */
   10154       set_general_process ();
   10155 
   10156       /* FIXME: assumes lma can fit into long.  */
   10157       xsnprintf (rs->buf, get_remote_packet_size (), "qCRC:%lx,%lx",
   10158 		 (long) lma, (long) size);
   10159       putpkt (rs->buf);
   10160 
   10161       /* Be clever; compute the host_crc before waiting for target
   10162 	 reply.  */
   10163       host_crc = xcrc32 (data, size, 0xffffffff);
   10164 
   10165       getpkt (&rs->buf, &rs->buf_size, 0);
   10166 
   10167       result = packet_ok (rs->buf,
   10168 			  &remote_protocol_packets[PACKET_qCRC]);
   10169       if (result == PACKET_ERROR)
   10170 	return -1;
   10171       else if (result == PACKET_OK)
   10172 	{
   10173 	  for (target_crc = 0, tmp = &rs->buf[1]; *tmp; tmp++)
   10174 	    target_crc = target_crc * 16 + fromhex (*tmp);
   10175 
   10176 	  return (host_crc == target_crc);
   10177 	}
   10178     }
   10179 
   10180   return simple_verify_memory (ops, data, lma, size);
   10181 }
   10182 
   10183 /* compare-sections command
   10184 
   10185    With no arguments, compares each loadable section in the exec bfd
   10186    with the same memory range on the target, and reports mismatches.
   10187    Useful for verifying the image on the target against the exec file.  */
   10188 
   10189 static void
   10190 compare_sections_command (char *args, int from_tty)
   10191 {
   10192   asection *s;
   10193   struct cleanup *old_chain;
   10194   gdb_byte *sectdata;
   10195   const char *sectname;
   10196   bfd_size_type size;
   10197   bfd_vma lma;
   10198   int matched = 0;
   10199   int mismatched = 0;
   10200   int res;
   10201   int read_only = 0;
   10202 
   10203   if (!exec_bfd)
   10204     error (_("command cannot be used without an exec file"));
   10205 
   10206   /* Make sure the remote is pointing at the right process.  */
   10207   set_general_process ();
   10208 
   10209   if (args != NULL && strcmp (args, "-r") == 0)
   10210     {
   10211       read_only = 1;
   10212       args = NULL;
   10213     }
   10214 
   10215   for (s = exec_bfd->sections; s; s = s->next)
   10216     {
   10217       if (!(s->flags & SEC_LOAD))
   10218 	continue;		/* Skip non-loadable section.  */
   10219 
   10220       if (read_only && (s->flags & SEC_READONLY) == 0)
   10221 	continue;		/* Skip writeable sections */
   10222 
   10223       size = bfd_get_section_size (s);
   10224       if (size == 0)
   10225 	continue;		/* Skip zero-length section.  */
   10226 
   10227       sectname = bfd_get_section_name (exec_bfd, s);
   10228       if (args && strcmp (args, sectname) != 0)
   10229 	continue;		/* Not the section selected by user.  */
   10230 
   10231       matched = 1;		/* Do this section.  */
   10232       lma = s->lma;
   10233 
   10234       sectdata = (gdb_byte *) xmalloc (size);
   10235       old_chain = make_cleanup (xfree, sectdata);
   10236       bfd_get_section_contents (exec_bfd, s, sectdata, 0, size);
   10237 
   10238       res = target_verify_memory (sectdata, lma, size);
   10239 
   10240       if (res == -1)
   10241 	error (_("target memory fault, section %s, range %s -- %s"), sectname,
   10242 	       paddress (target_gdbarch (), lma),
   10243 	       paddress (target_gdbarch (), lma + size));
   10244 
   10245       printf_filtered ("Section %s, range %s -- %s: ", sectname,
   10246 		       paddress (target_gdbarch (), lma),
   10247 		       paddress (target_gdbarch (), lma + size));
   10248       if (res)
   10249 	printf_filtered ("matched.\n");
   10250       else
   10251 	{
   10252 	  printf_filtered ("MIS-MATCHED!\n");
   10253 	  mismatched++;
   10254 	}
   10255 
   10256       do_cleanups (old_chain);
   10257     }
   10258   if (mismatched > 0)
   10259     warning (_("One or more sections of the target image does not match\n\
   10260 the loaded file\n"));
   10261   if (args && !matched)
   10262     printf_filtered (_("No loaded section named '%s'.\n"), args);
   10263 }
   10264 
   10265 /* Write LEN bytes from WRITEBUF into OBJECT_NAME/ANNEX at OFFSET
   10266    into remote target.  The number of bytes written to the remote
   10267    target is returned, or -1 for error.  */
   10268 
   10269 static enum target_xfer_status
   10270 remote_write_qxfer (struct target_ops *ops, const char *object_name,
   10271                     const char *annex, const gdb_byte *writebuf,
   10272                     ULONGEST offset, LONGEST len, ULONGEST *xfered_len,
   10273                     struct packet_config *packet)
   10274 {
   10275   int i, buf_len;
   10276   ULONGEST n;
   10277   struct remote_state *rs = get_remote_state ();
   10278   int max_size = get_memory_write_packet_size ();
   10279 
   10280   if (packet->support == PACKET_DISABLE)
   10281     return TARGET_XFER_E_IO;
   10282 
   10283   /* Insert header.  */
   10284   i = snprintf (rs->buf, max_size,
   10285 		"qXfer:%s:write:%s:%s:",
   10286 		object_name, annex ? annex : "",
   10287 		phex_nz (offset, sizeof offset));
   10288   max_size -= (i + 1);
   10289 
   10290   /* Escape as much data as fits into rs->buf.  */
   10291   buf_len = remote_escape_output
   10292     (writebuf, len, 1, (gdb_byte *) rs->buf + i, &max_size, max_size);
   10293 
   10294   if (putpkt_binary (rs->buf, i + buf_len) < 0
   10295       || getpkt_sane (&rs->buf, &rs->buf_size, 0) < 0
   10296       || packet_ok (rs->buf, packet) != PACKET_OK)
   10297     return TARGET_XFER_E_IO;
   10298 
   10299   unpack_varlen_hex (rs->buf, &n);
   10300 
   10301   *xfered_len = n;
   10302   return TARGET_XFER_OK;
   10303 }
   10304 
   10305 /* Read OBJECT_NAME/ANNEX from the remote target using a qXfer packet.
   10306    Data at OFFSET, of up to LEN bytes, is read into READBUF; the
   10307    number of bytes read is returned, or 0 for EOF, or -1 for error.
   10308    The number of bytes read may be less than LEN without indicating an
   10309    EOF.  PACKET is checked and updated to indicate whether the remote
   10310    target supports this object.  */
   10311 
   10312 static enum target_xfer_status
   10313 remote_read_qxfer (struct target_ops *ops, const char *object_name,
   10314 		   const char *annex,
   10315 		   gdb_byte *readbuf, ULONGEST offset, LONGEST len,
   10316 		   ULONGEST *xfered_len,
   10317 		   struct packet_config *packet)
   10318 {
   10319   struct remote_state *rs = get_remote_state ();
   10320   LONGEST i, n, packet_len;
   10321 
   10322   if (packet->support == PACKET_DISABLE)
   10323     return TARGET_XFER_E_IO;
   10324 
   10325   /* Check whether we've cached an end-of-object packet that matches
   10326      this request.  */
   10327   if (rs->finished_object)
   10328     {
   10329       if (strcmp (object_name, rs->finished_object) == 0
   10330 	  && strcmp (annex ? annex : "", rs->finished_annex) == 0
   10331 	  && offset == rs->finished_offset)
   10332 	return TARGET_XFER_EOF;
   10333 
   10334 
   10335       /* Otherwise, we're now reading something different.  Discard
   10336 	 the cache.  */
   10337       xfree (rs->finished_object);
   10338       xfree (rs->finished_annex);
   10339       rs->finished_object = NULL;
   10340       rs->finished_annex = NULL;
   10341     }
   10342 
   10343   /* Request only enough to fit in a single packet.  The actual data
   10344      may not, since we don't know how much of it will need to be escaped;
   10345      the target is free to respond with slightly less data.  We subtract
   10346      five to account for the response type and the protocol frame.  */
   10347   n = std::min<LONGEST> (get_remote_packet_size () - 5, len);
   10348   snprintf (rs->buf, get_remote_packet_size () - 4, "qXfer:%s:read:%s:%s,%s",
   10349 	    object_name, annex ? annex : "",
   10350 	    phex_nz (offset, sizeof offset),
   10351 	    phex_nz (n, sizeof n));
   10352   i = putpkt (rs->buf);
   10353   if (i < 0)
   10354     return TARGET_XFER_E_IO;
   10355 
   10356   rs->buf[0] = '\0';
   10357   packet_len = getpkt_sane (&rs->buf, &rs->buf_size, 0);
   10358   if (packet_len < 0 || packet_ok (rs->buf, packet) != PACKET_OK)
   10359     return TARGET_XFER_E_IO;
   10360 
   10361   if (rs->buf[0] != 'l' && rs->buf[0] != 'm')
   10362     error (_("Unknown remote qXfer reply: %s"), rs->buf);
   10363 
   10364   /* 'm' means there is (or at least might be) more data after this
   10365      batch.  That does not make sense unless there's at least one byte
   10366      of data in this reply.  */
   10367   if (rs->buf[0] == 'm' && packet_len == 1)
   10368     error (_("Remote qXfer reply contained no data."));
   10369 
   10370   /* Got some data.  */
   10371   i = remote_unescape_input ((gdb_byte *) rs->buf + 1,
   10372 			     packet_len - 1, readbuf, n);
   10373 
   10374   /* 'l' is an EOF marker, possibly including a final block of data,
   10375      or possibly empty.  If we have the final block of a non-empty
   10376      object, record this fact to bypass a subsequent partial read.  */
   10377   if (rs->buf[0] == 'l' && offset + i > 0)
   10378     {
   10379       rs->finished_object = xstrdup (object_name);
   10380       rs->finished_annex = xstrdup (annex ? annex : "");
   10381       rs->finished_offset = offset + i;
   10382     }
   10383 
   10384   if (i == 0)
   10385     return TARGET_XFER_EOF;
   10386   else
   10387     {
   10388       *xfered_len = i;
   10389       return TARGET_XFER_OK;
   10390     }
   10391 }
   10392 
   10393 static enum target_xfer_status
   10394 remote_xfer_partial (struct target_ops *ops, enum target_object object,
   10395 		     const char *annex, gdb_byte *readbuf,
   10396 		     const gdb_byte *writebuf, ULONGEST offset, ULONGEST len,
   10397 		     ULONGEST *xfered_len)
   10398 {
   10399   struct remote_state *rs;
   10400   int i;
   10401   char *p2;
   10402   char query_type;
   10403   int unit_size = gdbarch_addressable_memory_unit_size (target_gdbarch ());
   10404 
   10405   set_remote_traceframe ();
   10406   set_general_thread (inferior_ptid);
   10407 
   10408   rs = get_remote_state ();
   10409 
   10410   /* Handle memory using the standard memory routines.  */
   10411   if (object == TARGET_OBJECT_MEMORY)
   10412     {
   10413       /* If the remote target is connected but not running, we should
   10414 	 pass this request down to a lower stratum (e.g. the executable
   10415 	 file).  */
   10416       if (!target_has_execution)
   10417 	return TARGET_XFER_EOF;
   10418 
   10419       if (writebuf != NULL)
   10420 	return remote_write_bytes (offset, writebuf, len, unit_size,
   10421 				   xfered_len);
   10422       else
   10423 	return remote_read_bytes (ops, offset, readbuf, len, unit_size,
   10424 				  xfered_len);
   10425     }
   10426 
   10427   /* Handle SPU memory using qxfer packets.  */
   10428   if (object == TARGET_OBJECT_SPU)
   10429     {
   10430       if (readbuf)
   10431 	return remote_read_qxfer (ops, "spu", annex, readbuf, offset, len,
   10432 				  xfered_len, &remote_protocol_packets
   10433 				  [PACKET_qXfer_spu_read]);
   10434       else
   10435 	return remote_write_qxfer (ops, "spu", annex, writebuf, offset, len,
   10436 				   xfered_len, &remote_protocol_packets
   10437 				   [PACKET_qXfer_spu_write]);
   10438     }
   10439 
   10440   /* Handle extra signal info using qxfer packets.  */
   10441   if (object == TARGET_OBJECT_SIGNAL_INFO)
   10442     {
   10443       if (readbuf)
   10444 	return remote_read_qxfer (ops, "siginfo", annex, readbuf, offset, len,
   10445 				  xfered_len, &remote_protocol_packets
   10446 				  [PACKET_qXfer_siginfo_read]);
   10447       else
   10448 	return remote_write_qxfer (ops, "siginfo", annex,
   10449 				   writebuf, offset, len, xfered_len,
   10450 				   &remote_protocol_packets
   10451 				   [PACKET_qXfer_siginfo_write]);
   10452     }
   10453 
   10454   if (object == TARGET_OBJECT_STATIC_TRACE_DATA)
   10455     {
   10456       if (readbuf)
   10457 	return remote_read_qxfer (ops, "statictrace", annex,
   10458 				  readbuf, offset, len, xfered_len,
   10459 				  &remote_protocol_packets
   10460 				  [PACKET_qXfer_statictrace_read]);
   10461       else
   10462 	return TARGET_XFER_E_IO;
   10463     }
   10464 
   10465   /* Only handle flash writes.  */
   10466   if (writebuf != NULL)
   10467     {
   10468       switch (object)
   10469 	{
   10470 	case TARGET_OBJECT_FLASH:
   10471 	  return remote_flash_write (ops, offset, len, xfered_len,
   10472 				     writebuf);
   10473 
   10474 	default:
   10475 	  return TARGET_XFER_E_IO;
   10476 	}
   10477     }
   10478 
   10479   /* Map pre-existing objects onto letters.  DO NOT do this for new
   10480      objects!!!  Instead specify new query packets.  */
   10481   switch (object)
   10482     {
   10483     case TARGET_OBJECT_AVR:
   10484       query_type = 'R';
   10485       break;
   10486 
   10487     case TARGET_OBJECT_AUXV:
   10488       gdb_assert (annex == NULL);
   10489       return remote_read_qxfer (ops, "auxv", annex, readbuf, offset, len,
   10490 				xfered_len,
   10491 				&remote_protocol_packets[PACKET_qXfer_auxv]);
   10492 
   10493     case TARGET_OBJECT_AVAILABLE_FEATURES:
   10494       return remote_read_qxfer
   10495 	(ops, "features", annex, readbuf, offset, len, xfered_len,
   10496 	 &remote_protocol_packets[PACKET_qXfer_features]);
   10497 
   10498     case TARGET_OBJECT_LIBRARIES:
   10499       return remote_read_qxfer
   10500 	(ops, "libraries", annex, readbuf, offset, len, xfered_len,
   10501 	 &remote_protocol_packets[PACKET_qXfer_libraries]);
   10502 
   10503     case TARGET_OBJECT_LIBRARIES_SVR4:
   10504       return remote_read_qxfer
   10505 	(ops, "libraries-svr4", annex, readbuf, offset, len, xfered_len,
   10506 	 &remote_protocol_packets[PACKET_qXfer_libraries_svr4]);
   10507 
   10508     case TARGET_OBJECT_MEMORY_MAP:
   10509       gdb_assert (annex == NULL);
   10510       return remote_read_qxfer (ops, "memory-map", annex, readbuf, offset, len,
   10511 				 xfered_len,
   10512 				&remote_protocol_packets[PACKET_qXfer_memory_map]);
   10513 
   10514     case TARGET_OBJECT_OSDATA:
   10515       /* Should only get here if we're connected.  */
   10516       gdb_assert (rs->remote_desc);
   10517       return remote_read_qxfer
   10518 	(ops, "osdata", annex, readbuf, offset, len, xfered_len,
   10519         &remote_protocol_packets[PACKET_qXfer_osdata]);
   10520 
   10521     case TARGET_OBJECT_THREADS:
   10522       gdb_assert (annex == NULL);
   10523       return remote_read_qxfer (ops, "threads", annex, readbuf, offset, len,
   10524 				xfered_len,
   10525 				&remote_protocol_packets[PACKET_qXfer_threads]);
   10526 
   10527     case TARGET_OBJECT_TRACEFRAME_INFO:
   10528       gdb_assert (annex == NULL);
   10529       return remote_read_qxfer
   10530 	(ops, "traceframe-info", annex, readbuf, offset, len, xfered_len,
   10531 	 &remote_protocol_packets[PACKET_qXfer_traceframe_info]);
   10532 
   10533     case TARGET_OBJECT_FDPIC:
   10534       return remote_read_qxfer (ops, "fdpic", annex, readbuf, offset, len,
   10535 				xfered_len,
   10536 				&remote_protocol_packets[PACKET_qXfer_fdpic]);
   10537 
   10538     case TARGET_OBJECT_OPENVMS_UIB:
   10539       return remote_read_qxfer (ops, "uib", annex, readbuf, offset, len,
   10540 				xfered_len,
   10541 				&remote_protocol_packets[PACKET_qXfer_uib]);
   10542 
   10543     case TARGET_OBJECT_BTRACE:
   10544       return remote_read_qxfer (ops, "btrace", annex, readbuf, offset, len,
   10545 				xfered_len,
   10546         &remote_protocol_packets[PACKET_qXfer_btrace]);
   10547 
   10548     case TARGET_OBJECT_BTRACE_CONF:
   10549       return remote_read_qxfer (ops, "btrace-conf", annex, readbuf, offset,
   10550 				len, xfered_len,
   10551 	&remote_protocol_packets[PACKET_qXfer_btrace_conf]);
   10552 
   10553     case TARGET_OBJECT_EXEC_FILE:
   10554       return remote_read_qxfer (ops, "exec-file", annex, readbuf, offset,
   10555 				len, xfered_len,
   10556 	&remote_protocol_packets[PACKET_qXfer_exec_file]);
   10557 
   10558     default:
   10559       return TARGET_XFER_E_IO;
   10560     }
   10561 
   10562   /* Minimum outbuf size is get_remote_packet_size ().  If LEN is not
   10563      large enough let the caller deal with it.  */
   10564   if (len < get_remote_packet_size ())
   10565     return TARGET_XFER_E_IO;
   10566   len = get_remote_packet_size ();
   10567 
   10568   /* Except for querying the minimum buffer size, target must be open.  */
   10569   if (!rs->remote_desc)
   10570     error (_("remote query is only available after target open"));
   10571 
   10572   gdb_assert (annex != NULL);
   10573   gdb_assert (readbuf != NULL);
   10574 
   10575   p2 = rs->buf;
   10576   *p2++ = 'q';
   10577   *p2++ = query_type;
   10578 
   10579   /* We used one buffer char for the remote protocol q command and
   10580      another for the query type.  As the remote protocol encapsulation
   10581      uses 4 chars plus one extra in case we are debugging
   10582      (remote_debug), we have PBUFZIZ - 7 left to pack the query
   10583      string.  */
   10584   i = 0;
   10585   while (annex[i] && (i < (get_remote_packet_size () - 8)))
   10586     {
   10587       /* Bad caller may have sent forbidden characters.  */
   10588       gdb_assert (isprint (annex[i]) && annex[i] != '$' && annex[i] != '#');
   10589       *p2++ = annex[i];
   10590       i++;
   10591     }
   10592   *p2 = '\0';
   10593   gdb_assert (annex[i] == '\0');
   10594 
   10595   i = putpkt (rs->buf);
   10596   if (i < 0)
   10597     return TARGET_XFER_E_IO;
   10598 
   10599   getpkt (&rs->buf, &rs->buf_size, 0);
   10600   strcpy ((char *) readbuf, rs->buf);
   10601 
   10602   *xfered_len = strlen ((char *) readbuf);
   10603   return TARGET_XFER_OK;
   10604 }
   10605 
   10606 /* Implementation of to_get_memory_xfer_limit.  */
   10607 
   10608 static ULONGEST
   10609 remote_get_memory_xfer_limit (struct target_ops *ops)
   10610 {
   10611   return get_memory_write_packet_size ();
   10612 }
   10613 
   10614 static int
   10615 remote_search_memory (struct target_ops* ops,
   10616 		      CORE_ADDR start_addr, ULONGEST search_space_len,
   10617 		      const gdb_byte *pattern, ULONGEST pattern_len,
   10618 		      CORE_ADDR *found_addrp)
   10619 {
   10620   int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
   10621   struct remote_state *rs = get_remote_state ();
   10622   int max_size = get_memory_write_packet_size ();
   10623   struct packet_config *packet =
   10624     &remote_protocol_packets[PACKET_qSearch_memory];
   10625   /* Number of packet bytes used to encode the pattern;
   10626      this could be more than PATTERN_LEN due to escape characters.  */
   10627   int escaped_pattern_len;
   10628   /* Amount of pattern that was encodable in the packet.  */
   10629   int used_pattern_len;
   10630   int i;
   10631   int found;
   10632   ULONGEST found_addr;
   10633 
   10634   /* Don't go to the target if we don't have to.
   10635      This is done before checking packet->support to avoid the possibility that
   10636      a success for this edge case means the facility works in general.  */
   10637   if (pattern_len > search_space_len)
   10638     return 0;
   10639   if (pattern_len == 0)
   10640     {
   10641       *found_addrp = start_addr;
   10642       return 1;
   10643     }
   10644 
   10645   /* If we already know the packet isn't supported, fall back to the simple
   10646      way of searching memory.  */
   10647 
   10648   if (packet_config_support (packet) == PACKET_DISABLE)
   10649     {
   10650       /* Target doesn't provided special support, fall back and use the
   10651 	 standard support (copy memory and do the search here).  */
   10652       return simple_search_memory (ops, start_addr, search_space_len,
   10653 				   pattern, pattern_len, found_addrp);
   10654     }
   10655 
   10656   /* Make sure the remote is pointing at the right process.  */
   10657   set_general_process ();
   10658 
   10659   /* Insert header.  */
   10660   i = snprintf (rs->buf, max_size,
   10661 		"qSearch:memory:%s;%s;",
   10662 		phex_nz (start_addr, addr_size),
   10663 		phex_nz (search_space_len, sizeof (search_space_len)));
   10664   max_size -= (i + 1);
   10665 
   10666   /* Escape as much data as fits into rs->buf.  */
   10667   escaped_pattern_len =
   10668     remote_escape_output (pattern, pattern_len, 1, (gdb_byte *) rs->buf + i,
   10669 			  &used_pattern_len, max_size);
   10670 
   10671   /* Bail if the pattern is too large.  */
   10672   if (used_pattern_len != pattern_len)
   10673     error (_("Pattern is too large to transmit to remote target."));
   10674 
   10675   if (putpkt_binary (rs->buf, i + escaped_pattern_len) < 0
   10676       || getpkt_sane (&rs->buf, &rs->buf_size, 0) < 0
   10677       || packet_ok (rs->buf, packet) != PACKET_OK)
   10678     {
   10679       /* The request may not have worked because the command is not
   10680 	 supported.  If so, fall back to the simple way.  */
   10681       if (packet->support == PACKET_DISABLE)
   10682 	{
   10683 	  return simple_search_memory (ops, start_addr, search_space_len,
   10684 				       pattern, pattern_len, found_addrp);
   10685 	}
   10686       return -1;
   10687     }
   10688 
   10689   if (rs->buf[0] == '0')
   10690     found = 0;
   10691   else if (rs->buf[0] == '1')
   10692     {
   10693       found = 1;
   10694       if (rs->buf[1] != ',')
   10695 	error (_("Unknown qSearch:memory reply: %s"), rs->buf);
   10696       unpack_varlen_hex (rs->buf + 2, &found_addr);
   10697       *found_addrp = found_addr;
   10698     }
   10699   else
   10700     error (_("Unknown qSearch:memory reply: %s"), rs->buf);
   10701 
   10702   return found;
   10703 }
   10704 
   10705 static void
   10706 remote_rcmd (struct target_ops *self, const char *command,
   10707 	     struct ui_file *outbuf)
   10708 {
   10709   struct remote_state *rs = get_remote_state ();
   10710   char *p = rs->buf;
   10711 
   10712   if (!rs->remote_desc)
   10713     error (_("remote rcmd is only available after target open"));
   10714 
   10715   /* Send a NULL command across as an empty command.  */
   10716   if (command == NULL)
   10717     command = "";
   10718 
   10719   /* The query prefix.  */
   10720   strcpy (rs->buf, "qRcmd,");
   10721   p = strchr (rs->buf, '\0');
   10722 
   10723   if ((strlen (rs->buf) + strlen (command) * 2 + 8/*misc*/)
   10724       > get_remote_packet_size ())
   10725     error (_("\"monitor\" command ``%s'' is too long."), command);
   10726 
   10727   /* Encode the actual command.  */
   10728   bin2hex ((const gdb_byte *) command, p, strlen (command));
   10729 
   10730   if (putpkt (rs->buf) < 0)
   10731     error (_("Communication problem with target."));
   10732 
   10733   /* get/display the response */
   10734   while (1)
   10735     {
   10736       char *buf;
   10737 
   10738       /* XXX - see also remote_get_noisy_reply().  */
   10739       QUIT;			/* Allow user to bail out with ^C.  */
   10740       rs->buf[0] = '\0';
   10741       if (getpkt_sane (&rs->buf, &rs->buf_size, 0) == -1)
   10742         {
   10743           /* Timeout.  Continue to (try to) read responses.
   10744              This is better than stopping with an error, assuming the stub
   10745              is still executing the (long) monitor command.
   10746              If needed, the user can interrupt gdb using C-c, obtaining
   10747              an effect similar to stop on timeout.  */
   10748           continue;
   10749         }
   10750       buf = rs->buf;
   10751       if (buf[0] == '\0')
   10752 	error (_("Target does not support this command."));
   10753       if (buf[0] == 'O' && buf[1] != 'K')
   10754 	{
   10755 	  remote_console_output (buf + 1); /* 'O' message from stub.  */
   10756 	  continue;
   10757 	}
   10758       if (strcmp (buf, "OK") == 0)
   10759 	break;
   10760       if (strlen (buf) == 3 && buf[0] == 'E'
   10761 	  && isdigit (buf[1]) && isdigit (buf[2]))
   10762 	{
   10763 	  error (_("Protocol error with Rcmd"));
   10764 	}
   10765       for (p = buf; p[0] != '\0' && p[1] != '\0'; p += 2)
   10766 	{
   10767 	  char c = (fromhex (p[0]) << 4) + fromhex (p[1]);
   10768 
   10769 	  fputc_unfiltered (c, outbuf);
   10770 	}
   10771       break;
   10772     }
   10773 }
   10774 
   10775 static VEC(mem_region_s) *
   10776 remote_memory_map (struct target_ops *ops)
   10777 {
   10778   VEC(mem_region_s) *result = NULL;
   10779   char *text = target_read_stralloc (&current_target,
   10780 				     TARGET_OBJECT_MEMORY_MAP, NULL);
   10781 
   10782   if (text)
   10783     {
   10784       struct cleanup *back_to = make_cleanup (xfree, text);
   10785 
   10786       result = parse_memory_map (text);
   10787       do_cleanups (back_to);
   10788     }
   10789 
   10790   return result;
   10791 }
   10792 
   10793 static void
   10794 packet_command (char *args, int from_tty)
   10795 {
   10796   struct remote_state *rs = get_remote_state ();
   10797 
   10798   if (!rs->remote_desc)
   10799     error (_("command can only be used with remote target"));
   10800 
   10801   if (!args)
   10802     error (_("remote-packet command requires packet text as argument"));
   10803 
   10804   puts_filtered ("sending: ");
   10805   print_packet (args);
   10806   puts_filtered ("\n");
   10807   putpkt (args);
   10808 
   10809   getpkt (&rs->buf, &rs->buf_size, 0);
   10810   puts_filtered ("received: ");
   10811   print_packet (rs->buf);
   10812   puts_filtered ("\n");
   10813 }
   10814 
   10815 #if 0
   10816 /* --------- UNIT_TEST for THREAD oriented PACKETS ------------------- */
   10817 
   10818 static void display_thread_info (struct gdb_ext_thread_info *info);
   10819 
   10820 static void threadset_test_cmd (char *cmd, int tty);
   10821 
   10822 static void threadalive_test (char *cmd, int tty);
   10823 
   10824 static void threadlist_test_cmd (char *cmd, int tty);
   10825 
   10826 int get_and_display_threadinfo (threadref *ref);
   10827 
   10828 static void threadinfo_test_cmd (char *cmd, int tty);
   10829 
   10830 static int thread_display_step (threadref *ref, void *context);
   10831 
   10832 static void threadlist_update_test_cmd (char *cmd, int tty);
   10833 
   10834 static void init_remote_threadtests (void);
   10835 
   10836 #define SAMPLE_THREAD  0x05060708	/* Truncated 64 bit threadid.  */
   10837 
   10838 static void
   10839 threadset_test_cmd (char *cmd, int tty)
   10840 {
   10841   int sample_thread = SAMPLE_THREAD;
   10842 
   10843   printf_filtered (_("Remote threadset test\n"));
   10844   set_general_thread (sample_thread);
   10845 }
   10846 
   10847 
   10848 static void
   10849 threadalive_test (char *cmd, int tty)
   10850 {
   10851   int sample_thread = SAMPLE_THREAD;
   10852   int pid = ptid_get_pid (inferior_ptid);
   10853   ptid_t ptid = ptid_build (pid, sample_thread, 0);
   10854 
   10855   if (remote_thread_alive (ptid))
   10856     printf_filtered ("PASS: Thread alive test\n");
   10857   else
   10858     printf_filtered ("FAIL: Thread alive test\n");
   10859 }
   10860 
   10861 void output_threadid (char *title, threadref *ref);
   10862 
   10863 void
   10864 output_threadid (char *title, threadref *ref)
   10865 {
   10866   char hexid[20];
   10867 
   10868   pack_threadid (&hexid[0], ref);	/* Convert threead id into hex.  */
   10869   hexid[16] = 0;
   10870   printf_filtered ("%s  %s\n", title, (&hexid[0]));
   10871 }
   10872 
   10873 static void
   10874 threadlist_test_cmd (char *cmd, int tty)
   10875 {
   10876   int startflag = 1;
   10877   threadref nextthread;
   10878   int done, result_count;
   10879   threadref threadlist[3];
   10880 
   10881   printf_filtered ("Remote Threadlist test\n");
   10882   if (!remote_get_threadlist (startflag, &nextthread, 3, &done,
   10883 			      &result_count, &threadlist[0]))
   10884     printf_filtered ("FAIL: threadlist test\n");
   10885   else
   10886     {
   10887       threadref *scan = threadlist;
   10888       threadref *limit = scan + result_count;
   10889 
   10890       while (scan < limit)
   10891 	output_threadid (" thread ", scan++);
   10892     }
   10893 }
   10894 
   10895 void
   10896 display_thread_info (struct gdb_ext_thread_info *info)
   10897 {
   10898   output_threadid ("Threadid: ", &info->threadid);
   10899   printf_filtered ("Name: %s\n ", info->shortname);
   10900   printf_filtered ("State: %s\n", info->display);
   10901   printf_filtered ("other: %s\n\n", info->more_display);
   10902 }
   10903 
   10904 int
   10905 get_and_display_threadinfo (threadref *ref)
   10906 {
   10907   int result;
   10908   int set;
   10909   struct gdb_ext_thread_info threadinfo;
   10910 
   10911   set = TAG_THREADID | TAG_EXISTS | TAG_THREADNAME
   10912     | TAG_MOREDISPLAY | TAG_DISPLAY;
   10913   if (0 != (result = remote_get_threadinfo (ref, set, &threadinfo)))
   10914     display_thread_info (&threadinfo);
   10915   return result;
   10916 }
   10917 
   10918 static void
   10919 threadinfo_test_cmd (char *cmd, int tty)
   10920 {
   10921   int athread = SAMPLE_THREAD;
   10922   threadref thread;
   10923   int set;
   10924 
   10925   int_to_threadref (&thread, athread);
   10926   printf_filtered ("Remote Threadinfo test\n");
   10927   if (!get_and_display_threadinfo (&thread))
   10928     printf_filtered ("FAIL cannot get thread info\n");
   10929 }
   10930 
   10931 static int
   10932 thread_display_step (threadref *ref, void *context)
   10933 {
   10934   /* output_threadid(" threadstep ",ref); *//* simple test */
   10935   return get_and_display_threadinfo (ref);
   10936 }
   10937 
   10938 static void
   10939 threadlist_update_test_cmd (char *cmd, int tty)
   10940 {
   10941   printf_filtered ("Remote Threadlist update test\n");
   10942   remote_threadlist_iterator (thread_display_step, 0, CRAZY_MAX_THREADS);
   10943 }
   10944 
   10945 static void
   10946 init_remote_threadtests (void)
   10947 {
   10948   add_com ("tlist", class_obscure, threadlist_test_cmd,
   10949 	   _("Fetch and print the remote list of "
   10950 	     "thread identifiers, one pkt only"));
   10951   add_com ("tinfo", class_obscure, threadinfo_test_cmd,
   10952 	   _("Fetch and display info about one thread"));
   10953   add_com ("tset", class_obscure, threadset_test_cmd,
   10954 	   _("Test setting to a different thread"));
   10955   add_com ("tupd", class_obscure, threadlist_update_test_cmd,
   10956 	   _("Iterate through updating all remote thread info"));
   10957   add_com ("talive", class_obscure, threadalive_test,
   10958 	   _(" Remote thread alive test "));
   10959 }
   10960 
   10961 #endif /* 0 */
   10962 
   10963 /* Convert a thread ID to a string.  Returns the string in a static
   10964    buffer.  */
   10965 
   10966 static const char *
   10967 remote_pid_to_str (struct target_ops *ops, ptid_t ptid)
   10968 {
   10969   static char buf[64];
   10970   struct remote_state *rs = get_remote_state ();
   10971 
   10972   if (ptid_equal (ptid, null_ptid))
   10973     return normal_pid_to_str (ptid);
   10974   else if (ptid_is_pid (ptid))
   10975     {
   10976       /* Printing an inferior target id.  */
   10977 
   10978       /* When multi-process extensions are off, there's no way in the
   10979 	 remote protocol to know the remote process id, if there's any
   10980 	 at all.  There's one exception --- when we're connected with
   10981 	 target extended-remote, and we manually attached to a process
   10982 	 with "attach PID".  We don't record anywhere a flag that
   10983 	 allows us to distinguish that case from the case of
   10984 	 connecting with extended-remote and the stub already being
   10985 	 attached to a process, and reporting yes to qAttached, hence
   10986 	 no smart special casing here.  */
   10987       if (!remote_multi_process_p (rs))
   10988 	{
   10989 	  xsnprintf (buf, sizeof buf, "Remote target");
   10990 	  return buf;
   10991 	}
   10992 
   10993       return normal_pid_to_str (ptid);
   10994     }
   10995   else
   10996     {
   10997       if (ptid_equal (magic_null_ptid, ptid))
   10998 	xsnprintf (buf, sizeof buf, "Thread <main>");
   10999       else if (remote_multi_process_p (rs))
   11000 	if (ptid_get_lwp (ptid) == 0)
   11001 	  return normal_pid_to_str (ptid);
   11002 	else
   11003 	  xsnprintf (buf, sizeof buf, "Thread %d.%ld",
   11004 		     ptid_get_pid (ptid), ptid_get_lwp (ptid));
   11005       else
   11006 	xsnprintf (buf, sizeof buf, "Thread %ld",
   11007 		   ptid_get_lwp (ptid));
   11008       return buf;
   11009     }
   11010 }
   11011 
   11012 /* Get the address of the thread local variable in OBJFILE which is
   11013    stored at OFFSET within the thread local storage for thread PTID.  */
   11014 
   11015 static CORE_ADDR
   11016 remote_get_thread_local_address (struct target_ops *ops,
   11017 				 ptid_t ptid, CORE_ADDR lm, CORE_ADDR offset)
   11018 {
   11019   if (packet_support (PACKET_qGetTLSAddr) != PACKET_DISABLE)
   11020     {
   11021       struct remote_state *rs = get_remote_state ();
   11022       char *p = rs->buf;
   11023       char *endp = rs->buf + get_remote_packet_size ();
   11024       enum packet_result result;
   11025 
   11026       strcpy (p, "qGetTLSAddr:");
   11027       p += strlen (p);
   11028       p = write_ptid (p, endp, ptid);
   11029       *p++ = ',';
   11030       p += hexnumstr (p, offset);
   11031       *p++ = ',';
   11032       p += hexnumstr (p, lm);
   11033       *p++ = '\0';
   11034 
   11035       putpkt (rs->buf);
   11036       getpkt (&rs->buf, &rs->buf_size, 0);
   11037       result = packet_ok (rs->buf,
   11038 			  &remote_protocol_packets[PACKET_qGetTLSAddr]);
   11039       if (result == PACKET_OK)
   11040 	{
   11041 	  ULONGEST result;
   11042 
   11043 	  unpack_varlen_hex (rs->buf, &result);
   11044 	  return result;
   11045 	}
   11046       else if (result == PACKET_UNKNOWN)
   11047 	throw_error (TLS_GENERIC_ERROR,
   11048 		     _("Remote target doesn't support qGetTLSAddr packet"));
   11049       else
   11050 	throw_error (TLS_GENERIC_ERROR,
   11051 		     _("Remote target failed to process qGetTLSAddr request"));
   11052     }
   11053   else
   11054     throw_error (TLS_GENERIC_ERROR,
   11055 		 _("TLS not supported or disabled on this target"));
   11056   /* Not reached.  */
   11057   return 0;
   11058 }
   11059 
   11060 /* Provide thread local base, i.e. Thread Information Block address.
   11061    Returns 1 if ptid is found and thread_local_base is non zero.  */
   11062 
   11063 static int
   11064 remote_get_tib_address (struct target_ops *self, ptid_t ptid, CORE_ADDR *addr)
   11065 {
   11066   if (packet_support (PACKET_qGetTIBAddr) != PACKET_DISABLE)
   11067     {
   11068       struct remote_state *rs = get_remote_state ();
   11069       char *p = rs->buf;
   11070       char *endp = rs->buf + get_remote_packet_size ();
   11071       enum packet_result result;
   11072 
   11073       strcpy (p, "qGetTIBAddr:");
   11074       p += strlen (p);
   11075       p = write_ptid (p, endp, ptid);
   11076       *p++ = '\0';
   11077 
   11078       putpkt (rs->buf);
   11079       getpkt (&rs->buf, &rs->buf_size, 0);
   11080       result = packet_ok (rs->buf,
   11081 			  &remote_protocol_packets[PACKET_qGetTIBAddr]);
   11082       if (result == PACKET_OK)
   11083 	{
   11084 	  ULONGEST result;
   11085 
   11086 	  unpack_varlen_hex (rs->buf, &result);
   11087 	  if (addr)
   11088 	    *addr = (CORE_ADDR) result;
   11089 	  return 1;
   11090 	}
   11091       else if (result == PACKET_UNKNOWN)
   11092 	error (_("Remote target doesn't support qGetTIBAddr packet"));
   11093       else
   11094 	error (_("Remote target failed to process qGetTIBAddr request"));
   11095     }
   11096   else
   11097     error (_("qGetTIBAddr not supported or disabled on this target"));
   11098   /* Not reached.  */
   11099   return 0;
   11100 }
   11101 
   11102 /* Support for inferring a target description based on the current
   11103    architecture and the size of a 'g' packet.  While the 'g' packet
   11104    can have any size (since optional registers can be left off the
   11105    end), some sizes are easily recognizable given knowledge of the
   11106    approximate architecture.  */
   11107 
   11108 struct remote_g_packet_guess
   11109 {
   11110   int bytes;
   11111   const struct target_desc *tdesc;
   11112 };
   11113 typedef struct remote_g_packet_guess remote_g_packet_guess_s;
   11114 DEF_VEC_O(remote_g_packet_guess_s);
   11115 
   11116 struct remote_g_packet_data
   11117 {
   11118   VEC(remote_g_packet_guess_s) *guesses;
   11119 };
   11120 
   11121 static struct gdbarch_data *remote_g_packet_data_handle;
   11122 
   11123 static void *
   11124 remote_g_packet_data_init (struct obstack *obstack)
   11125 {
   11126   return OBSTACK_ZALLOC (obstack, struct remote_g_packet_data);
   11127 }
   11128 
   11129 void
   11130 register_remote_g_packet_guess (struct gdbarch *gdbarch, int bytes,
   11131 				const struct target_desc *tdesc)
   11132 {
   11133   struct remote_g_packet_data *data
   11134     = ((struct remote_g_packet_data *)
   11135        gdbarch_data (gdbarch, remote_g_packet_data_handle));
   11136   struct remote_g_packet_guess new_guess, *guess;
   11137   int ix;
   11138 
   11139   gdb_assert (tdesc != NULL);
   11140 
   11141   for (ix = 0;
   11142        VEC_iterate (remote_g_packet_guess_s, data->guesses, ix, guess);
   11143        ix++)
   11144     if (guess->bytes == bytes)
   11145       internal_error (__FILE__, __LINE__,
   11146 		      _("Duplicate g packet description added for size %d"),
   11147 		      bytes);
   11148 
   11149   new_guess.bytes = bytes;
   11150   new_guess.tdesc = tdesc;
   11151   VEC_safe_push (remote_g_packet_guess_s, data->guesses, &new_guess);
   11152 }
   11153 
   11154 /* Return 1 if remote_read_description would do anything on this target
   11155    and architecture, 0 otherwise.  */
   11156 
   11157 static int
   11158 remote_read_description_p (struct target_ops *target)
   11159 {
   11160   struct remote_g_packet_data *data
   11161     = ((struct remote_g_packet_data *)
   11162        gdbarch_data (target_gdbarch (), remote_g_packet_data_handle));
   11163 
   11164   if (!VEC_empty (remote_g_packet_guess_s, data->guesses))
   11165     return 1;
   11166 
   11167   return 0;
   11168 }
   11169 
   11170 static const struct target_desc *
   11171 remote_read_description (struct target_ops *target)
   11172 {
   11173   struct remote_g_packet_data *data
   11174     = ((struct remote_g_packet_data *)
   11175        gdbarch_data (target_gdbarch (), remote_g_packet_data_handle));
   11176 
   11177   /* Do not try this during initial connection, when we do not know
   11178      whether there is a running but stopped thread.  */
   11179   if (!target_has_execution || ptid_equal (inferior_ptid, null_ptid))
   11180     return target->beneath->to_read_description (target->beneath);
   11181 
   11182   if (!VEC_empty (remote_g_packet_guess_s, data->guesses))
   11183     {
   11184       struct remote_g_packet_guess *guess;
   11185       int ix;
   11186       int bytes = send_g_packet ();
   11187 
   11188       for (ix = 0;
   11189 	   VEC_iterate (remote_g_packet_guess_s, data->guesses, ix, guess);
   11190 	   ix++)
   11191 	if (guess->bytes == bytes)
   11192 	  return guess->tdesc;
   11193 
   11194       /* We discard the g packet.  A minor optimization would be to
   11195 	 hold on to it, and fill the register cache once we have selected
   11196 	 an architecture, but it's too tricky to do safely.  */
   11197     }
   11198 
   11199   return target->beneath->to_read_description (target->beneath);
   11200 }
   11201 
   11202 /* Remote file transfer support.  This is host-initiated I/O, not
   11203    target-initiated; for target-initiated, see remote-fileio.c.  */
   11204 
   11205 /* If *LEFT is at least the length of STRING, copy STRING to
   11206    *BUFFER, update *BUFFER to point to the new end of the buffer, and
   11207    decrease *LEFT.  Otherwise raise an error.  */
   11208 
   11209 static void
   11210 remote_buffer_add_string (char **buffer, int *left, const char *string)
   11211 {
   11212   int len = strlen (string);
   11213 
   11214   if (len > *left)
   11215     error (_("Packet too long for target."));
   11216 
   11217   memcpy (*buffer, string, len);
   11218   *buffer += len;
   11219   *left -= len;
   11220 
   11221   /* NUL-terminate the buffer as a convenience, if there is
   11222      room.  */
   11223   if (*left)
   11224     **buffer = '\0';
   11225 }
   11226 
   11227 /* If *LEFT is large enough, hex encode LEN bytes from BYTES into
   11228    *BUFFER, update *BUFFER to point to the new end of the buffer, and
   11229    decrease *LEFT.  Otherwise raise an error.  */
   11230 
   11231 static void
   11232 remote_buffer_add_bytes (char **buffer, int *left, const gdb_byte *bytes,
   11233 			 int len)
   11234 {
   11235   if (2 * len > *left)
   11236     error (_("Packet too long for target."));
   11237 
   11238   bin2hex (bytes, *buffer, len);
   11239   *buffer += 2 * len;
   11240   *left -= 2 * len;
   11241 
   11242   /* NUL-terminate the buffer as a convenience, if there is
   11243      room.  */
   11244   if (*left)
   11245     **buffer = '\0';
   11246 }
   11247 
   11248 /* If *LEFT is large enough, convert VALUE to hex and add it to
   11249    *BUFFER, update *BUFFER to point to the new end of the buffer, and
   11250    decrease *LEFT.  Otherwise raise an error.  */
   11251 
   11252 static void
   11253 remote_buffer_add_int (char **buffer, int *left, ULONGEST value)
   11254 {
   11255   int len = hexnumlen (value);
   11256 
   11257   if (len > *left)
   11258     error (_("Packet too long for target."));
   11259 
   11260   hexnumstr (*buffer, value);
   11261   *buffer += len;
   11262   *left -= len;
   11263 
   11264   /* NUL-terminate the buffer as a convenience, if there is
   11265      room.  */
   11266   if (*left)
   11267     **buffer = '\0';
   11268 }
   11269 
   11270 /* Parse an I/O result packet from BUFFER.  Set RETCODE to the return
   11271    value, *REMOTE_ERRNO to the remote error number or zero if none
   11272    was included, and *ATTACHMENT to point to the start of the annex
   11273    if any.  The length of the packet isn't needed here; there may
   11274    be NUL bytes in BUFFER, but they will be after *ATTACHMENT.
   11275 
   11276    Return 0 if the packet could be parsed, -1 if it could not.  If
   11277    -1 is returned, the other variables may not be initialized.  */
   11278 
   11279 static int
   11280 remote_hostio_parse_result (char *buffer, int *retcode,
   11281 			    int *remote_errno, char **attachment)
   11282 {
   11283   char *p, *p2;
   11284 
   11285   *remote_errno = 0;
   11286   *attachment = NULL;
   11287 
   11288   if (buffer[0] != 'F')
   11289     return -1;
   11290 
   11291   errno = 0;
   11292   *retcode = strtol (&buffer[1], &p, 16);
   11293   if (errno != 0 || p == &buffer[1])
   11294     return -1;
   11295 
   11296   /* Check for ",errno".  */
   11297   if (*p == ',')
   11298     {
   11299       errno = 0;
   11300       *remote_errno = strtol (p + 1, &p2, 16);
   11301       if (errno != 0 || p + 1 == p2)
   11302 	return -1;
   11303       p = p2;
   11304     }
   11305 
   11306   /* Check for ";attachment".  If there is no attachment, the
   11307      packet should end here.  */
   11308   if (*p == ';')
   11309     {
   11310       *attachment = p + 1;
   11311       return 0;
   11312     }
   11313   else if (*p == '\0')
   11314     return 0;
   11315   else
   11316     return -1;
   11317 }
   11318 
   11319 /* Send a prepared I/O packet to the target and read its response.
   11320    The prepared packet is in the global RS->BUF before this function
   11321    is called, and the answer is there when we return.
   11322 
   11323    COMMAND_BYTES is the length of the request to send, which may include
   11324    binary data.  WHICH_PACKET is the packet configuration to check
   11325    before attempting a packet.  If an error occurs, *REMOTE_ERRNO
   11326    is set to the error number and -1 is returned.  Otherwise the value
   11327    returned by the function is returned.
   11328 
   11329    ATTACHMENT and ATTACHMENT_LEN should be non-NULL if and only if an
   11330    attachment is expected; an error will be reported if there's a
   11331    mismatch.  If one is found, *ATTACHMENT will be set to point into
   11332    the packet buffer and *ATTACHMENT_LEN will be set to the
   11333    attachment's length.  */
   11334 
   11335 static int
   11336 remote_hostio_send_command (int command_bytes, int which_packet,
   11337 			    int *remote_errno, char **attachment,
   11338 			    int *attachment_len)
   11339 {
   11340   struct remote_state *rs = get_remote_state ();
   11341   int ret, bytes_read;
   11342   char *attachment_tmp;
   11343 
   11344   if (!rs->remote_desc
   11345       || packet_support (which_packet) == PACKET_DISABLE)
   11346     {
   11347       *remote_errno = FILEIO_ENOSYS;
   11348       return -1;
   11349     }
   11350 
   11351   putpkt_binary (rs->buf, command_bytes);
   11352   bytes_read = getpkt_sane (&rs->buf, &rs->buf_size, 0);
   11353 
   11354   /* If it timed out, something is wrong.  Don't try to parse the
   11355      buffer.  */
   11356   if (bytes_read < 0)
   11357     {
   11358       *remote_errno = FILEIO_EINVAL;
   11359       return -1;
   11360     }
   11361 
   11362   switch (packet_ok (rs->buf, &remote_protocol_packets[which_packet]))
   11363     {
   11364     case PACKET_ERROR:
   11365       *remote_errno = FILEIO_EINVAL;
   11366       return -1;
   11367     case PACKET_UNKNOWN:
   11368       *remote_errno = FILEIO_ENOSYS;
   11369       return -1;
   11370     case PACKET_OK:
   11371       break;
   11372     }
   11373 
   11374   if (remote_hostio_parse_result (rs->buf, &ret, remote_errno,
   11375 				  &attachment_tmp))
   11376     {
   11377       *remote_errno = FILEIO_EINVAL;
   11378       return -1;
   11379     }
   11380 
   11381   /* Make sure we saw an attachment if and only if we expected one.  */
   11382   if ((attachment_tmp == NULL && attachment != NULL)
   11383       || (attachment_tmp != NULL && attachment == NULL))
   11384     {
   11385       *remote_errno = FILEIO_EINVAL;
   11386       return -1;
   11387     }
   11388 
   11389   /* If an attachment was found, it must point into the packet buffer;
   11390      work out how many bytes there were.  */
   11391   if (attachment_tmp != NULL)
   11392     {
   11393       *attachment = attachment_tmp;
   11394       *attachment_len = bytes_read - (*attachment - rs->buf);
   11395     }
   11396 
   11397   return ret;
   11398 }
   11399 
   11400 /* Invalidate the readahead cache.  */
   11401 
   11402 static void
   11403 readahead_cache_invalidate (void)
   11404 {
   11405   struct remote_state *rs = get_remote_state ();
   11406 
   11407   rs->readahead_cache.fd = -1;
   11408 }
   11409 
   11410 /* Invalidate the readahead cache if it is holding data for FD.  */
   11411 
   11412 static void
   11413 readahead_cache_invalidate_fd (int fd)
   11414 {
   11415   struct remote_state *rs = get_remote_state ();
   11416 
   11417   if (rs->readahead_cache.fd == fd)
   11418     rs->readahead_cache.fd = -1;
   11419 }
   11420 
   11421 /* Set the filesystem remote_hostio functions that take FILENAME
   11422    arguments will use.  Return 0 on success, or -1 if an error
   11423    occurs (and set *REMOTE_ERRNO).  */
   11424 
   11425 static int
   11426 remote_hostio_set_filesystem (struct inferior *inf, int *remote_errno)
   11427 {
   11428   struct remote_state *rs = get_remote_state ();
   11429   int required_pid = (inf == NULL || inf->fake_pid_p) ? 0 : inf->pid;
   11430   char *p = rs->buf;
   11431   int left = get_remote_packet_size () - 1;
   11432   char arg[9];
   11433   int ret;
   11434 
   11435   if (packet_support (PACKET_vFile_setfs) == PACKET_DISABLE)
   11436     return 0;
   11437 
   11438   if (rs->fs_pid != -1 && required_pid == rs->fs_pid)
   11439     return 0;
   11440 
   11441   remote_buffer_add_string (&p, &left, "vFile:setfs:");
   11442 
   11443   xsnprintf (arg, sizeof (arg), "%x", required_pid);
   11444   remote_buffer_add_string (&p, &left, arg);
   11445 
   11446   ret = remote_hostio_send_command (p - rs->buf, PACKET_vFile_setfs,
   11447 				    remote_errno, NULL, NULL);
   11448 
   11449   if (packet_support (PACKET_vFile_setfs) == PACKET_DISABLE)
   11450     return 0;
   11451 
   11452   if (ret == 0)
   11453     rs->fs_pid = required_pid;
   11454 
   11455   return ret;
   11456 }
   11457 
   11458 /* Implementation of to_fileio_open.  */
   11459 
   11460 static int
   11461 remote_hostio_open (struct target_ops *self,
   11462 		    struct inferior *inf, const char *filename,
   11463 		    int flags, int mode, int warn_if_slow,
   11464 		    int *remote_errno)
   11465 {
   11466   struct remote_state *rs = get_remote_state ();
   11467   char *p = rs->buf;
   11468   int left = get_remote_packet_size () - 1;
   11469 
   11470   if (warn_if_slow)
   11471     {
   11472       static int warning_issued = 0;
   11473 
   11474       printf_unfiltered (_("Reading %s from remote target...\n"),
   11475 			 filename);
   11476 
   11477       if (!warning_issued)
   11478 	{
   11479 	  warning (_("File transfers from remote targets can be slow."
   11480 		     " Use \"set sysroot\" to access files locally"
   11481 		     " instead."));
   11482 	  warning_issued = 1;
   11483 	}
   11484     }
   11485 
   11486   if (remote_hostio_set_filesystem (inf, remote_errno) != 0)
   11487     return -1;
   11488 
   11489   remote_buffer_add_string (&p, &left, "vFile:open:");
   11490 
   11491   remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
   11492 			   strlen (filename));
   11493   remote_buffer_add_string (&p, &left, ",");
   11494 
   11495   remote_buffer_add_int (&p, &left, flags);
   11496   remote_buffer_add_string (&p, &left, ",");
   11497 
   11498   remote_buffer_add_int (&p, &left, mode);
   11499 
   11500   return remote_hostio_send_command (p - rs->buf, PACKET_vFile_open,
   11501 				     remote_errno, NULL, NULL);
   11502 }
   11503 
   11504 /* Implementation of to_fileio_pwrite.  */
   11505 
   11506 static int
   11507 remote_hostio_pwrite (struct target_ops *self,
   11508 		      int fd, const gdb_byte *write_buf, int len,
   11509 		      ULONGEST offset, int *remote_errno)
   11510 {
   11511   struct remote_state *rs = get_remote_state ();
   11512   char *p = rs->buf;
   11513   int left = get_remote_packet_size ();
   11514   int out_len;
   11515 
   11516   readahead_cache_invalidate_fd (fd);
   11517 
   11518   remote_buffer_add_string (&p, &left, "vFile:pwrite:");
   11519 
   11520   remote_buffer_add_int (&p, &left, fd);
   11521   remote_buffer_add_string (&p, &left, ",");
   11522 
   11523   remote_buffer_add_int (&p, &left, offset);
   11524   remote_buffer_add_string (&p, &left, ",");
   11525 
   11526   p += remote_escape_output (write_buf, len, 1, (gdb_byte *) p, &out_len,
   11527 			     get_remote_packet_size () - (p - rs->buf));
   11528 
   11529   return remote_hostio_send_command (p - rs->buf, PACKET_vFile_pwrite,
   11530 				     remote_errno, NULL, NULL);
   11531 }
   11532 
   11533 /* Helper for the implementation of to_fileio_pread.  Read the file
   11534    from the remote side with vFile:pread.  */
   11535 
   11536 static int
   11537 remote_hostio_pread_vFile (struct target_ops *self,
   11538 			   int fd, gdb_byte *read_buf, int len,
   11539 			   ULONGEST offset, int *remote_errno)
   11540 {
   11541   struct remote_state *rs = get_remote_state ();
   11542   char *p = rs->buf;
   11543   char *attachment;
   11544   int left = get_remote_packet_size ();
   11545   int ret, attachment_len;
   11546   int read_len;
   11547 
   11548   remote_buffer_add_string (&p, &left, "vFile:pread:");
   11549 
   11550   remote_buffer_add_int (&p, &left, fd);
   11551   remote_buffer_add_string (&p, &left, ",");
   11552 
   11553   remote_buffer_add_int (&p, &left, len);
   11554   remote_buffer_add_string (&p, &left, ",");
   11555 
   11556   remote_buffer_add_int (&p, &left, offset);
   11557 
   11558   ret = remote_hostio_send_command (p - rs->buf, PACKET_vFile_pread,
   11559 				    remote_errno, &attachment,
   11560 				    &attachment_len);
   11561 
   11562   if (ret < 0)
   11563     return ret;
   11564 
   11565   read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len,
   11566 				    read_buf, len);
   11567   if (read_len != ret)
   11568     error (_("Read returned %d, but %d bytes."), ret, (int) read_len);
   11569 
   11570   return ret;
   11571 }
   11572 
   11573 /* Serve pread from the readahead cache.  Returns number of bytes
   11574    read, or 0 if the request can't be served from the cache.  */
   11575 
   11576 static int
   11577 remote_hostio_pread_from_cache (struct remote_state *rs,
   11578 				int fd, gdb_byte *read_buf, size_t len,
   11579 				ULONGEST offset)
   11580 {
   11581   struct readahead_cache *cache = &rs->readahead_cache;
   11582 
   11583   if (cache->fd == fd
   11584       && cache->offset <= offset
   11585       && offset < cache->offset + cache->bufsize)
   11586     {
   11587       ULONGEST max = cache->offset + cache->bufsize;
   11588 
   11589       if (offset + len > max)
   11590 	len = max - offset;
   11591 
   11592       memcpy (read_buf, cache->buf + offset - cache->offset, len);
   11593       return len;
   11594     }
   11595 
   11596   return 0;
   11597 }
   11598 
   11599 /* Implementation of to_fileio_pread.  */
   11600 
   11601 static int
   11602 remote_hostio_pread (struct target_ops *self,
   11603 		     int fd, gdb_byte *read_buf, int len,
   11604 		     ULONGEST offset, int *remote_errno)
   11605 {
   11606   int ret;
   11607   struct remote_state *rs = get_remote_state ();
   11608   struct readahead_cache *cache = &rs->readahead_cache;
   11609 
   11610   ret = remote_hostio_pread_from_cache (rs, fd, read_buf, len, offset);
   11611   if (ret > 0)
   11612     {
   11613       cache->hit_count++;
   11614 
   11615       if (remote_debug)
   11616 	fprintf_unfiltered (gdb_stdlog, "readahead cache hit %s\n",
   11617 			    pulongest (cache->hit_count));
   11618       return ret;
   11619     }
   11620 
   11621   cache->miss_count++;
   11622   if (remote_debug)
   11623     fprintf_unfiltered (gdb_stdlog, "readahead cache miss %s\n",
   11624 			pulongest (cache->miss_count));
   11625 
   11626   cache->fd = fd;
   11627   cache->offset = offset;
   11628   cache->bufsize = get_remote_packet_size ();
   11629   cache->buf = (gdb_byte *) xrealloc (cache->buf, cache->bufsize);
   11630 
   11631   ret = remote_hostio_pread_vFile (self, cache->fd, cache->buf, cache->bufsize,
   11632 				   cache->offset, remote_errno);
   11633   if (ret <= 0)
   11634     {
   11635       readahead_cache_invalidate_fd (fd);
   11636       return ret;
   11637     }
   11638 
   11639   cache->bufsize = ret;
   11640   return remote_hostio_pread_from_cache (rs, fd, read_buf, len, offset);
   11641 }
   11642 
   11643 /* Implementation of to_fileio_close.  */
   11644 
   11645 static int
   11646 remote_hostio_close (struct target_ops *self, int fd, int *remote_errno)
   11647 {
   11648   struct remote_state *rs = get_remote_state ();
   11649   char *p = rs->buf;
   11650   int left = get_remote_packet_size () - 1;
   11651 
   11652   readahead_cache_invalidate_fd (fd);
   11653 
   11654   remote_buffer_add_string (&p, &left, "vFile:close:");
   11655 
   11656   remote_buffer_add_int (&p, &left, fd);
   11657 
   11658   return remote_hostio_send_command (p - rs->buf, PACKET_vFile_close,
   11659 				     remote_errno, NULL, NULL);
   11660 }
   11661 
   11662 /* Implementation of to_fileio_unlink.  */
   11663 
   11664 static int
   11665 remote_hostio_unlink (struct target_ops *self,
   11666 		      struct inferior *inf, const char *filename,
   11667 		      int *remote_errno)
   11668 {
   11669   struct remote_state *rs = get_remote_state ();
   11670   char *p = rs->buf;
   11671   int left = get_remote_packet_size () - 1;
   11672 
   11673   if (remote_hostio_set_filesystem (inf, remote_errno) != 0)
   11674     return -1;
   11675 
   11676   remote_buffer_add_string (&p, &left, "vFile:unlink:");
   11677 
   11678   remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
   11679 			   strlen (filename));
   11680 
   11681   return remote_hostio_send_command (p - rs->buf, PACKET_vFile_unlink,
   11682 				     remote_errno, NULL, NULL);
   11683 }
   11684 
   11685 /* Implementation of to_fileio_readlink.  */
   11686 
   11687 static char *
   11688 remote_hostio_readlink (struct target_ops *self,
   11689 			struct inferior *inf, const char *filename,
   11690 			int *remote_errno)
   11691 {
   11692   struct remote_state *rs = get_remote_state ();
   11693   char *p = rs->buf;
   11694   char *attachment;
   11695   int left = get_remote_packet_size ();
   11696   int len, attachment_len;
   11697   int read_len;
   11698   char *ret;
   11699 
   11700   if (remote_hostio_set_filesystem (inf, remote_errno) != 0)
   11701     return NULL;
   11702 
   11703   remote_buffer_add_string (&p, &left, "vFile:readlink:");
   11704 
   11705   remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
   11706 			   strlen (filename));
   11707 
   11708   len = remote_hostio_send_command (p - rs->buf, PACKET_vFile_readlink,
   11709 				    remote_errno, &attachment,
   11710 				    &attachment_len);
   11711 
   11712   if (len < 0)
   11713     return NULL;
   11714 
   11715   ret = (char *) xmalloc (len + 1);
   11716 
   11717   read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len,
   11718 				    (gdb_byte *) ret, len);
   11719   if (read_len != len)
   11720     error (_("Readlink returned %d, but %d bytes."), len, read_len);
   11721 
   11722   ret[len] = '\0';
   11723   return ret;
   11724 }
   11725 
   11726 /* Implementation of to_fileio_fstat.  */
   11727 
   11728 static int
   11729 remote_hostio_fstat (struct target_ops *self,
   11730 		     int fd, struct stat *st,
   11731 		     int *remote_errno)
   11732 {
   11733   struct remote_state *rs = get_remote_state ();
   11734   char *p = rs->buf;
   11735   int left = get_remote_packet_size ();
   11736   int attachment_len, ret;
   11737   char *attachment;
   11738   struct fio_stat fst;
   11739   int read_len;
   11740 
   11741   remote_buffer_add_string (&p, &left, "vFile:fstat:");
   11742 
   11743   remote_buffer_add_int (&p, &left, fd);
   11744 
   11745   ret = remote_hostio_send_command (p - rs->buf, PACKET_vFile_fstat,
   11746 				    remote_errno, &attachment,
   11747 				    &attachment_len);
   11748   if (ret < 0)
   11749     {
   11750       if (*remote_errno != FILEIO_ENOSYS)
   11751 	return ret;
   11752 
   11753       /* Strictly we should return -1, ENOSYS here, but when
   11754 	 "set sysroot remote:" was implemented in August 2008
   11755 	 BFD's need for a stat function was sidestepped with
   11756 	 this hack.  This was not remedied until March 2015
   11757 	 so we retain the previous behavior to avoid breaking
   11758 	 compatibility.
   11759 
   11760 	 Note that the memset is a March 2015 addition; older
   11761 	 GDBs set st_size *and nothing else* so the structure
   11762 	 would have garbage in all other fields.  This might
   11763 	 break something but retaining the previous behavior
   11764 	 here would be just too wrong.  */
   11765 
   11766       memset (st, 0, sizeof (struct stat));
   11767       st->st_size = INT_MAX;
   11768       return 0;
   11769     }
   11770 
   11771   read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len,
   11772 				    (gdb_byte *) &fst, sizeof (fst));
   11773 
   11774   if (read_len != ret)
   11775     error (_("vFile:fstat returned %d, but %d bytes."), ret, read_len);
   11776 
   11777   if (read_len != sizeof (fst))
   11778     error (_("vFile:fstat returned %d bytes, but expecting %d."),
   11779 	   read_len, (int) sizeof (fst));
   11780 
   11781   remote_fileio_to_host_stat (&fst, st);
   11782 
   11783   return 0;
   11784 }
   11785 
   11786 /* Implementation of to_filesystem_is_local.  */
   11787 
   11788 static int
   11789 remote_filesystem_is_local (struct target_ops *self)
   11790 {
   11791   /* Valgrind GDB presents itself as a remote target but works
   11792      on the local filesystem: it does not implement remote get
   11793      and users are not expected to set a sysroot.  To handle
   11794      this case we treat the remote filesystem as local if the
   11795      sysroot is exactly TARGET_SYSROOT_PREFIX and if the stub
   11796      does not support vFile:open.  */
   11797   if (strcmp (gdb_sysroot, TARGET_SYSROOT_PREFIX) == 0)
   11798     {
   11799       enum packet_support ps = packet_support (PACKET_vFile_open);
   11800 
   11801       if (ps == PACKET_SUPPORT_UNKNOWN)
   11802 	{
   11803 	  int fd, remote_errno;
   11804 
   11805 	  /* Try opening a file to probe support.  The supplied
   11806 	     filename is irrelevant, we only care about whether
   11807 	     the stub recognizes the packet or not.  */
   11808 	  fd = remote_hostio_open (self, NULL, "just probing",
   11809 				   FILEIO_O_RDONLY, 0700, 0,
   11810 				   &remote_errno);
   11811 
   11812 	  if (fd >= 0)
   11813 	    remote_hostio_close (self, fd, &remote_errno);
   11814 
   11815 	  ps = packet_support (PACKET_vFile_open);
   11816 	}
   11817 
   11818       if (ps == PACKET_DISABLE)
   11819 	{
   11820 	  static int warning_issued = 0;
   11821 
   11822 	  if (!warning_issued)
   11823 	    {
   11824 	      warning (_("remote target does not support file"
   11825 			 " transfer, attempting to access files"
   11826 			 " from local filesystem."));
   11827 	      warning_issued = 1;
   11828 	    }
   11829 
   11830 	  return 1;
   11831 	}
   11832     }
   11833 
   11834   return 0;
   11835 }
   11836 
   11837 static int
   11838 remote_fileio_errno_to_host (int errnum)
   11839 {
   11840   switch (errnum)
   11841     {
   11842       case FILEIO_EPERM:
   11843         return EPERM;
   11844       case FILEIO_ENOENT:
   11845         return ENOENT;
   11846       case FILEIO_EINTR:
   11847         return EINTR;
   11848       case FILEIO_EIO:
   11849         return EIO;
   11850       case FILEIO_EBADF:
   11851         return EBADF;
   11852       case FILEIO_EACCES:
   11853         return EACCES;
   11854       case FILEIO_EFAULT:
   11855         return EFAULT;
   11856       case FILEIO_EBUSY:
   11857         return EBUSY;
   11858       case FILEIO_EEXIST:
   11859         return EEXIST;
   11860       case FILEIO_ENODEV:
   11861         return ENODEV;
   11862       case FILEIO_ENOTDIR:
   11863         return ENOTDIR;
   11864       case FILEIO_EISDIR:
   11865         return EISDIR;
   11866       case FILEIO_EINVAL:
   11867         return EINVAL;
   11868       case FILEIO_ENFILE:
   11869         return ENFILE;
   11870       case FILEIO_EMFILE:
   11871         return EMFILE;
   11872       case FILEIO_EFBIG:
   11873         return EFBIG;
   11874       case FILEIO_ENOSPC:
   11875         return ENOSPC;
   11876       case FILEIO_ESPIPE:
   11877         return ESPIPE;
   11878       case FILEIO_EROFS:
   11879         return EROFS;
   11880       case FILEIO_ENOSYS:
   11881         return ENOSYS;
   11882       case FILEIO_ENAMETOOLONG:
   11883         return ENAMETOOLONG;
   11884     }
   11885   return -1;
   11886 }
   11887 
   11888 static char *
   11889 remote_hostio_error (int errnum)
   11890 {
   11891   int host_error = remote_fileio_errno_to_host (errnum);
   11892 
   11893   if (host_error == -1)
   11894     error (_("Unknown remote I/O error %d"), errnum);
   11895   else
   11896     error (_("Remote I/O error: %s"), safe_strerror (host_error));
   11897 }
   11898 
   11899 static void
   11900 remote_hostio_close_cleanup (void *opaque)
   11901 {
   11902   int fd = *(int *) opaque;
   11903   int remote_errno;
   11904 
   11905   remote_hostio_close (find_target_at (process_stratum), fd, &remote_errno);
   11906 }
   11907 
   11908 void
   11909 remote_file_put (const char *local_file, const char *remote_file, int from_tty)
   11910 {
   11911   struct cleanup *back_to, *close_cleanup;
   11912   int retcode, fd, remote_errno, bytes, io_size;
   11913   FILE *file;
   11914   gdb_byte *buffer;
   11915   int bytes_in_buffer;
   11916   int saw_eof;
   11917   ULONGEST offset;
   11918   struct remote_state *rs = get_remote_state ();
   11919 
   11920   if (!rs->remote_desc)
   11921     error (_("command can only be used with remote target"));
   11922 
   11923   file = gdb_fopen_cloexec (local_file, "rb");
   11924   if (file == NULL)
   11925     perror_with_name (local_file);
   11926   back_to = make_cleanup_fclose (file);
   11927 
   11928   fd = remote_hostio_open (find_target_at (process_stratum), NULL,
   11929 			   remote_file, (FILEIO_O_WRONLY | FILEIO_O_CREAT
   11930 					 | FILEIO_O_TRUNC),
   11931 			   0700, 0, &remote_errno);
   11932   if (fd == -1)
   11933     remote_hostio_error (remote_errno);
   11934 
   11935   /* Send up to this many bytes at once.  They won't all fit in the
   11936      remote packet limit, so we'll transfer slightly fewer.  */
   11937   io_size = get_remote_packet_size ();
   11938   buffer = (gdb_byte *) xmalloc (io_size);
   11939   make_cleanup (xfree, buffer);
   11940 
   11941   close_cleanup = make_cleanup (remote_hostio_close_cleanup, &fd);
   11942 
   11943   bytes_in_buffer = 0;
   11944   saw_eof = 0;
   11945   offset = 0;
   11946   while (bytes_in_buffer || !saw_eof)
   11947     {
   11948       if (!saw_eof)
   11949 	{
   11950 	  bytes = fread (buffer + bytes_in_buffer, 1,
   11951 			 io_size - bytes_in_buffer,
   11952 			 file);
   11953 	  if (bytes == 0)
   11954 	    {
   11955 	      if (ferror (file))
   11956 		error (_("Error reading %s."), local_file);
   11957 	      else
   11958 		{
   11959 		  /* EOF.  Unless there is something still in the
   11960 		     buffer from the last iteration, we are done.  */
   11961 		  saw_eof = 1;
   11962 		  if (bytes_in_buffer == 0)
   11963 		    break;
   11964 		}
   11965 	    }
   11966 	}
   11967       else
   11968 	bytes = 0;
   11969 
   11970       bytes += bytes_in_buffer;
   11971       bytes_in_buffer = 0;
   11972 
   11973       retcode = remote_hostio_pwrite (find_target_at (process_stratum),
   11974 				      fd, buffer, bytes,
   11975 				      offset, &remote_errno);
   11976 
   11977       if (retcode < 0)
   11978 	remote_hostio_error (remote_errno);
   11979       else if (retcode == 0)
   11980 	error (_("Remote write of %d bytes returned 0!"), bytes);
   11981       else if (retcode < bytes)
   11982 	{
   11983 	  /* Short write.  Save the rest of the read data for the next
   11984 	     write.  */
   11985 	  bytes_in_buffer = bytes - retcode;
   11986 	  memmove (buffer, buffer + retcode, bytes_in_buffer);
   11987 	}
   11988 
   11989       offset += retcode;
   11990     }
   11991 
   11992   discard_cleanups (close_cleanup);
   11993   if (remote_hostio_close (find_target_at (process_stratum), fd, &remote_errno))
   11994     remote_hostio_error (remote_errno);
   11995 
   11996   if (from_tty)
   11997     printf_filtered (_("Successfully sent file \"%s\".\n"), local_file);
   11998   do_cleanups (back_to);
   11999 }
   12000 
   12001 void
   12002 remote_file_get (const char *remote_file, const char *local_file, int from_tty)
   12003 {
   12004   struct cleanup *back_to, *close_cleanup;
   12005   int fd, remote_errno, bytes, io_size;
   12006   FILE *file;
   12007   gdb_byte *buffer;
   12008   ULONGEST offset;
   12009   struct remote_state *rs = get_remote_state ();
   12010 
   12011   if (!rs->remote_desc)
   12012     error (_("command can only be used with remote target"));
   12013 
   12014   fd = remote_hostio_open (find_target_at (process_stratum), NULL,
   12015 			   remote_file, FILEIO_O_RDONLY, 0, 0,
   12016 			   &remote_errno);
   12017   if (fd == -1)
   12018     remote_hostio_error (remote_errno);
   12019 
   12020   file = gdb_fopen_cloexec (local_file, "wb");
   12021   if (file == NULL)
   12022     perror_with_name (local_file);
   12023   back_to = make_cleanup_fclose (file);
   12024 
   12025   /* Send up to this many bytes at once.  They won't all fit in the
   12026      remote packet limit, so we'll transfer slightly fewer.  */
   12027   io_size = get_remote_packet_size ();
   12028   buffer = (gdb_byte *) xmalloc (io_size);
   12029   make_cleanup (xfree, buffer);
   12030 
   12031   close_cleanup = make_cleanup (remote_hostio_close_cleanup, &fd);
   12032 
   12033   offset = 0;
   12034   while (1)
   12035     {
   12036       bytes = remote_hostio_pread (find_target_at (process_stratum),
   12037 				   fd, buffer, io_size, offset, &remote_errno);
   12038       if (bytes == 0)
   12039 	/* Success, but no bytes, means end-of-file.  */
   12040 	break;
   12041       if (bytes == -1)
   12042 	remote_hostio_error (remote_errno);
   12043 
   12044       offset += bytes;
   12045 
   12046       bytes = fwrite (buffer, 1, bytes, file);
   12047       if (bytes == 0)
   12048 	perror_with_name (local_file);
   12049     }
   12050 
   12051   discard_cleanups (close_cleanup);
   12052   if (remote_hostio_close (find_target_at (process_stratum), fd, &remote_errno))
   12053     remote_hostio_error (remote_errno);
   12054 
   12055   if (from_tty)
   12056     printf_filtered (_("Successfully fetched file \"%s\".\n"), remote_file);
   12057   do_cleanups (back_to);
   12058 }
   12059 
   12060 void
   12061 remote_file_delete (const char *remote_file, int from_tty)
   12062 {
   12063   int retcode, remote_errno;
   12064   struct remote_state *rs = get_remote_state ();
   12065 
   12066   if (!rs->remote_desc)
   12067     error (_("command can only be used with remote target"));
   12068 
   12069   retcode = remote_hostio_unlink (find_target_at (process_stratum),
   12070 				  NULL, remote_file, &remote_errno);
   12071   if (retcode == -1)
   12072     remote_hostio_error (remote_errno);
   12073 
   12074   if (from_tty)
   12075     printf_filtered (_("Successfully deleted file \"%s\".\n"), remote_file);
   12076 }
   12077 
   12078 static void
   12079 remote_put_command (char *args, int from_tty)
   12080 {
   12081   struct cleanup *back_to;
   12082   char **argv;
   12083 
   12084   if (args == NULL)
   12085     error_no_arg (_("file to put"));
   12086 
   12087   argv = gdb_buildargv (args);
   12088   back_to = make_cleanup_freeargv (argv);
   12089   if (argv[0] == NULL || argv[1] == NULL || argv[2] != NULL)
   12090     error (_("Invalid parameters to remote put"));
   12091 
   12092   remote_file_put (argv[0], argv[1], from_tty);
   12093 
   12094   do_cleanups (back_to);
   12095 }
   12096 
   12097 static void
   12098 remote_get_command (char *args, int from_tty)
   12099 {
   12100   struct cleanup *back_to;
   12101   char **argv;
   12102 
   12103   if (args == NULL)
   12104     error_no_arg (_("file to get"));
   12105 
   12106   argv = gdb_buildargv (args);
   12107   back_to = make_cleanup_freeargv (argv);
   12108   if (argv[0] == NULL || argv[1] == NULL || argv[2] != NULL)
   12109     error (_("Invalid parameters to remote get"));
   12110 
   12111   remote_file_get (argv[0], argv[1], from_tty);
   12112 
   12113   do_cleanups (back_to);
   12114 }
   12115 
   12116 static void
   12117 remote_delete_command (char *args, int from_tty)
   12118 {
   12119   struct cleanup *back_to;
   12120   char **argv;
   12121 
   12122   if (args == NULL)
   12123     error_no_arg (_("file to delete"));
   12124 
   12125   argv = gdb_buildargv (args);
   12126   back_to = make_cleanup_freeargv (argv);
   12127   if (argv[0] == NULL || argv[1] != NULL)
   12128     error (_("Invalid parameters to remote delete"));
   12129 
   12130   remote_file_delete (argv[0], from_tty);
   12131 
   12132   do_cleanups (back_to);
   12133 }
   12134 
   12135 static void
   12136 remote_command (char *args, int from_tty)
   12137 {
   12138   help_list (remote_cmdlist, "remote ", all_commands, gdb_stdout);
   12139 }
   12140 
   12141 static int
   12142 remote_can_execute_reverse (struct target_ops *self)
   12143 {
   12144   if (packet_support (PACKET_bs) == PACKET_ENABLE
   12145       || packet_support (PACKET_bc) == PACKET_ENABLE)
   12146     return 1;
   12147   else
   12148     return 0;
   12149 }
   12150 
   12151 static int
   12152 remote_supports_non_stop (struct target_ops *self)
   12153 {
   12154   return 1;
   12155 }
   12156 
   12157 static int
   12158 remote_supports_disable_randomization (struct target_ops *self)
   12159 {
   12160   /* Only supported in extended mode.  */
   12161   return 0;
   12162 }
   12163 
   12164 static int
   12165 remote_supports_multi_process (struct target_ops *self)
   12166 {
   12167   struct remote_state *rs = get_remote_state ();
   12168 
   12169   return remote_multi_process_p (rs);
   12170 }
   12171 
   12172 static int
   12173 remote_supports_cond_tracepoints (void)
   12174 {
   12175   return packet_support (PACKET_ConditionalTracepoints) == PACKET_ENABLE;
   12176 }
   12177 
   12178 static int
   12179 remote_supports_cond_breakpoints (struct target_ops *self)
   12180 {
   12181   return packet_support (PACKET_ConditionalBreakpoints) == PACKET_ENABLE;
   12182 }
   12183 
   12184 static int
   12185 remote_supports_fast_tracepoints (void)
   12186 {
   12187   return packet_support (PACKET_FastTracepoints) == PACKET_ENABLE;
   12188 }
   12189 
   12190 static int
   12191 remote_supports_static_tracepoints (void)
   12192 {
   12193   return packet_support (PACKET_StaticTracepoints) == PACKET_ENABLE;
   12194 }
   12195 
   12196 static int
   12197 remote_supports_install_in_trace (void)
   12198 {
   12199   return packet_support (PACKET_InstallInTrace) == PACKET_ENABLE;
   12200 }
   12201 
   12202 static int
   12203 remote_supports_enable_disable_tracepoint (struct target_ops *self)
   12204 {
   12205   return (packet_support (PACKET_EnableDisableTracepoints_feature)
   12206 	  == PACKET_ENABLE);
   12207 }
   12208 
   12209 static int
   12210 remote_supports_string_tracing (struct target_ops *self)
   12211 {
   12212   return packet_support (PACKET_tracenz_feature) == PACKET_ENABLE;
   12213 }
   12214 
   12215 static int
   12216 remote_can_run_breakpoint_commands (struct target_ops *self)
   12217 {
   12218   return packet_support (PACKET_BreakpointCommands) == PACKET_ENABLE;
   12219 }
   12220 
   12221 static void
   12222 remote_trace_init (struct target_ops *self)
   12223 {
   12224   putpkt ("QTinit");
   12225   remote_get_noisy_reply (&target_buf, &target_buf_size);
   12226   if (strcmp (target_buf, "OK") != 0)
   12227     error (_("Target does not support this command."));
   12228 }
   12229 
   12230 static void free_actions_list (char **actions_list);
   12231 static void free_actions_list_cleanup_wrapper (void *);
   12232 static void
   12233 free_actions_list_cleanup_wrapper (void *al)
   12234 {
   12235   free_actions_list ((char **) al);
   12236 }
   12237 
   12238 static void
   12239 free_actions_list (char **actions_list)
   12240 {
   12241   int ndx;
   12242 
   12243   if (actions_list == 0)
   12244     return;
   12245 
   12246   for (ndx = 0; actions_list[ndx]; ndx++)
   12247     xfree (actions_list[ndx]);
   12248 
   12249   xfree (actions_list);
   12250 }
   12251 
   12252 /* Recursive routine to walk through command list including loops, and
   12253    download packets for each command.  */
   12254 
   12255 static void
   12256 remote_download_command_source (int num, ULONGEST addr,
   12257 				struct command_line *cmds)
   12258 {
   12259   struct remote_state *rs = get_remote_state ();
   12260   struct command_line *cmd;
   12261 
   12262   for (cmd = cmds; cmd; cmd = cmd->next)
   12263     {
   12264       QUIT;	/* Allow user to bail out with ^C.  */
   12265       strcpy (rs->buf, "QTDPsrc:");
   12266       encode_source_string (num, addr, "cmd", cmd->line,
   12267 			    rs->buf + strlen (rs->buf),
   12268 			    rs->buf_size - strlen (rs->buf));
   12269       putpkt (rs->buf);
   12270       remote_get_noisy_reply (&target_buf, &target_buf_size);
   12271       if (strcmp (target_buf, "OK"))
   12272 	warning (_("Target does not support source download."));
   12273 
   12274       if (cmd->control_type == while_control
   12275 	  || cmd->control_type == while_stepping_control)
   12276 	{
   12277 	  remote_download_command_source (num, addr, *cmd->body_list);
   12278 
   12279 	  QUIT;	/* Allow user to bail out with ^C.  */
   12280 	  strcpy (rs->buf, "QTDPsrc:");
   12281 	  encode_source_string (num, addr, "cmd", "end",
   12282 				rs->buf + strlen (rs->buf),
   12283 				rs->buf_size - strlen (rs->buf));
   12284 	  putpkt (rs->buf);
   12285 	  remote_get_noisy_reply (&target_buf, &target_buf_size);
   12286 	  if (strcmp (target_buf, "OK"))
   12287 	    warning (_("Target does not support source download."));
   12288 	}
   12289     }
   12290 }
   12291 
   12292 static void
   12293 remote_download_tracepoint (struct target_ops *self, struct bp_location *loc)
   12294 {
   12295 #define BUF_SIZE 2048
   12296 
   12297   CORE_ADDR tpaddr;
   12298   char addrbuf[40];
   12299   char buf[BUF_SIZE];
   12300   char **tdp_actions;
   12301   char **stepping_actions;
   12302   int ndx;
   12303   struct cleanup *old_chain = NULL;
   12304   char *pkt;
   12305   struct breakpoint *b = loc->owner;
   12306   struct tracepoint *t = (struct tracepoint *) b;
   12307 
   12308   encode_actions_rsp (loc, &tdp_actions, &stepping_actions);
   12309   old_chain = make_cleanup (free_actions_list_cleanup_wrapper,
   12310 			    tdp_actions);
   12311   (void) make_cleanup (free_actions_list_cleanup_wrapper,
   12312 		       stepping_actions);
   12313 
   12314   tpaddr = loc->address;
   12315   sprintf_vma (addrbuf, tpaddr);
   12316   xsnprintf (buf, BUF_SIZE, "QTDP:%x:%s:%c:%lx:%x", b->number,
   12317 	     addrbuf, /* address */
   12318 	     (b->enable_state == bp_enabled ? 'E' : 'D'),
   12319 	     t->step_count, t->pass_count);
   12320   /* Fast tracepoints are mostly handled by the target, but we can
   12321      tell the target how big of an instruction block should be moved
   12322      around.  */
   12323   if (b->type == bp_fast_tracepoint)
   12324     {
   12325       /* Only test for support at download time; we may not know
   12326 	 target capabilities at definition time.  */
   12327       if (remote_supports_fast_tracepoints ())
   12328 	{
   12329 	  if (gdbarch_fast_tracepoint_valid_at (loc->gdbarch, tpaddr,
   12330 						NULL))
   12331 	    xsnprintf (buf + strlen (buf), BUF_SIZE - strlen (buf), ":F%x",
   12332 		       gdb_insn_length (loc->gdbarch, tpaddr));
   12333 	  else
   12334 	    /* If it passed validation at definition but fails now,
   12335 	       something is very wrong.  */
   12336 	    internal_error (__FILE__, __LINE__,
   12337 			    _("Fast tracepoint not "
   12338 			      "valid during download"));
   12339 	}
   12340       else
   12341 	/* Fast tracepoints are functionally identical to regular
   12342 	   tracepoints, so don't take lack of support as a reason to
   12343 	   give up on the trace run.  */
   12344 	warning (_("Target does not support fast tracepoints, "
   12345 		   "downloading %d as regular tracepoint"), b->number);
   12346     }
   12347   else if (b->type == bp_static_tracepoint)
   12348     {
   12349       /* Only test for support at download time; we may not know
   12350 	 target capabilities at definition time.  */
   12351       if (remote_supports_static_tracepoints ())
   12352 	{
   12353 	  struct static_tracepoint_marker marker;
   12354 
   12355 	  if (target_static_tracepoint_marker_at (tpaddr, &marker))
   12356 	    strcat (buf, ":S");
   12357 	  else
   12358 	    error (_("Static tracepoint not valid during download"));
   12359 	}
   12360       else
   12361 	/* Fast tracepoints are functionally identical to regular
   12362 	   tracepoints, so don't take lack of support as a reason
   12363 	   to give up on the trace run.  */
   12364 	error (_("Target does not support static tracepoints"));
   12365     }
   12366   /* If the tracepoint has a conditional, make it into an agent
   12367      expression and append to the definition.  */
   12368   if (loc->cond)
   12369     {
   12370       /* Only test support at download time, we may not know target
   12371 	 capabilities at definition time.  */
   12372       if (remote_supports_cond_tracepoints ())
   12373 	{
   12374 	  agent_expr_up aexpr = gen_eval_for_expr (tpaddr, loc->cond.get ());
   12375 	  xsnprintf (buf + strlen (buf), BUF_SIZE - strlen (buf), ":X%x,",
   12376 		     aexpr->len);
   12377 	  pkt = buf + strlen (buf);
   12378 	  for (ndx = 0; ndx < aexpr->len; ++ndx)
   12379 	    pkt = pack_hex_byte (pkt, aexpr->buf[ndx]);
   12380 	  *pkt = '\0';
   12381 	}
   12382       else
   12383 	warning (_("Target does not support conditional tracepoints, "
   12384 		   "ignoring tp %d cond"), b->number);
   12385     }
   12386 
   12387   if (b->commands || *default_collect)
   12388     strcat (buf, "-");
   12389   putpkt (buf);
   12390   remote_get_noisy_reply (&target_buf, &target_buf_size);
   12391   if (strcmp (target_buf, "OK"))
   12392     error (_("Target does not support tracepoints."));
   12393 
   12394   /* do_single_steps (t); */
   12395   if (tdp_actions)
   12396     {
   12397       for (ndx = 0; tdp_actions[ndx]; ndx++)
   12398 	{
   12399 	  QUIT;	/* Allow user to bail out with ^C.  */
   12400 	  xsnprintf (buf, BUF_SIZE, "QTDP:-%x:%s:%s%c",
   12401 		     b->number, addrbuf, /* address */
   12402 		     tdp_actions[ndx],
   12403 		     ((tdp_actions[ndx + 1] || stepping_actions)
   12404 		      ? '-' : 0));
   12405 	  putpkt (buf);
   12406 	  remote_get_noisy_reply (&target_buf,
   12407 				  &target_buf_size);
   12408 	  if (strcmp (target_buf, "OK"))
   12409 	    error (_("Error on target while setting tracepoints."));
   12410 	}
   12411     }
   12412   if (stepping_actions)
   12413     {
   12414       for (ndx = 0; stepping_actions[ndx]; ndx++)
   12415 	{
   12416 	  QUIT;	/* Allow user to bail out with ^C.  */
   12417 	  xsnprintf (buf, BUF_SIZE, "QTDP:-%x:%s:%s%s%s",
   12418 		     b->number, addrbuf, /* address */
   12419 		     ((ndx == 0) ? "S" : ""),
   12420 		     stepping_actions[ndx],
   12421 		     (stepping_actions[ndx + 1] ? "-" : ""));
   12422 	  putpkt (buf);
   12423 	  remote_get_noisy_reply (&target_buf,
   12424 				  &target_buf_size);
   12425 	  if (strcmp (target_buf, "OK"))
   12426 	    error (_("Error on target while setting tracepoints."));
   12427 	}
   12428     }
   12429 
   12430   if (packet_support (PACKET_TracepointSource) == PACKET_ENABLE)
   12431     {
   12432       if (b->location != NULL)
   12433 	{
   12434 	  strcpy (buf, "QTDPsrc:");
   12435 	  encode_source_string (b->number, loc->address, "at",
   12436 				event_location_to_string (b->location.get ()),
   12437 				buf + strlen (buf), 2048 - strlen (buf));
   12438 	  putpkt (buf);
   12439 	  remote_get_noisy_reply (&target_buf, &target_buf_size);
   12440 	  if (strcmp (target_buf, "OK"))
   12441 	    warning (_("Target does not support source download."));
   12442 	}
   12443       if (b->cond_string)
   12444 	{
   12445 	  strcpy (buf, "QTDPsrc:");
   12446 	  encode_source_string (b->number, loc->address,
   12447 				"cond", b->cond_string, buf + strlen (buf),
   12448 				2048 - strlen (buf));
   12449 	  putpkt (buf);
   12450 	  remote_get_noisy_reply (&target_buf, &target_buf_size);
   12451 	  if (strcmp (target_buf, "OK"))
   12452 	    warning (_("Target does not support source download."));
   12453 	}
   12454       remote_download_command_source (b->number, loc->address,
   12455 				      breakpoint_commands (b));
   12456     }
   12457 
   12458   do_cleanups (old_chain);
   12459 }
   12460 
   12461 static int
   12462 remote_can_download_tracepoint (struct target_ops *self)
   12463 {
   12464   struct remote_state *rs = get_remote_state ();
   12465   struct trace_status *ts;
   12466   int status;
   12467 
   12468   /* Don't try to install tracepoints until we've relocated our
   12469      symbols, and fetched and merged the target's tracepoint list with
   12470      ours.  */
   12471   if (rs->starting_up)
   12472     return 0;
   12473 
   12474   ts = current_trace_status ();
   12475   status = remote_get_trace_status (self, ts);
   12476 
   12477   if (status == -1 || !ts->running_known || !ts->running)
   12478     return 0;
   12479 
   12480   /* If we are in a tracing experiment, but remote stub doesn't support
   12481      installing tracepoint in trace, we have to return.  */
   12482   if (!remote_supports_install_in_trace ())
   12483     return 0;
   12484 
   12485   return 1;
   12486 }
   12487 
   12488 
   12489 static void
   12490 remote_download_trace_state_variable (struct target_ops *self,
   12491 				      struct trace_state_variable *tsv)
   12492 {
   12493   struct remote_state *rs = get_remote_state ();
   12494   char *p;
   12495 
   12496   xsnprintf (rs->buf, get_remote_packet_size (), "QTDV:%x:%s:%x:",
   12497 	     tsv->number, phex ((ULONGEST) tsv->initial_value, 8),
   12498 	     tsv->builtin);
   12499   p = rs->buf + strlen (rs->buf);
   12500   if ((p - rs->buf) + strlen (tsv->name) * 2 >= get_remote_packet_size ())
   12501     error (_("Trace state variable name too long for tsv definition packet"));
   12502   p += 2 * bin2hex ((gdb_byte *) (tsv->name), p, strlen (tsv->name));
   12503   *p++ = '\0';
   12504   putpkt (rs->buf);
   12505   remote_get_noisy_reply (&target_buf, &target_buf_size);
   12506   if (*target_buf == '\0')
   12507     error (_("Target does not support this command."));
   12508   if (strcmp (target_buf, "OK") != 0)
   12509     error (_("Error on target while downloading trace state variable."));
   12510 }
   12511 
   12512 static void
   12513 remote_enable_tracepoint (struct target_ops *self,
   12514 			  struct bp_location *location)
   12515 {
   12516   struct remote_state *rs = get_remote_state ();
   12517   char addr_buf[40];
   12518 
   12519   sprintf_vma (addr_buf, location->address);
   12520   xsnprintf (rs->buf, get_remote_packet_size (), "QTEnable:%x:%s",
   12521 	     location->owner->number, addr_buf);
   12522   putpkt (rs->buf);
   12523   remote_get_noisy_reply (&rs->buf, &rs->buf_size);
   12524   if (*rs->buf == '\0')
   12525     error (_("Target does not support enabling tracepoints while a trace run is ongoing."));
   12526   if (strcmp (rs->buf, "OK") != 0)
   12527     error (_("Error on target while enabling tracepoint."));
   12528 }
   12529 
   12530 static void
   12531 remote_disable_tracepoint (struct target_ops *self,
   12532 			   struct bp_location *location)
   12533 {
   12534   struct remote_state *rs = get_remote_state ();
   12535   char addr_buf[40];
   12536 
   12537   sprintf_vma (addr_buf, location->address);
   12538   xsnprintf (rs->buf, get_remote_packet_size (), "QTDisable:%x:%s",
   12539 	     location->owner->number, addr_buf);
   12540   putpkt (rs->buf);
   12541   remote_get_noisy_reply (&rs->buf, &rs->buf_size);
   12542   if (*rs->buf == '\0')
   12543     error (_("Target does not support disabling tracepoints while a trace run is ongoing."));
   12544   if (strcmp (rs->buf, "OK") != 0)
   12545     error (_("Error on target while disabling tracepoint."));
   12546 }
   12547 
   12548 static void
   12549 remote_trace_set_readonly_regions (struct target_ops *self)
   12550 {
   12551   asection *s;
   12552   bfd *abfd = NULL;
   12553   bfd_size_type size;
   12554   bfd_vma vma;
   12555   int anysecs = 0;
   12556   int offset = 0;
   12557 
   12558   if (!exec_bfd)
   12559     return;			/* No information to give.  */
   12560 
   12561   strcpy (target_buf, "QTro");
   12562   offset = strlen (target_buf);
   12563   for (s = exec_bfd->sections; s; s = s->next)
   12564     {
   12565       char tmp1[40], tmp2[40];
   12566       int sec_length;
   12567 
   12568       if ((s->flags & SEC_LOAD) == 0 ||
   12569       /*  (s->flags & SEC_CODE) == 0 || */
   12570 	  (s->flags & SEC_READONLY) == 0)
   12571 	continue;
   12572 
   12573       anysecs = 1;
   12574       vma = bfd_get_section_vma (abfd, s);
   12575       size = bfd_get_section_size (s);
   12576       sprintf_vma (tmp1, vma);
   12577       sprintf_vma (tmp2, vma + size);
   12578       sec_length = 1 + strlen (tmp1) + 1 + strlen (tmp2);
   12579       if (offset + sec_length + 1 > target_buf_size)
   12580 	{
   12581 	  if (packet_support (PACKET_qXfer_traceframe_info) != PACKET_ENABLE)
   12582 	    warning (_("\
   12583 Too many sections for read-only sections definition packet."));
   12584 	  break;
   12585 	}
   12586       xsnprintf (target_buf + offset, target_buf_size - offset, ":%s,%s",
   12587 		 tmp1, tmp2);
   12588       offset += sec_length;
   12589     }
   12590   if (anysecs)
   12591     {
   12592       putpkt (target_buf);
   12593       getpkt (&target_buf, &target_buf_size, 0);
   12594     }
   12595 }
   12596 
   12597 static void
   12598 remote_trace_start (struct target_ops *self)
   12599 {
   12600   putpkt ("QTStart");
   12601   remote_get_noisy_reply (&target_buf, &target_buf_size);
   12602   if (*target_buf == '\0')
   12603     error (_("Target does not support this command."));
   12604   if (strcmp (target_buf, "OK") != 0)
   12605     error (_("Bogus reply from target: %s"), target_buf);
   12606 }
   12607 
   12608 static int
   12609 remote_get_trace_status (struct target_ops *self, struct trace_status *ts)
   12610 {
   12611   /* Initialize it just to avoid a GCC false warning.  */
   12612   char *p = NULL;
   12613   /* FIXME we need to get register block size some other way.  */
   12614   extern int trace_regblock_size;
   12615   enum packet_result result;
   12616 
   12617   if (packet_support (PACKET_qTStatus) == PACKET_DISABLE)
   12618     return -1;
   12619 
   12620   trace_regblock_size = get_remote_arch_state ()->sizeof_g_packet;
   12621 
   12622   putpkt ("qTStatus");
   12623 
   12624   TRY
   12625     {
   12626       p = remote_get_noisy_reply (&target_buf, &target_buf_size);
   12627     }
   12628   CATCH (ex, RETURN_MASK_ERROR)
   12629     {
   12630       if (ex.error != TARGET_CLOSE_ERROR)
   12631 	{
   12632 	  exception_fprintf (gdb_stderr, ex, "qTStatus: ");
   12633 	  return -1;
   12634 	}
   12635       throw_exception (ex);
   12636     }
   12637   END_CATCH
   12638 
   12639   result = packet_ok (p, &remote_protocol_packets[PACKET_qTStatus]);
   12640 
   12641   /* If the remote target doesn't do tracing, flag it.  */
   12642   if (result == PACKET_UNKNOWN)
   12643     return -1;
   12644 
   12645   /* We're working with a live target.  */
   12646   ts->filename = NULL;
   12647 
   12648   if (*p++ != 'T')
   12649     error (_("Bogus trace status reply from target: %s"), target_buf);
   12650 
   12651   /* Function 'parse_trace_status' sets default value of each field of
   12652      'ts' at first, so we don't have to do it here.  */
   12653   parse_trace_status (p, ts);
   12654 
   12655   return ts->running;
   12656 }
   12657 
   12658 static void
   12659 remote_get_tracepoint_status (struct target_ops *self, struct breakpoint *bp,
   12660 			      struct uploaded_tp *utp)
   12661 {
   12662   struct remote_state *rs = get_remote_state ();
   12663   char *reply;
   12664   struct bp_location *loc;
   12665   struct tracepoint *tp = (struct tracepoint *) bp;
   12666   size_t size = get_remote_packet_size ();
   12667 
   12668   if (tp)
   12669     {
   12670       tp->base.hit_count = 0;
   12671       tp->traceframe_usage = 0;
   12672       for (loc = tp->base.loc; loc; loc = loc->next)
   12673 	{
   12674 	  /* If the tracepoint was never downloaded, don't go asking for
   12675 	     any status.  */
   12676 	  if (tp->number_on_target == 0)
   12677 	    continue;
   12678 	  xsnprintf (rs->buf, size, "qTP:%x:%s", tp->number_on_target,
   12679 		     phex_nz (loc->address, 0));
   12680 	  putpkt (rs->buf);
   12681 	  reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
   12682 	  if (reply && *reply)
   12683 	    {
   12684 	      if (*reply == 'V')
   12685 		parse_tracepoint_status (reply + 1, bp, utp);
   12686 	    }
   12687 	}
   12688     }
   12689   else if (utp)
   12690     {
   12691       utp->hit_count = 0;
   12692       utp->traceframe_usage = 0;
   12693       xsnprintf (rs->buf, size, "qTP:%x:%s", utp->number,
   12694 		 phex_nz (utp->addr, 0));
   12695       putpkt (rs->buf);
   12696       reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
   12697       if (reply && *reply)
   12698 	{
   12699 	  if (*reply == 'V')
   12700 	    parse_tracepoint_status (reply + 1, bp, utp);
   12701 	}
   12702     }
   12703 }
   12704 
   12705 static void
   12706 remote_trace_stop (struct target_ops *self)
   12707 {
   12708   putpkt ("QTStop");
   12709   remote_get_noisy_reply (&target_buf, &target_buf_size);
   12710   if (*target_buf == '\0')
   12711     error (_("Target does not support this command."));
   12712   if (strcmp (target_buf, "OK") != 0)
   12713     error (_("Bogus reply from target: %s"), target_buf);
   12714 }
   12715 
   12716 static int
   12717 remote_trace_find (struct target_ops *self,
   12718 		   enum trace_find_type type, int num,
   12719 		   CORE_ADDR addr1, CORE_ADDR addr2,
   12720 		   int *tpp)
   12721 {
   12722   struct remote_state *rs = get_remote_state ();
   12723   char *endbuf = rs->buf + get_remote_packet_size ();
   12724   char *p, *reply;
   12725   int target_frameno = -1, target_tracept = -1;
   12726 
   12727   /* Lookups other than by absolute frame number depend on the current
   12728      trace selected, so make sure it is correct on the remote end
   12729      first.  */
   12730   if (type != tfind_number)
   12731     set_remote_traceframe ();
   12732 
   12733   p = rs->buf;
   12734   strcpy (p, "QTFrame:");
   12735   p = strchr (p, '\0');
   12736   switch (type)
   12737     {
   12738     case tfind_number:
   12739       xsnprintf (p, endbuf - p, "%x", num);
   12740       break;
   12741     case tfind_pc:
   12742       xsnprintf (p, endbuf - p, "pc:%s", phex_nz (addr1, 0));
   12743       break;
   12744     case tfind_tp:
   12745       xsnprintf (p, endbuf - p, "tdp:%x", num);
   12746       break;
   12747     case tfind_range:
   12748       xsnprintf (p, endbuf - p, "range:%s:%s", phex_nz (addr1, 0),
   12749 		 phex_nz (addr2, 0));
   12750       break;
   12751     case tfind_outside:
   12752       xsnprintf (p, endbuf - p, "outside:%s:%s", phex_nz (addr1, 0),
   12753 		 phex_nz (addr2, 0));
   12754       break;
   12755     default:
   12756       error (_("Unknown trace find type %d"), type);
   12757     }
   12758 
   12759   putpkt (rs->buf);
   12760   reply = remote_get_noisy_reply (&(rs->buf), &rs->buf_size);
   12761   if (*reply == '\0')
   12762     error (_("Target does not support this command."));
   12763 
   12764   while (reply && *reply)
   12765     switch (*reply)
   12766       {
   12767       case 'F':
   12768 	p = ++reply;
   12769 	target_frameno = (int) strtol (p, &reply, 16);
   12770 	if (reply == p)
   12771 	  error (_("Unable to parse trace frame number"));
   12772 	/* Don't update our remote traceframe number cache on failure
   12773 	   to select a remote traceframe.  */
   12774 	if (target_frameno == -1)
   12775 	  return -1;
   12776 	break;
   12777       case 'T':
   12778 	p = ++reply;
   12779 	target_tracept = (int) strtol (p, &reply, 16);
   12780 	if (reply == p)
   12781 	  error (_("Unable to parse tracepoint number"));
   12782 	break;
   12783       case 'O':		/* "OK"? */
   12784 	if (reply[1] == 'K' && reply[2] == '\0')
   12785 	  reply += 2;
   12786 	else
   12787 	  error (_("Bogus reply from target: %s"), reply);
   12788 	break;
   12789       default:
   12790 	error (_("Bogus reply from target: %s"), reply);
   12791       }
   12792   if (tpp)
   12793     *tpp = target_tracept;
   12794 
   12795   rs->remote_traceframe_number = target_frameno;
   12796   return target_frameno;
   12797 }
   12798 
   12799 static int
   12800 remote_get_trace_state_variable_value (struct target_ops *self,
   12801 				       int tsvnum, LONGEST *val)
   12802 {
   12803   struct remote_state *rs = get_remote_state ();
   12804   char *reply;
   12805   ULONGEST uval;
   12806 
   12807   set_remote_traceframe ();
   12808 
   12809   xsnprintf (rs->buf, get_remote_packet_size (), "qTV:%x", tsvnum);
   12810   putpkt (rs->buf);
   12811   reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
   12812   if (reply && *reply)
   12813     {
   12814       if (*reply == 'V')
   12815 	{
   12816 	  unpack_varlen_hex (reply + 1, &uval);
   12817 	  *val = (LONGEST) uval;
   12818 	  return 1;
   12819 	}
   12820     }
   12821   return 0;
   12822 }
   12823 
   12824 static int
   12825 remote_save_trace_data (struct target_ops *self, const char *filename)
   12826 {
   12827   struct remote_state *rs = get_remote_state ();
   12828   char *p, *reply;
   12829 
   12830   p = rs->buf;
   12831   strcpy (p, "QTSave:");
   12832   p += strlen (p);
   12833   if ((p - rs->buf) + strlen (filename) * 2 >= get_remote_packet_size ())
   12834     error (_("Remote file name too long for trace save packet"));
   12835   p += 2 * bin2hex ((gdb_byte *) filename, p, strlen (filename));
   12836   *p++ = '\0';
   12837   putpkt (rs->buf);
   12838   reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
   12839   if (*reply == '\0')
   12840     error (_("Target does not support this command."));
   12841   if (strcmp (reply, "OK") != 0)
   12842     error (_("Bogus reply from target: %s"), reply);
   12843   return 0;
   12844 }
   12845 
   12846 /* This is basically a memory transfer, but needs to be its own packet
   12847    because we don't know how the target actually organizes its trace
   12848    memory, plus we want to be able to ask for as much as possible, but
   12849    not be unhappy if we don't get as much as we ask for.  */
   12850 
   12851 static LONGEST
   12852 remote_get_raw_trace_data (struct target_ops *self,
   12853 			   gdb_byte *buf, ULONGEST offset, LONGEST len)
   12854 {
   12855   struct remote_state *rs = get_remote_state ();
   12856   char *reply;
   12857   char *p;
   12858   int rslt;
   12859 
   12860   p = rs->buf;
   12861   strcpy (p, "qTBuffer:");
   12862   p += strlen (p);
   12863   p += hexnumstr (p, offset);
   12864   *p++ = ',';
   12865   p += hexnumstr (p, len);
   12866   *p++ = '\0';
   12867 
   12868   putpkt (rs->buf);
   12869   reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
   12870   if (reply && *reply)
   12871     {
   12872       /* 'l' by itself means we're at the end of the buffer and
   12873 	 there is nothing more to get.  */
   12874       if (*reply == 'l')
   12875 	return 0;
   12876 
   12877       /* Convert the reply into binary.  Limit the number of bytes to
   12878 	 convert according to our passed-in buffer size, rather than
   12879 	 what was returned in the packet; if the target is
   12880 	 unexpectedly generous and gives us a bigger reply than we
   12881 	 asked for, we don't want to crash.  */
   12882       rslt = hex2bin (target_buf, buf, len);
   12883       return rslt;
   12884     }
   12885 
   12886   /* Something went wrong, flag as an error.  */
   12887   return -1;
   12888 }
   12889 
   12890 static void
   12891 remote_set_disconnected_tracing (struct target_ops *self, int val)
   12892 {
   12893   struct remote_state *rs = get_remote_state ();
   12894 
   12895   if (packet_support (PACKET_DisconnectedTracing_feature) == PACKET_ENABLE)
   12896     {
   12897       char *reply;
   12898 
   12899       xsnprintf (rs->buf, get_remote_packet_size (), "QTDisconnected:%x", val);
   12900       putpkt (rs->buf);
   12901       reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
   12902       if (*reply == '\0')
   12903 	error (_("Target does not support this command."));
   12904       if (strcmp (reply, "OK") != 0)
   12905         error (_("Bogus reply from target: %s"), reply);
   12906     }
   12907   else if (val)
   12908     warning (_("Target does not support disconnected tracing."));
   12909 }
   12910 
   12911 static int
   12912 remote_core_of_thread (struct target_ops *ops, ptid_t ptid)
   12913 {
   12914   struct thread_info *info = find_thread_ptid (ptid);
   12915 
   12916   if (info && info->priv)
   12917     return info->priv->core;
   12918   return -1;
   12919 }
   12920 
   12921 static void
   12922 remote_set_circular_trace_buffer (struct target_ops *self, int val)
   12923 {
   12924   struct remote_state *rs = get_remote_state ();
   12925   char *reply;
   12926 
   12927   xsnprintf (rs->buf, get_remote_packet_size (), "QTBuffer:circular:%x", val);
   12928   putpkt (rs->buf);
   12929   reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
   12930   if (*reply == '\0')
   12931     error (_("Target does not support this command."));
   12932   if (strcmp (reply, "OK") != 0)
   12933     error (_("Bogus reply from target: %s"), reply);
   12934 }
   12935 
   12936 static struct traceframe_info *
   12937 remote_traceframe_info (struct target_ops *self)
   12938 {
   12939   char *text;
   12940 
   12941   text = target_read_stralloc (&current_target,
   12942 			       TARGET_OBJECT_TRACEFRAME_INFO, NULL);
   12943   if (text != NULL)
   12944     {
   12945       struct traceframe_info *info;
   12946       struct cleanup *back_to = make_cleanup (xfree, text);
   12947 
   12948       info = parse_traceframe_info (text);
   12949       do_cleanups (back_to);
   12950       return info;
   12951     }
   12952 
   12953   return NULL;
   12954 }
   12955 
   12956 /* Handle the qTMinFTPILen packet.  Returns the minimum length of
   12957    instruction on which a fast tracepoint may be placed.  Returns -1
   12958    if the packet is not supported, and 0 if the minimum instruction
   12959    length is unknown.  */
   12960 
   12961 static int
   12962 remote_get_min_fast_tracepoint_insn_len (struct target_ops *self)
   12963 {
   12964   struct remote_state *rs = get_remote_state ();
   12965   char *reply;
   12966 
   12967   /* If we're not debugging a process yet, the IPA can't be
   12968      loaded.  */
   12969   if (!target_has_execution)
   12970     return 0;
   12971 
   12972   /* Make sure the remote is pointing at the right process.  */
   12973   set_general_process ();
   12974 
   12975   xsnprintf (rs->buf, get_remote_packet_size (), "qTMinFTPILen");
   12976   putpkt (rs->buf);
   12977   reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
   12978   if (*reply == '\0')
   12979     return -1;
   12980   else
   12981     {
   12982       ULONGEST min_insn_len;
   12983 
   12984       unpack_varlen_hex (reply, &min_insn_len);
   12985 
   12986       return (int) min_insn_len;
   12987     }
   12988 }
   12989 
   12990 static void
   12991 remote_set_trace_buffer_size (struct target_ops *self, LONGEST val)
   12992 {
   12993   if (packet_support (PACKET_QTBuffer_size) != PACKET_DISABLE)
   12994     {
   12995       struct remote_state *rs = get_remote_state ();
   12996       char *buf = rs->buf;
   12997       char *endbuf = rs->buf + get_remote_packet_size ();
   12998       enum packet_result result;
   12999 
   13000       gdb_assert (val >= 0 || val == -1);
   13001       buf += xsnprintf (buf, endbuf - buf, "QTBuffer:size:");
   13002       /* Send -1 as literal "-1" to avoid host size dependency.  */
   13003       if (val < 0)
   13004 	{
   13005 	  *buf++ = '-';
   13006           buf += hexnumstr (buf, (ULONGEST) -val);
   13007 	}
   13008       else
   13009 	buf += hexnumstr (buf, (ULONGEST) val);
   13010 
   13011       putpkt (rs->buf);
   13012       remote_get_noisy_reply (&rs->buf, &rs->buf_size);
   13013       result = packet_ok (rs->buf,
   13014 		  &remote_protocol_packets[PACKET_QTBuffer_size]);
   13015 
   13016       if (result != PACKET_OK)
   13017 	warning (_("Bogus reply from target: %s"), rs->buf);
   13018     }
   13019 }
   13020 
   13021 static int
   13022 remote_set_trace_notes (struct target_ops *self,
   13023 			const char *user, const char *notes,
   13024 			const char *stop_notes)
   13025 {
   13026   struct remote_state *rs = get_remote_state ();
   13027   char *reply;
   13028   char *buf = rs->buf;
   13029   char *endbuf = rs->buf + get_remote_packet_size ();
   13030   int nbytes;
   13031 
   13032   buf += xsnprintf (buf, endbuf - buf, "QTNotes:");
   13033   if (user)
   13034     {
   13035       buf += xsnprintf (buf, endbuf - buf, "user:");
   13036       nbytes = bin2hex ((gdb_byte *) user, buf, strlen (user));
   13037       buf += 2 * nbytes;
   13038       *buf++ = ';';
   13039     }
   13040   if (notes)
   13041     {
   13042       buf += xsnprintf (buf, endbuf - buf, "notes:");
   13043       nbytes = bin2hex ((gdb_byte *) notes, buf, strlen (notes));
   13044       buf += 2 * nbytes;
   13045       *buf++ = ';';
   13046     }
   13047   if (stop_notes)
   13048     {
   13049       buf += xsnprintf (buf, endbuf - buf, "tstop:");
   13050       nbytes = bin2hex ((gdb_byte *) stop_notes, buf, strlen (stop_notes));
   13051       buf += 2 * nbytes;
   13052       *buf++ = ';';
   13053     }
   13054   /* Ensure the buffer is terminated.  */
   13055   *buf = '\0';
   13056 
   13057   putpkt (rs->buf);
   13058   reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
   13059   if (*reply == '\0')
   13060     return 0;
   13061 
   13062   if (strcmp (reply, "OK") != 0)
   13063     error (_("Bogus reply from target: %s"), reply);
   13064 
   13065   return 1;
   13066 }
   13067 
   13068 static int
   13069 remote_use_agent (struct target_ops *self, int use)
   13070 {
   13071   if (packet_support (PACKET_QAgent) != PACKET_DISABLE)
   13072     {
   13073       struct remote_state *rs = get_remote_state ();
   13074 
   13075       /* If the stub supports QAgent.  */
   13076       xsnprintf (rs->buf, get_remote_packet_size (), "QAgent:%d", use);
   13077       putpkt (rs->buf);
   13078       getpkt (&rs->buf, &rs->buf_size, 0);
   13079 
   13080       if (strcmp (rs->buf, "OK") == 0)
   13081 	{
   13082 	  use_agent = use;
   13083 	  return 1;
   13084 	}
   13085     }
   13086 
   13087   return 0;
   13088 }
   13089 
   13090 static int
   13091 remote_can_use_agent (struct target_ops *self)
   13092 {
   13093   return (packet_support (PACKET_QAgent) != PACKET_DISABLE);
   13094 }
   13095 
   13096 struct btrace_target_info
   13097 {
   13098   /* The ptid of the traced thread.  */
   13099   ptid_t ptid;
   13100 
   13101   /* The obtained branch trace configuration.  */
   13102   struct btrace_config conf;
   13103 };
   13104 
   13105 /* Reset our idea of our target's btrace configuration.  */
   13106 
   13107 static void
   13108 remote_btrace_reset (void)
   13109 {
   13110   struct remote_state *rs = get_remote_state ();
   13111 
   13112   memset (&rs->btrace_config, 0, sizeof (rs->btrace_config));
   13113 }
   13114 
   13115 /* Check whether the target supports branch tracing.  */
   13116 
   13117 static int
   13118 remote_supports_btrace (struct target_ops *self, enum btrace_format format)
   13119 {
   13120   if (packet_support (PACKET_Qbtrace_off) != PACKET_ENABLE)
   13121     return 0;
   13122   if (packet_support (PACKET_qXfer_btrace) != PACKET_ENABLE)
   13123     return 0;
   13124 
   13125   switch (format)
   13126     {
   13127       case BTRACE_FORMAT_NONE:
   13128 	return 0;
   13129 
   13130       case BTRACE_FORMAT_BTS:
   13131 	return (packet_support (PACKET_Qbtrace_bts) == PACKET_ENABLE);
   13132 
   13133       case BTRACE_FORMAT_PT:
   13134 	/* The trace is decoded on the host.  Even if our target supports it,
   13135 	   we still need to have libipt to decode the trace.  */
   13136 #if defined (HAVE_LIBIPT)
   13137 	return (packet_support (PACKET_Qbtrace_pt) == PACKET_ENABLE);
   13138 #else /* !defined (HAVE_LIBIPT)  */
   13139 	return 0;
   13140 #endif /* !defined (HAVE_LIBIPT)  */
   13141     }
   13142 
   13143   internal_error (__FILE__, __LINE__, _("Unknown branch trace format"));
   13144 }
   13145 
   13146 /* Synchronize the configuration with the target.  */
   13147 
   13148 static void
   13149 btrace_sync_conf (const struct btrace_config *conf)
   13150 {
   13151   struct packet_config *packet;
   13152   struct remote_state *rs;
   13153   char *buf, *pos, *endbuf;
   13154 
   13155   rs = get_remote_state ();
   13156   buf = rs->buf;
   13157   endbuf = buf + get_remote_packet_size ();
   13158 
   13159   packet = &remote_protocol_packets[PACKET_Qbtrace_conf_bts_size];
   13160   if (packet_config_support (packet) == PACKET_ENABLE
   13161       && conf->bts.size != rs->btrace_config.bts.size)
   13162     {
   13163       pos = buf;
   13164       pos += xsnprintf (pos, endbuf - pos, "%s=0x%x", packet->name,
   13165                         conf->bts.size);
   13166 
   13167       putpkt (buf);
   13168       getpkt (&buf, &rs->buf_size, 0);
   13169 
   13170       if (packet_ok (buf, packet) == PACKET_ERROR)
   13171 	{
   13172 	  if (buf[0] == 'E' && buf[1] == '.')
   13173 	    error (_("Failed to configure the BTS buffer size: %s"), buf + 2);
   13174 	  else
   13175 	    error (_("Failed to configure the BTS buffer size."));
   13176 	}
   13177 
   13178       rs->btrace_config.bts.size = conf->bts.size;
   13179     }
   13180 
   13181   packet = &remote_protocol_packets[PACKET_Qbtrace_conf_pt_size];
   13182   if (packet_config_support (packet) == PACKET_ENABLE
   13183       && conf->pt.size != rs->btrace_config.pt.size)
   13184     {
   13185       pos = buf;
   13186       pos += xsnprintf (pos, endbuf - pos, "%s=0x%x", packet->name,
   13187                         conf->pt.size);
   13188 
   13189       putpkt (buf);
   13190       getpkt (&buf, &rs->buf_size, 0);
   13191 
   13192       if (packet_ok (buf, packet) == PACKET_ERROR)
   13193 	{
   13194 	  if (buf[0] == 'E' && buf[1] == '.')
   13195 	    error (_("Failed to configure the trace buffer size: %s"), buf + 2);
   13196 	  else
   13197 	    error (_("Failed to configure the trace buffer size."));
   13198 	}
   13199 
   13200       rs->btrace_config.pt.size = conf->pt.size;
   13201     }
   13202 }
   13203 
   13204 /* Read the current thread's btrace configuration from the target and
   13205    store it into CONF.  */
   13206 
   13207 static void
   13208 btrace_read_config (struct btrace_config *conf)
   13209 {
   13210   char *xml;
   13211 
   13212   xml = target_read_stralloc (&current_target,
   13213 			      TARGET_OBJECT_BTRACE_CONF, "");
   13214   if (xml != NULL)
   13215     {
   13216       struct cleanup *cleanup;
   13217 
   13218       cleanup = make_cleanup (xfree, xml);
   13219       parse_xml_btrace_conf (conf, xml);
   13220       do_cleanups (cleanup);
   13221     }
   13222 }
   13223 
   13224 /* Maybe reopen target btrace.  */
   13225 
   13226 static void
   13227 remote_btrace_maybe_reopen (void)
   13228 {
   13229   struct remote_state *rs = get_remote_state ();
   13230   struct cleanup *cleanup;
   13231   struct thread_info *tp;
   13232   int btrace_target_pushed = 0;
   13233   int warned = 0;
   13234 
   13235   cleanup = make_cleanup_restore_current_thread ();
   13236   ALL_NON_EXITED_THREADS (tp)
   13237     {
   13238       set_general_thread (tp->ptid);
   13239 
   13240       memset (&rs->btrace_config, 0x00, sizeof (struct btrace_config));
   13241       btrace_read_config (&rs->btrace_config);
   13242 
   13243       if (rs->btrace_config.format == BTRACE_FORMAT_NONE)
   13244 	continue;
   13245 
   13246 #if !defined (HAVE_LIBIPT)
   13247       if (rs->btrace_config.format == BTRACE_FORMAT_PT)
   13248 	{
   13249 	  if (!warned)
   13250 	    {
   13251 	      warned = 1;
   13252 	      warning (_("GDB does not support Intel Processor Trace. "
   13253 			 "\"record\" will not work in this session."));
   13254 	    }
   13255 
   13256 	  continue;
   13257 	}
   13258 #endif /* !defined (HAVE_LIBIPT) */
   13259 
   13260       /* Push target, once, but before anything else happens.  This way our
   13261 	 changes to the threads will be cleaned up by unpushing the target
   13262 	 in case btrace_read_config () throws.  */
   13263       if (!btrace_target_pushed)
   13264 	{
   13265 	  btrace_target_pushed = 1;
   13266 	  record_btrace_push_target ();
   13267 	  printf_filtered (_("Target is recording using %s.\n"),
   13268 			   btrace_format_string (rs->btrace_config.format));
   13269 	}
   13270 
   13271       tp->btrace.target = XCNEW (struct btrace_target_info);
   13272       tp->btrace.target->ptid = tp->ptid;
   13273       tp->btrace.target->conf = rs->btrace_config;
   13274     }
   13275   do_cleanups (cleanup);
   13276 }
   13277 
   13278 /* Enable branch tracing.  */
   13279 
   13280 static struct btrace_target_info *
   13281 remote_enable_btrace (struct target_ops *self, ptid_t ptid,
   13282 		      const struct btrace_config *conf)
   13283 {
   13284   struct btrace_target_info *tinfo = NULL;
   13285   struct packet_config *packet = NULL;
   13286   struct remote_state *rs = get_remote_state ();
   13287   char *buf = rs->buf;
   13288   char *endbuf = rs->buf + get_remote_packet_size ();
   13289 
   13290   switch (conf->format)
   13291     {
   13292       case BTRACE_FORMAT_BTS:
   13293 	packet = &remote_protocol_packets[PACKET_Qbtrace_bts];
   13294 	break;
   13295 
   13296       case BTRACE_FORMAT_PT:
   13297 	packet = &remote_protocol_packets[PACKET_Qbtrace_pt];
   13298 	break;
   13299     }
   13300 
   13301   if (packet == NULL || packet_config_support (packet) != PACKET_ENABLE)
   13302     error (_("Target does not support branch tracing."));
   13303 
   13304   btrace_sync_conf (conf);
   13305 
   13306   set_general_thread (ptid);
   13307 
   13308   buf += xsnprintf (buf, endbuf - buf, "%s", packet->name);
   13309   putpkt (rs->buf);
   13310   getpkt (&rs->buf, &rs->buf_size, 0);
   13311 
   13312   if (packet_ok (rs->buf, packet) == PACKET_ERROR)
   13313     {
   13314       if (rs->buf[0] == 'E' && rs->buf[1] == '.')
   13315 	error (_("Could not enable branch tracing for %s: %s"),
   13316 	       target_pid_to_str (ptid), rs->buf + 2);
   13317       else
   13318 	error (_("Could not enable branch tracing for %s."),
   13319 	       target_pid_to_str (ptid));
   13320     }
   13321 
   13322   tinfo = XCNEW (struct btrace_target_info);
   13323   tinfo->ptid = ptid;
   13324 
   13325   /* If we fail to read the configuration, we lose some information, but the
   13326      tracing itself is not impacted.  */
   13327   TRY
   13328     {
   13329       btrace_read_config (&tinfo->conf);
   13330     }
   13331   CATCH (err, RETURN_MASK_ERROR)
   13332     {
   13333       if (err.message != NULL)
   13334 	warning ("%s", err.message);
   13335     }
   13336   END_CATCH
   13337 
   13338   return tinfo;
   13339 }
   13340 
   13341 /* Disable branch tracing.  */
   13342 
   13343 static void
   13344 remote_disable_btrace (struct target_ops *self,
   13345 		       struct btrace_target_info *tinfo)
   13346 {
   13347   struct packet_config *packet = &remote_protocol_packets[PACKET_Qbtrace_off];
   13348   struct remote_state *rs = get_remote_state ();
   13349   char *buf = rs->buf;
   13350   char *endbuf = rs->buf + get_remote_packet_size ();
   13351 
   13352   if (packet_config_support (packet) != PACKET_ENABLE)
   13353     error (_("Target does not support branch tracing."));
   13354 
   13355   set_general_thread (tinfo->ptid);
   13356 
   13357   buf += xsnprintf (buf, endbuf - buf, "%s", packet->name);
   13358   putpkt (rs->buf);
   13359   getpkt (&rs->buf, &rs->buf_size, 0);
   13360 
   13361   if (packet_ok (rs->buf, packet) == PACKET_ERROR)
   13362     {
   13363       if (rs->buf[0] == 'E' && rs->buf[1] == '.')
   13364 	error (_("Could not disable branch tracing for %s: %s"),
   13365 	       target_pid_to_str (tinfo->ptid), rs->buf + 2);
   13366       else
   13367 	error (_("Could not disable branch tracing for %s."),
   13368 	       target_pid_to_str (tinfo->ptid));
   13369     }
   13370 
   13371   xfree (tinfo);
   13372 }
   13373 
   13374 /* Teardown branch tracing.  */
   13375 
   13376 static void
   13377 remote_teardown_btrace (struct target_ops *self,
   13378 			struct btrace_target_info *tinfo)
   13379 {
   13380   /* We must not talk to the target during teardown.  */
   13381   xfree (tinfo);
   13382 }
   13383 
   13384 /* Read the branch trace.  */
   13385 
   13386 static enum btrace_error
   13387 remote_read_btrace (struct target_ops *self,
   13388 		    struct btrace_data *btrace,
   13389 		    struct btrace_target_info *tinfo,
   13390 		    enum btrace_read_type type)
   13391 {
   13392   struct packet_config *packet = &remote_protocol_packets[PACKET_qXfer_btrace];
   13393   struct cleanup *cleanup;
   13394   const char *annex;
   13395   char *xml;
   13396 
   13397   if (packet_config_support (packet) != PACKET_ENABLE)
   13398     error (_("Target does not support branch tracing."));
   13399 
   13400 #if !defined(HAVE_LIBEXPAT)
   13401   error (_("Cannot process branch tracing result. XML parsing not supported."));
   13402 #endif
   13403 
   13404   switch (type)
   13405     {
   13406     case BTRACE_READ_ALL:
   13407       annex = "all";
   13408       break;
   13409     case BTRACE_READ_NEW:
   13410       annex = "new";
   13411       break;
   13412     case BTRACE_READ_DELTA:
   13413       annex = "delta";
   13414       break;
   13415     default:
   13416       internal_error (__FILE__, __LINE__,
   13417 		      _("Bad branch tracing read type: %u."),
   13418 		      (unsigned int) type);
   13419     }
   13420 
   13421   xml = target_read_stralloc (&current_target,
   13422 			      TARGET_OBJECT_BTRACE, annex);
   13423   if (xml == NULL)
   13424     return BTRACE_ERR_UNKNOWN;
   13425 
   13426   cleanup = make_cleanup (xfree, xml);
   13427   parse_xml_btrace (btrace, xml);
   13428   do_cleanups (cleanup);
   13429 
   13430   return BTRACE_ERR_NONE;
   13431 }
   13432 
   13433 static const struct btrace_config *
   13434 remote_btrace_conf (struct target_ops *self,
   13435 		    const struct btrace_target_info *tinfo)
   13436 {
   13437   return &tinfo->conf;
   13438 }
   13439 
   13440 static int
   13441 remote_augmented_libraries_svr4_read (struct target_ops *self)
   13442 {
   13443   return (packet_support (PACKET_augmented_libraries_svr4_read_feature)
   13444 	  == PACKET_ENABLE);
   13445 }
   13446 
   13447 /* Implementation of to_load.  */
   13448 
   13449 static void
   13450 remote_load (struct target_ops *self, const char *name, int from_tty)
   13451 {
   13452   generic_load (name, from_tty);
   13453 }
   13454 
   13455 /* Accepts an integer PID; returns a string representing a file that
   13456    can be opened on the remote side to get the symbols for the child
   13457    process.  Returns NULL if the operation is not supported.  */
   13458 
   13459 static char *
   13460 remote_pid_to_exec_file (struct target_ops *self, int pid)
   13461 {
   13462   static char *filename = NULL;
   13463   struct inferior *inf;
   13464   char *annex = NULL;
   13465 
   13466   if (packet_support (PACKET_qXfer_exec_file) != PACKET_ENABLE)
   13467     return NULL;
   13468 
   13469   if (filename != NULL)
   13470     xfree (filename);
   13471 
   13472   inf = find_inferior_pid (pid);
   13473   if (inf == NULL)
   13474     internal_error (__FILE__, __LINE__,
   13475 		    _("not currently attached to process %d"), pid);
   13476 
   13477   if (!inf->fake_pid_p)
   13478     {
   13479       const int annex_size = 9;
   13480 
   13481       annex = (char *) alloca (annex_size);
   13482       xsnprintf (annex, annex_size, "%x", pid);
   13483     }
   13484 
   13485   filename = target_read_stralloc (&current_target,
   13486 				   TARGET_OBJECT_EXEC_FILE, annex);
   13487 
   13488   return filename;
   13489 }
   13490 
   13491 /* Implement the to_can_do_single_step target_ops method.  */
   13492 
   13493 static int
   13494 remote_can_do_single_step (struct target_ops *ops)
   13495 {
   13496   /* We can only tell whether target supports single step or not by
   13497      supported s and S vCont actions if the stub supports vContSupported
   13498      feature.  If the stub doesn't support vContSupported feature,
   13499      we have conservatively to think target doesn't supports single
   13500      step.  */
   13501   if (packet_support (PACKET_vContSupported) == PACKET_ENABLE)
   13502     {
   13503       struct remote_state *rs = get_remote_state ();
   13504 
   13505       if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
   13506 	remote_vcont_probe (rs);
   13507 
   13508       return rs->supports_vCont.s && rs->supports_vCont.S;
   13509     }
   13510   else
   13511     return 0;
   13512 }
   13513 
   13514 /* Implementation of the to_execution_direction method for the remote
   13515    target.  */
   13516 
   13517 static enum exec_direction_kind
   13518 remote_execution_direction (struct target_ops *self)
   13519 {
   13520   struct remote_state *rs = get_remote_state ();
   13521 
   13522   return rs->last_resume_exec_dir;
   13523 }
   13524 
   13525 static void
   13526 init_remote_ops (void)
   13527 {
   13528   remote_ops.to_shortname = "remote";
   13529   remote_ops.to_longname = "Remote serial target in gdb-specific protocol";
   13530   remote_ops.to_doc =
   13531     "Use a remote computer via a serial line, using a gdb-specific protocol.\n\
   13532 Specify the serial device it is connected to\n\
   13533 (e.g. /dev/ttyS0, /dev/ttya, COM1, etc.).";
   13534   remote_ops.to_open = remote_open;
   13535   remote_ops.to_close = remote_close;
   13536   remote_ops.to_detach = remote_detach;
   13537   remote_ops.to_disconnect = remote_disconnect;
   13538   remote_ops.to_resume = remote_resume;
   13539   remote_ops.to_commit_resume = remote_commit_resume;
   13540   remote_ops.to_wait = remote_wait;
   13541   remote_ops.to_fetch_registers = remote_fetch_registers;
   13542   remote_ops.to_store_registers = remote_store_registers;
   13543   remote_ops.to_prepare_to_store = remote_prepare_to_store;
   13544   remote_ops.to_files_info = remote_files_info;
   13545   remote_ops.to_insert_breakpoint = remote_insert_breakpoint;
   13546   remote_ops.to_remove_breakpoint = remote_remove_breakpoint;
   13547   remote_ops.to_stopped_by_sw_breakpoint = remote_stopped_by_sw_breakpoint;
   13548   remote_ops.to_supports_stopped_by_sw_breakpoint = remote_supports_stopped_by_sw_breakpoint;
   13549   remote_ops.to_stopped_by_hw_breakpoint = remote_stopped_by_hw_breakpoint;
   13550   remote_ops.to_supports_stopped_by_hw_breakpoint = remote_supports_stopped_by_hw_breakpoint;
   13551   remote_ops.to_stopped_by_watchpoint = remote_stopped_by_watchpoint;
   13552   remote_ops.to_stopped_data_address = remote_stopped_data_address;
   13553   remote_ops.to_watchpoint_addr_within_range =
   13554     remote_watchpoint_addr_within_range;
   13555   remote_ops.to_can_use_hw_breakpoint = remote_check_watch_resources;
   13556   remote_ops.to_insert_hw_breakpoint = remote_insert_hw_breakpoint;
   13557   remote_ops.to_remove_hw_breakpoint = remote_remove_hw_breakpoint;
   13558   remote_ops.to_region_ok_for_hw_watchpoint
   13559      = remote_region_ok_for_hw_watchpoint;
   13560   remote_ops.to_insert_watchpoint = remote_insert_watchpoint;
   13561   remote_ops.to_remove_watchpoint = remote_remove_watchpoint;
   13562   remote_ops.to_kill = remote_kill;
   13563   remote_ops.to_load = remote_load;
   13564   remote_ops.to_mourn_inferior = remote_mourn;
   13565   remote_ops.to_pass_signals = remote_pass_signals;
   13566   remote_ops.to_set_syscall_catchpoint = remote_set_syscall_catchpoint;
   13567   remote_ops.to_program_signals = remote_program_signals;
   13568   remote_ops.to_thread_alive = remote_thread_alive;
   13569   remote_ops.to_thread_name = remote_thread_name;
   13570   remote_ops.to_update_thread_list = remote_update_thread_list;
   13571   remote_ops.to_pid_to_str = remote_pid_to_str;
   13572   remote_ops.to_extra_thread_info = remote_threads_extra_info;
   13573   remote_ops.to_get_ada_task_ptid = remote_get_ada_task_ptid;
   13574   remote_ops.to_stop = remote_stop;
   13575   remote_ops.to_interrupt = remote_interrupt;
   13576   remote_ops.to_pass_ctrlc = remote_pass_ctrlc;
   13577   remote_ops.to_xfer_partial = remote_xfer_partial;
   13578   remote_ops.to_get_memory_xfer_limit = remote_get_memory_xfer_limit;
   13579   remote_ops.to_rcmd = remote_rcmd;
   13580   remote_ops.to_pid_to_exec_file = remote_pid_to_exec_file;
   13581   remote_ops.to_log_command = serial_log_command;
   13582   remote_ops.to_get_thread_local_address = remote_get_thread_local_address;
   13583   remote_ops.to_stratum = process_stratum;
   13584   remote_ops.to_has_all_memory = default_child_has_all_memory;
   13585   remote_ops.to_has_memory = default_child_has_memory;
   13586   remote_ops.to_has_stack = default_child_has_stack;
   13587   remote_ops.to_has_registers = default_child_has_registers;
   13588   remote_ops.to_has_execution = default_child_has_execution;
   13589   remote_ops.to_has_thread_control = tc_schedlock;    /* can lock scheduler */
   13590   remote_ops.to_can_execute_reverse = remote_can_execute_reverse;
   13591   remote_ops.to_magic = OPS_MAGIC;
   13592   remote_ops.to_memory_map = remote_memory_map;
   13593   remote_ops.to_flash_erase = remote_flash_erase;
   13594   remote_ops.to_flash_done = remote_flash_done;
   13595   remote_ops.to_read_description = remote_read_description;
   13596   remote_ops.to_search_memory = remote_search_memory;
   13597   remote_ops.to_can_async_p = remote_can_async_p;
   13598   remote_ops.to_is_async_p = remote_is_async_p;
   13599   remote_ops.to_async = remote_async;
   13600   remote_ops.to_thread_events = remote_thread_events;
   13601   remote_ops.to_can_do_single_step = remote_can_do_single_step;
   13602   remote_ops.to_terminal_inferior = remote_terminal_inferior;
   13603   remote_ops.to_terminal_ours = remote_terminal_ours;
   13604   remote_ops.to_supports_non_stop = remote_supports_non_stop;
   13605   remote_ops.to_supports_multi_process = remote_supports_multi_process;
   13606   remote_ops.to_supports_disable_randomization
   13607     = remote_supports_disable_randomization;
   13608   remote_ops.to_filesystem_is_local = remote_filesystem_is_local;
   13609   remote_ops.to_fileio_open = remote_hostio_open;
   13610   remote_ops.to_fileio_pwrite = remote_hostio_pwrite;
   13611   remote_ops.to_fileio_pread = remote_hostio_pread;
   13612   remote_ops.to_fileio_fstat = remote_hostio_fstat;
   13613   remote_ops.to_fileio_close = remote_hostio_close;
   13614   remote_ops.to_fileio_unlink = remote_hostio_unlink;
   13615   remote_ops.to_fileio_readlink = remote_hostio_readlink;
   13616   remote_ops.to_supports_enable_disable_tracepoint = remote_supports_enable_disable_tracepoint;
   13617   remote_ops.to_supports_string_tracing = remote_supports_string_tracing;
   13618   remote_ops.to_supports_evaluation_of_breakpoint_conditions = remote_supports_cond_breakpoints;
   13619   remote_ops.to_can_run_breakpoint_commands = remote_can_run_breakpoint_commands;
   13620   remote_ops.to_trace_init = remote_trace_init;
   13621   remote_ops.to_download_tracepoint = remote_download_tracepoint;
   13622   remote_ops.to_can_download_tracepoint = remote_can_download_tracepoint;
   13623   remote_ops.to_download_trace_state_variable
   13624     = remote_download_trace_state_variable;
   13625   remote_ops.to_enable_tracepoint = remote_enable_tracepoint;
   13626   remote_ops.to_disable_tracepoint = remote_disable_tracepoint;
   13627   remote_ops.to_trace_set_readonly_regions = remote_trace_set_readonly_regions;
   13628   remote_ops.to_trace_start = remote_trace_start;
   13629   remote_ops.to_get_trace_status = remote_get_trace_status;
   13630   remote_ops.to_get_tracepoint_status = remote_get_tracepoint_status;
   13631   remote_ops.to_trace_stop = remote_trace_stop;
   13632   remote_ops.to_trace_find = remote_trace_find;
   13633   remote_ops.to_get_trace_state_variable_value
   13634     = remote_get_trace_state_variable_value;
   13635   remote_ops.to_save_trace_data = remote_save_trace_data;
   13636   remote_ops.to_upload_tracepoints = remote_upload_tracepoints;
   13637   remote_ops.to_upload_trace_state_variables
   13638     = remote_upload_trace_state_variables;
   13639   remote_ops.to_get_raw_trace_data = remote_get_raw_trace_data;
   13640   remote_ops.to_get_min_fast_tracepoint_insn_len = remote_get_min_fast_tracepoint_insn_len;
   13641   remote_ops.to_set_disconnected_tracing = remote_set_disconnected_tracing;
   13642   remote_ops.to_set_circular_trace_buffer = remote_set_circular_trace_buffer;
   13643   remote_ops.to_set_trace_buffer_size = remote_set_trace_buffer_size;
   13644   remote_ops.to_set_trace_notes = remote_set_trace_notes;
   13645   remote_ops.to_core_of_thread = remote_core_of_thread;
   13646   remote_ops.to_verify_memory = remote_verify_memory;
   13647   remote_ops.to_get_tib_address = remote_get_tib_address;
   13648   remote_ops.to_set_permissions = remote_set_permissions;
   13649   remote_ops.to_static_tracepoint_marker_at
   13650     = remote_static_tracepoint_marker_at;
   13651   remote_ops.to_static_tracepoint_markers_by_strid
   13652     = remote_static_tracepoint_markers_by_strid;
   13653   remote_ops.to_traceframe_info = remote_traceframe_info;
   13654   remote_ops.to_use_agent = remote_use_agent;
   13655   remote_ops.to_can_use_agent = remote_can_use_agent;
   13656   remote_ops.to_supports_btrace = remote_supports_btrace;
   13657   remote_ops.to_enable_btrace = remote_enable_btrace;
   13658   remote_ops.to_disable_btrace = remote_disable_btrace;
   13659   remote_ops.to_teardown_btrace = remote_teardown_btrace;
   13660   remote_ops.to_read_btrace = remote_read_btrace;
   13661   remote_ops.to_btrace_conf = remote_btrace_conf;
   13662   remote_ops.to_augmented_libraries_svr4_read =
   13663     remote_augmented_libraries_svr4_read;
   13664   remote_ops.to_follow_fork = remote_follow_fork;
   13665   remote_ops.to_follow_exec = remote_follow_exec;
   13666   remote_ops.to_insert_fork_catchpoint = remote_insert_fork_catchpoint;
   13667   remote_ops.to_remove_fork_catchpoint = remote_remove_fork_catchpoint;
   13668   remote_ops.to_insert_vfork_catchpoint = remote_insert_vfork_catchpoint;
   13669   remote_ops.to_remove_vfork_catchpoint = remote_remove_vfork_catchpoint;
   13670   remote_ops.to_insert_exec_catchpoint = remote_insert_exec_catchpoint;
   13671   remote_ops.to_remove_exec_catchpoint = remote_remove_exec_catchpoint;
   13672   remote_ops.to_execution_direction = remote_execution_direction;
   13673 }
   13674 
   13675 /* Set up the extended remote vector by making a copy of the standard
   13676    remote vector and adding to it.  */
   13677 
   13678 static void
   13679 init_extended_remote_ops (void)
   13680 {
   13681   extended_remote_ops = remote_ops;
   13682 
   13683   extended_remote_ops.to_shortname = "extended-remote";
   13684   extended_remote_ops.to_longname =
   13685     "Extended remote serial target in gdb-specific protocol";
   13686   extended_remote_ops.to_doc =
   13687     "Use a remote computer via a serial line, using a gdb-specific protocol.\n\
   13688 Specify the serial device it is connected to (e.g. /dev/ttya).";
   13689   extended_remote_ops.to_open = extended_remote_open;
   13690   extended_remote_ops.to_create_inferior = extended_remote_create_inferior;
   13691   extended_remote_ops.to_detach = extended_remote_detach;
   13692   extended_remote_ops.to_attach = extended_remote_attach;
   13693   extended_remote_ops.to_post_attach = extended_remote_post_attach;
   13694   extended_remote_ops.to_supports_disable_randomization
   13695     = extended_remote_supports_disable_randomization;
   13696 }
   13697 
   13698 static int
   13699 remote_can_async_p (struct target_ops *ops)
   13700 {
   13701   struct remote_state *rs = get_remote_state ();
   13702 
   13703   /* We don't go async if the user has explicitly prevented it with the
   13704      "maint set target-async" command.  */
   13705   if (!target_async_permitted)
   13706     return 0;
   13707 
   13708   /* We're async whenever the serial device is.  */
   13709   return serial_can_async_p (rs->remote_desc);
   13710 }
   13711 
   13712 static int
   13713 remote_is_async_p (struct target_ops *ops)
   13714 {
   13715   struct remote_state *rs = get_remote_state ();
   13716 
   13717   if (!target_async_permitted)
   13718     /* We only enable async when the user specifically asks for it.  */
   13719     return 0;
   13720 
   13721   /* We're async whenever the serial device is.  */
   13722   return serial_is_async_p (rs->remote_desc);
   13723 }
   13724 
   13725 /* Pass the SERIAL event on and up to the client.  One day this code
   13726    will be able to delay notifying the client of an event until the
   13727    point where an entire packet has been received.  */
   13728 
   13729 static serial_event_ftype remote_async_serial_handler;
   13730 
   13731 static void
   13732 remote_async_serial_handler (struct serial *scb, void *context)
   13733 {
   13734   /* Don't propogate error information up to the client.  Instead let
   13735      the client find out about the error by querying the target.  */
   13736   inferior_event_handler (INF_REG_EVENT, NULL);
   13737 }
   13738 
   13739 static void
   13740 remote_async_inferior_event_handler (gdb_client_data data)
   13741 {
   13742   inferior_event_handler (INF_REG_EVENT, NULL);
   13743 }
   13744 
   13745 static void
   13746 remote_async (struct target_ops *ops, int enable)
   13747 {
   13748   struct remote_state *rs = get_remote_state ();
   13749 
   13750   if (enable)
   13751     {
   13752       serial_async (rs->remote_desc, remote_async_serial_handler, rs);
   13753 
   13754       /* If there are pending events in the stop reply queue tell the
   13755 	 event loop to process them.  */
   13756       if (!QUEUE_is_empty (stop_reply_p, stop_reply_queue))
   13757 	mark_async_event_handler (remote_async_inferior_event_token);
   13758       /* For simplicity, below we clear the pending events token
   13759 	 without remembering whether it is marked, so here we always
   13760 	 mark it.  If there's actually no pending notification to
   13761 	 process, this ends up being a no-op (other than a spurious
   13762 	 event-loop wakeup).  */
   13763       if (target_is_non_stop_p ())
   13764 	mark_async_event_handler (rs->notif_state->get_pending_events_token);
   13765     }
   13766   else
   13767     {
   13768       serial_async (rs->remote_desc, NULL, NULL);
   13769       /* If the core is disabling async, it doesn't want to be
   13770 	 disturbed with target events.  Clear all async event sources
   13771 	 too.  */
   13772       clear_async_event_handler (remote_async_inferior_event_token);
   13773       if (target_is_non_stop_p ())
   13774 	clear_async_event_handler (rs->notif_state->get_pending_events_token);
   13775     }
   13776 }
   13777 
   13778 /* Implementation of the to_thread_events method.  */
   13779 
   13780 static void
   13781 remote_thread_events (struct target_ops *ops, int enable)
   13782 {
   13783   struct remote_state *rs = get_remote_state ();
   13784   size_t size = get_remote_packet_size ();
   13785 
   13786   if (packet_support (PACKET_QThreadEvents) == PACKET_DISABLE)
   13787     return;
   13788 
   13789   xsnprintf (rs->buf, size, "QThreadEvents:%x", enable ? 1 : 0);
   13790   putpkt (rs->buf);
   13791   getpkt (&rs->buf, &rs->buf_size, 0);
   13792 
   13793   switch (packet_ok (rs->buf,
   13794 		     &remote_protocol_packets[PACKET_QThreadEvents]))
   13795     {
   13796     case PACKET_OK:
   13797       if (strcmp (rs->buf, "OK") != 0)
   13798 	error (_("Remote refused setting thread events: %s"), rs->buf);
   13799       break;
   13800     case PACKET_ERROR:
   13801       warning (_("Remote failure reply: %s"), rs->buf);
   13802       break;
   13803     case PACKET_UNKNOWN:
   13804       break;
   13805     }
   13806 }
   13807 
   13808 static void
   13809 set_remote_cmd (char *args, int from_tty)
   13810 {
   13811   help_list (remote_set_cmdlist, "set remote ", all_commands, gdb_stdout);
   13812 }
   13813 
   13814 static void
   13815 show_remote_cmd (char *args, int from_tty)
   13816 {
   13817   /* We can't just use cmd_show_list here, because we want to skip
   13818      the redundant "show remote Z-packet" and the legacy aliases.  */
   13819   struct cleanup *showlist_chain;
   13820   struct cmd_list_element *list = remote_show_cmdlist;
   13821   struct ui_out *uiout = current_uiout;
   13822 
   13823   showlist_chain = make_cleanup_ui_out_tuple_begin_end (uiout, "showlist");
   13824   for (; list != NULL; list = list->next)
   13825     if (strcmp (list->name, "Z-packet") == 0)
   13826       continue;
   13827     else if (list->type == not_set_cmd)
   13828       /* Alias commands are exactly like the original, except they
   13829 	 don't have the normal type.  */
   13830       continue;
   13831     else
   13832       {
   13833 	struct cleanup *option_chain
   13834 	  = make_cleanup_ui_out_tuple_begin_end (uiout, "option");
   13835 
   13836 	uiout->field_string ("name", list->name);
   13837 	uiout->text (":  ");
   13838 	if (list->type == show_cmd)
   13839 	  do_show_command (NULL, from_tty, list);
   13840 	else
   13841 	  cmd_func (list, NULL, from_tty);
   13842 	/* Close the tuple.  */
   13843 	do_cleanups (option_chain);
   13844       }
   13845 
   13846   /* Close the tuple.  */
   13847   do_cleanups (showlist_chain);
   13848 }
   13849 
   13850 
   13851 /* Function to be called whenever a new objfile (shlib) is detected.  */
   13852 static void
   13853 remote_new_objfile (struct objfile *objfile)
   13854 {
   13855   struct remote_state *rs = get_remote_state ();
   13856 
   13857   if (rs->remote_desc != 0)		/* Have a remote connection.  */
   13858     remote_check_symbols ();
   13859 }
   13860 
   13861 /* Pull all the tracepoints defined on the target and create local
   13862    data structures representing them.  We don't want to create real
   13863    tracepoints yet, we don't want to mess up the user's existing
   13864    collection.  */
   13865 
   13866 static int
   13867 remote_upload_tracepoints (struct target_ops *self, struct uploaded_tp **utpp)
   13868 {
   13869   struct remote_state *rs = get_remote_state ();
   13870   char *p;
   13871 
   13872   /* Ask for a first packet of tracepoint definition.  */
   13873   putpkt ("qTfP");
   13874   getpkt (&rs->buf, &rs->buf_size, 0);
   13875   p = rs->buf;
   13876   while (*p && *p != 'l')
   13877     {
   13878       parse_tracepoint_definition (p, utpp);
   13879       /* Ask for another packet of tracepoint definition.  */
   13880       putpkt ("qTsP");
   13881       getpkt (&rs->buf, &rs->buf_size, 0);
   13882       p = rs->buf;
   13883     }
   13884   return 0;
   13885 }
   13886 
   13887 static int
   13888 remote_upload_trace_state_variables (struct target_ops *self,
   13889 				     struct uploaded_tsv **utsvp)
   13890 {
   13891   struct remote_state *rs = get_remote_state ();
   13892   char *p;
   13893 
   13894   /* Ask for a first packet of variable definition.  */
   13895   putpkt ("qTfV");
   13896   getpkt (&rs->buf, &rs->buf_size, 0);
   13897   p = rs->buf;
   13898   while (*p && *p != 'l')
   13899     {
   13900       parse_tsv_definition (p, utsvp);
   13901       /* Ask for another packet of variable definition.  */
   13902       putpkt ("qTsV");
   13903       getpkt (&rs->buf, &rs->buf_size, 0);
   13904       p = rs->buf;
   13905     }
   13906   return 0;
   13907 }
   13908 
   13909 /* The "set/show range-stepping" show hook.  */
   13910 
   13911 static void
   13912 show_range_stepping (struct ui_file *file, int from_tty,
   13913 		     struct cmd_list_element *c,
   13914 		     const char *value)
   13915 {
   13916   fprintf_filtered (file,
   13917 		    _("Debugger's willingness to use range stepping "
   13918 		      "is %s.\n"), value);
   13919 }
   13920 
   13921 /* The "set/show range-stepping" set hook.  */
   13922 
   13923 static void
   13924 set_range_stepping (char *ignore_args, int from_tty,
   13925 		    struct cmd_list_element *c)
   13926 {
   13927   struct remote_state *rs = get_remote_state ();
   13928 
   13929   /* Whene enabling, check whether range stepping is actually
   13930      supported by the target, and warn if not.  */
   13931   if (use_range_stepping)
   13932     {
   13933       if (rs->remote_desc != NULL)
   13934 	{
   13935 	  if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
   13936 	    remote_vcont_probe (rs);
   13937 
   13938 	  if (packet_support (PACKET_vCont) == PACKET_ENABLE
   13939 	      && rs->supports_vCont.r)
   13940 	    return;
   13941 	}
   13942 
   13943       warning (_("Range stepping is not supported by the current target"));
   13944     }
   13945 }
   13946 
   13947 void
   13948 _initialize_remote (void)
   13949 {
   13950   struct cmd_list_element *cmd;
   13951   const char *cmd_name;
   13952 
   13953   /* architecture specific data */
   13954   remote_gdbarch_data_handle =
   13955     gdbarch_data_register_post_init (init_remote_state);
   13956   remote_g_packet_data_handle =
   13957     gdbarch_data_register_pre_init (remote_g_packet_data_init);
   13958 
   13959   remote_pspace_data
   13960     = register_program_space_data_with_cleanup (NULL,
   13961 						remote_pspace_data_cleanup);
   13962 
   13963   /* Initialize the per-target state.  At the moment there is only one
   13964      of these, not one per target.  Only one target is active at a
   13965      time.  */
   13966   remote_state = new_remote_state ();
   13967 
   13968   init_remote_ops ();
   13969   add_target (&remote_ops);
   13970 
   13971   init_extended_remote_ops ();
   13972   add_target (&extended_remote_ops);
   13973 
   13974   /* Hook into new objfile notification.  */
   13975   observer_attach_new_objfile (remote_new_objfile);
   13976   /* We're no longer interested in notification events of an inferior
   13977      when it exits.  */
   13978   observer_attach_inferior_exit (discard_pending_stop_replies);
   13979 
   13980 #if 0
   13981   init_remote_threadtests ();
   13982 #endif
   13983 
   13984   stop_reply_queue = QUEUE_alloc (stop_reply_p, stop_reply_xfree);
   13985   /* set/show remote ...  */
   13986 
   13987   add_prefix_cmd ("remote", class_maintenance, set_remote_cmd, _("\
   13988 Remote protocol specific variables\n\
   13989 Configure various remote-protocol specific variables such as\n\
   13990 the packets being used"),
   13991 		  &remote_set_cmdlist, "set remote ",
   13992 		  0 /* allow-unknown */, &setlist);
   13993   add_prefix_cmd ("remote", class_maintenance, show_remote_cmd, _("\
   13994 Remote protocol specific variables\n\
   13995 Configure various remote-protocol specific variables such as\n\
   13996 the packets being used"),
   13997 		  &remote_show_cmdlist, "show remote ",
   13998 		  0 /* allow-unknown */, &showlist);
   13999 
   14000   add_cmd ("compare-sections", class_obscure, compare_sections_command, _("\
   14001 Compare section data on target to the exec file.\n\
   14002 Argument is a single section name (default: all loaded sections).\n\
   14003 To compare only read-only loaded sections, specify the -r option."),
   14004 	   &cmdlist);
   14005 
   14006   add_cmd ("packet", class_maintenance, packet_command, _("\
   14007 Send an arbitrary packet to a remote target.\n\
   14008    maintenance packet TEXT\n\
   14009 If GDB is talking to an inferior via the GDB serial protocol, then\n\
   14010 this command sends the string TEXT to the inferior, and displays the\n\
   14011 response packet.  GDB supplies the initial `$' character, and the\n\
   14012 terminating `#' character and checksum."),
   14013 	   &maintenancelist);
   14014 
   14015   add_setshow_boolean_cmd ("remotebreak", no_class, &remote_break, _("\
   14016 Set whether to send break if interrupted."), _("\
   14017 Show whether to send break if interrupted."), _("\
   14018 If set, a break, instead of a cntrl-c, is sent to the remote target."),
   14019 			   set_remotebreak, show_remotebreak,
   14020 			   &setlist, &showlist);
   14021   cmd_name = "remotebreak";
   14022   cmd = lookup_cmd (&cmd_name, setlist, "", -1, 1);
   14023   deprecate_cmd (cmd, "set remote interrupt-sequence");
   14024   cmd_name = "remotebreak"; /* needed because lookup_cmd updates the pointer */
   14025   cmd = lookup_cmd (&cmd_name, showlist, "", -1, 1);
   14026   deprecate_cmd (cmd, "show remote interrupt-sequence");
   14027 
   14028   add_setshow_enum_cmd ("interrupt-sequence", class_support,
   14029 			interrupt_sequence_modes, &interrupt_sequence_mode,
   14030 			_("\
   14031 Set interrupt sequence to remote target."), _("\
   14032 Show interrupt sequence to remote target."), _("\
   14033 Valid value is \"Ctrl-C\", \"BREAK\" or \"BREAK-g\". The default is \"Ctrl-C\"."),
   14034 			NULL, show_interrupt_sequence,
   14035 			&remote_set_cmdlist,
   14036 			&remote_show_cmdlist);
   14037 
   14038   add_setshow_boolean_cmd ("interrupt-on-connect", class_support,
   14039 			   &interrupt_on_connect, _("\
   14040 Set whether interrupt-sequence is sent to remote target when gdb connects to."), _("		\
   14041 Show whether interrupt-sequence is sent to remote target when gdb connects to."), _("		\
   14042 If set, interrupt sequence is sent to remote target."),
   14043 			   NULL, NULL,
   14044 			   &remote_set_cmdlist, &remote_show_cmdlist);
   14045 
   14046   /* Install commands for configuring memory read/write packets.  */
   14047 
   14048   add_cmd ("remotewritesize", no_class, set_memory_write_packet_size, _("\
   14049 Set the maximum number of bytes per memory write packet (deprecated)."),
   14050 	   &setlist);
   14051   add_cmd ("remotewritesize", no_class, show_memory_write_packet_size, _("\
   14052 Show the maximum number of bytes per memory write packet (deprecated)."),
   14053 	   &showlist);
   14054   add_cmd ("memory-write-packet-size", no_class,
   14055 	   set_memory_write_packet_size, _("\
   14056 Set the maximum number of bytes per memory-write packet.\n\
   14057 Specify the number of bytes in a packet or 0 (zero) for the\n\
   14058 default packet size.  The actual limit is further reduced\n\
   14059 dependent on the target.  Specify ``fixed'' to disable the\n\
   14060 further restriction and ``limit'' to enable that restriction."),
   14061 	   &remote_set_cmdlist);
   14062   add_cmd ("memory-read-packet-size", no_class,
   14063 	   set_memory_read_packet_size, _("\
   14064 Set the maximum number of bytes per memory-read packet.\n\
   14065 Specify the number of bytes in a packet or 0 (zero) for the\n\
   14066 default packet size.  The actual limit is further reduced\n\
   14067 dependent on the target.  Specify ``fixed'' to disable the\n\
   14068 further restriction and ``limit'' to enable that restriction."),
   14069 	   &remote_set_cmdlist);
   14070   add_cmd ("memory-write-packet-size", no_class,
   14071 	   show_memory_write_packet_size,
   14072 	   _("Show the maximum number of bytes per memory-write packet."),
   14073 	   &remote_show_cmdlist);
   14074   add_cmd ("memory-read-packet-size", no_class,
   14075 	   show_memory_read_packet_size,
   14076 	   _("Show the maximum number of bytes per memory-read packet."),
   14077 	   &remote_show_cmdlist);
   14078 
   14079   add_setshow_zinteger_cmd ("hardware-watchpoint-limit", no_class,
   14080 			    &remote_hw_watchpoint_limit, _("\
   14081 Set the maximum number of target hardware watchpoints."), _("\
   14082 Show the maximum number of target hardware watchpoints."), _("\
   14083 Specify a negative limit for unlimited."),
   14084 			    NULL, NULL, /* FIXME: i18n: The maximum
   14085 					   number of target hardware
   14086 					   watchpoints is %s.  */
   14087 			    &remote_set_cmdlist, &remote_show_cmdlist);
   14088   add_setshow_zinteger_cmd ("hardware-watchpoint-length-limit", no_class,
   14089 			    &remote_hw_watchpoint_length_limit, _("\
   14090 Set the maximum length (in bytes) of a target hardware watchpoint."), _("\
   14091 Show the maximum length (in bytes) of a target hardware watchpoint."), _("\
   14092 Specify a negative limit for unlimited."),
   14093 			    NULL, NULL, /* FIXME: i18n: The maximum
   14094                                            length (in bytes) of a target
   14095                                            hardware watchpoint is %s.  */
   14096 			    &remote_set_cmdlist, &remote_show_cmdlist);
   14097   add_setshow_zinteger_cmd ("hardware-breakpoint-limit", no_class,
   14098 			    &remote_hw_breakpoint_limit, _("\
   14099 Set the maximum number of target hardware breakpoints."), _("\
   14100 Show the maximum number of target hardware breakpoints."), _("\
   14101 Specify a negative limit for unlimited."),
   14102 			    NULL, NULL, /* FIXME: i18n: The maximum
   14103 					   number of target hardware
   14104 					   breakpoints is %s.  */
   14105 			    &remote_set_cmdlist, &remote_show_cmdlist);
   14106 
   14107   add_setshow_zuinteger_cmd ("remoteaddresssize", class_obscure,
   14108 			     &remote_address_size, _("\
   14109 Set the maximum size of the address (in bits) in a memory packet."), _("\
   14110 Show the maximum size of the address (in bits) in a memory packet."), NULL,
   14111 			     NULL,
   14112 			     NULL, /* FIXME: i18n: */
   14113 			     &setlist, &showlist);
   14114 
   14115   init_all_packet_configs ();
   14116 
   14117   add_packet_config_cmd (&remote_protocol_packets[PACKET_X],
   14118 			 "X", "binary-download", 1);
   14119 
   14120   add_packet_config_cmd (&remote_protocol_packets[PACKET_vCont],
   14121 			 "vCont", "verbose-resume", 0);
   14122 
   14123   add_packet_config_cmd (&remote_protocol_packets[PACKET_QPassSignals],
   14124 			 "QPassSignals", "pass-signals", 0);
   14125 
   14126   add_packet_config_cmd (&remote_protocol_packets[PACKET_QCatchSyscalls],
   14127 			 "QCatchSyscalls", "catch-syscalls", 0);
   14128 
   14129   add_packet_config_cmd (&remote_protocol_packets[PACKET_QProgramSignals],
   14130 			 "QProgramSignals", "program-signals", 0);
   14131 
   14132   add_packet_config_cmd (&remote_protocol_packets[PACKET_qSymbol],
   14133 			 "qSymbol", "symbol-lookup", 0);
   14134 
   14135   add_packet_config_cmd (&remote_protocol_packets[PACKET_P],
   14136 			 "P", "set-register", 1);
   14137 
   14138   add_packet_config_cmd (&remote_protocol_packets[PACKET_p],
   14139 			 "p", "fetch-register", 1);
   14140 
   14141   add_packet_config_cmd (&remote_protocol_packets[PACKET_Z0],
   14142 			 "Z0", "software-breakpoint", 0);
   14143 
   14144   add_packet_config_cmd (&remote_protocol_packets[PACKET_Z1],
   14145 			 "Z1", "hardware-breakpoint", 0);
   14146 
   14147   add_packet_config_cmd (&remote_protocol_packets[PACKET_Z2],
   14148 			 "Z2", "write-watchpoint", 0);
   14149 
   14150   add_packet_config_cmd (&remote_protocol_packets[PACKET_Z3],
   14151 			 "Z3", "read-watchpoint", 0);
   14152 
   14153   add_packet_config_cmd (&remote_protocol_packets[PACKET_Z4],
   14154 			 "Z4", "access-watchpoint", 0);
   14155 
   14156   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_auxv],
   14157 			 "qXfer:auxv:read", "read-aux-vector", 0);
   14158 
   14159   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_exec_file],
   14160 			 "qXfer:exec-file:read", "pid-to-exec-file", 0);
   14161 
   14162   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_features],
   14163 			 "qXfer:features:read", "target-features", 0);
   14164 
   14165   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_libraries],
   14166 			 "qXfer:libraries:read", "library-info", 0);
   14167 
   14168   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_libraries_svr4],
   14169 			 "qXfer:libraries-svr4:read", "library-info-svr4", 0);
   14170 
   14171   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_memory_map],
   14172 			 "qXfer:memory-map:read", "memory-map", 0);
   14173 
   14174   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_spu_read],
   14175                          "qXfer:spu:read", "read-spu-object", 0);
   14176 
   14177   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_spu_write],
   14178                          "qXfer:spu:write", "write-spu-object", 0);
   14179 
   14180   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_osdata],
   14181                         "qXfer:osdata:read", "osdata", 0);
   14182 
   14183   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_threads],
   14184 			 "qXfer:threads:read", "threads", 0);
   14185 
   14186   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_siginfo_read],
   14187                          "qXfer:siginfo:read", "read-siginfo-object", 0);
   14188 
   14189   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_siginfo_write],
   14190                          "qXfer:siginfo:write", "write-siginfo-object", 0);
   14191 
   14192   add_packet_config_cmd
   14193     (&remote_protocol_packets[PACKET_qXfer_traceframe_info],
   14194      "qXfer:traceframe-info:read", "traceframe-info", 0);
   14195 
   14196   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_uib],
   14197 			 "qXfer:uib:read", "unwind-info-block", 0);
   14198 
   14199   add_packet_config_cmd (&remote_protocol_packets[PACKET_qGetTLSAddr],
   14200 			 "qGetTLSAddr", "get-thread-local-storage-address",
   14201 			 0);
   14202 
   14203   add_packet_config_cmd (&remote_protocol_packets[PACKET_qGetTIBAddr],
   14204 			 "qGetTIBAddr", "get-thread-information-block-address",
   14205 			 0);
   14206 
   14207   add_packet_config_cmd (&remote_protocol_packets[PACKET_bc],
   14208 			 "bc", "reverse-continue", 0);
   14209 
   14210   add_packet_config_cmd (&remote_protocol_packets[PACKET_bs],
   14211 			 "bs", "reverse-step", 0);
   14212 
   14213   add_packet_config_cmd (&remote_protocol_packets[PACKET_qSupported],
   14214 			 "qSupported", "supported-packets", 0);
   14215 
   14216   add_packet_config_cmd (&remote_protocol_packets[PACKET_qSearch_memory],
   14217 			 "qSearch:memory", "search-memory", 0);
   14218 
   14219   add_packet_config_cmd (&remote_protocol_packets[PACKET_qTStatus],
   14220 			 "qTStatus", "trace-status", 0);
   14221 
   14222   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_setfs],
   14223 			 "vFile:setfs", "hostio-setfs", 0);
   14224 
   14225   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_open],
   14226 			 "vFile:open", "hostio-open", 0);
   14227 
   14228   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_pread],
   14229 			 "vFile:pread", "hostio-pread", 0);
   14230 
   14231   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_pwrite],
   14232 			 "vFile:pwrite", "hostio-pwrite", 0);
   14233 
   14234   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_close],
   14235 			 "vFile:close", "hostio-close", 0);
   14236 
   14237   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_unlink],
   14238 			 "vFile:unlink", "hostio-unlink", 0);
   14239 
   14240   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_readlink],
   14241 			 "vFile:readlink", "hostio-readlink", 0);
   14242 
   14243   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_fstat],
   14244 			 "vFile:fstat", "hostio-fstat", 0);
   14245 
   14246   add_packet_config_cmd (&remote_protocol_packets[PACKET_vAttach],
   14247 			 "vAttach", "attach", 0);
   14248 
   14249   add_packet_config_cmd (&remote_protocol_packets[PACKET_vRun],
   14250 			 "vRun", "run", 0);
   14251 
   14252   add_packet_config_cmd (&remote_protocol_packets[PACKET_QStartNoAckMode],
   14253 			 "QStartNoAckMode", "noack", 0);
   14254 
   14255   add_packet_config_cmd (&remote_protocol_packets[PACKET_vKill],
   14256 			 "vKill", "kill", 0);
   14257 
   14258   add_packet_config_cmd (&remote_protocol_packets[PACKET_qAttached],
   14259 			 "qAttached", "query-attached", 0);
   14260 
   14261   add_packet_config_cmd (&remote_protocol_packets[PACKET_ConditionalTracepoints],
   14262 			 "ConditionalTracepoints",
   14263 			 "conditional-tracepoints", 0);
   14264 
   14265   add_packet_config_cmd (&remote_protocol_packets[PACKET_ConditionalBreakpoints],
   14266 			 "ConditionalBreakpoints",
   14267 			 "conditional-breakpoints", 0);
   14268 
   14269   add_packet_config_cmd (&remote_protocol_packets[PACKET_BreakpointCommands],
   14270 			 "BreakpointCommands",
   14271 			 "breakpoint-commands", 0);
   14272 
   14273   add_packet_config_cmd (&remote_protocol_packets[PACKET_FastTracepoints],
   14274 			 "FastTracepoints", "fast-tracepoints", 0);
   14275 
   14276   add_packet_config_cmd (&remote_protocol_packets[PACKET_TracepointSource],
   14277 			 "TracepointSource", "TracepointSource", 0);
   14278 
   14279   add_packet_config_cmd (&remote_protocol_packets[PACKET_QAllow],
   14280 			 "QAllow", "allow", 0);
   14281 
   14282   add_packet_config_cmd (&remote_protocol_packets[PACKET_StaticTracepoints],
   14283 			 "StaticTracepoints", "static-tracepoints", 0);
   14284 
   14285   add_packet_config_cmd (&remote_protocol_packets[PACKET_InstallInTrace],
   14286 			 "InstallInTrace", "install-in-trace", 0);
   14287 
   14288   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_statictrace_read],
   14289                          "qXfer:statictrace:read", "read-sdata-object", 0);
   14290 
   14291   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_fdpic],
   14292 			 "qXfer:fdpic:read", "read-fdpic-loadmap", 0);
   14293 
   14294   add_packet_config_cmd (&remote_protocol_packets[PACKET_QDisableRandomization],
   14295 			 "QDisableRandomization", "disable-randomization", 0);
   14296 
   14297   add_packet_config_cmd (&remote_protocol_packets[PACKET_QAgent],
   14298 			 "QAgent", "agent", 0);
   14299 
   14300   add_packet_config_cmd (&remote_protocol_packets[PACKET_QTBuffer_size],
   14301 			 "QTBuffer:size", "trace-buffer-size", 0);
   14302 
   14303   add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_off],
   14304        "Qbtrace:off", "disable-btrace", 0);
   14305 
   14306   add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_bts],
   14307        "Qbtrace:bts", "enable-btrace-bts", 0);
   14308 
   14309   add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_pt],
   14310        "Qbtrace:pt", "enable-btrace-pt", 0);
   14311 
   14312   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_btrace],
   14313        "qXfer:btrace", "read-btrace", 0);
   14314 
   14315   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_btrace_conf],
   14316        "qXfer:btrace-conf", "read-btrace-conf", 0);
   14317 
   14318   add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_conf_bts_size],
   14319        "Qbtrace-conf:bts:size", "btrace-conf-bts-size", 0);
   14320 
   14321   add_packet_config_cmd (&remote_protocol_packets[PACKET_multiprocess_feature],
   14322        "multiprocess-feature", "multiprocess-feature", 0);
   14323 
   14324   add_packet_config_cmd (&remote_protocol_packets[PACKET_swbreak_feature],
   14325                          "swbreak-feature", "swbreak-feature", 0);
   14326 
   14327   add_packet_config_cmd (&remote_protocol_packets[PACKET_hwbreak_feature],
   14328                          "hwbreak-feature", "hwbreak-feature", 0);
   14329 
   14330   add_packet_config_cmd (&remote_protocol_packets[PACKET_fork_event_feature],
   14331 			 "fork-event-feature", "fork-event-feature", 0);
   14332 
   14333   add_packet_config_cmd (&remote_protocol_packets[PACKET_vfork_event_feature],
   14334 			 "vfork-event-feature", "vfork-event-feature", 0);
   14335 
   14336   add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_conf_pt_size],
   14337        "Qbtrace-conf:pt:size", "btrace-conf-pt-size", 0);
   14338 
   14339   add_packet_config_cmd (&remote_protocol_packets[PACKET_vContSupported],
   14340 			 "vContSupported", "verbose-resume-supported", 0);
   14341 
   14342   add_packet_config_cmd (&remote_protocol_packets[PACKET_exec_event_feature],
   14343 			 "exec-event-feature", "exec-event-feature", 0);
   14344 
   14345   add_packet_config_cmd (&remote_protocol_packets[PACKET_vCtrlC],
   14346 			 "vCtrlC", "ctrl-c", 0);
   14347 
   14348   add_packet_config_cmd (&remote_protocol_packets[PACKET_QThreadEvents],
   14349 			 "QThreadEvents", "thread-events", 0);
   14350 
   14351   add_packet_config_cmd (&remote_protocol_packets[PACKET_no_resumed],
   14352 			 "N stop reply", "no-resumed-stop-reply", 0);
   14353 
   14354   /* Assert that we've registered "set remote foo-packet" commands
   14355      for all packet configs.  */
   14356   {
   14357     int i;
   14358 
   14359     for (i = 0; i < PACKET_MAX; i++)
   14360       {
   14361 	/* Ideally all configs would have a command associated.  Some
   14362 	   still don't though.  */
   14363 	int excepted;
   14364 
   14365 	switch (i)
   14366 	  {
   14367 	  case PACKET_QNonStop:
   14368 	  case PACKET_EnableDisableTracepoints_feature:
   14369 	  case PACKET_tracenz_feature:
   14370 	  case PACKET_DisconnectedTracing_feature:
   14371 	  case PACKET_augmented_libraries_svr4_read_feature:
   14372 	  case PACKET_qCRC:
   14373 	    /* Additions to this list need to be well justified:
   14374 	       pre-existing packets are OK; new packets are not.  */
   14375 	    excepted = 1;
   14376 	    break;
   14377 	  default:
   14378 	    excepted = 0;
   14379 	    break;
   14380 	  }
   14381 
   14382 	/* This catches both forgetting to add a config command, and
   14383 	   forgetting to remove a packet from the exception list.  */
   14384 	gdb_assert (excepted == (remote_protocol_packets[i].name == NULL));
   14385       }
   14386   }
   14387 
   14388   /* Keep the old ``set remote Z-packet ...'' working.  Each individual
   14389      Z sub-packet has its own set and show commands, but users may
   14390      have sets to this variable in their .gdbinit files (or in their
   14391      documentation).  */
   14392   add_setshow_auto_boolean_cmd ("Z-packet", class_obscure,
   14393 				&remote_Z_packet_detect, _("\
   14394 Set use of remote protocol `Z' packets"), _("\
   14395 Show use of remote protocol `Z' packets "), _("\
   14396 When set, GDB will attempt to use the remote breakpoint and watchpoint\n\
   14397 packets."),
   14398 				set_remote_protocol_Z_packet_cmd,
   14399 				show_remote_protocol_Z_packet_cmd,
   14400 				/* FIXME: i18n: Use of remote protocol
   14401 				   `Z' packets is %s.  */
   14402 				&remote_set_cmdlist, &remote_show_cmdlist);
   14403 
   14404   add_prefix_cmd ("remote", class_files, remote_command, _("\
   14405 Manipulate files on the remote system\n\
   14406 Transfer files to and from the remote target system."),
   14407 		  &remote_cmdlist, "remote ",
   14408 		  0 /* allow-unknown */, &cmdlist);
   14409 
   14410   add_cmd ("put", class_files, remote_put_command,
   14411 	   _("Copy a local file to the remote system."),
   14412 	   &remote_cmdlist);
   14413 
   14414   add_cmd ("get", class_files, remote_get_command,
   14415 	   _("Copy a remote file to the local system."),
   14416 	   &remote_cmdlist);
   14417 
   14418   add_cmd ("delete", class_files, remote_delete_command,
   14419 	   _("Delete a remote file."),
   14420 	   &remote_cmdlist);
   14421 
   14422   add_setshow_string_noescape_cmd ("exec-file", class_files,
   14423 				   &remote_exec_file_var, _("\
   14424 Set the remote pathname for \"run\""), _("\
   14425 Show the remote pathname for \"run\""), NULL,
   14426 				   set_remote_exec_file,
   14427 				   show_remote_exec_file,
   14428 				   &remote_set_cmdlist,
   14429 				   &remote_show_cmdlist);
   14430 
   14431   add_setshow_boolean_cmd ("range-stepping", class_run,
   14432 			   &use_range_stepping, _("\
   14433 Enable or disable range stepping."), _("\
   14434 Show whether target-assisted range stepping is enabled."), _("\
   14435 If on, and the target supports it, when stepping a source line, GDB\n\
   14436 tells the target to step the corresponding range of addresses itself instead\n\
   14437 of issuing multiple single-steps.  This speeds up source level\n\
   14438 stepping.  If off, GDB always issues single-steps, even if range\n\
   14439 stepping is supported by the target.  The default is on."),
   14440 			   set_range_stepping,
   14441 			   show_range_stepping,
   14442 			   &setlist,
   14443 			   &showlist);
   14444 
   14445   /* Eventually initialize fileio.  See fileio.c */
   14446   initialize_remote_fileio (remote_set_cmdlist, remote_show_cmdlist);
   14447 
   14448   /* Take advantage of the fact that the TID field is not used, to tag
   14449      special ptids with it set to != 0.  */
   14450   magic_null_ptid = ptid_build (42000, -1, 1);
   14451   not_sent_ptid = ptid_build (42000, -2, 1);
   14452   any_thread_ptid = ptid_build (42000, 0, 1);
   14453 
   14454   target_buf_size = 2048;
   14455   target_buf = (char *) xmalloc (target_buf_size);
   14456 }
   14457 
   14458